R / Richie全部文章 ↑

Linux · 2 分钟阅读

iptables 命令格式与常用规则

命令格式

iptables [-t table] command chain match -j target
段 说明
-t 表(默认 filter)
command 管理动作(增删改查)
chain 链(INPUT / FORWARD / OUTPUT / 自定义)
match 匹配条件
-j 动作或跳转

管理动作

选项 含义
-A 追加
-I 插入(默认第一行)
-D 删除
-R 替换
-L 列出
-F 清空
-N 自定义链
-X 删自定义链
-P 默认策略
-Z 清计数器
-n 数字显示
-v 详细
-L --line-numbers 显示行号

动作

名称 行为
ACCEPT 放行
DROP 丢弃,不回包
REJECT 拒绝,回 ICMP
LOG 写日志后继续匹配

保存与恢复

iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

RHEL/CentOS 旧路径 /etc/sysconfig/iptables;现代用 iptables-services + /etc/iptables/rules.v4。

实用规则集

# 1. 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 2. 本机回环
iptables -A INPUT -i lo -j ACCEPT

# 3. 已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 4. SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

# 5. Web
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT

# 6. 屏蔽特定 IP
iptables -I INPUT -s 203.0.113.10 -j DROP

# 7. 屏蔽 IP 段
iptables -I INPUT -s 203.0.113.0/24 -j DROP

# 8. 防 ping(可选)
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# 9. 限制单 IP 并发
iptables -I INPUT -p tcp --syn -m connlimit --connlimit-above 30 -j DROP

# 10. NAT 转发(网关)
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1

删除技巧

# 按行号
iptables -D INPUT 3

# 按内容(必须完全一致)
iptables -D INPUT -p tcp --dport 22 -j ACCEPT

# 清特定链
iptables -F INPUT

调试

# 看行号
iptables -L INPUT -n -v --line-numbers

# 跟踪某条规则的命中数
iptables -L INPUT -n -v

# 临时 LOG 一条规则
iptables -I INPUT 1 -p tcp --dport 80 -j LOG --log-prefix "HTTP-IN: "
tail -f /var/log/kern.log

一些经验

  • 改规则前先备份:iptables-save > /root/iptables.bak
  • SSH 那条规则先放行再加白名单策略
  • 复杂匹配用 -m comment --comment "..." 加注释
  • 长期维护直接走 Ansible / Salt,规则同代码一起 review

参考