一、3条命令入门
# 1. 查看当前规则
iptables -L -n -v
# 2. 开放SSH(防失联)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 3. 禁止所有其他入站
iptables -P INPUT DROP
完事! 防火墙开始工作 ✅
二、生产环境必配5条
# 1. 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 2. 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 3. 开放SSH(改端口后要同步改)
iptables -A INPUT -p tcp --dport 52222 -j ACCEPT
# 4. 开放Web服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 5. 默认禁止所有(放在最后)
iptables -P INPUT DROP
iptables -P FORWARD DROP
三、常用命令速查表
| 操作 | 命令 |
|---|---|
| 开放端口 | iptables -A INPUT -p tcp --dport 8080 -j ACCEPT |
| 封禁IP | iptables -A INPUT -s 1.2.3.4 -j DROP |
| 封禁网段 | iptables -A INPUT -s 192.168.1.0/24 -j DROP |
| 删除规则 | iptables -D INPUT 行号 |
| 插入规则 | iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT |
| 保存规则 | iptables-save > /etc/iptables/rules.v4 |
| 恢复规则 | iptables-restore < /etc/iptables/rules.v4 |
| 清空规则 | iptables -F |
| 查看行号 | iptables -L -n --line-numbers |
四、企业级快速部署脚本
#!/bin/bash
# iptables_init.sh - 一键配置生产防火墙
# 1. 清空现有规则
iptables -F
iptables -X
iptables -Z
# 2. 默认策略(全拦)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 3. 允许本机
iptables -A INPUT -i lo -j ACCEPT
# 4. 允许已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 5. 开放服务端口(按需修改)
iptables -A INPUT -p tcp --dport 52222 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT -s 10.0.0.0/8 # MySQL(内网)
iptables -A INPUT -p tcp --dport 6379 -j ACCEPT -s 10.0.0.0/8 # Redis(内网)
# 6. 防扫描(限频率)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# 7. 保存规则
iptables-save > /etc/iptables/rules.v4
echo "✅ iptables 配置完成"
五、防攻击三板斧
5.1 防SSH暴力破解
# 60秒内尝试超过3次,封24小时
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 86400 -j DROP
5.2 防DDoS(SYN Flood)
# 限制每秒新连接数
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
5.3 禁Ping
# 不让ping,但允许自己ping别人
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
六、永久保存(防重启丢失)
CentOS/RHEL
# 安装持久化工具
yum install -y iptables-services
# 保存规则
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
# 开机自启
systemctl enable iptables
Ubuntu/Debian
# 安装
apt install -y iptables-persistent
# 保存
netfilter-persistent save
# 或
iptables-save > /etc/iptables/rules.v4
# 开机加载
systemctl enable netfilter-persistent
七、常用场景速查
| 场景 | 命令 |
|---|---|
| 开放单个IP访问数据库 | iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.100 -j ACCEPT |
| 封禁恶意IP | iptables -A INPUT -s 45.155.205.0/24 -j DROP |
| 限速下载 | iptables -A FORWARD -m limit --limit 100k/s -j ACCEPT |
| 端口转发 | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 |
| 查看NAT规则 | iptables -t nat -L -n -v |
| 删除指定规则 | iptables -D INPUT 3(删第3条) |
八、救命指令(误封自救)
# 清空所有规则(立刻解除封锁)
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 远程执行(提前准备)
echo "iptables -F" | ssh root@服务器
九、一句话总结
开22防失联 → 开80/443跑业务 → 开内网连DB → 默认全DROP
配完要保存,重启不丢失,误封有清空,日常看日志
# 终极三连
iptables -L -n -v # 看规则
iptables-save > rules # 存规则
iptables-restore < rules # 载规则
发表回复