找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3495

积分

0

好友

478

主题
发表于 11 小时前 | 查看: 1| 回复: 0

在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工具进行实际操作了。掌握以下命令,足以应对大部分日常防火墙配置需求。

  1. 查看当前默认区域
    查看系统默认使用的是哪个Zone。

    firewall-cmd --get-default-zone
  2. 设置默认区域
    将系统的默认区域设置为public

    firewall-cmd --set-default-zone=public
  3. 查看所有Zone的详细信息
    这条命令会列出所有预定义Zone及其当前的详细规则配置。

    firewall-cmd --list-all-zones
  4. 查看预定义服务名称
    firewalld允许通过服务名来管理规则(如http, ssh, ftp),而不是直接记忆端口号。这条命令可以查看所有支持的服务名称。

    firewall-cmd --get-services
  5. 在指定Zone中添加服务
    例如,在public区域中允许ftp服务的访问。

    firewall-cmd --add-service=ftp --zone=public

    添加后,可以查看public区域的规则来确认。

    firewall-cmd --list-all --zone=public
  6. 从指定Zone中移除服务
    如果不再需要允许ftp服务,可以将其移除。

    firewall-cmd --remove-service=ftp --zone=public
  7. 在指定Zone中添加端口
    更直接的方式是开放特定端口。例如,开放3306/tcp端口(MySQL默认端口)。

    firewall-cmd --add-port=3306/tcp --zone=public

    实用技巧:如果你不指定--zone参数,命令将作用于当前网络接口所属的默认区域。因此,更常见的简写方式是:

    firewall-cmd --add-port=3306/tcp
  8. 从指定Zone中移除端口
    关闭之前开放的端口。

    firewall-cmd --remove-port=3306/tcp --zone=public
  9. 将网络接口绑定到指定Zone
    将名为eno16777736的网卡绑定到public区域,该网卡上的流量将遵循public区域的规则。

    firewall-cmd --add-interface=eno16777736 --zone=public
  10. 将网络接口从指定Zone解绑
    解除网卡与区域的绑定关系。

    firewall-cmd --remove-interface=eno16777736 --zone=public
  11. 查看当前活动区域及其规则
    这是最常用的命令之一,用于快速检查当前区域(或默认区域)的完整配置状态,包括服务、端口、接口等。

    firewall-cmd --list-all

永久规则与运行时规则

上面演示的命令默认添加的都是运行时(Runtime)规则。这些规则在防火墙重启或系统重启后会丢失。要使规则持久化,必须使用--permanent参数。

  1. 添加永久生效的规则
    永久地开放3306/tcp端口。

    firewall-cmd --permanent --add-port=3306/tcp --zone=public

    注意:添加永久规则后,不会立即生效。它被保存到配置文件中,但当前的防火墙运行时状态并未改变。

  2. 重新加载防火墙以使永久规则生效
    执行重载操作,让所有已保存的永久规则立即应用到运行时环境中。这是应用永久规则的关键步骤。

    firewall-cmd --reload

    --reload操作会丢弃所有未保存的运行时规则,并重新加载所有永久规则。因此,一个最佳实践是:先测试运行时规则 (firewall-cmd --add-port=xxx),确认无误后,再将其转为永久规则 (firewall-cmd --permanent --add-port=xxx),最后执行--reload使其持久化生效。

通过以上这些基础而核心的命令组合,你已经可以有效地管理Linux服务器的防火墙访问策略,为你的服务构建起第一道可靠的安全防线。记住,在修改生产环境防火墙规则前,务必在测试环境验证,并确保有另外的访问途径(如控制台),以防误操作将自己锁在服务器之外。




上一篇:Shell脚本手动执行成功,Crontab定时却报错?环境变量差异详解
下一篇:Kotlin协程与Java虚拟线程高并发基准测试:百万请求下的性能对决
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-26 16:44 , Processed in 0.448898 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表