在Linux服务器的日常管理与安全加固中,防火墙是不可或缺的一环。firewalld作为CentOS/RHEL 7及之后版本,以及许多其他现代Linux发行版默认的动态防火墙管理工具,因其强大的功能和灵活的zone(区域)概念而广受欢迎。它相比传统的iptables,提供了更高级的配置抽象和运行时动态修改规则的能力。
理解 firewalld 的核心:Zone(区域)
firewalld通过Zone来管理网络连接的信任级别。每个Zone都预设了一组规则,你可以将不同的网络接口或来源IP分配到不同的Zone,从而实现精细化的访问控制。
常见的预定义Zone包括:
- trusted:信任区域。允许所有网络连接,是最宽松的策略。
- public:公共区域。这是新安装系统后网络接口的默认区域。它通常只允许预设的少量服务(如SSH)的入站连接。一个关键特性是:当本机主动访问外部主机后,那台主机对应的连接才被允许返回,否则默认拒绝,这提供了一定的状态检测防护。
- external:外部区域。这个区域设计用于路由器或网关场景。通过此区域转发的数据包通常会进行SNAT(源地址转换),将内网地址映射为防火墙的出站IP地址,实现网络地址转换功能。
理解这些Zone是进行有效配置的第一步。
firewalld 常规操作命令详解
掌握了Zone的概念后,我们就可以开始使用firewall-cmd工具进行实际操作了。掌握以下命令,足以应对大部分日常防火墙配置需求。
-
查看当前默认区域
查看系统默认使用的是哪个Zone。
firewall-cmd --get-default-zone
-
设置默认区域
将系统的默认区域设置为public。
firewall-cmd --set-default-zone=public
-
查看所有Zone的详细信息
这条命令会列出所有预定义Zone及其当前的详细规则配置。
firewall-cmd --list-all-zones
-
查看预定义服务名称
firewalld允许通过服务名来管理规则(如http, ssh, ftp),而不是直接记忆端口号。这条命令可以查看所有支持的服务名称。
firewall-cmd --get-services
-
在指定Zone中添加服务
例如,在public区域中允许ftp服务的访问。
firewall-cmd --add-service=ftp --zone=public
添加后,可以查看public区域的规则来确认。
firewall-cmd --list-all --zone=public
-
从指定Zone中移除服务
如果不再需要允许ftp服务,可以将其移除。
firewall-cmd --remove-service=ftp --zone=public
-
在指定Zone中添加端口
更直接的方式是开放特定端口。例如,开放3306/tcp端口(MySQL默认端口)。
firewall-cmd --add-port=3306/tcp --zone=public
实用技巧:如果你不指定--zone参数,命令将作用于当前网络接口所属的默认区域。因此,更常见的简写方式是:
firewall-cmd --add-port=3306/tcp
-
从指定Zone中移除端口
关闭之前开放的端口。
firewall-cmd --remove-port=3306/tcp --zone=public
-
将网络接口绑定到指定Zone
将名为eno16777736的网卡绑定到public区域,该网卡上的流量将遵循public区域的规则。
firewall-cmd --add-interface=eno16777736 --zone=public
-
将网络接口从指定Zone解绑
解除网卡与区域的绑定关系。
firewall-cmd --remove-interface=eno16777736 --zone=public
-
查看当前活动区域及其规则
这是最常用的命令之一,用于快速检查当前区域(或默认区域)的完整配置状态,包括服务、端口、接口等。
firewall-cmd --list-all
永久规则与运行时规则
上面演示的命令默认添加的都是运行时(Runtime)规则。这些规则在防火墙重启或系统重启后会丢失。要使规则持久化,必须使用--permanent参数。
-
添加永久生效的规则
永久地开放3306/tcp端口。
firewall-cmd --permanent --add-port=3306/tcp --zone=public
注意:添加永久规则后,不会立即生效。它被保存到配置文件中,但当前的防火墙运行时状态并未改变。
-
重新加载防火墙以使永久规则生效
执行重载操作,让所有已保存的永久规则立即应用到运行时环境中。这是应用永久规则的关键步骤。
firewall-cmd --reload
--reload操作会丢弃所有未保存的运行时规则,并重新加载所有永久规则。因此,一个最佳实践是:先测试运行时规则 (firewall-cmd --add-port=xxx),确认无误后,再将其转为永久规则 (firewall-cmd --permanent --add-port=xxx),最后执行--reload使其持久化生效。
通过以上这些基础而核心的命令组合,你已经可以有效地管理Linux服务器的防火墙访问策略,为你的服务构建起第一道可靠的安全防线。记住,在修改生产环境防火墙规则前,务必在测试环境验证,并确保有另外的访问途径(如控制台),以防误操作将自己锁在服务器之外。
|