iptables详解

iptbales:
防火墙工作在主机边缘,对于进出本网络的一些数据包设置一些规则,起到保护主机的作用,和进行一些转发功能。
对linux而言tcp/ip协议栈是在内核当中,意味着报文的处理是在内核中处理的,也就是说防火墙必须在工作在内核中,防火墙必须在内核中完成tcp/ip报文所流进的位置,用规则去检查,才真正能工作起来。
iptables用来衡量tcp/ip报文的属性:源ip、目标ip、源端口、目标端口;
tcp标志位:   syn、syn+ack、ack、 fin、urg、psh、rst ;

链路:
INPUT:处理进入防火墙的数据包(目标地址是防火墙)
OUTPUT:处理从防火墙出去的数据包(源地址是防火墙的数据包)
FORWARD:处理由防火墙转发的数据包
PREROUTING:进行目标地址转换(在路由前处理)
POSTROUTING:进行源地址转换(在路由后处理)
表(-t):
filter:主要负责主机一般的输入输出数据包(默认的表),对应的链路:INPUT,OUTPUT,FORWARD
nat:负责网络地址转换,即来源于目的IP地址和端口的转换,一般用于共享上网或特殊端口的转换服务,对应的链路:PREROUTING,PORTROUTING,OUTPUT(端口转换)
mangle:将报文拆开来并修改报文标志位,最后封装起来,对应的链路规则:prerouting input forword output postrouting

iptables的查看:
-L:查看表的链路规则
-t:指定要查看的表
-n:数字格式显示主机ip和端口号
-v:显示详细信息,vv显示更详细信息,vvv显示最详细信息
--line-number:显示行号
-x:显示精确的单位

iptables详解


pkts:匹配规则的个数
target:目标
prot:协议
source:源地址/网段
destination:目的地址/网段
opt     额外的选项,--表示没有

iptables规则的清除:
-F:清除filter表中的所有规则
-X:清除自定义链路的规则
-Z:清除计数器

iptables的管理规则:
-P : 设定默认策略,为指定链设置默认策略,格式如下:
#设置fllter表input链的默认规则为丢弃
iptables-t fllter -P INPUT DROP
-N : 新建一条自定义链(内置链不能删除,如果太多,可以自定义链)
#自定义连只能被调用才可以发挥作用
iptables-N fillter_web
-A:添加一条规则
-D:删除一条规则
-R:替换规则:iptables -R  INPUT 1 -s 10.0.10.0/24-d 10.0.10.62 -i eth0 -j ACCEPT ----将规则1替换成eth0只允许某个网段进来。

编写规则语法:iptables -t 表名 大写的子选项 链路名 匹配标准 -j 目标
目标:下面只写出现在需要理解的目标
DROP   :   丢弃
REJECT :   拒绝
ACCEPT :   接受
REDIRECT:  端口重定向
DNAT :    目标地址转换
SNAT :源地址转换
匹配标准:通用匹配标准,扩展匹配标准
1、通用匹配标准
-s:源ip或源网段
-d:目的ip或目的网段
-i :指定数据报文流入接口
-o :指定数据报文流出接口  
-p :明确说明只放行哪种协议的报文匹配规则
--sport 指定源端口 指定端口前面必须指定协议
--dport 指定目标端口
2、扩展匹配标准:所有的扩展匹配表示要使用-m来指定扩展的名称来引用,而每个扩展模块一般都会有自己特有的专用选项,在这些选项中,有些是必备的.
#多端口匹配#
-p tcp --dport|--sport 20:28(中间的端口号必须是连续的): 匹配tcp的目的端口/源端口20号到28号
-p tcp --dport|--sport !20:28(中间的端口号必须是连续的): 匹配tcp的目的端口/源端口20号到28号
-p tcp -m multiport  --sprot|--dport 20,22,28(端口号可以不连续):匹配tcp的源端口/目的端口20号,22号,28号

#多地址匹配#
-m iprange --src-range 172.16.0.100-172.16.0.200
-m iprange --dst-range 172.16.0.100-172.16.0.200

#报文标志位匹配#
--tcp-flags syn,ack,fin syn #这句表示的是syn请求同步建立链接,ack确认,fin断开,syn同步
六个TCP的标志位:
SYN(同步序号位):TCP建立连接时将该值设为1。
ACK(确认序号位):该值为1时,确认发送方的数据。
URG(紧急):如果URG为1,说明该值需要优先传输。
PSH:该值为1,说明把输出的尽快显示到屏幕上,不要放到缓存中。
RST:该值为1,说明断开后请求重新连接。
FIN:该值为1时,TCP断开。

#时间扩展#
--timestart 08:30:00 开始时间
--timestop 17:30:00 结束时间
--datestart 2015/06/01 开始日期
--datestop 2015/06/30 结束日期
--monthdays 1,2,3,4,5 指定月份
--weekdays 1,20 指定周期范围

#字符扩展#
-m string
--string ""
--algo kmp|bm 指定匹配的算法,一般有kmp,bm
-m string --algo kmp --string "sex" -j DROP 含有"sex"字符的数据包将会被拒绝

#速率扩展#
用于保护服务器,防止服务器崩溃
-m limit --limit 5/s --limit-burst 8 #每秒允许通过5个数据包,第一次允许通过8个,但第二个只能通过2个。

#数据包状态扩展#
-m state --state NEW/ESTABLISHED/RELATED/INVALID
NEW:状态的数据包说明这个数据包是收到的第一个数据包。比如收到一个SYN数据包,它是连接的第一个数据包,就会匹配NEW状态。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。
ESTABLISHED:只要发送并接到应答,一个数据连接就从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接后继数据包。
RELATED:当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED,也就是说,一个连接想要是 RELATED的,首先要有个ESTABLISHED的连接,这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是 RELATED。
INVALID:状态说明数据包不能被识别属于哪个连接或没有任何状态。

iptables实现NAT功能:
1、SNAT源地址转换:

iptables详解


client,防火墙,后端服务器的ip配置如图,开iptables的路由功能(即Ipv4_forward=1),这是client能够拼同后端服务器,但是不能访问后端服务器的web,此时就需要使用iptables的NAT功能将client的ip10.0.10.0网段转换成192.168.0.4自己的ip,然后访问web服务器。
iptables -t nat -A POSTROUTING -s 10.0.10.0/16 -j SNAT --to-source 192.168.0.4

2、DNAT目的地址转换:
上例子中,如果为了client下次访问web服务器不是访问192.168.0.110,而是访问10.0.10.60
iptables -t nat -A PREROUTING -d 10.0.10.62 -j DNAT --to-destination 192.16.0.110 

防火墙的保存:
service iptables save 保存现有的防火墙规则
service iptables restart 重启防火墙

防火墙规则的顺序的影响:
从第一条规则开始匹配,一旦符合某条规则,就不会匹配它下面的规则。某认规则(-P)一般都是最后匹配。

猜你喜欢

转载自www.cnblogs.com/cliterb-gao/p/8888143.html