1. iptables
位于用户空间工具,用于编写规则,规则下发到netfilter。
iptables演进:
Linux 2.0 --- ipfwadm
Linux 2.2 --- ipchains
Linux 2.4 --- iptables/netfilter
2. netfilter
位于内核中,一种框架(framework)
具有5个钩子点(hook function),或者理解为5条规则链(chains)
5条链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
5个钩子函数: NF_IP_LOCAL_IN、NF_IP_LOCAL_OUT、NF_IP_FORWARD、NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING
2.1 报文流向
① 到本机
PREROUTING -> INPUT
② 转发
PREROUTING -> FORWARD -> POSTROUTING
③ 本机发出
OUTPUT -> POSTROUTING
2.2 tables
利用5条规则链,linux内核可以实现多种功能,主要有 raw、mangle、nat、filter
每条链可以实现上述功能中的多个,每种功能的规则是分开存放的,可以理解为不同的表(table)
每条链可实现的功能,或者下挂表如下:
PREROUTING raw/mangle/nat
FORWARD mangle/filter
POSTROUTING mangle/nat
INPUT mangle/filter
OUTPUT raw/mangle/nat/filter
各功能(table)优先级排序亦为 raw/mangle/nat/filter
或者,从功能的角度考虑,各功能实现需要依赖的链(chains):
① raw
PREROUTING / OUTPUT
② mangle 修改报文、附加数据
PREROUTING / FORWARD / POSTROUTING / INPUT / OUTPUT
③ nat 源NAT、目的NAT
PREROUTING / POSTROUTING / OUTPUT
④ filter 包过滤
位于用户空间工具,用于编写规则,规则下发到netfilter。
iptables演进:
Linux 2.0 --- ipfwadm
Linux 2.2 --- ipchains
Linux 2.4 --- iptables/netfilter
2. netfilter
位于内核中,一种框架(framework)
具有5个钩子点(hook function),或者理解为5条规则链(chains)
5条链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
5个钩子函数: NF_IP_LOCAL_IN、NF_IP_LOCAL_OUT、NF_IP_FORWARD、NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING
2.1 报文流向
① 到本机
PREROUTING -> INPUT
② 转发
PREROUTING -> FORWARD -> POSTROUTING
③ 本机发出
OUTPUT -> POSTROUTING
2.2 tables
利用5条规则链,linux内核可以实现多种功能,主要有 raw、mangle、nat、filter
每条链可以实现上述功能中的多个,每种功能的规则是分开存放的,可以理解为不同的表(table)
每条链可实现的功能,或者下挂表如下:
PREROUTING raw/mangle/nat
FORWARD mangle/filter
POSTROUTING mangle/nat
INPUT mangle/filter
OUTPUT raw/mangle/nat/filter
各功能(table)优先级排序亦为 raw/mangle/nat/filter
或者,从功能的角度考虑,各功能实现需要依赖的链(chains):
① raw
PREROUTING / OUTPUT
② mangle 修改报文、附加数据
PREROUTING / FORWARD / POSTROUTING / INPUT / OUTPUT
③ nat 源NAT、目的NAT
PREROUTING / POSTROUTING / OUTPUT
④ filter 包过滤
FORWARD / INPUT / OUTPUT