netfilter 基础
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)
数据包在每条内建的链路中传输时按如下过滤表中的规则进行处理。
过滤目标(Netfilter target)
防火墙规则有许多目标:
-
4 个基本目标:
-
扩展目标:
-
LOG 打开内核日志。
-
REJECT 回送错误数据包并阻拦该数据包。
-
SNAT 修改数据包源地址,仅作用于 POSTROUTING 链路。(仅适用于 nat 过滤表)
--to-source ipaddr[-ipaddr][:port-port]
-
MASQUERADE 作用和 SNAT 一样,但面向使用动态IP请求建立的连接(拔号连接)。(仅适用于nat过滤表)
--to-ports port[-port]
-
DNAT 修改数据包目的地址,仅作用于 PREROUTING、OUTPUT 链路以及由它们调用的用户自定义链路。(仅适用于 nat 过滤表)
--to-destination ipaddr[-ipaddr][:port-port]
-
REDIRECT 修改数据包目标地址使其发送给本机。
--to-ports port[-port]
Netfilter 命令
iptables
的基本命令有:
iptables -N chain # 创建一个链路
iptables -A chain \ # 添加链路的规则
-t table \ # 使用过滤表(filter, nat, mangle)
-p protocol \ # tcp、udp、icmp或所有,
-s source-address[/mask] \
--sport port[:port] \ # 如果 -p 是 tcp 或 udp,指定源的端口
-d destination-address[/mask] \
--dport port[:port] \ # 如果 -p 是 tcp 或 udp,指定目的地端口 -j target \ # 如果匹配作何处理
-i in-interface-name \ # 针对 INPUT、FORWARD、PREROUTING
-o out-interface-name # 针对 FORWARD、OUTPUT、POSTROUTING
网络地址转换
LAN 中的机器可以通过能把 LAN 地址转换为可用的 Internet 上的 IP 地址的网关来访问 Internet 的资源。
# apt-get install ipmasq
执行样例规则来加强ipmasq
的保护机制