Linux 防火墙探秘:从 iptables 到 UFW 再到 firewalld
引言:网络安全的三剑客 🛡️
在互联网世界中,服务器就像数字堡垒,需要坚固的防线。Linux 防火墙就是我们忠实的守卫,今天让我们一起认识三位重要的守护者:iptables、UFW 和 firewalld。
iptables:防火墙界的传奇老将
什么是 iptables?
iptables 是 Linux 内核的防火墙框架,由内核空间的 netfilter 和用户空间的 iptables 组成。
想象一下:netfilter 是机场的安检架构,iptables 就是安检人员的操作手册!
iptables 核心概念速览
| 组件 |
作用 |
示例 |
| 表(Tables) |
功能分类 |
filter, nat, mangle |
| 链(Chains) |
检查点 |
INPUT, OUTPUT, FORWARD |
| 规则(Rules) |
具体指令 |
允许/拒绝特定流量 |
iptables 超全命令宝典 🗂️
基础查看命令
iptables -L -n -v
iptables -L INPUT -n -v
iptables -L -n
iptables -L --line-numbers
|
连接管理
iptables -F
iptables -F INPUT
iptables -X
iptables -Z
|
策略设置
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
|
基础规则配置
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
|
高级网络控制
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -s 203.0.113.10 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
|
端口和协议控制
iptables -A INPUT -p tcp --dport 8000:8080 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 23 -j DROP
|
NAT 和端口转发 🌐
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
|
日志记录
iptables -A INPUT -p tcp --dport 23 -j LOG --log-prefix "TELNET DROP: "
iptables -A INPUT -p tcp --dport 23 -m limit --limit 1/minute -j LOG --log-prefix "TELNET DROP: "
|
持久化保存
iptables-save > /etc/iptables/rules.v4
service iptables save
iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/iptables/rules.v4
|
UFW:简单就是美 ✨
什么是 UFW?
UFW(Uncomplicated Firewall)是 iptables 的人性化外壳,就像给复杂的发动机装上了简单的方向盘!
UFW 核心命令集
sudo ufw enable
sudo ufw status verbose
sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow from 192.168.1.100
sudo ufw deny 21/tcp sudo ufw limit 22/tcp sudo ufw delete allow 80
sudo ufw app list sudo ufw allow 'Apache Full'
|
firewalld:新时代的动态防火墙 🚀
什么是 firewalld?
firewalld 是 Red Hat 系列发行版的动态防火墙管理器,它的特色是:
- 运行时配置:无需重启即可生效
- 区域概念:根据不同场景切换安全级别
- 服务管理:预定义常见服务配置
- 动态更新:规则实时生效
firewalld 核心概念
区域(Zones)—— 安全等级随心换
| 区域 |
信任级别 |
适用场景 |
| drop |
最高 |
丢弃所有传入连接 |
| block |
很高 |
拒绝所有传入连接 |
| public |
中等 |
公共场所(默认) |
| internal |
较低 |
内部网络 |
| trusted |
最低 |
完全信任的网络 |
服务(Services)—— 开箱即用的配置
firewalld 预定义了常见服务的端口配置,让配置变得简单!
firewalld 实战命令集 🔥
基础状态管理
firewall-cmd --state systemctl status firewalld
sudo systemctl start firewalld sudo systemctl stop firewalld sudo systemctl restart firewalld
sudo systemctl enable firewalld
|
区域管理
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
sudo firewall-cmd --set-default-zone=internal
firewall-cmd --zone=public --list-all
|
服务管理(最常用!)
firewall-cmd --get-services
sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=ssh
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --remove-service=ftp
sudo firewall-cmd --reload
|
端口管理
sudo firewall-cmd --add-port=8080/tcp sudo firewall-cmd --add-port=8000-8080/tcp
sudo firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --list-ports
|
高级功能
sudo firewall-cmd --add-source=192.168.1.100
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
sudo firewall-cmd --panic-on sudo firewall-cmd --panic-off sudo firewall-cmd --query-panic
|
配置持久化
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --reload
|
三大神器对比:谁是你的菜? 🤔
| 特性 |
iptables |
UFW |
firewalld |
| 难度等级 |
🚀🚀🚀 专家 |
🚀 新手友好 |
🚀🚀 中级 |
| 控制精度 |
原子级 |
应用级 |
服务级 |
| 动态更新 |
需要重启 |
实时生效 |
实时生效 |
| 配置方式 |
命令/文件 |
简化命令 |
区域/服务 |
| 最佳场景 |
复杂网络、学习 |
桌面、简单服务器 |
服务器、企业 |
性能真相 💨
三者底层都是 netfilter,所以性能差异可以忽略不计!选择的关键在于:易用性 vs 控制力
实战演练:Web服务器防护配置 🌐
场景需求:
- ✅ 允许 SSH 连接
- ✅ 允许 HTTP/HTTPS
- ✅ 允许管理 IP(192.168.1.100)
- ✅ 拒绝其他所有连接
方案一:UFW 极简版
sudo ufw enable sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow from 192.168.1.100
|
方案二:iptables 精细版
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -s 192.168.1.100 -j ACCEPT iptables-save > /etc/iptables/rules.v4
|
方案三:firewalld 现代版
sudo firewall-cmd --set-default-zone=public sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --add-source=192.168.1.100 --permanent sudo firewall-cmd --reload
|
防火墙黄金法则 🏆
- SSH 优先:确保不会把自己锁在门外!
- 默认拒绝:从严格开始,逐步放宽
- 定期清理:删除不再需要的规则
- 备份配置:重大修改前先备份
- 测试验证:在生产环境前充分测试
结语:选择你的网络安全伙伴 🤝
- 学习网络原理?选 iptables - 深入底层!
- 追求简单高效?选 UFW - 轻松上手!
- 需要动态管理?选 firewalld - 现代便捷!
记住:最好的防火墙不是最复杂的,而是最适合你需求的。现在,为你的数字堡垒选择最合适的守护者吧!
网络安全之路,始于一道好的防火墙。愿你的服务器固若金汤! 🔒