四、目标(targets and jumps)
就是告诉IPTables某条规则匹配以后进行什么动作。可以进行的动作有两类,第一类是进行IPTables定义的动作(target),还有一种就是调用另外一条用户自定义的链。例如:
IPTables -N July_filter //创建一条自定义的链
IPTables -A INPUT -p tcp -j July_filter //规则匹配后,跳转到上述自定义的链
iptables命令参数-j 表示执行target
1、accept
2、drop
丢弃包,它和reject的区别在于,reject防火墙会回应包来源一个icmp 错误;而DROP不做任何动作(不声不响地丢弃)。
3、reject
只能在INPUT FORWARD OUTPUT链中生效。默认动作是向对端发送一个icmp port unreachable;可以通过--reject-with参数设定回复的报文。可以设置为:icmp host unreachable, icmp port unreachable, icmp proto unreachable, icmp net prohibited或 icmp host prohibited ;对于tcp链接可以设置为tcp-reset,它将触发tcp链接的tcp reset动作发生,导致tcp链接优雅关闭。
4、 snat
只能在postrouting链中生效。参数--to-source 可以设置转换的ip地址。每个链接(防火墙术语里的链接),翻译地址是一致的。snat将尽量保证源地址中的端口号和翻译以后的端口号一致。
例如:
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.1.2-192.68.1.6:1024-8000//将snat地址翻译到
192.168.1.2-192.168.1.6 端口从1024-8000上去。
5、 dnat
通常在prerouting链里生效,也可以在output链中生效(见《iptables简介2》hairpin模式)。参数--to-destination
例如:
iptables -t nat -p tcp -i eth1 --to-destination 192.168.1.2-192.168.1.3:80-100
6、 redirect
只在nat表(dnat)的prerouting和output链中生效。可以将目的地址不是本地机器的报文,dst地址转换为接受此包的接口的首地址(如果本地发出的包<output>,就将dst地址转换为127.0.0.1)
可带参数为:
--to-ports:可选参数。用此参数的时候必须跟-p tcp 或udp 或sctp或dccp
例如: iptables -t nat -i PREROUTING -p tcp --sport 80 -j redirect --to-ports 8080
--random:可选参数,将此包中的目的端口转换为任意端口。
如果不指定就不进行端口转换,只进行地址转换。
redirect的应用,就是一些本地代理工具,会将本地发出的包通过iptables output redirect到自己的端口上,然后自己处理后再转发出去。
7、 return
上文曾介绍过,在传统的“五链“中规则的动作可以是用户自己定义的链,一旦发生匹配就跳转到这个用户定义的链上再次执行匹配动作。return动作就是从链(用户自定义链或者默认链)上返回,执行上一级链的下一匹配规则。如果已经是根链了,那么就执行根链的默认动作。
注意:
用户自定义的规则,最后一条不需要设置一个return动作。子链所有规则都匹配完成后,将自动返回上一级链。
8、 MASQUERADE
此动作实际和SNAT很相似,只是说SNAT需要显示指定转换的地址,而MASQURADE会根据出口接口地址的IP自动设置转换的src ip地址。
--to-ports 可选参数。如果不选iptables可以保证端口号不变。
9 、LOG
调试时刻常用此动作,它可以将报文大致的情况记录到系统日志里(通过内核的组建),后面可以通过syslog或者dmesg,或者/var/log/system里看到这些日志。
注意当日志量比较大的时候,可以用ULOG 动作设置MYSQL作为日志存储后端。
可选参数:
--log-level:设定iptables 日志的等级,可以有debug,info,notice,warning,err,emerg。这些设置的日志等级遵从于内核的日志等级。默认是info级别
--log-prefix:在日志消息中添加特定的字串。
例如:
-A INPUT -p tcp -j LOG --log-level info --log-prefix “zxy iptables debug”
10、user_define_chain
除了常规的系统五链之外,用户可以自行定义链,然后将这个链加入到传统的五链中。
step1 创建链
iptables -t nat -N july-chain
step2 在新定义链中加入自己的规则
xxx
step3 将自定义链加入传统五链中
iptable -I output -p tcp --dport 80 -j july-chain