iptables 使用笔记

iptables 是 linux 下的防火墙程序,在所有的 linux 发行版中都能使用。

iptables 从名字上看就是基于 tables的,其层次结构为 iptables -> tables -> chains -> rules。 iptables 中包括4个 table :Filter, NAT, Mangle, Raw;filter 表包含了三种 Chain: INPUT, OUTPUT, FORWARD;在每个 Chain 下,可以定义各种 rule 。

filter 是默认的表,本文所有操作只涉及 filter 表; 所有操作的用户为 root。

查看现有规则

举例

iptables -L
iptables -L -n
iptables -L -n --line-number
iptables -L -t filter

参数说明

  • -L / –list 列表显示
  • -n / –numeric 用数字显示端口号,默认显示服务名
  • –line-number 显示行号
  • -t / –table 指定表,可用值: filter(默认), nat, mangle, raw

添加规则

iptables 每个 chain 中包含了若干规则,当需要验证规则的时候,iptables 会逐条判断规则,当前规则条件不满足的时候会进入下一个规则判定。
每一个规则由条件和目标(target)组成,目标就是当满足规则条件时,要对连接进行的操作。 target 有下面的四个值:

  • ACCEPT 接受请求数据包
  • DROP 丢掉数据包,不响应任何内容
  • REJECT 拒绝,响应错误包
  • QUEUE 将数据包移交到用户空间
  • RETURN 直接返回到调用链中,不再执行后续规则

举例

iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 1521 -j ACCEPT
iptables -I INPUT 4 -m state --state NEW,ESTABLISHED -p tcp --dport 1521 -j ACCEPT

参数说明

  • -A INPUT 追加规则到 INPUT 链中
  • -I INPUT 4 在INPUT链中的第4行插入规则
  • -p 协议,可用之:tcp, udp, imcp, all 等
  • -s 源IP地址
  • –sport 源地址端口号
  • -d 目的IP地址
  • –dport 目的端口号
  • -j target,可用值:ACCEPT, DROP, REJECT, QUEUE, RETURN
  • -m state 启用状态模块
  • –state 匹配状态值 NEW, ESTABLISHED
  • -i 指定输入端口,eg: -i eth0
  • -o 指定输出端口,eg: -o eth0

删除规则

删除某个规则

如下 删除 INPUT chain 中的第9行规则,查询行号可用 –line-number 参数。

iptables -D INPUT 9

清空所有规则

iptables -F

  • -F / –flush 删除现有所有规则

使规则生效

当使用命令添加/删除规则后,并不能立即使规则生效,需要先保存规则,然后重启 iptables 。

以下命令在 CentOS 中测试

serviec iptables save # 保存
serviec iptables reload # 重新加载服务

当然也可以使用 iptables-save 来保存 iptables 的新规则

iptables-save
/etc/init.d/iptables reload

参考文档

iptables详细教程:基础、架构、清空规则、追加规则、应用实例