iptables入门:iptables简介和命令
2016-10-20
iptables是Linux中基于内核的防火墙,功能十分强大。 iptables工作在网络层,不需要把数据发送到用户空间,在系统内核空间中进行数据过滤可以保证数据处理效率。 当数据包到达iptables之后,如果MAC地址相符,就会由内核中的相应驱动程序接收,通过一系列操作决定将数据包发送给本地程序或转发到其他主机,或进行其他操作。 iptables由一系列表(table)组成,表再由一系列链(chain)组成,当数据包到达iptables之后,就会基于规则按一定顺序穿越不同的表和链。
1.数据报的流向 #
iptables数据包的流向主要有以下两种:
- PREROUTING -> FORWARD -> POSTROUTING
- PREROUTING -> INPUT -> localhost(本机内部传输) -> OUTPUT -> POSTROUTING
iptables根据数据包的流向和对数据包的处理使用不同的规则表,如:filter表,nat表,mangle表。
2.iptables的表 #
2.1 filter表 #
filter表是默认的表,用来过滤数据包。filter表内建3个链:
- INPUT作用于进入本机的数据包(即入站)
- OUTPUT作用于本机送出的包(即出站)
- FORWARD作用于经过本机与本机无关的包(即路由)
2.2 nat表 #
nat表用来做NAT(Network Address Traslation),即网络地址转换,转换包的源或目标地址。nat表包含源地址、目标地址以及端口转换的使用规则。 nat表内建3个链:
- PREROUTING用于改变到达防火墙的包的目标地址,在路由前修改目的地址实现DNAT
- OUTPUT用于改变本地产生的包的目标地址
- POSTROUTING用于在包要离开时改变其源地址
NAT的操作包含以下几类:
- DNAT( Destination Network Address Translation)即目标地址转换,将对防火墙的访问重定向到其他主机上,即改变数据包的目标地址,使其路由到其他主机
- SNAT 即源地址转换,改变数据包的源地址
2.3 mangle表 #
mangle表用来给数据打标记,然后根据标记去操作那些包,包含用于设置特殊的数据包路由标志的规则,这些标志随后可以被filter表中的规则检查。 mangle表内建的链包括PREROUTING, INPUT, FORWARD, POSTROUTING, OUTPUT.
2.4 raw表和security表 #
iptables还包含raw表和security表,这里不展开了。可以man iptables
查看关于这两个表的介绍。
3. iptables命令 #
iptables命令的语法如下:
1iptables -t [表名] <-A | I | D | R> 链名 [规则编号] [-i | o 网卡名称] [-p 协议] [-s 源ip地址 | 源子网] [--sport 源端口] [-d 目标ip地址 | 目标子网] [--dport 目标端口] <-j target>
-A
新增一条规则,该规则增加到规则列表的最后一行,使用该参数时不能使用规则编号-I
插入一条规则,如果指定了规则编号,原本该位置上的规则会向后顺序移动,如果没有指定规则编号,将在第一条规则前插入-D
从规则列表中删除一条规则,可以输入完整的规则进行删除,也可以直接指定规则编号进行删除-R
替换某条规则,规则被替换时不会改变其顺序,必须指定要替换的规则编号规则编号
规则列表的第一条规则的编号为1-i
指定数据包进入的网卡,-o
指定数据包输出的网卡-p
指定规则应用的协议,可以是tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
-s
指定源主机的IP地址或子网地址,格式为address[/mask][,...]
-d
指定指定目标主机的IP地址或子网地址,格式为address[/mask][,...]
-j target
即--jump target
决定符合条件的包到何处去。target可以指定另一个链,常用的Target/Jumps包含:ACCEPT
表示允许包,即满足匹配条件的包被允许,并且不会再匹配当前链中的其他规则或同一个表内的其他规则,但这个包还会通过其他表中的链DROP
表示丢弃包,即将符合条件的包丢弃,不会再向下走。效果就是包被阻塞,不会像发送者返回任何信息。REJECT
表示拒绝包,REJECT和DROP类似,在阻塞包时会向发送者返回错误信息。REDIRECT
表示将数据包重定向到本机或另一台主机的某个端口,通常用来实现透明代理或对外开放内网的某些服务SNAT
源地址转换,即改变数据包的源地址DNAT
目标地址转换,即改变数据包的目标的地址LOG
将符合规则的数据包相关规则信息记录在日志中,便于管理员分析问题
3.1 链的默认策略(Policy) #
当数据包不符合链中的任一规则时,将会使用该链预定义的默认策略(Policy)处理数据包。
1iptables -nvL
2Chain INPUT (policy ACCEPT 249M packets, 162G bytes)
3 pkts bytes target prot opt in out source destination
4
5Chain FORWARD (policy ACCEPT 8248K packets, 4343M bytes)
6 pkts bytes target prot opt in out source destination
7......
上面命令的输出filter表INPUT链和FORWARD链的默认策略都是ACCEPT。
使用下面的命令定义默认策略:
1iptables [-t 表名] <-P> <链名> <动作>
-P即定义默认策略Policy。
例如:
1iptables -P FORWARD ACCEPT
3.2 查看规则 #
查看规则的命令语法:
1iptables [-t 表名] <-L> [链名]
查看filter表的规则:
1iptables -nvL
查看nat表的规则:
1iptables -t nat -nvL
3.3 添加规则 #
filter表增加一条规则:
1iptables -A INPUT -p tcp -s 192.168.0.15 --sport 1234 -d 192.168.1.10 --dport 80 -j ACCEPT
3.4 删除规则 #
-D
指定删除规则,必须与添加的规则完全一致:
1iptables -D INPUT -p tcp -s 192.168.0.15 --sport 1234 -d 192.168.1.10 --dport 80 -j ACCEPT
还通过行号删除:
1iptables -nvL --line-numbers
2
3iptables -D INPUT <line-number>
3.5 清除规则和计数 #
1iptables [-t 表名] <-F | Z>
删除filter表所有规则
1iptables -F
将filter表数据包和流量计数清零:
1iptables -Z