iptables学习笔记

iptables是编写netfilter规则的工具。

一般情况下,升级kernel可顺便升级netfilter模块。

连接追踪模块是xt_state.ko.

TCP/IP的状态有12种,而iptables关于连接的状态只有4种:Established,New,Related,Ivalid.

Established的状态定义为,只要封包能成功穿越防火墙,之后所有相关的封包就都是Established.当然,封包能成功穿越防火墙的前提是有相应的Iptables规则允许。

iptables -A INPUT -m state --state Established -j ACCEPT

New则与协议完全无关,其指每连接的第一个封包。

ICMP消息类型有type 8: request echo; type 0: echo reply; type11: Time to live exceeded

Related是指被动产生的响应包,而且这个封包不属于现有任何连接的封包,其与协议无关。

Invalid是指状态不明的包,如何区别于NEW包?

iptables -A INPUT -p all -m state --state INVALID -j DROP

修改完netfilter规则后使用service iptables save指令就可以把netfilter存储到/etc/sysconfig/iptables文件内。

另外,使用shell script管理iptables规则的好处有:

  1. 可使用变量。2.方便修改。3.规则易阅读。4.备份方便。

可将脚本放入/etc/rc.d/rc.local文件中。

变化的外网口IP怎么办?用MASQUERADE

iptables -A PREROUTING -t nat -o eth0 -s 192.168.0.0/24 -j MASQUERADE

NAT要与filter机制结合才能使服务主机得到真正的安全。

Mangle表的作用一般有:

  1. 修改IP包头的TTL值,windows默认128,linux默认64.

  2. 修改IP包头的DSCP值或对特定的封包设定特征。

iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 43

iptables -t mangle -A FORWARD -p tcp --sport 80 -j DSCP --set-dscp 1

不管是filter, nat, mangle, raw, 它们的chain都是各自独立的。


有了netmap处理方法,无论要对应的是classC, classB, 或是classA网段,通通只要两条规则就搞定了。

iptables -t nat -A PREROUTING -i eth0 -d 10.0.0.0/24 -j NETMAP --to 192.168.1.0.24

iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j NETMAP --to 10.0.0.0/24

iptables-save [-c] [-t table] 

iptables-restore [-c] [-n]

iptables-save > /etc/iptables-save

iptables-restore < /etc/iptables-save


PREROUTING链的作用是在包刚到达防火墙时改变它的目的地址。如果需要的话,OUTPUT链改变本地产生的包的目的地址。

POSTROUTING链在包就要离开防火墙之前改变其源地址。

MANGLE表不能做任何NAT,它只是改变数据包的TTL, TOS, 或MARK, 而不是源地址。

-Z 计数器清零

-N 用用户自定义链

-X 删除自定义链

-E rename chain


-i 参数只能用于INPUT,FORWARD,和PREROUTING这三个链,用在其他地方会提示错误信息。

请注意,protocol tcp必须在TCP匹配器(match)的左边。

iptables -p tcp --tcp-flags ALL NONE 匹配所有标记都未置1的包。一般而言,对于iptables/netfilter甚至是许多防火墙,调试或多或少都是必须的。99%的防火墙问题都是因为认为的策略造成的,我可以保证,你写规则的时候极其容易犯错误,而且很多少时候这些错误通过肉眼很难定位。


Netfilter匹配方式,内建匹配方式有 -p -i -s -d 等等

模块匹配方式:

  1. TCP/UDP协议高级匹配。--dport和--sport一次最多可以匹配两个port,如--dport 21:22

  2. TCP flags的匹配


连接追踪文件的位置:/proc/net/ip/contrack 模块为ip_contrack.ko

/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent


pkttype 数据包类型:

iptables -A FORWARD -i eth0 -p icmp -m pkttype --ptt-type broadcast -j DROP

iptables -A INPUT -p icmp --icmp-type 8 -m length --length 92 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/m --limit-burst 10 -j ACCEPT


recent模块:

string是由xt_string.ko模块提供匹配,string可以在网络层提供数据内容,而无需将封包送到应用层的位置才行,但它只能局限于单一封包,无法匹配分散在不同封包的内容。


iptables -A FORWARD -p tcp -d $mail_server --dport 25 -j QUEUE(交给user space)


log 模块只记录,不匹配进行操作, 记录的日志默认放在/var/log/message内

--log-level --log-prefix --log-tcp-sequence --log-tcp-options --log-ip-options --log-uid

你可能感兴趣的:(filter,iptables,chain)