iptables 的 链
当主机网卡收到的数据报进入内核空间的 TCP/IP 协议栈进行层层解封装,达到网络层后会进入 PRE_ROUTING 链,进行一次路由选择,如果目标地址是本机,就进入 INPUT 链,如果非本地就进入 FORWARD 链接(内核启用 ip forward)
应用程序发送的数据包会进入 OUPUT 链
经过 FORWARD 和 OUTPUT 链后会进入 POST_ROUTING 链
索引一般的流程是
PreRouting -> Input -> Process -> Output -> PostRouting
或者
PreRouting -> Forward -> PostRouting
iptables 的表
filter:过滤功能
nat: 网络地址转换功能,如 snat,dnat
mangle: 根据规则修改数据包的标志位
raw:应用在那些不需要做 nat 的情况下
优先级
raw -> mangle -> nat -> filter
iptabls 表和链的关系
链 和 表
PreRouting raw, mangle, nat
Forward mangle, filter
Input mangle, filter, nat
Output raw, mangle, filter, nat
PostRouting mangle, nat
表 和 链
raw PreRouting, Output
mangle PreRouting, Forward, Input, Output, PostRouting
filter Forward, Input, Output
nat PreRouting, Input, Output, PostRouting
通用匹配:源地址目标地址的匹配
常用参数
-p: 协议类型
-s/--source: 源地址
-d/--destination: 目标地址
-i/--in-interface:数据报来自网络接口
-o/--out-interface:数据报出口网络接口
-R num 替换第几条规则
常用命令
-N/--new chain 创建一个名字为 chain 的链
-L/--list 列表链
-A/--append chain rule-specification 在 chain 链末尾插入指定的规则
-I/--insert chain rulenum rule-specification 在 chain 链指定位置(rulenum)插入指定的规则
-D/--delete chain rulenum 在 chainname 删除 chain 链的指定位置(rulenum)处的规则
-R/--replace chain rulenum rule-specification: 替换/修改 chain 链指定位置(rulenum)处的规则
-P/--policy chain target 修改链的默认策略
-F/--flush [chain] 清空指定链 chain 上面的所有规则.没指定则清空所有链的所有规则.
-j/--jump target 满足某条件时该执行的动作 target,如 ACCEPT