iptables应用:NAT、数据报处理、清空iptables规则
本节在先前介绍的知识基础上,进一步介绍用iptalbes实现NAT、数据报处理、规则清空等的方法
linux以前的内核仅仅支持有限的NAT功能,被称为伪装。Netfilter则支持任何一种NAT。一般来讲NAT可以分为源NAT和目的NAT。源NAT在数据报经过NF_IP_POST_ROUTING时修改数据报的源地址。伪装是一个特殊的SNAT。目的NAT在数据报经过NF_IP_LOCAL_OUT或NF_IP_PRE_ROUTING 时修改数据报目的地址。端口转发和透明代理都是DNAT。
一、iptables的NAT目标动作扩展
变换数据包的源地址,例:
iptables -t nat -A POSTROUTING -j SNAT --to-source 1.2.3.4
用于具有动态IP地址的拨号连接的SNAT,类似于SNAT,但是如果连接断开,所有的连接跟踪信息将被丢弃,而去使用重新连接以后的IP地址进行IP伪装,例:
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
转换数据报的目的地址,这是在PREROUTING钩子链中处理的,也就是在数据报刚刚进入时。因此Linux随后的处理得到的都是新的目的地址,例:
iptables -t nat -A PREROUTING -j DNAT --to-destination 1.2.3.4:8080 -p tcp --dport 80 -i eth1
重定向数据报为目的为本地,和DNAT将目的地址修改为接到数据报的接口地址情况完全一样,例:
iptables -t nat -A PREROUTING -j REDIRECT --to-port 3128 -i eth1 -p tcp --dport 80
二、利用iptables进行数据报处理(Packet mangling)
mangle表提供了修改数据报各个字段的值的方法。
针对数据包处理的目标扩展
设置nfmark字段的值。我们可以修改nfmark字段的值。nfmark仅仅是一个用户定义的数据报的标记(可以是无符号长整数范围内的任何值)。该标记值用于基于策略的路由,通知ipqmpd (运行在用户空间的队列分捡器守护进程)将该数据报排队给哪个哪个进程等信息。例:
iptables -t mangle -A PREROUTING -j MARK --set-mark 0x0a -p tcp
设置数据报的IP头的TOS字段值。若希望适用基于TOS的数据报调度及路由,这个功能是非常有用处的。例:
iptables -t mangle -A PREROUTING -j TOS --set-tos 0x10 -p tcp --dport ssh
三、清空iptables规则
有时候在进行设置前,希望清空iptables的当前规则。
iptables -t nat -F iptables -t nat -X iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t mangle -F iptables -t mangle -X iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P INPUT ACCEPT iptables -t mangle -P FORWARD ACCEPT iptables -t mangle -P OUTPUT ACCEPT iptables -t mangle -P POSTROUTING ACCEPT iptables -F iptables -X iptables -P FORWARD ACCEPT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -t raw -F iptables -t raw -X iptables -t raw -P PREROUTING ACCEPT iptables -t raw -P OUTPUT ACCEPT
语法
iptables [-t table] -F [chain] [options...] iptables [-t table] -X [chain] iptables [-t table] -P chain target
选项说明
- -F 删除指定表或链中的所有规则,若没有指定表或者链,则为所有表或者链
- -X 与-F相似,只是-F删除链中的规则,而-X删除链本身
注意,只能删除用户自定义的链 - -P 对给定目标设置链策略(目标动作)。
只有内置链(built-in chains)才有链策略,所有链都能设置策略。
策略对象有以下四种: - ACCEPT 接收数据报
- DROP 丢弃数据报
- QUEUE 将数据报提交到用户空间
- RETURN 将数据报原封不动地返回给上层链
如果已经是顶层,则将取采取默认策略(ACCEPT,DROP)
四、实例
这里以用于配置OpenVPN的NAT转发规则为例进行说明,希望读者能进一步了解规则设置的方法:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 8.8.8.8 iptables -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A INPUT -s 10.8.0.0/24 -p all -j ACCEPT iptables -A FORWARD -d 10.8.0.0/24 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT
注释
此处仅列出之前没有提到过的特殊语法或选项
- 没有指定-t选项时默认将规则增加(-A)到filter表
- -j 转到指定策略(目标动作)
- -m 对规则进行匹配(match)说明,常常跟在被追加(-A)、插入(-I)、替换(-R)的链(chain)之后
- ! 用在接口名、协议名等前面,使规则的作用相反
- state 连接状态(需要state模块支持)
- NEW 用于新建连接的数据报
- ESTABLISHED 双向连接建立后的数据报
- RELATED 例如用于建立FTP的数据连接的数据报,它与之前的控制连接相关(RELATED)
- INVALID 无效的、有错误的数据报
- tcp 协议名,后面的选项开关可以进一步细化规则
- –dport TCP数据报中的目标地址
- –sport TCP数据报中的源地址
- –syn 用于初始化TCP连接的数据报
- –tcp-flags 见手册
- –tcp-option 见手册
- limit 速率匹配(需要模块支持)
–limit 用法–limit rate[/second|/minute|/hour|/day]
–limit-burst 指定同一IP同时发出的SYN数据报的最大数目,通常和–limit一起使用 - LOG 内核日志策略(目标动作),可以使用
dmesg
来查看由内核记录的日志信息
五、输出当前规则
可以采用两种方法:
-L选项
iptables -L
该命令输出所有链中的所有规则
iptables-save命令
这条命令会以“表”的形式输出,用于程序读取,所以一般是这样用:
iptables-save > iptables.rules
Reference
[1] UNIX Resource Network
[2] openvz vps ubuntu 安装 openvpn 并配置iptables防火墙
[3] man iptalbes
[4] 11.15. RETURN target
[5] Linux Iptables Limit the number of incoming tcp connection / syn-flood attacks
版权声明
本文出自 Lesca 技术宅,转载时请注明出处及相应链接。
本文永久链接: https://www.lesca.cn/archives/iptables-nat-mangle-clear-rules.html