iptables 基础:三表五链与常用命令

iptables 是 Linux 内核的数据包过滤/防火墙工具,通过**表(table)与链(chain)**组织规则。这里整理四表五链、常用选项、动作与常用模块。

四表五链

表(按功能划分):

表功能
filter过滤(默认表,主机防火墙)
nat网络地址转换(NAT)
mangle修改数据包内容(如 TTL)
raw数据包跟踪(跳过 conntrack)

常见「三表」指 filter / nat / mangle;「四表」把 raw 也计入。

链(按数据包流向):

链位置
PREROUTING路由前(包刚进入主机)
INPUT进入本机用户空间
OUTPUT从本机用户空间出去
FORWARD经过本机转发(非本机)
POSTROUTING路由后(包离开前)

数据流:

流入本机:A --> PREROUTING --> INPUT --> B
流出本机:A --> OUTPUT --> POSTROUTING --> B
经过本机:A --> PREROUTING --> FORWARD --> POSTROUTING --> B

各表可用的链:

表可用链
filterINPUT FORWARD OUTPUT
natPREROUTING INPUT OUTPUT POSTROUTING
rawPREROUTING OUTPUT
manglePREROUTING INPUT FORWARD OUTPUT POSTROUTING

语法与常用选项

格式:iptables -t 表名 选项 链名称 条件 动作

选项说明
-t指定表(默认 filter)
-L列出规则;配 -v 显示包与大小、-n 不反解地址、--line-numbers 显示行号
-A追加一条规则到链尾
-I插入一条规则到顶部
-D删除规则;-S 列出所有规则
-R修改规则
-F清空规则;-Z 清空计数器
-N创建自定义链;-X 删除自定义链
-P指定链的默认策略

匹配条件

参数说明
-s / -d源地址 / 目标地址
--sport / --dport源端口 / 目标端口
-p协议(tcp / udp / icmp/ all )
-i / -o进来的网卡 / 出去的网卡
-m指定模块;-j 转发动作

常用模块(-m)

模块用途关键参数
multiport连续匹配多端口--dports 22,80,443,30000:50000(逗号分隔,连续段用冒号)
iprange连续 IP 范围--src-range from-to、--dst-range from-to
string匹配字符串--string pattern、--algo bm / kmp
time按时间匹配--timestart、--timestop、--monthdays、--weekdays
icmp禁 ping--icmp-type echo-request(8) / echo-reply(0)
connlimit限制并发连接--connlimit-upto n、--connlimit-above n
limit限制报速率--limit rate[/second /minute /hour /day]、--limit-burst number(默认 5)

动作(-j)

动作说明
ACCEPT放行,不再比对其他规则
REJECT拒绝,并通知对方
DROP丢弃,不通知对方
REDIRECT将包导入另一个端口

案例

  1. 只允许 22 端口,其余拒绝
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
  1. 只允许 192.168.15.71 通过 22 端口
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
  1. 让 192.168.15.71 对外不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP
  1. 暴露 22,80,443 及 30000-50000,其余拒绝(multiport)
iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
  1. 拦截包含 HelloWorld 的包(string)
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
  1. 限制速率约 300/s(limit)
iptables -t filter -A OUTPUT -p TCP -m limit --limit 300/s -j ACCEPT
iptables -t filter -A OUTPUT -p TCP -j DROP

Warning

iptables 规则即时生效,写错可能直接断网。修改前先用 iptables -L -n --line-numbers 查看现状,建议先备份规则(iptables-save > /etc/iptables.rules),再操作。

相关笔记