目录

iptables从入门到放弃

iptables 是 Linux 系统上常用的命令行工具,主要用来配置防火墙。运用 iptables 我们能够实现流量的转发、拦截等操作

iptables 是什么

iptables 是运行在用户空间的应用软件,通过控制 Linux 内核 netfilter 模块,来管理网络数据包的处理和转发。在大部分 Linux 发行版中,可以通过手册页或man iptables获取用户手册。

netfilter是什么(摘自Wiki)
Netfilter,在 Linux 内核中的一个软件框架,用于管理网络数据包。不仅具有网络地址转换(NAT)的功能,也具备数据包内容修改、以及数据包过滤等防火墙功能。利用运作于用户空间的应用软件,如 iptables、ebtables 和 arptables 等,来控制 Netfilter,系统管理者可以管理通过 Linux 操作系统的各种网络数据包。1990 年代,Netfilter 在 Linux 2.3.15 版时进入 Linux 内核,正式应用于 Linux 2.4 版。

简而言之就是 Netfilter 的上层程序,用户通过 iptables 指定规则,由 Netfilter 来执行,实现流量的拦截、转发等操作。

iptables 的链(chain)

iptables 中有 5 个链,分别与 netfilter 中的 hook 对应

  • PREROUTING - 对应NF_IP_PRE_ROUTING,任何进入网络堆栈的流量都会触发此 hook。
  • INPUT - 对应NF_IP_LOCAL_IN,如果数据包发送到本地系统,则在路由传入数据包之后,将触发此 hook。
  • FORWARD - 对应NF_IP_FORWARD,如果该数据包转发到另一台主机,则在路由输入数据包之后将触发此 hook。
  • OUTPUT - 对应NF_IP_LOCAL_OUT,由本地的出栈流量触发。
  • POSTROUTING - 对应NF_IP_POST_ROUTING,任何传出的流量都将触发此 hook。

数据包走向:

  • 目的地址为本机的传入流量: -> PREROUTING -> INPUT
  • 目的地址为其他主机的传入流量: -> PREROUTING -> FORWARD -> POSTROUTING ->
  • 本机出站流量: OUTPUT -> POSTROUTING ->

iptables 的表(tables)

filter 表

filter 表是默认的表,如果不指明表则使用此表。其通常用于过滤数据包。其中的内建链包括:

  • INPUT,OUTPUT,FORWARD

nat 表

nat 表如其名,用于地址转换操作。其中的内建链包括:

  • PREROUTING,POSTROUTING,OUTPUT

mangle 表

mangle 表用于处理数据包。其和 nat 表的主要区别在于,nat 表侧重连接而 mangle 表侧重每一个数据包。其中内建链列表如下。

  • PREROUTING,OUTPUT,FORWARD,INPUT,POSTROUTING

raw 表

raw 表用于处理异常,有如下两个内建链:

  • PREROUTING,OUTPUT

流量流向

iptables 的规则(rules)

根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作做出处理。

匹配条件

基本匹配条件:源地址,目标地址,传输层协议
扩展匹配条件:由扩展模块定义

处理动作

基本处理动作:ACCEPT、DROP
扩展处理动作:REJECT、RETURN、LOG、REDIRECT

iptables的链:内置链和自定义链

内置链:对应于hook functions
自定义链接:用于内置链的扩展和补充,可实现更灵活的规则管理机制;自定义链可以设置完之后,添加到内置链中,方便管理

待续… (iptables的命令操作)