网络相关的命令工具研究报告之iptables

iptables是运行在用户空间的应用软件,通过控制Linux内核的netfilter模块,,在内核模块Xtables的支持下,来管理IPv4网络数据包的处理和转发。对于IPv6数据包,应使用ip6tales。当前,iptables支持内核2.4以上版本,Linux 3.13开始使用nftables取而代之,但仍然提供iptables命令做为兼容接口。

  iptables、ip6tables等都使用Xtables框架。存在“表(tables)”、“链(chain)”和“规则(rules)”三个层面。

       每个“表”指的是不同类型的数据包处理流程,每个表中又可以存在多个“链”,系统按照预订的规则将数据包通过某个内建链。在“链”中可以存在若干“规则”,这些规则会被逐一进行匹配,如果匹配,可以执行相应的动作,如修改数据包,或者跳转。跳转可以直接接受该数据包或拒绝该数据包,也可以跳转到其他链继续进行匹配,或者从当前链返回调用者链。当链中所有规则都执行完仍然没有跳转时,将根据该链的默认策略(“policy”)执行对应动作;如果也没有默认动作,则是返回调用者链。filter表是默认的表,如果不指明表则使用此表,它通常用于过滤数据包,其内建链包括:

  INPUT,输入链,发往本机的数据包通过此链。

  OUTPUT,输出链,从本机发出的数据包通过此链。

  FORWARD,FORWARD,转发链,本机转发的数据包通过此链。

nat表用于地址转换操作,其内建链包括:

  PREROUTING,路由前链,在处理路由规则前通过此链,通常用于目的地址转换(DNAT)。

  POSTROUTING,路由后链,完成路由规则后通过此链,通常用于源地址转换(SNAT)。

  OUTPUT,输出链,类似PREROUTING,但是处理本机发出的数据包。

mangle表用于处理数据包。其和nat表的主要区别在于,nat表侧重连接而mangle表侧重每一个数据包。其中内建链包括:PREROUTING,OUTPUT,FORWARD,INPUT,POSTROUTING。raw表用于处理异常,有如下两个内建链:PREROUTING,OUTPUT。

 网络相关的命令工具研究报告之iptables_第1张图片

  超级用户(root)可以用" iptables -L"指令显示防火墙上的配置。完整的配置可以添加-v或-vv参数来显示更详细信息,或者使用 iptables-save -c 导出生成当前表的命令。iptables的重要功能之一是用于端口和/或地址的转换。iptables的重要功能之一是用于端口和/或地址的转换。如下示例展示了将默认HTTP端口的数据包由80转向8080端口。这样,HTTP的daemon可以允许由一般用户权限引导,而不需要对一般用户无法将端口号绑在1024端口以下的限制的问题多加考虑。

  iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

如果你在你的电脑上面运行了这个指令,它只会对连到你的机器上的外部的IP发生效果。从本地端发起的连线不会遵循nat表上PREROUTING链的设置。如果你想让本地端也遵循规则,你可以另外键入下面的指令:

  iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

这条规则会将lo接口上的数据包输出由80端口转向到8080端口上面。现在有一个小型局域网,由一台Linux主机作为路由器共享地址接入Internet。假设局域网接口为eth0,地址使用192.168.0.0/24;而Internet接口为eth1,使用的地址为198.51.100.3。

在局域网用户访问Internet时,源地址需要被转换为198.51.100.3,则输入指令:

  iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 198.51.100.3

若需要在局域网192.168.0.2上开启HTTP服务,则可以设置相应的DNAT服务,将访问外部TCP 80端口的数据包重定向:

  iptables -t nat -I PREROUTING -p tcp -d 198.51.100.3 --dport 80 -j DNAT --to 192.168.0.2

需要注意的是,转发操作需要在filter表中FORWARD链中允许,并且打开系统的转发功能。

 

参考文献:

  1. https://www.linux.com/learn/intro-to-linux/2017/8/iptables-rules-ipv6
  2. https://netfilter.org/projects/nftables/
  3. https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html
  4. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Security_Guide/s1-firewall-ipt-fwd.html

你可能感兴趣的:(网络相关的命令工具研究报告之iptables)