本文针对iptables初学者。如果你刚刚学习了iptables的原理和基本语法,但还不清楚在线上服务器环境中如何实际的利用这个工具,那么建议阅读本文。
iptables的两种主要工作模式
对于iptables的数据包而言,有以下几个流向:
PREROUTING→FORWARD→POSTROUTING
PREROUTING→INPUT→本机→OUTPUT→POSTROUTING
大家可以留意下,数据包的主要两种流向(其实也是我们后面iptables的两种工作模式):一是做为NAT路由器,另一种是做为主机防火墙。
iptables数据流入和流出详细流程建议参考下图:
图 iptables数据包流入和流出详细流程图
iptables根据不同的数据包处理功能使用不同的规则表。它包括如下三个表:filter、nat和mangle。
● filter是默认的表,它包含真正的防火墙过滤规则。内建的规则链包括:INPUT、OUTPUT和FORWARD。
● nat表包含源和目的地址及端口转换使用的规则,内建的规则链包括PREROUTING、OUTPUT和POSTROUTING。
● mangle表包含用于设置特殊的数据包路由标志的规则,这些标志随后被filter表中的规则检查。内建的规则链包括:PREROUTING、INPUT、FORWARD、POSTROUTING和OUTPUT。
表对应的相关规则链的功能如下:
● INPUT链:当一个数据包由内核中的路由计算确定为本地的Linux系统后,它会通过INPUT链的检查。
● OUTPUT链:保留给系统自身生成的数据包。
● FORWARD链:经过Linux系统路由的数据包(即当iptables防火墙用于连接两个网络时,两个网络之间的数据包必须流经该防火墙)。
● PREROUTING链:用于修改目的地地址(DNAT)。
● POSTROUTING链:用于修改源地址(SNAT)。
iptables详细语法如下所示:
iptables [-t表名] <-A| I |D |R > 链名[规则编号] [-i | o 网卡名称] [-p 协议类型] [-s 源IP地址 | 源子网][--sport 源端口号] [-d 目标IP地址 | 目标子网][--dport 目标端口号] <-j 动作> |
注:此语法规则详细,逻辑清晰,推荐以此公式记忆。我们在刚开始写iptables规则时就应该养成好习惯,用公式来规范脚本,这对于我们的以后工作大有帮助。
这一节我们通过编写一个简单的用于邮件主机防护iptables脚本来熟悉iptables语法规则。网络拓朴很简单,iptables本身机器IP为:192.168.1.101/24,另一台机器的IP为:192.168.1.102。