iptables是采用规则对战的方式来进行过滤,当一个封包进入网卡,先检查prerouting,然后检查目的IP判断是否需要转送除去,然后就会跳到input或者forward进行过滤,如果封包需要转送处理则检查postrouting,如果是来自本机封包,则检查output以及postrouting。过程中如果符合某条骨子额将会进行处理,处理动作除了ACCEPT、REJECT、DROP、REDIRECT和MASQUERADE之外,还会有LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK等等,其中有些处理动作不会中断过滤过程,但是某些处理动作则会中断同一规则链的过滤,并且依照前述流程继续进行下一个规则链的过滤,直到堆栈的规则检查完毕为止。
通过这种机制,我们可以进行复杂、多重的封包过滤,简单来说,iptables可以进行纵横交错式的过滤,也就是tables的,而不是链状的过滤,也就是chains。
注意ACCEPT将封包放行,进行完此处理动作之后,将不再比对其他规则,直接跳往下一个规则链。
这里我们看一个iptables的基本配置格式:iptables [-t 表] -命令 匹配 操作
这里的-t 表示指定命令应用于哪个iptables内置表。
下面是常用的命令:
-P --policy 链名 定义默认策略
-L --list 链名 查看iptables规则列表
-A --append 链名 在规则列表的最后增加1条规则
-I --insert 链名 在指定的位置插入1条规则
-D --delete 链名 从规则列表中删除1条规则
-R --replace 链名 替换规则列表中的某条规则
-F --flush 链名 删除表中的所有规则
-Z --zero 链名 将表中数据包计数器和流量计数器归零
-X --delete-chain 链名 删除自定义链
-V --verbose 链名 与-L其他命令一起使用显示更多更详细的信息
下面是常用的匹配规则:
-i --in-interface 网络接口名 指定数据包从哪个网络接口进入
-o --out-interface 网络接口名 指定数据包从哪个网络接口输出
-p --proto协议类型 指定数据包匹配的谢意,比如tcp、udp或icmp等等
-s --source 原地址或者子网 指定数据包匹配的源地址
--sport 源端口号 指定数据包匹配的源端口号
--dport 目的端口号 指定数据包匹配的目的端口号
-m --match 匹配的模块 指定数据包规则所使用的过滤模块
iptables执行规则时,是从规则表从上至下执行的,如果没有遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则,执行后根据本规则的动作(accept,reject,log,drop等等),决定下一步执行的情况。
后续执行一般分为三种情况:①继续执行当前规则队列内的下一条规则,比如执行过Filter队列内的LOG后,还会执行Filter队列的下一条规则。②中止当前规则队列的执行,转到下一条规则队列。比如从执行过ACCEPT后就中断Filter队列内其他规则,跳到NAT队列规则去执行。③中止所有规则队列的执行。
原文:http://blog.csdn.net/xinguimeng/article/details/44043165