以下是 Linux 系统下防火墙配置的详细指南,涵盖 iptables
、ufw
、firewalld
等主流工具的使用方法和实战场景!
Linux 系统下防火墙配置的详细指南
1. 防火墙工具对比
工具 | 适用场景 | 特点 |
---|---|---|
iptables | 传统 Linux 系统(如 CentOS/RHEL) | 功能强大,规则灵活,但配置复杂 |
ufw | Ubuntu/Debian 等新发行版 | 图形化界面,命令简洁,适合新手 |
firewalld | RHEL/CentOS 8+/Fedora | 基于服务的动态防火墙,支持 NAT 和端口转发 |
2. iptables 基础配置
2.1 查看规则
iptables -L -n -v # 查看所有规则(-n 不解析域名,-v 显示详细信息)
2.2 清空规则
iptables -F # 清空所有规则
iptables -t nat -F # 清空 NAT 表
2.3 基础规则示例
# 允许 SSH(端口 22)入站
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP/HTTPS(端口 80/443)入站
iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
# 拒绝其他所有入站流量(默认策略)
iptables -P INPUT DROP
# 保存规则(根据系统选择以下命令)
iptables-save | sudo tee /etc/sysconfig/iptables # CentOS/RHEL
iptables-save > /etc/iptables/rules.v4 # Ubuntu/Debian
2.4 高级功能
# 设置 NAT 规则(端口转发)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination :80
iptables -t nat -A POSTROUTING -j MASQUERADE
# 限制 IP 访问频率(每分钟最多 10 次)
iptables -I INPUT -p tcp --dport 22 -m limit --limit 10/min -j ACCEPT
3. ufw(Uncomplicated Firewall)配置
3.1 启用与禁用
sudo ufw enable # 启用防火墙
sudo ufw disable # 禁用防火墙
3.2 规则配置
# 开放端口(默认策略为拒绝)
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80,443/tcp # HTTP/HTTPS
# 拒绝特定 IP(如 192.168.1.100)
sudo ufw deny from 192.168.1.100 to any
# 删除规则
sudo ufw delete allow 22/tcp
# 查看规则
sudo ufw status numbered # 显示带序号的规则
3.3 高级配置
# 限制 SSH 最大连接数
sudo ufw limit 22/tcp # 默认:每分钟 60 次,突发 10 次
# 设置默认策略(优先级最低)
sudo ufw default deny incoming # 入站默认拒绝
sudo ufw default allow outgoing # 出站默认允许
4. firewalld 配置
4.1 启用与禁用
sudo systemctl start firewalld # 启动服务
sudo systemctl enable firewalld # 设置开机自启
sudo systemctl stop firewalld # 停止服务
4.2 查看与修改规则
# 查看所有活动区域规则
sudo firewall-cmd --list-all
# 添加开放端口(永久生效)
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
# 临时添加规则(重启后失效)
sudo firewall-cmd --zone=public --add-port=80/tcp
# 删除规则
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
4.3 高级功能
# 设置服务(预定义规则集)
sudo firewall-cmd --zone=public --add-service=http --permanent
# 添加富规则(复杂匹配)
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
# 启用 NAT 和路由
sudo firewall-cmd --zone=public --add-masquerade --permanent
5. 防火墙策略设计原则
- 最小化开放端口:仅开放必要服务(如 SSH、HTTP)。
- 默认拒绝策略:未明确允许的流量应默认拒绝。
- 分层防御:结合内核防火墙(iptables)和 service-level 防火墙(firewalld)。
- 日志记录:监控可疑流量(如
--log
选项)。 - 定期审计:清理过期规则,更新策略。
6. 实战场景
场景 1:Web 服务器防火墙配置
# 使用 ufw
sudo ufw allow 80,443/tcp
sudo ufw default deny incoming
sudo ufw enable
# 使用 firewalld
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
场景 2:SSH 安全加固
# 限制 IP 白名单(如允许 192.168.1.0/24 网段)
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
# 使用 fail2ban 防止暴力破解
sudo apt install fail2ban
sudo systemctl start fail2ban
7. 常见问题
-
规则未生效:
• 确保保存了规则(如iptables-save
或firewall-cmd --permanent
)。
• 检查是否有其他防火墙工具冲突(如同时运行iptables
和ufw
)。 -
端口转发失败:
• 确认 NAT 规则正确(iptables -t nat
)。
• 检查系统转发功能是否启用:sudo sysctl -w net.ipv4.ip_forward=1
-
服务无法访问:
• 确认防火墙区域(如public
)包含目标端口。
• 检查 SELinux/AppArmor 是否拦截流量(需额外配置)。
附录:工具选择建议
• 新手:优先使用 ufw
,命令简单直观。
• 生产环境:使用 firewalld
管理动态服务规则。
• 高级需求:结合 iptables
处理复杂 NAT 和流量限制。
通过合理配置防火墙,可以有效保护服务器安全,同时保持服务的可用性!如果有具体场景(如云服务器安全组配置),欢迎进一步讨论。 🔒