2017-09-07
iptables备忘

iptables 用表来管理规则。一张表对应一种决策类型. 在表的内部若干规则组成不同的链,链通常决定了规则的触发时机。

iptable内置5个链,对应于linux底层的netfilter的五个钩子.

  1. NF_IP_PRE_ROUTING(PREROUTING): 当有流量刚进入网络栈时(还未路由),该钩子被触发.

  2. NF_IP_LOCAL_IN(INPUT): 当网络包已被路由并且目的地是本地时,该钩子被触发.

  3. NF_IP_FORWARD(FORWARD): 当网络包已被路由并且目的地是其他主机时,该钩子被触发.

  4. NF_IP_LOCAL_OUT(OUTPUT): 当本地产生的网络包进入网络栈时,该钩子被触发.

  5. NF_IP_POST_ROUTING(POSTROUTING): 当网络包(本地产生的或者转发的)刚被路由后,该钩子被触发.

比如在nat这个表里的POSTROUTING链中的规则,它将对刚被路由后的网络包做出一些跟nat相关的决策.

Filter表

默认表。决策丢弃还是留下网络包. 适用于:INPUT,FORWARD,OUTPUT

比如拒绝转发来自网段10.0.0.0/24的包:

iptables -A FORWARD -s 10.0.0.0/24 -j DROP

Nat表

用于对网络包的nat转换.适用于: INPUT,POSTROUTING

一个连接只有第一个包才会应用于nat规则,之后所有的包只是延用对第一个包做出的决策而已。并且对该连接的回复包,iptables会聪明的反向运用之前的nat规则。

比如从网段10.0.0.0/8发出的包都从vnet0网络设备出(MASQUERADE表示从vnet0设备里自动找一个可用的网络地址作为该包的源地址)

iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o vnet0 -j MASQUERADE

RAW表

主要用来给网络包打上标记. 支持链表: PREROUTING, OUTPUT

比如跟踪本地发出的icmp包:

iptable -t raw -A OUTPUT -p icmp -j TRACE

kernel将以TRACE:为前缀将log输出到kern.log

MANGLE表

修改ip头。 适用于所有链.

比如增加ttl:

iptables -t mangle -A PREROUTING -m ttl --ttl-gt 1 -j TTL --ttl-inc 4

lazyrobot.me