iptables 是一个配置Linux 内核防火墙 的命令行工具,是netfilter 项目的一部分。术语iptables 也经常代指该内核级防火墙
iptables 表(Tables)与链(Chains)
iptables具有Filter,NAT,Mangle,Raw四种内建表。
1. filter表
Filter
表示iptables的默认表,它具有三种内建链:
- INPUT链 - 处理来自外部的数据。
- OUTPUT链 - 处理向外发送的数据。
- FORWARD链 - 将数据转发到本机的其他网卡设备上。
2. nat表
nat
表有三种内建链:
- PREROUTING链 - 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址,通常用于DNAT。
- POSTROUTING链 - 处理即将离开本机的数据包。它会转换数据包中的源IP地址,通常用于SNAT。
- OUTPUT链 - 处理本机产生的数据包。
3. mangle表
mangle
表用于指定如何处理数据包。它能改变TCP头中的QoS位。mangle
表具有5个内建链。
- PREROUTING
- OUTPUT
- FORWARD
- INPUT
- POSTROUTING
下面是iptables的三个内建表:
链的操作
1. mangle表
强烈建议你不要在这个表里做任何过滤,不管是DNAT,SNAT或者Masquerade。
以下是mangle表中仅有的几种操作:
- TOS
- TTL
- MARK
TOS操作用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。它在Internet上还不能使用,而且很多路由器不会注意到这个域值。
TTL操作用来改变数据包的生存时间域,我们可以让所有数据吧只有一个特殊的TTL。可以欺骗一些ISP。
MARK用来给包设置特殊的标记。它并不改变包的内容,只是在内核中对相应的包加入标记。
2. nat表
此表仅用于NAT,也就是转换包的源或者目标地址。注意,只有流的第一个包会被这个链匹配,其后的包会被自动做相同的处理。实际操作分类:
- DNAT
- SNAT
- MASQUERADE
DNAT操作主要用在这样一种情况,你有一个合法的IP地址,要把对防火墙的访问重定向到其他的机子上。也就是说,我们改变的是数据包的目标地址,以使包能重路由到某台主机。
SNAT改变包的源地址,这极大程度上可以隐藏你的本地网络。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。如果使用类似192.168.0.0/24这样的地址,是不会从Internet得到任何回应的。
MASQUERADE的作用如其名字一样,只是计算机的符合稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不是像SNAT用的IP地址是配置好的。当然,这也有好好处,就是我们可以通过PPP、PPPOE\SLIP等拨号得到的地址,这些地址可能是由ISP的DHCO随机分配的。
3. filter表
filter表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。我们就是在这里根据包的内容对包做DROP或者ACCEPT的。当然,我们也可以预先在其他地方做些过滤,但是这个表才是设计用来过滤的。几乎所有的target都可以在这儿使用。
数据包流程
iptables 规则(Rules)
- Rules包括一个条件和一个目标(Target)。
- 如果满足条件,就执行目标中的规则或者待定值。
- 如果不满足条件,就判断下一条规则。
目标值(Target Values)
下面是你可以在target里指定的特殊值:
- ACCEPT - 允许防火墙接收数据包
- DROP - 防火墙丢弃包
- QUEUE - 防火墙将数据包移交到用户空间
- RETURN - 防火墙停止执行当前链中的后续Rules,并返回到调用链中
如果你执行iptables -t filter --list
你将看到防火墙上的可用规则。
下面的例子说明当前系统没有定义防火墙。你可以看到,它显示了默认的filter表,以及表内默认的input链,forward链,output链。
<pre class="prettyprint linenums prettyprinted">
# iptables -t filter –list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
</pre>
注意,如果不指定-t
选项,默认就是filter表。
规则语法
书写规则的语法格式是:
iptables [-t table] command [match] [target/jump]
查看ip connenction信息
cat /proc/net/ip_conntrack