以下是 linux 系统下防火墙配置的详细指南,涵盖 iptables
、ufw
、firewalld
等主流工具的使用方法和实战场景!
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 和流量限制。
通过合理配置防火墙,可以有效保护服务器安全,同时保持服务的可用性!
到此这篇关于linux系统下防火墙配置的详细指南的文章就介绍到这了,更多相关linux防火墙配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论