修改前的关键准备
- 备份现有规则
sudo iptables-save > ~/iptables_backup.txt # iptables备份 sudo cp /etc/ufw/user.rules ~/ufw_backup.rules # ufw备份
- 查看当前规则
sudo firewall-cmd --list-all # firewalld sudo ufw status verbose # ufw sudo iptables -L -n -v # iptables
- 权限要求
所有操作需root
权限,命令前加sudo
。
主流工具操作指南
使用 firewalld(推荐用于 CentOS/RHEL/Fedora)
- 开放端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent # 永久开放TCP 8080 sudo firewall-cmd --reload # 重载生效
- 允许IP访问
sudo firewall-cmd --zone=public --add-source=192.168.1.100 --permanent sudo firewall-cmd --reload
- 删除规则
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent sudo firewall-cmd --reload
使用 ufw(推荐用于 Ubuntu/Debian)
- 启用防火墙
sudo ufw enable # 首次使用需启用
- 开放SSH端口(避免锁死自己)
sudo ufw allow 22/tcp
- 允许特定服务
sudo ufw allow http # 等价于端口80 sudo ufw allow 443/tcp
- 拒绝IP访问
sudo ufw deny from 203.0.113.50 # 屏蔽IP
- 删除规则
sudo ufw status numbered # 查看规则编号 sudo ufw delete 2 # 删除编号2的规则
使用 iptables(通用但需手动保存)
- 开放端口
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # 允许MySQL端口
- 允许IP段
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许整个子网
- 删除规则
sudo iptables -L INPUT --line-numbers # 查看规则行号 sudo iptables -D INPUT 3 # 删除INPUT链的第3条规则
- 保存规则(必须操作)
sudo apt install iptables-persistent # Debian/Ubuntu sudo netfilter-persistent save # 或 sudo service iptables save # CentOS 6
常见场景示例
- 部署Web服务器
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp # ufw sudo firewall-cmd --add-service={http,https} --permanent # firewalld
- 允许Ping检测
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
- 端口转发(将80转到8080)
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
安全注意事项
- 避免锁死自己
- 修改规则前确保已放行当前SSH连接端口(默认22)。
- 使用
nohup
执行可能断连的操作:nohup sudo ufw enable & # 后台启用防火墙
- 最小权限原则
- 仅开放必要端口,如非生产环境关闭3306、6379等数据库端口。
- 使用
--permanent
(firewalld)或保存规则(iptables)防止重启失效。
- 日志监控
sudo ufw logging on # 启用日志(路径:/var/log/ufw.log) sudo journalctl -u firewalld.service # 查看firewalld日志
故障排查
- 规则未生效?
检查顺序:- 是否重载了配置(
firewall-cmd --reload
或ufw reload
)? - 是否保存了规则(iptables需手动保存)?
- 是否有冲突规则(如先拒绝所有再允许个别)?
- 是否重载了配置(
- 恢复备份
sudo iptables-restore < ~/iptables_backup.txt # iptables还原 sudo ufw reload < ~/ufw_backup.rules # ufw还原
引用说明:
- 官方文档:
firewalld.org |
Ubuntu UFW Guide |
Netfilter Iptables- 安全标准参考:
NIST SP 800-123《Linux服务器安全指南》- 测试环境:
CentOS 9 / Ubuntu 22.04 LTS / iptables v1.8.8
修改防火墙规则时,始终遵循“先测试后生产”原则,复杂网络环境建议结合tcpdump
验证流量,并定期审计规则。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9971.html