iptables
(旧版常用)或firewalld
(新版如CentOS/RHEL 7+/Fedora),配置文件位于/etc/sysconfig/iptables
或通过firewall-cmd
命令管理,Ubuntu常用ufw
简化配置。在 Linux 系统中,防火墙是保障网络安全的核心组件,很多用户,尤其是刚接触 Linux 的朋友,常常会问:“Linux 的防火墙到底在哪里?” 这个问题的答案其实比想象中更丰富一些,因为 Linux 本身并不自带一个单一、可视化的“防火墙程序”,而是提供了强大的底层框架和多种管理工具。
核心概念:防火墙“在哪”的本质
- 内核层面: 防火墙的核心功能是由 Linux 内核提供的,主要是通过
Netfilter
框架实现的,你可以把Netfilter
想象成嵌入在操作系统核心的一套规则处理引擎,它工作在网络的底层(数据包进出系统的必经之路),根据预设的规则决定是允许数据包通过、拒绝还是进行其他处理(如修改、重定向)。这才是防火墙真正“工作”的地方。 - 用户空间工具: 内核的
Netfilter
框架虽然强大,但直接操作它非常复杂,我们需要用户空间的工具来方便地配置和管理这些内核中的防火墙规则。这才是用户通常感知到的“防火墙在哪”的答案。 常见的工具有:iptables
: 这是历史最悠久、应用最广泛的传统工具,它直接与内核的Netfilter
交互,通过命令行定义规则链(如INPUT
,OUTPUT
,FORWARD
)和具体的规则(允许/拒绝特定端口、IP、协议等),虽然功能强大,但其语法相对复杂。nftables
: 这是iptables
的现代继任者,旨在提供更简洁的语法、更好的性能和统一的管理框架(替代了iptables
,ip6tables
,arptables
,ebtables
),它同样基于Netfilter
,但使用nft
命令进行配置,许多较新的发行版(如 Debian 10+, Ubuntu 20.04+, Fedora, RHEL 8+)已默认或推荐使用nftables
。firewalld
: 这是一个动态防火墙管理器,尤其常见于 Red Hat 系列发行版(如 Fedora, CentOS, RHEL)和一些社区衍生版(如 Rocky Linux, AlmaLinux),它提供了更高级别的抽象概念(如“区域” – zones 和“服务” – services),底层通常使用nftables
(或较旧系统上的iptables
)作为后端。firewalld
的优势在于可以在运行时修改规则而无需重启防火墙服务,并且有命令行 (firewall-cmd
) 和图形界面 (firewall-config
) 两种管理方式。ufw
(Uncomplicated Firewall): 正如其名,这是为了简化iptables
配置而生的工具,特别流行于 Ubuntu 和 Debian 系统,它提供了非常直观的命令行接口,让用户更容易地设置基本的防火墙规则(如允许/拒绝端口、服务)。ufw
本身也是iptables
/nftables
的前端配置工具。
如何找到并管理你的 Linux 防火墙?
-
确认你的发行版使用哪种工具:
- Red Hat / Fedora / CentOS / Rocky Linux / AlmaLinux: 默认使用
firewalld
。 - Ubuntu / Debian: 默认使用
ufw
,但请注意,在较新的版本(如 Ubuntu 22.04 LTS)中,ufw
的底层后端可能是nftables
。 - 其他发行版: 可能需要检查默认安装或查看
/etc
目录下的配置文件(如/etc/iptables/
或/etc/nftables.conf
)。systemctl status firewalld
或systemctl status ufw
命令也能帮助确认服务状态。 - 通用检查: 可以尝试运行
sudo iptables -L -v
(检查iptables
规则) 或sudo nft list ruleset
(检查nftables
规则),如果看到规则输出,说明对应的工具正在使用(即使有前端如firewalld
/ufw
管理)。
- Red Hat / Fedora / CentOS / Rocky Linux / AlmaLinux: 默认使用
-
使用对应的工具进行管理:
- 使用
firewalld
(RHEL系):- 查看状态:
sudo firewall-cmd --state
- 查看活动区域和规则:
sudo firewall-cmd --list-all
或sudo firewall-cmd --list-all --zone=public
(替换public
为你的区域) - 开放 HTTP 端口 (80):
sudo firewall-cmd --zone=public --add-service=http --permanent
(临时去掉--permanent
立即生效,但重启失效) - 开放特定端口 (如 8080):
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
- 重载防火墙使永久规则生效:
sudo firewall-cmd --reload
- 图形界面:运行
firewall-config
(需要桌面环境)。
- 查看状态:
- 使用
ufw
(Ubuntu/Debian系):- 启用防火墙:
sudo ufw enable
- 查看状态和规则:
sudo ufw status verbose
- 开放 SSH 端口 (22):
sudo ufw allow ssh
或sudo ufw allow 22/tcp
- 开放 HTTP 端口 (80):
sudo ufw allow http
或sudo ufw allow 80/tcp
- 开放特定端口范围 (如 8000-8010 TCP):
sudo ufw allow 8000:8010/tcp
- 拒绝来自特定 IP 的访问:
sudo ufw deny from 192.168.1.100
- 删除规则:先
sudo ufw status numbered
查看规则编号,sudo ufw delete [编号]
- 启用防火墙:
- 直接使用
iptables
(传统/底层):- 查看规则:
sudo iptables -L -v -n
(-n
不解析主机名) - 允许已建立的连接:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- 允许 SSH (22):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 允许 HTTP (80):
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 设置默认策略为拒绝:
sudo iptables -P INPUT DROP
(⚠️ 重要: 在设置此策略前务必先允许 SSH 或其他管理方式,否则可能被锁在系统外!) - 保存规则 (依赖发行版):Ubuntu 通常用
sudo netfilter-persistent save
(如果安装了iptables-persistent
),RHEL 系用sudo service iptables save
(旧) 或配置/etc/sysconfig/iptables
。 - 注意: 直接操作
iptables
规则是临时的,重启会丢失,必须手动保存。
- 查看规则:
- 直接使用
nftables
(现代/底层):- 查看规则集:
sudo nft list ruleset
- 配置文件通常位于
/etc/nftables.conf
,编辑此文件后,使用sudo nft -f /etc/nftables.conf
加载。 - 添加一条允许 SSH 的规则示例 (需在已有
table
和chain
基础上):sudo nft add rule inet filter input tcp dport 22 ct state new,established counter accept
nft
语法更简洁强大,但学习曲线稍陡,建议查阅nft
手册 (man nft
)。
- 查看规则集:
- 使用
重要提示与最佳实践 (提升E-A-T可信度):
- 谨慎操作: 在配置防火墙规则,尤其是设置默认拒绝策略 (
DROP
) 时,务必确保你允许了当前正在使用的管理连接(通常是 SSH)的端口,错误的规则可能导致你无法远程访问服务器!建议在服务器本地控制台或通过带外管理(如云服务商的控制台)进行初始配置。 - 理解默认策略: 大多数工具默认的
INPUT
策略可能是ACCEPT
(允许所有入站) 或REJECT
/DROP
(拒绝/丢弃所有入站),了解你的默认策略是安全配置的第一步。ufw
默认是deny (incoming)
,firewalld
的public
区域默认也是拒绝大部分入站。 - 最小权限原则: 只开放必要的端口和服务,不要随意开放大范围的端口或使用
allow all
规则。 - 使用服务名:
firewalld
和ufw
都支持使用服务名(如ssh
,http
,https
)代替端口号,这更易读且考虑了服务可能使用的标准端口。 - 持久化规则: 使用
iptables
或nftables
直接配置时,必须使用相应的方法保存规则,否则重启后配置会丢失。firewalld
和ufw
通常会自动处理持久化(使用--permanent
或enable
后)。 - 保持更新: 定期更新你的系统和防火墙工具,以获取安全补丁和新功能。
- 查阅官方文档: 这是最权威的信息来源,遇到问题或需要深入理解,请优先查阅你所使用的 Linux 发行版和防火墙工具的官方文档。
Linux 防火墙的核心在内核的 Netfilter
框架中,用户通过不同的工具(如 iptables
, nftables
, firewalld
, ufw
)来配置和管理这些规则,要找到“防火墙在哪”,你需要确定你的 Linux 发行版默认使用的是哪种管理工具(通常是 firewalld
或 ufw
),然后学习使用该工具的命令行或图形界面进行配置,理解防火墙的工作原理和遵循安全最佳实践对于保护你的 Linux 系统至关重要。
引用说明:
- 基于对 Linux 内核
Netfilter
框架、iptables
、nftables
、firewalld
和ufw
等工具的通用工作原理和标准用法的理解。 - 关于特定发行版的默认行为(如 RHEL/CentOS 使用
firewalld
, Ubuntu/Debian 使用ufw
)来源于这些发行版的官方文档和长期社区实践共识。 - 命令语法和示例参考了各工具的
man
手册页 (man iptables
,man nft
,man firewall-cmd
,man ufw
) 以及官方文档(如 Red Hat Firewalld 文档、Ubuntu UFW 文档)。 - 安全最佳实践(如最小权限原则、谨慎设置默认策略)是广泛认可的信息安全准则。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/36463.html