编写 Iptables 规则脚本 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

上一节中我们了解了 Linux 网络数据包在 iptables 数据链中的流向,这一节将要简单的介绍一下如何编写 iptables 规则。所谓规则,就是指在一条链上,对不同的连接和数据包进行阻塞或是允许它们的去向。所有的规则都需要插入到特定的链上才能产生效果。书写规则的语法的格式为:

  Iptables [-t table] command [match] [target | jump]

  -t 指定表名,一般情况下没必要指定使用的表,因为 iptables 默认使用 filter 表来执行所有的命令。

  command 指该条规则需要进行什么操作。如在该表中的某一链上插入或删除一条规则等

  match 此项描述与该规则匹配的数据包的特征。如指定数据包的来源 IP ,网络接口等等。

  target 是最后数据包的目的所在,对于符合 match 的数据包,由 target 处理。

  下面介绍几个简单的 iptables 规则:

  iptables –I INPUT 1 -i eth0 –p all –j ACCEPT

  该脚本的作用是在默认的 filter 表的 INPUT 链的第一个位置插入一条过滤规则——接受经过以太网卡 0(eth0) 所有协议的数据包。从链表图中可以看到,一个传入本机的数据包,在 fiter 表的 INPUT 链上被接受,则意味着应用程序能够接收到此数据包。

  iptables –A INPUT –i eth0 –p icmp –icmp-type 8 –j DROP

  在 filter 表的 INPUT 链的最后追加一条规则——丢弃通过 eth0 传入的序号为 8 icmp 协议数据包,即 ping request ,这样其他主机将不能成功的 ping 通本机了。

  利用 iptables 还可以方便的架设一台网关。如果 eth0 连接的是外部网络,而 eth1 连接的是局域网( 192.168.0.0/24 ),假设在外部网络上,本机的 IP 202.113.13.91 ,我们只需要一条命令,就可以使得局域网内部的所有主机都可以通过本机访问外部网络。

  iptables –t nat –A POSTROUTING –o eth0 –s 192.168.0.0/24 –j SNAT --to 202.113.13.91

  该脚本实际上是向 nat 表的 POSTROUTING 链增加了一条 SNAT 规则,对于所有来自局域网的需要转发的数据包,将其源地址伪装成本机 IP ,向外部网络发送。这样便实现了局域网网关的功能。

  要记住,在这之前还需要 echo 1 > /proc/sys/net/ipv4/ip_forward 以开启 IP 转发功能。

  同样,利用 iptables 也可以轻松实现端口映射功能。例如,我们需要外部网络能够通过本机访问局域网内 192.168.0.110 主机的 FTP 服务,脚本如下:

  iptables-t nat –A PREROUTING –i eth0 –p tcp –d 202.113.13.91 --dport 21 –j DNAT –to 192.168.0.110

  该脚本描述的规则是:将外部网络对本机 21 号端口发送的 TCP 数据包全部 DNAT 给局域网内部的一台主机(当然您需要确保这台主机上开启了 FTP 服务),这样外部网络就可以通过 202.113.13.91 这个 IP 访问到局域网内部的 FTP 服务了。

  可以看出 iptables 的参数种类繁多,且规则组合方式多种多样,只要了解数据包的流向,以及各个表和链的作用,熟练的掌握它们,就能够方便的搭建出功能丰富的网络防火墙。

  iptables 的网络控制功能及其强大,本文只是介绍了 iptables 的很小一部分,希望能起到抛砖引玉的作用,想要进一步学习可以在官方主页找到 iptables 指南,也可以到下面的网址找到该指南的中文译本。

0

收藏

yasa98

369篇文章,46W+人气,0粉丝