iptables--防火墙

讲解防火墙

iptables简介(内核)

	netfilter/iptables 分别是内核态模块和用户态工具,netfilter 位于 Linux 内核中的包过滤功能体系,iptables 位于 /sbin/iptables,用来管理防火墙规则的工具,管理员通过 iptables给netfilter变更规则实现防火作用
    kernel 2.0.x 	firewall	ipfw 
    kernel 2.2.x 	firewall 	ipchains 
    kernel 2.4.x 	netfilter	iptables 
    kernel 3.13.x 	netfilter	firewall 
# 攻击方式:    
	拒绝服务 : DOS 		
		流量清洗  云盾    
	已知漏洞 
	口令破解 	
		字典    
	欺骗用户/社会工程学    
# 行业内部的安全设备分类: 
	基础类防火墙 	
		根据数据报文的特征进行数据报文过滤的设备或者装置 
	IDS 类防火墙:
		入侵检测系统 
	IPS 类防火墙:
		入侵防御系统 
	主动安全类: 
		waf		daf 	 
# 基础类防火墙 iptables   
	定义:工作在主机边缘处或者网络边缘处对进出的数据报文根据规则进行过滤的装置或者设备  	
	# centos6 	
		内核态:netfilter (内核空间中的核心程序) 	
		用户态:iptables		netfilter/iptables(用户空间的管理工具) 
	# centos7 	
		内核态:netfilter 	
		用户态:firewalld disable    iables yes

防火墙的链-表

# 链:承载规则	 	
	INPUT:入站数据报文处理 	
	OUPUT:出站数据报文处理 	
	FORWARD:转发数据报文处理 	
	PREROUTING:DNAT 目标地址转换	
	POSTROUTING:SNA源地址转换

功能形态访问方式一INPUT:入站数据报文处理工具

	客户端发送数据报文到eth0的80端口,若没有防火墙,基于INPUT函数上传至上层空间; 若启用了netfilter防火墙,则报文经过netfilter的1号过滤点,(1号位置处理入站规则) 而后向上层传递,完成了一次数据报文的访问。 即:INPUT:入站数据报文处理工具

访问方式二 OUPUT:出站数据报文处理

	数据从CURL发送,若没有防火墙,通过网卡转发出去,就达成访问的目的; 若开启了netfilter规则,出站的数据报文需要提交到netfilter的接口上过滤。允许或拒绝 OUPUT:出站数据报文处理

访问方式三 FORWARD:转发数据报文处理

	若没有开启防火墙,数据报文经过10.11的网卡,开启路由转发发送到66.11的网卡,通过后 发送到客户端 若开启了防火墙,则数据报文先经过10.11网卡,在经过开启nerfilter的端口过滤,在被转发 到66.11的网卡,最后发送到客户端。

路由前和路由后

PREROUTING:DNAT:目标地址转换 路由前
POSTROUTING:SNAT源地址转换 路由后
客户端访问内网web服务器 
	DNAT:目标地址转换映射(修改数据报文的目标地址)    
	客户端发送数据报文到eth0,在路由表之前的端口进行转换修改器目标地址,经过    netfiltre的端口发送至eth1,在发送到web服务器   

表、链、规则关系(四表五链)

# 表:承载链 	
	raw:数据报文跟踪 	
	mangle:数据报文修改	TTL 	
	nat:地址转换 	
	filter:数据报文过滤  
# 链:承载规则	 	
	INPUT:入站数据报文处理 	
	OUTPUT:出站数据报文处理 	
	FORWARD:转发数据报文处理 	
	PREROUTING:DNAT 	
	POSTROUTING:SNAT    
# 规则 	
	自定义规则 		
		allow 443 		
		allow 80 	
	默认规则 		
		deny all    # 允许某个,拒绝所有。

iptables的链表结构

顺序

# 表顺序 
	raw > mangle > nat > filter 		 
# 链顺序 
	入站:PREROUTING > INPUT 
	出站:OUTPUT > POSTROUTING 
	转发:PREROUTING > FORWARD > POSTROUTING 
# 规则顺序 
	自上而下 依次匹配 匹配即停止 除非动作类型是 LOG	(匹配完成后继续匹配)		 # # 书写顺序 
	访问量大的数据报文的匹配应优先配置

数据匹配流程

# 入站:(网络A发送数据报文到本机应用程序)PREROUTING > INPUT    
	数据报文一次经过raw表、mangle表、nat表,而后进入路由表,路由表进行匹配,若是    找本机应用,则经过mangle表、filter表,进入本机 
# 出站:(本机应用程序发送数据报文到网络B) OUTPUT > POSTROUTING    
	发送数据包,经过路由表选择后,经过raw表、mangle表、nat表、filter表,在经过    mangle表、nat表, 
# 转发:(网络A发送数据到网络B)PREROUTING > FORWARD > POSTROUTING    
	数据报文一次经过raw表、mangle表、nat表的PREROUTING,而后进入路由表,路由表进    行匹配,匹配成功,经过mangle表、filter表的FORWARD,在经过 mangle表、nat表的    POSTROUTING,数据报文成功转发。

基础命令

开。关。持久化

$ service iptables stop/start/restart/save 
$ chkconfig iptables  on/off 
$ /etc/sysconfig/iptables 持久化保存文件

语法构成

# iptables  [-t 表名]  选项  [链名]  [条件]  [-j 控制类型] 
几个注意事项 
	不指定表名时,默认指filter表 
	不指定链名时,默认指表内的所有链 
	除非设置链的默认策略,否则必须指定匹配条件 
	选项、链名、控制类型使用大写字母,其余均为小写 
列:    
	iptables -t filter -F INPUT #清空链的规则    
	iptables -t filtre -F FORWARD # 清除指定的链名

数据包控制类型

ACCEPT:	允许通过 
DROP:		直接丢弃,不给出任何回应 
REJECT:	拒绝通过,必要时 会给出提示 
LOG:		记录日志信息,然后传给下一条规则继续匹配
SNAT:		修改数据包源地址 
DNAT:		修改数据包目的地址 
REDIRECT:	重定向 

添加新的规则

-A:在链的末尾追加一条规则 
-I:在链的开头(或指定序号)插入一条规则 
$ iptables -t filter -A INPUT -p tcp -j ACCEPT 
$ iptables -I  INPUT -p udp -j ACCEPT 
$ iptables -I  INPUT  2 -p icmp -j ACCEPT 
# 放行某一个,拒绝所有    
$ iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT 放行80端口    
$ iptables -t filter -A INPUT -j DROP  拒绝所有端口

查看规则列表

-L:列出所有的规则条目 
-n:以数字形式显示地址、端口等信息 
-v:以更详细的方式显示规则信息 
--line-numbers:查看规则时,显示规则的序号 
$ iptables -L INPUT --line-numbers

删除、清空规则

-D:删除链内指定序号(或内容)的一条规则 
-F:清空所有的规则 
# 清空所有表的所有链的所有规则 
[root@www ~]# iptables -t mangle -F  
[root@www ~]# echo "" > /etc/sysconfig/iptables 
[root@www ~]# service iptables restart 

$ iptables -D INPUT 3 
$ iptables -n -L INPUT 
Chain INPUT (policy ACCEPT) target     
prot opt source               destination 
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0

设置默认策略

-P:为指定的链设置默认规则 
$ iptables -t filter -P FORWARD DROP 
$ iptables -P OUTPUT ACCEPT

常用选项

匹配分类、

# 通用匹配    
	可直接使用,不依赖于其他条件或扩展    
	包括网络协议、IP地址、网络接口等条件 
# 隐含匹配    
	要求以特定的协议匹配作为前提    
	包括端口、TCP标记、ICMP类型等条件 
# 显式匹配    
	要求以“-m 扩展模块”的形式明确指出类型    
	包括多端口、MAC地址、IP范围、数据包状态等条件    
	iptables -t filter -A INPUT -p tcp --dport 80 -j REJECT

1)通用匹配

# 常见的通用匹配条件    
	协议匹配:-p 协议名    
	地址匹配:-s 源地址、-d 目的地址    
	接口匹配:-i 入站网卡、-o 出站网卡 
	$ iptables -A FORWARD -s 192.168.1.11 -j REJECT 
	$ iptables -I INPUT -s 10.20.30.0/24 -j DROP  
	$ iptables -I INPUT -p icmp -j DROP 
	$ iptables -A FORWARD -p ! icmp -j ACCEPT  
	$ iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

2)隐含匹配

# 常用的隐含匹配条件    
	端口匹配:--sport 源端口、--dport 目的端口    
	ICMP类型匹配:--icmp-type ICMP类型 
	$ iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT 
	$ iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT 
	$ iptables -A INPUT -p icmp --icmp-type 8 -j DROP 
	$ iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
	$ iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT 
	$ iptables -A INPUT -p icmp -j DROP

3)显式匹配

# 常用的显式匹配条件    
	多端口匹配:-m multiport  --sport 源端口列表            
				-m multiport  --dport 目的端口列表    
	IP范围匹配:-m iprange --src-range IP范围    
	MAC地址匹配:-m mac –mac-source MAC地址    
	状态匹配:-m state --state 连接状态 
	$ iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT 
	$ iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT 
	$ iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP 
	$ iptables -P INPUT DROP 
	$ iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j  ACCEPT 
	$ iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
posted @ 2020-05-01 10:59  候你已久  阅读(107)  评论(0)    收藏  举报