CentOS 防火墙配置:从入门到精通 – wiki基地

CentOS 防火墙配置:从入门到精通

CentOS 作为一款流行的服务器操作系统,安全性是至关重要的。防火墙是保护服务器免受恶意攻击的第一道防线。CentOS 7 及更高版本默认使用 firewalld 作为防火墙管理工具,它提供了比旧版 iptables 更为灵活和动态的配置方式。本文将带你从 firewalld 的基础概念入手,逐步深入到高级配置,助你打造坚固的服务器安全体系。

第一部分:firewalld 基础入门

  1. firewalld 简介:

    firewalld 是一个动态防火墙管理器,它允许你在运行时修改防火墙规则,而无需重启整个防火墙服务。这使得它非常适合动态变化的服务器环境。firewalld 使用区域 (zone) 的概念来管理规则,每个区域代表不同的信任级别。

  2. firewalld 的核心概念:

    • 区域 (Zone): 预定义的规则集,代表不同的信任级别。例如:

      • drop: 丢弃所有入站流量,不响应任何请求。
      • block: 拒绝所有入站流量,并返回 ICMP 错误消息。
      • public: 用于不受信任的公共网络,只允许少量入站连接。
      • external: 用于启用 NAT 的外部网络,用于路由器。
      • dmz: 用于隔离的 DMZ 区域,只允许特定服务。
      • work: 用于工作场所网络,信任网络中的其他计算机。
      • home: 用于家庭网络,信任网络中的其他计算机。
      • internal: 用于内部网络,信任网络中的其他计算机。
      • trusted: 允许所有流量。
    • 服务 (Service): 预定义的规则集,用于允许特定服务的流量通过防火墙。例如:http, https, ssh, ftp 等。

    • 端口 (Port): 指定允许或拒绝流量的 TCP 或 UDP 端口。

    • 协议 (Protocol): 指定使用的网络协议,如 TCP 或 UDP。

    • 源地址 (Source): 指定允许或拒绝流量的源 IP 地址或网络。

    • 富规则 (Rich Rule): 更复杂的规则,可以组合多个条件来匹配流量。

  3. firewalld 的基本操作:

    • 启动、停止和重启 firewalld

      bash
      systemctl start firewalld # 启动 firewalld
      systemctl stop firewalld # 停止 firewalld
      systemctl restart firewalld # 重启 firewalld
      systemctl status firewalld # 查看 firewalld 状态
      systemctl enable firewalld # 设置开机自启
      systemctl disable firewalld # 取消开机自启

    • 查看当前防火墙状态:

      bash
      firewall-cmd --state # 查看 firewalld 运行状态
      firewall-cmd --get-default-zone # 获取默认区域
      firewall-cmd --get-active-zones # 获取当前激活的区域

    • 切换默认区域:

      bash
      firewall-cmd --set-default-zone=public # 设置默认区域为 public

    • 查看区域的配置:

      bash
      firewall-cmd --list-all --zone=public # 查看 public 区域的所有配置
      firewall-cmd --list-services --zone=public # 查看 public 区域允许的服务
      firewall-cmd --list-ports --zone=public # 查看 public 区域允许的端口

第二部分:firewalld 常用配置

  1. 允许常用服务:

    • 允许 SSH 服务:

      bash
      firewall-cmd --add-service=ssh --permanent
      firewall-cmd --reload

      这条命令允许 SSH 服务通过防火墙。 --permanent 选项表示该规则永久生效,重启后依然有效。firewall-cmd --reload 命令重新加载防火墙配置,使新的规则生效。

    • 允许 HTTP 和 HTTPS 服务:

      bash
      firewall-cmd --add-service=http --permanent
      firewall-cmd --add-service=https --permanent
      firewall-cmd --reload

      这条命令允许 HTTP 和 HTTPS 服务通过防火墙。

    • 允许 FTP 服务:

      bash
      firewall-cmd --add-service=ftp --permanent
      firewall-cmd --reload

      这条命令允许 FTP 服务通过防火墙。注意:FTP服务通常需要配置端口转发,并考虑使用更安全的SFTP替代。

  2. 允许特定端口:

    • 允许 TCP 8080 端口:

      bash
      firewall-cmd --add-port=8080/tcp --permanent
      firewall-cmd --reload

    • 允许 UDP 53 端口:

      bash
      firewall-cmd --add-port=53/udp --permanent
      firewall-cmd --reload

  3. 允许特定源 IP 地址:

    • 允许来自 192.168.1.100 的所有流量:

      bash
      firewall-cmd --add-source=192.168.1.100 --permanent
      firewall-cmd --reload

    • 允许来自 192.168.1.0/24 网段的所有流量到 SSH 服务:

      bash
      firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent
      firewall-cmd --reload

  4. 删除规则:

    • 删除允许 SSH 服务的规则:

      bash
      firewall-cmd --remove-service=ssh --permanent
      firewall-cmd --reload

    • 删除允许 TCP 8080 端口的规则:

      bash
      firewall-cmd --remove-port=8080/tcp --permanent
      firewall-cmd --reload

    • 删除允许来自 192.168.1.100 的所有流量的规则:

      bash
      firewall-cmd --remove-source=192.168.1.100 --permanent
      firewall-cmd --reload

第三部分:firewalld 高级配置

  1. 使用富规则 (Rich Rules):

    富规则提供了更强大的流量控制能力,可以基于多个条件匹配流量。

    • 示例 1:允许来自 192.168.1.0/24 网段的所有流量到 TCP 80 端口:

      bash
      firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="80" protocol="tcp" accept' --permanent
      firewall-cmd --reload

    • 示例 2:拒绝来自 10.0.0.10 的所有流量:

      bash
      firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.10" reject' --permanent
      firewall-cmd --reload

    • 示例 3:限制 SSH 连接速率,每分钟最多 5 个连接:

      bash
      firewall-cmd --add-rich-rule='rule service name="ssh" limit value="5/m" accept' --permanent
      firewall-cmd --reload

  2. 端口转发 (Port Forwarding):

    端口转发可以将流量从一个端口转发到另一个端口,或者从一个 IP 地址转发到另一个 IP 地址。

    • 示例:将 80 端口的流量转发到 8080 端口:

      bash
      firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
      firewall-cmd --reload

    • 示例:将 80 端口的流量转发到 192.168.1.100 的 80 端口:

      bash
      firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100 --permanent
      firewall-cmd --reload

  3. 直接规则 (Direct Rules):

    直接规则允许你直接添加 iptables 规则,绕过 firewalld 的抽象层。这提供了最大的灵活性,但也需要你对 iptables 有深入的了解。 请谨慎使用直接规则,错误的配置可能导致防火墙失效甚至服务器无法访问。

    • 示例:允许来自 192.168.1.0/24 网段的所有流量到 TCP 22 端口:

      bash
      firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
      firewall-cmd --reload

    • 删除上面添加的直接规则:

      bash
      firewall-cmd --direct --permanent --remove-rule ipv4 filter INPUT 0 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
      firewall-cmd --reload

  4. 自定义服务 (Custom Service):

    firewalld 允许你创建自定义服务,以便更方便地管理特定的应用程序或服务所需的端口和协议。

    • 创建自定义服务文件:/etc/firewalld/services/ 目录下创建一个 .xml 文件,例如 my-app.xml,内容如下:

      xml
      <?xml version="1.0" encoding="utf-8"?>
      <service>
      <short>My Application</short>
      <description>This is my custom application service.</description>
      <port protocol="tcp" port="9000"/>
      <port protocol="udp" port="9001"/>
      </service>

    • 添加自定义服务到区域:

      bash
      firewall-cmd --add-service=my-app --permanent
      firewall-cmd --reload

第四部分:安全最佳实践

  1. 最小权限原则:

    只允许必要的服务和端口通过防火墙,禁止所有其他流量。

  2. 定期审查防火墙规则:

    定期检查防火墙规则,删除不再需要的规则,并确保规则仍然有效和安全。

  3. 使用强密码和密钥认证:

    使用强密码,并尽可能使用密钥认证来保护 SSH 服务。

  4. 启用日志记录:

    启用 firewalld 的日志记录,以便监控和分析防火墙活动。可以使用 auditdrsyslog 等工具来记录日志。

  5. 及时更新系统和软件:

    及时更新操作系统和软件,以修复安全漏洞。

  6. 使用入侵检测系统 (IDS):

    考虑使用入侵检测系统 (IDS) 来监控恶意活动。

  7. 限制不必要的网络服务:

    禁用或卸载不需要的网络服务,以减少攻击面。

总结

firewalld 是一个功能强大的防火墙管理工具,掌握其基本概念和配置方法对于保护 CentOS 服务器的安全至关重要。通过本文的学习,你应该能够配置 firewalld 来满足各种安全需求,并为你的服务器构建一道坚固的防线。记住,安全是一个持续的过程,需要不断学习和更新知识,才能应对不断变化的网络安全威胁。 始终保持警惕,并采取适当的安全措施,才能确保你的服务器的安全。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部