工作模式
iptables两种工作模式:一种是用做NAT路由器,另一种是用做主机防火墙。对于数据包而言在两种工作模式下,分别有以下两种主要流向:
- PREROUTING → FORWARD → POSTROUTING
- PREROUTING → INPUT → 本机OUTPUT → POSTROUTING
规则表
iptables会根据不同的数据包处理功能使用不同的规则表。它包括如下三个表:filter、nat和mangle。
- filter是默认的表,包含防火墙过滤规则。内建的规则链包括:INPUT、OUTPUT和FORWARD。
- nat表包含源地址、目的地址及端口转换使用的规则,内建的规则链包括PERROUTING、OUTPUT和POSTROUTING。
- mangle表包含用于设置特殊的数据包路由标志的规则。这些标志随后被filter表中的规则检查。内建的规则链包括:PREROUTING、INPUT、FORWARD、POSTR OUTING和OUTPUT。
规则链
规则表对应的相关规则链的功能如下:
- INPUT链:当一个数据包由内核中的路由计算确定为本机的数据包时,将应用此规则。
- OUTPUT链:本机向外发送数据包时,将应用此规则。
- FORWARD链:当收到需要转发给其它地址的数据包时,将应用此规则,需要启用linux内核中的ip_forward功能。
- PREROUTING链:在对数据包做路由选择之前,用于修改目的地址(DNAT)。
- POSTROUTING链:在对数据包做路由选择之后,用于修改源地址(SNAT)。
iptables的语法如下:
1
iptables [-t 表名] <-A| I |D |R > 链名[规则编号] [-i | o 网卡名称] [-p 协议类型] [-s源IP地址|源子网][--sport源端口号] [-d目标IP地址 | 目标子网][--dport目标端口号] <-j 动作>
默认策略
当数据包不符合链中任意一条规则时,iptables将根据该链预先定义的默认策略来处理数据包。
默认策略的定义格式为:
1
iptables [-t 表名] <-P> <链名> <动作>
参数说明如下:
- [-t 表名] 指默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
- <-P> 定义默认策略。
- <链名> 指默认策略将应用于哪个链,可以使用INPUT、OUTPUT、FORWARD、PREROUT ING、OUTPUT和POSTROUTING。
- <动作> 处理数据包的动作,可以使用ACCEPT(接收数据包)和DROP(丢弃数据包)。动作>
查看规则
查看iptables规则的命令格式如下:
1
iptables [-t 表名] <-L> [链名]
- -L 可以查看指定表中哪个链的规则列表, 如果不指明哪个链,则将查看某个表中所有链的规则列表。
- –line-numbers:查看规则列表时,同时显示规则在链中的顺序号。
编辑规则
编辑规则的参数说明:
- [-t 表名] 定义默认策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定使用哪个表,iptables就默认使用filter表。
- -A 新增一条规则,该规则将会增加到规则列表的最后一行,该参数不能使用规则编号。
- -I 插入一条规则,原本该位置上的规则将会往后顺序移动,如果没有指定规则编号,则在第一条规则前插入。
- -D 从规则列表中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
- -R 替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号。
- [规则编号] 在插入、删除和替换规则时使用,编号按照规则列表的顺序排列,规则列表中第一条规则的编号为1。
[-i o 网卡名称] i用于指定数据包从哪块网卡进入,o用于指定数据包从哪块网卡输出。如eth0. - -p 可以指定规则应用的协议,包含TCP、UDP和ICMP等。
- -s后面接源主机的IP地址或子网地址。
- –sport后面接数据包的IP源端口号。
- -d后面接目标主机的IP地址或子网地址。
- –dport后面接数据包的IP目标端口号。
- <-j 动作>
下面是处理数据包的动作及说明:
- ACCEPT:允许接收数据包。
- DROP:丢弃数据包。
- REDIRECT:将数据包重新转向到本机或另一台主机的某一个端口,通常实现透明代理或对外开放内网的某些服务。
- REJECT:拦截该数据封包,并发回封包通知对方。
- SNAT:源地址转换,即改变数据包的源地址。例如:将局域网的IP(10.0.0.1/24)转化为广域网的IP(203.93.236.111/24),在NAT表的POSTROUTING链上进行该动作。
- DNAT:目标地址转换,即改变数据包的目的地址。例如:将广域网的IP(203.93.236.111/24)转化为局域网的IP(10.0.0.1/24),在NAT表的PREROUTING链上进行该动作。
- MASQUERADE:IP伪装,即常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP由ISP分配动态,如果主机的IP地址是静态固定的,就要使用SNAT。
- LOG:日志功能,将符合规则的数据包相关信息记录在日志中,以分析和排错。
清除规则
在新建规则时,往往需要清除原有的旧规则,以免它们影响新设定的规则。如果规则较多,逐条删除就会十分麻烦,此时可以使用iptables提供的清除规则参数达到快速删除所有规则的目的。
格式为:
1
iptables [-t表名] <-F | Z>
- [-t 表名] filter、nat或mangle,若未指定则默认使用filter表。
- -F 删除指定表中的所有规则
- -Z 将指定表中的数据包计数器和流量计数器归零
状态
iptables被称为有状态机制的防火墙,可以按包状态匹配。iptables共有四种状态:
- NEW:如果你的主机向远程机器发出一个连接请求,这个数据包的状态是NEW。
- ESTABLISHED:在连接建立之后(完成TCP的三次握手后),远程主机和你的主机通信数据的状态为ESTABLISHED。
- RELATED:和现有联机相关的新联机封包。像FTP这样的服务,用21端口传送命令,而用20端口(port模式)或其他端口(PASV模式)传送数据。在已有的21端口上建立好连接后发送命令,用20或其他端口传送的数据(FTP-DATA),其状态是RELATED。
- INVALID:无效的数据包,不能被识别属于哪个连接或没有任何状态,通常这种状态的数据包会被丢弃。
如果有一台主机不提供任何服务,那么,可以禁止其他的机器向你的机器发送任何连接请求,命令如下:
1
iptables -A INPUT -m state --state NEW -j DROP
该规则是将所有发送到这台机器上的数据包(状态是NEW的包)丢弃,也就是不允许其他的机器主动发起对你的机器的连接,但是你却可以主动连接其他的机器,不过仅仅是连接而已,连接之后的数据是ESTABLISHED状态的。这时,再加上下面这一条语句就可以允许所有已经建立连接,或者与之相关的数据通过:
1
iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT