命令格式
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
参考