iptables usage
netfilter & iptables
Netfilter, 在 Linux 内核中的一个软件框架,用于管理网络数据包。不仅具有网络地址转换(NAT)的功能,也具备数据包内容修改、以及数据包过滤等防火墙功能。
以上内容引自 Wikipedia,netfilter 做为一个内核框架,它可以在不同阶段将函数hook
进网络栈,框架本身并不处理数据包 [^linux_fw].
iptables, 一个运行在用户空间的应用软件,通过控制 Linux 内核 netfilter 模块,来管理网络数据包的流动与转送。在大部分的 Linux 系统上面,iptables 是使用 /usr/sbin/iptables 来操作,文件则放置在手册页(Man page[2])底下,可以通过 man iptables 指令获取。
iptables
做为一个用户态工具,提供一些术语 (table,chain,match,target) 准确描述了一些网络管理,这些术语离开iptables
上下文可能意义不一样。
iptables
默认提供四个table
, 不同的table
内置了不同的chain
, 不同chain
提供了不近相同的target
.
- filter: 用于应用过滤规则。
- nat: 用于应用地址转化。
- mangle: 用于修改分组数据。
- raw: 想独立与 netfilter 链接跟踪子系统作用的规则应用于这.(可以在图里由
raw
表所在位置确认)
具体的的各个chain
对数据包的处理流程可以参考上图,数据包先进入raw
表的preroute
链,而后进入mangle
的preroute
链,如此推理。
iptables demo[^example]:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
把默认 HTTP 端口的数据包由 80 转向 8080 端口,在路由决策前被处理,而后进入mangle
的input
后,又进入filter
的input
交与 socket.-t
参数后面认识是table
,-A
表示对后面的chain
进行增加条目,在往后一些事match
规则,-j
后面就是target
.