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
Netfilter Hooks
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 表和链(Tables and Chains)
在Iptables
中有四表五链。
Iptables处理流程
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
命令时,规则只是保存在内存中,机器重启后规则就没了。因此我们在规则设定完毕后,可以使用命令保存规则。
iptables-save
– 保存规则
iptables-restore
– 恢复规则