Netfilter内建了5条链路来处理数据包,它们分别是:PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING:
routing
decision
IN ——> PRE —> ——> FORWARD —–> —-> POST —–> OUT
interface ROUTING \ filter / ROUTING interface
DNAT | tracking ^ SNAT
REDIRECT | | MASQUERADE
v |
INPUT OUTPUT
| filter ^ filter,DNAT
v |
\–> Local Process –/
user-space programs
过滤表(Netfilter table)
数据包在每条内建的链路中传输时按如下过滤表中的规则进行处理。
* filter(数据包过滤器,链路中默认的过滤器)
o INPUT(作用于进入本机的数据包)
o FORWARD(作用于路由到本机的数据包)
o OUTPUT(作用于本地产生的数据包)
* nat(网络地址翻译)
o PREROUTING(作用于刚进入的待转换数据包)
o OUTPUT(作用于在路由之前待转换的本地产生的数据包)
o POSTROUTING(作用于待发出的已转换的数据包)
* mangle (network address mangling, good only after 2.4.18)
o 适用于所有5条链路。
过滤目标(Netfilter target)
Firewall rules have several targets:
* 4个基本目标:
o ACCEPT 允许数据包通过。
o DROP 阻拦数据包。
o QUEUE 允许数据包进入用户空间(userspace)(如果内核支持的话)。
o RETURN means stop traversing this chain and resume at the next rule in the previous (calling) chain.
* 扩展目标:
o LOG 打开内核日志。
o REJECT 回送错误数据包并阻拦该数据包。
o SNAT 修改数据包源地址,仅作用于POSTROUTING链路。(仅适用于nat过滤表)
–to-source ipaddr[-ipaddr][:port-port]
o MASQUERADE 作用和SNAT一样,但面向使用动态IP请求建立的连接(拔号连接)。(仅适用于nat过滤表)
–to-ports port[-port]
o DNAT 修改数据包目的地址,仅作用于PREROUTING、OUTPUT链路以及由它们调用的用户自定义链路。(仅适用于nat过滤表)
–to-destination ipaddr[-ipaddr][:port-port]
o REDIRECT 修改数据包目标地址使其发送给本机。
–to-ports port[-port]
网络过滤器命令
iptables的基本命令有:
iptables -N chain # create a chain
iptables -A chain \ # add rule to chain
-t table \ # use table (filter, nat, mangle)
-p protocol \ # tcp, udp, icmp, or all,
-s source-address[/mask] \
–sport port[:port] \ # source port if -p is tcp or udp
-d destination-address[/mask] \
–dport port[:port] \ # dest. port if -p is tcp or udp
-j target \ # what to do if match
-i in-interface-name \ # for INPUT, FORWARD, PREROUTING
-o out-interface-name # for FORWARD, OUTPUT, POSTROUTING
routing
decision
IN ——> PRE —> ——> FORWARD —–> —-> POST —–> OUT
interface ROUTING \ filter / ROUTING interface
DNAT | tracking ^ SNAT
REDIRECT | | MASQUERADE
v |
INPUT OUTPUT
| filter ^ filter,DNAT
v |
\–> Local Process –/
user-space programs
过滤表(Netfilter table)
数据包在每条内建的链路中传输时按如下过滤表中的规则进行处理。
* filter(数据包过滤器,链路中默认的过滤器)
o INPUT(作用于进入本机的数据包)
o FORWARD(作用于路由到本机的数据包)
o OUTPUT(作用于本地产生的数据包)
* nat(网络地址翻译)
o PREROUTING(作用于刚进入的待转换数据包)
o OUTPUT(作用于在路由之前待转换的本地产生的数据包)
o POSTROUTING(作用于待发出的已转换的数据包)
* mangle (network address mangling, good only after 2.4.18)
o 适用于所有5条链路。
过滤目标(Netfilter target)
Firewall rules have several targets:
* 4个基本目标:
o ACCEPT 允许数据包通过。
o DROP 阻拦数据包。
o QUEUE 允许数据包进入用户空间(userspace)(如果内核支持的话)。
o RETURN means stop traversing this chain and resume at the next rule in the previous (calling) chain.
* 扩展目标:
o LOG 打开内核日志。
o REJECT 回送错误数据包并阻拦该数据包。
o SNAT 修改数据包源地址,仅作用于POSTROUTING链路。(仅适用于nat过滤表)
–to-source ipaddr[-ipaddr][:port-port]
o MASQUERADE 作用和SNAT一样,但面向使用动态IP请求建立的连接(拔号连接)。(仅适用于nat过滤表)
–to-ports port[-port]
o DNAT 修改数据包目的地址,仅作用于PREROUTING、OUTPUT链路以及由它们调用的用户自定义链路。(仅适用于nat过滤表)
–to-destination ipaddr[-ipaddr][:port-port]
o REDIRECT 修改数据包目标地址使其发送给本机。
–to-ports port[-port]
网络过滤器命令
iptables的基本命令有:
iptables -N chain # create a chain
iptables -A chain \ # add rule to chain
-t table \ # use table (filter, nat, mangle)
-p protocol \ # tcp, udp, icmp, or all,
-s source-address[/mask] \
–sport port[:port] \ # source port if -p is tcp or udp
-d destination-address[/mask] \
–dport port[:port] \ # dest. port if -p is tcp or udp
-j target \ # what to do if match
-i in-interface-name \ # for INPUT, FORWARD, PREROUTING
-o out-interface-name # for FORWARD, OUTPUT, POSTROUTING