Linux系统本身自带了防火墙功能,用于管控进出系统的网络流量,过滤不符合规则的数据包,从而提升系统的网络安全性。常见的Linux防火墙实现方案包括iptables和nftables,大部分主流Linux发行版都会默认集成其中一种,或者提供对应的管理工具供用户使用。

Linux常见的防火墙实现
iptables
iptables是Linux系统中历史悠久的防火墙工具,基于内核的netfilter框架实现,通过定义规则链和规则表来管控网络流量。它支持对数据包的源地址、目标地址、端口、协议等多个维度进行过滤,是很多老版本Linux发行版的默认防火墙方案。
nftables
nftables是iptables的继任者,同样基于netfilter框架,但是提供了更简洁的语法和更高的性能,解决了iptables规则管理复杂、扩展性不足的问题。目前很多新的Linux发行版已经默认使用nftables作为防火墙底层实现,部分发行版还提供了兼容iptables语法的适配层。
不同发行版的防火墙管理工具
为了方便用户配置防火墙,不同Linux发行版提供了对应的上层管理工具,不需要用户直接操作底层的iptables或nftables命令:
- firewalld:主要用于RedHat系列发行版,比如CentOS、Rocky Linux、Fedora等,支持动态更新规则,不需要重启服务就能生效。
- ufw:全称为Uncomplicated Firewall,主要用于Debian系列发行版,比如Ubuntu、Debian等,语法简单,适合新手快速配置。
- 直接操作底层工具:如果用户使用的是精简版Linux系统,也可以直接使用iptables或nftables命令来配置规则。
基础配置示例
使用ufw配置防火墙(Ubuntu为例)
ufw的语法非常简洁,以下是常用的配置操作:
# 查看ufw状态 sudo ufw status # 启用ufw防火墙,启用后会默认拒绝所有入站流量,允许所有出站流量 sudo ufw enable # 允许SSH端口(默认22)的入站流量,避免启用防火墙后无法远程连接 sudo ufw allow 22/tcp # 允许80端口(HTTP)的入站流量 sudo ufw allow 80/tcp # 允许443端口(HTTPS)的入站流量 sudo ufw allow 443/tcp # 拒绝3306端口(MySQL)的入站流量 sudo ufw deny 3306/tcp # 删除允许22端口的规则 sudo ufw delete allow 22/tcp
使用firewalld配置防火墙(CentOS为例)
firewalld使用区域(zone)的概念来管理规则,默认区域是public,以下是常用操作:
# 查看firewalld状态 sudo systemctl status firewalld # 启动firewalld服务并设置开机自启 sudo systemctl start firewalld sudo systemctl enable firewalld # 查看当前默认区域 sudo firewall-cmd --get-default-zone # 允许HTTP服务(对应80端口)通过防火墙 sudo firewall-cmd --permanent --add-service=http # 允许HTTPS服务(对应443端口)通过防火墙 sudo firewall-cmd --permanent --add-service=https # 允许自定义端口3306的TCP流量 sudo firewall-cmd --permanent --add-port=3306/tcp # 重新加载规则使永久配置生效 sudo firewall-cmd --reload # 查看当前区域的开放规则 sudo firewall-cmd --list-all
直接使用iptables配置规则
如果需要直接操作iptables,以下是基础的规则配置示例:
# 查看当前iptables规则 sudo iptables -L -n -v # 允许本地回环接口的流量 sudo iptables -A INPUT -i lo -j ACCEPT # 允许已建立连接和相关连接的流量 sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许SSH端口22的TCP入站流量 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许80端口的TCP入站流量 sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 设置默认入站规则为拒绝所有流量 sudo iptables -P INPUT DROP # 保存iptables规则,不同发行版保存命令可能有差异,以下是Debian系的方式 sudo iptables-save > /etc/iptables/rules.v4
防火墙规则注意事项
配置Linux防火墙时需要注意以下几点:
- 配置远程服务器的防火墙时,一定要先允许SSH端口的流量,否则启用防火墙后会导致无法远程连接服务器。
- 修改规则后如果需要永久生效,需要根据使用的工具执行对应的保存操作,比如ufw的规则默认永久生效,firewalld需要加--permanent参数并reload,iptables需要手动保存规则到配置文件。
- 测试规则时可以先临时添加规则,确认没有问题后再保存为永久配置,避免错误规则导致服务不可用。
- 如果不需要防火墙功能,也可以关闭对应的服务,但是生产环境的服务器建议保持防火墙开启,只开放必要的端口。
Linux防火墙是系统网络安全的重要屏障,合理配置防火墙规则能够有效减少系统被攻击的风险,建议根据实际业务需求开放对应的端口和服务,避免不必要的端口暴露。