[关闭]
@yiltoncent 2015-04-08T01:30:56.000000Z 字数 2004 阅读 10409

iptables基础知识.详解

LINUX


iptables结构

iptables->Tables->Chains->Rules.
关系如下图:

iptable structure

iptables 表(Tables)与链(Chains)

iptables具有Filter,NAT,Mangle,Raw四种内建表。

1. filter表

Filter表示iptables的默认表,它具有三种内建链:

2. nat表

nat表有三种内建链:

3. mangle表

mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。mangle表具有5个内建链。

下面是iptables的三个内建表:
iptables内建表

链的操作

1. mangle表

强烈建议你不要在这个表里做任何过滤,不管是DNAT,SNAT或者Masquerade。
以下是mangle表中仅有的几种操作:

TOS操作用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。它在Internet上还不能使用,而且很多路由器不会注意到这个域值。
TTL操作用来改变数据包的生存时间域,我们可以让所有数据吧只有一个特殊的TTL。可以欺骗一些ISP。
MARK用来给包设置特殊的标记。它并不改变包的内容,只是在内核中对相应的包加入标记。

2. nat表

此表仅用于NAT,也就是转换包的源或者目标地址。注意,只有流的第一个包会被这个链匹配,其后的包会被自动做相同的处理。实际操作分类:

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)

目标值(Target Values)

下面是你可以在target里指定的特殊值:
* ACCEPT - 允许防火墙接收数据包
* DROP - 防火墙丢弃包
* QUEUE - 防火墙将数据包移交到用户空间
* RETURN - 防火墙停止执行当前链中的后续Rules,并返回到调用链中

如果你执行iptables -t filter --list你将看到防火墙上的可用规则。

下面的例子说明当前系统没有定义防火墙。你可以看到,它显示了默认的filter表,以及表内默认的input链,forward链,output链。

  1. # iptables -t filter –list
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. Chain FORWARD (policy ACCEPT)
  5. target prot opt source destination
  6. Chain OUTPUT (policy ACCEPT)
  7. target prot opt source destination

注意,如果不指定-t选项,默认就是filter表。

规则语法

书写规则的语法格式是:
iptables [-t table] command [match] [target/jump]

查看ip connenction信息
cat /proc/net/ip_conntrack

Use iptables to implement safe network address translation

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注