IPTables简介四——目标(动作)

  1. 云栖社区>
  2. 博客>
  3. 正文

IPTables简介四——目标(动作)

marshalzxy 2017-03-17 14:10:00 浏览312
展开阅读全文

四、目标(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


网友评论

登录后评论
0/500
评论
marshalzxy
+ 关注