Posted on 

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上下文可能意义不一样。

netflow
netflow
浏览器放大看

iptables默认提供四个table, 不同的table内置了不同的chain, 不同chain提供了不近相同的target.

  • filter: 用于应用过滤规则。
  • nat: 用于应用地址转化。
  • mangle: 用于修改分组数据。
  • raw: 想独立与 netfilter 链接跟踪子系统作用的规则应用于这.(可以在图里由raw表所在位置确认)

具体的的各个chain对数据包的处理流程可以参考上图,数据包先进入raw表的preroute链,而后进入manglepreroute链,如此推理。

iptables demo[^example]:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

把默认 HTTP 端口的数据包由 80 转向 8080 端口,在路由决策前被处理,而后进入mangleinput后,又进入filterinput交与 socket.
-t参数后面认识是table,-A表示对后面的chain进行增加条目,在往后一些事match规则,-j后面就是target.