1.iptables和netfilter说明框架
[1]netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框架。tcp
2.数据包处理流程函数
这个仍是很简单的,首先数据包进入PREROUTING链,以后根据路由决策进入INPUT(本机)仍是FORWARD(转发),进入INPUT后会继续进入OUTPUT链,最后都走到POSTROUTING链。工具
另外,若是加入各类规则以后,则数据包进入某个链以后,还要顺序执行链上的规则,若是匹配某个规则,则根据匹配的规则来处理数据包(例如ACCEPT、DROP或者REJECT),若是都不匹配则使用默认的策略处理数据包。spa
3.表、链、规则命令行
理论上,只要在链上添加规则就能够了,这样每一个链上就有一个规则链表,只要数据包到链上以后,顺序检查这些规则就能够了。实现中又根据规则的功能的不一样,又分为了四张表,即raw、mangle、nat、filter(优先级raw > mangle > nat > filter)。最终,数据包依次进入链中进行处理,而后根据每一个链上的表的优先级,依次执行每一个链上的表(里面的规则)。关于表链的关系,其实这个很简单,实际使用时以表做为入口,就是根据规则的功能添加规则到特定的表中,而后再把这个规则放到链上,另外就是一个表上的规则只存在固定的几个链上,例如raw表的规则只能在PREROUTING和OUTPUT链。3d
filter表 :负责包过滤功能代理
nat表 :负责地址转换code
mangle表:修改数据包的TOS、TTL,和为数据包设置标记,用来实现Qos调整以及策略路由功能blog
raw表 :主要用来关闭链接跟踪,即配置参数时使用-j NOTRACK
4.iptables工具用法
-t table 指定表名,默认为"filter"表 -A chain 向链上追加规则 -D chain 从链上删除规则 -L [chain] 列出链上的规则,这个打印的是规则列表,即把规则参数放到一个表格中 -S [chain] 打印链上的规则,这个打印的是规则的命令行参数,例如-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT -F [chain] 清除链上的规则 -P chain target 设置指定链的策略,也就是默认策略 -v verbose mode,用做输出命令,表示详细输出 -p proto 规则指定的协议,proto能够为tcp、udp、icmp、all。 -s address[/mask] 源地址[掩码]。 -d address[/mask] 目的地址[掩码]。 -i input name 匹配报文入接口 -o output name -j target 规则匹配后跳转到的目标,也就是动做,由于在内核函数中,匹配某个条件后,使用goto的方式跳转到下一个流程,因此是jump target。 target能够为ACCEPT、DROP、REJECT、SNAT、DNAT、REDIRECT、NOTRACK、LOG 扩展匹配项: --src-range from[-to] 匹配源IP的范围 --dst-range from[-to] 匹配目的IP的范围 --mark value[/mask] 匹配标记,而不是打标记,和匹配IP地址同样有掩码。 这些只是经常使用的选项,基本每条规则都要用到,主要的目的是实际用。
例子:
[1]iptables -P INPUT DROP //设置链的策略
[2]iptables -A INPUT -i eth0 -s 10.0.1.1 -j DROP //阻止某个IP地址
[3]iptables -t mangle -A PREROUTING !-d 10.0.1.1 -p tcp -j TPROXY --on-port 10000 --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1 //对非目的地址10.0.1.1,而且标记匹配0x1/0x1的报文,透明代理到0.0.0.0:10000地址