Linux 防火墙探秘:从 iptables 到 UFW 再到 firewalld

引言:网络安全的三剑客 🛡️

在互联网世界中,服务器就像数字堡垒,需要坚固的防线。Linux 防火墙就是我们忠实的守卫,今天让我们一起认识三位重要的守护者:iptablesUFWfirewalld

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

基础规则配置

# 允许SSH连接
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

# 允许Ping
iptables -A INPUT -p icmp -j ACCEPT

高级网络控制

# 允许特定IP段访问
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

# 拒绝特定IP
iptables -A INPUT -s 203.0.113.10 -j DROP

# 允许特定网络接口
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

# 限制连接速率(防DDoS)
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

# 允许UDP协议
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 拒绝特定端口
iptables -A INPUT -p tcp --dport 23 -j DROP # 拒绝Telnet

NAT 和端口转发 🌐

# 开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 源地址转换(SNAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 目的地址转换(DNAT)
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: "

持久化保存

# Ubuntu/Debian
iptables-save > /etc/iptables/rules.v4

# CentOS/RHEL
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 # 允许SSH
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow from 192.168.1.100 # 允许特定IP

# 高级用法
sudo ufw deny 21/tcp # 拒绝FTP
sudo ufw limit 22/tcp # 限制SSH连接数
sudo ufw delete allow 80 # 删除规则

# 应用配置文件
sudo ufw app list # 查看可用应用
sudo ufw allow 'Apache Full' # 允许Apache所有端口

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

高级功能

# 允许特定IP访问
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 # 检查状态

配置持久化

# 所有修改都要记得 --permanent 或重载
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

防火墙黄金法则 🏆

  1. SSH 优先:确保不会把自己锁在门外!
  2. 默认拒绝:从严格开始,逐步放宽
  3. 定期清理:删除不再需要的规则
  4. 备份配置:重大修改前先备份
  5. 测试验证:在生产环境前充分测试

结语:选择你的网络安全伙伴 🤝

  • 学习网络原理?选 iptables - 深入底层!
  • 追求简单高效?选 UFW - 轻松上手!
  • 需要动态管理?选 firewalld - 现代便捷!

记住:最好的防火墙不是最复杂的,而是最适合你需求的。现在,为你的数字堡垒选择最合适的守护者吧!


网络安全之路,始于一道好的防火墙。愿你的服务器固若金汤! 🔒