一、iptables/netfilter的基本介绍

  iptables/netfilter是Linux主机上的一个防火墙软件组合,其中iptables是一个防火墙规则定义软件,netfilter是内核中的一个功能(规格实施模块),负责所编写的规则的生效使用。

  netfilter将报文的流进流出路径分为五个链,所有的报文都必须流经这五个链中的其中几个。五个链分别是:

PREROUTING路由前,报文进入本机将要做路由分析之前流经的位置。
POSTROUTING路由后,报文已经路由分析完毕并将要发送(流出)的位置。
INPUT数据报文进入用户空间流经的位置。
OUTPUT数据报文流出用户空间流经的位置。
FORWARD作为转发报文流经的位置。

  除了基本的五个链外,用户还可以根据需求创建自定义链,不过自定义链需要由上面的五个链调用才能生效。

  为了便于管理,iptables提供了四个不同功能的表,根据表功能的不同,每个表提供不同的链,则定义在对应功能表的链上。

raw表

如果开启了连接追踪,可以使用此表对某种连接不做追踪,支持的链:

  POSTROUTING链

  OUTPUT链

mangle表

可以对数据报文进行修改,支持的链:

  POSTROUTING链

  PREROUTING链

  OUTPUT链

  INPUT链

  FORWARD链

nat表

IP地址转换,支持的链:

  PREROUTING链

  POSTROUTING链

  OUTPUT链

filter表

过滤,支持的链:

  INPUT

  OUTPUT

  FORWARD

  iptables/netfilter可以将策略类型分为"通"、"堵"。"通"类型默认规则是拒绝,只有明确定义允许的报文才让其通过;"堵"类型默认规则是允许,只有明确定义拒绝的报文才阻塞。通堵类型正好相反。

  iptables/netfilter是一个四层防火墙,所以只能对四层及以下(三层)进行匹配。例如源IP、目标IP、源端口、目标端口、ICMP类型。

二、iptables/netfilter的规则:

  iptables的命令比较简单,man帮助也比较明晰,唯一需要注意的就是规则之间的关系,以及规则的排列顺序,一个防火墙的性能高低,有很大一部分取决于你的规则排序。规则排序一般遵从匹配范围小的优先,匹配几率高的优先

  iptables定义规则的方式大概是这种格式:

  iptables [-t table] COMMAND chain CRETIRIA -j ACTION
    -t 表名:指定要操作的表
    COMMAND:定义策略
    chain:指定要操作的链
    CRETIRIA:定义匹配的标准(分为多个标准)
    -j Target:策略进行的动作

1.COMMAND格式介绍:

新增规则:
 iptables [-t table] -A chain rule-specification
删除规则:
  iptables [-t table] -D chain rulenum
插入一条规则:
  iptables [-t table] -I chain [rulenum] rule-specification
替换一条规则:
  iptables [-t table] -R chain rulenum rule-specification
显示某规则的定义语法:
  iptables [-t table] -S [chain [rulenum]]
查看表、链中的规则(指定第几条):
  iptables [-t table] -L [chain [rulenum]] [options...]  #options一般为-n和-v
清空表或链规则:
  iptables [-t table] -F [chain [rulenum]] [options...]
清空链的包计数器和字节计数器:
  iptables [-t table] -Z [chain] [options...]
定义默认进行的动作:
  iptables [-t table] -P chain target
创建一条自定义链:
  iptables [-t table] -N chain
删除一条自定义空链:
  iptables [-t table] -X [chain]
修改自定义链名字:
  iptables [-t table] -E old-chain-name new-chain-name

2.CRETIRIA格式介绍: