iptables不算是一个真正的防火墙,它是一个配置Linux内核防火墙的命令行工具。将用户的安全设置同步到对应的安全框架–Netfilter。netfilter位于内核空间,iptables位于用户空间。

iptables用于ipv4,ip6tables用于IPv6。
netfilter/ptables 一起组成了linux平台下的包过滤防火墙。其功能包括:网络地址转换(NAT)、数据包内容修改、数据包过滤等功能。

原图:https://thermalcircle.de/lib/exe/fetch.php?media=linux:netfilter-packet-flow.png
iptables是与协议栈中具有包过滤功能的hook交互完成工作的,而这些hook就构成了netfilter框架。
netfilter框架包含5个hook点:
NF_IP_PRE_ROUTING:在数据包进入协议栈后,再决定对此数据包进行路由判断之前,触发此HOOK
NF_IP_LOCAL_IN:通过路由判断,此数据包是给本机的,触发此HOOK
NF_IP_FORWARD:通过路由判断,此数据包是给其他机器的,触发此HOOK
NF_IP_LOCAL_OUT:本机触发即将发送的数据包在进入协议栈后,触发此HOOK
NF_IP_POST_ROUTING:本机触发即将发送或要转发的数据包,在路由判断之后,触发此HOOK
在注册这些钩子函数时,同时需要提供优先级,以便在触发HOOK时确定调用顺序。
在Iptables中有四表五链。


iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] command [链名] [条件匹配] [-j 目标动作]
-t table,指明要是使用的表。
filter(默认)、nat、mangle、raw、security(强制访问控制(MAC)网络规则)
通用选项
-p:匹配协议类型
-p TCP/UDP/ICMP
-sport:匹配源端口
-dport:匹配目的端口
-s:匹配源地址
-d:匹配目的地址
-m limit:匹配转包速率
-m mac:匹配MAC地址
command
-L: --list [chain]查看规则列表
-A: --append chain rule-specification追加一条规则

-D: --delete chain rule-specification删除指定规则
-I: --insert chain [rulenum] rule-specification在指定位置插入一条规则

-R: --replace chain rulenum rule-specification替换所选链中的规则
-C: --check chain rule-specification
-E: --rename-chain old-chain new-chain 给链重命名
-F: --flush [chain]清空规则

-N: --new-chain chain 用给定的名称创建一个新的用户定义的链
-P: --policy chain target 对某条链设置默认规则
-X: --delete-chain [chain]删除用户自定义链,如果该链被使用,需要先删除规则
-Z: --zero [chain [rulenum]]将指定链的所有计数器归零,默认所有链
-h: Help
-j 目标动作
-j ACCEPT:允许通过
-j DROP:丢弃数据包,不允许通过
-j SNAT:源地址转换
-j DNAT:目的地址转换
-j MASQUERADE:动态源IP转换
由于我们在执行iptables命令时,规则只是保存在内存中,机器重启后规则就没了。因此我们在规则设定完毕后,可以使用命令保存规则。
iptables-save – 保存规则
iptables-restore – 恢复规则