iptables和netfilter

时间:2021-04-05 17:53:23

1.iptables和netfilter说明

  [1]netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框架。

2.数据包处理流程

  iptables和netfilter

  这个还是很简单的,首先数据包进入PREROUTING链,之后根据路由决策进入INPUT(本机)还是FORWARD(转发),进入INPUT后会继续进入OUTPUT链,最后都走到POSTROUTING链。

  另外,如果加入各种规则之后,则数据包进入某个链之后,还要顺序执行链上的规则,如果匹配某个规则,则根据匹配的规则来处理数据包(例如ACCEPT、DROP或者REJECT),如果都不匹配则使用默认的策略处理数据包。

3.表、链、规则

  理论上,只要在链上添加规则就可以了,这样每个链上就有一个规则链表,只要数据包到链上之后,顺序检查这些规则就可以了。实现中又根据规则的功能的不同,又分为了四张表,即raw、mangle、nat、filter(优先级raw > mangle > nat > filter)。最终,数据包依次进入链中进行处理,然后根据每个链上的表的优先级,依次执行每个链上的表(里面的规则)。关于表链的关系,其实这个很简单,实际使用时以表作为入口,就是根据规则的功能添加规则到特定的表中,然后再把这个规则放到链上,另外就是一个表上的规则只存在固定的几个链上,例如raw表的规则只能在PREROUTING和OUTPUT链。

  filter表   :负责包过滤功能

  nat表  :负责地址转换

  mangle表:修改数据包的TOS、TTL,和为数据包设置标记,用来实现Qos调整以及策略路由功能

  raw表  :主要用来关闭连接跟踪,即配置参数时使用-j NOTRACK

iptables和netfilter

4.iptables工具用法

-t table          指定表名,默认为"filter"表

-A chain          向链上追加规则
-D chain 从链上删除规则
-L [chain] 列出链上的规则,这个打印的是规则列表,即把规则参数放到一个表格中
-S [chain] 打印链上的规则,这个打印的是规则的命令行参数,例如-A INPUT -s 127.0.0.1/ -d 127.0.0.1/ -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地址