Write by lyc at 2018-01-29
Modify by lyc at 2020-8-28
参考博文:
iptables概念

一、iptables 介绍

1.iptables

  • Netfilter/Iptables(简称iptables)是unix/linux自带的一款优秀且源代码完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出的服务器的数据包进行很精细的控制。
  • iptables是linux 2.4及2.6内核中集成的服务。其功能与安全性比老一辈的ipfwadm,ipchains强大的多。
  • iptables主要工作在OSI七层模型的二、三层,如果重新编译内核,iptables也可以支持7层控制(squid代理+iptables)

2.什么是Netfilter/iptables?

  • Netfilter 是表(tables)的容器,iptables包含4张表tablesfliter, nat, mangle, raw
  • iptables 是链(chains)的容器,链(chains):
    • INPUT 进入主机链
    • OUTPUT 流出主机链
    • FORWARD 转发链
    • PREROUTING 进入路由,预备路由
    • POSTROUTING 邮寄出路由
  • 链(chains)是规则(rule)的容器,规则(rule)就是一条条过滤的语句

3. iptables的工作原理

  • 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后过滤的。
  • 如果匹配上规则,即明确表明是阻止还是通过,数据包就不再向下匹配新规则了。
  • 如果规则中没有明确表明是阻止还是通过,也就是没有匹配规则,再向下进行匹配,知道匹配默认规则得到明确的阻止还是通过。
  • 防火墙默认规则是所有规则执行完才会执行的。

二、iptables 四表五链

1.四张表(tables)

tables description
filter filter 表是iptables默认使用的表,主要和主机自身相关,真正负责主机防火墙功能的,过滤流入流出主机的数据包。
filter 表包含3条链:INPUT, OUTPUT, FORWARD
nat 负责网络地址转换,即源地址与目的地址的IP,port转换。
一般用于局域网上网或者特殊的端口转换服务相关。
nat功能就相当于网络的ACL控制,和网络交换机的ACL类似。
nat表定义了3条链:OUTPUT, PREROUTING, POSTROUTING
mangle 主要负责修改数据包中特殊的路由标记,如TTL, TOS, MARK 等。
mangle 表定义了5条链:INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING
raw 不常用,略。

2.五条链(chains)

chains description
INPUT 负责过滤所有目标地址是本机地址的数据包。
通俗的讲,就是过滤进入主机的数据包
OUTPUT 处理所有源地址是本机地址的数据包。
通俗的讲,就是处理主机发出去的数据包
FORWARD 负责转发流经主机的数据包。其转发的作用,和NAT关系很大。
一般需要开启内核转发 net.ipv4.ip_forward = 1
PREROUTING 在数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等
(比喻:收信时,根据规则重写收件人的地址)
POSTROUTING 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址、源端口等
(比喻:寄信时,写好发件人的地址,要让人家回信时能够有地址可回)

3.表(tables)和链(chains)的对应关系

表iptables INPUT FORWARD OUTPUT PREROUTING POSTROUTING
filter yes yes yes
nat yes yes yes
mangle yes yes yes yes yes