m0_72758500 2025-07-10 17:01 采纳率: 71.4%
浏览 6
已结题

centos8操作系统如何通过firewall配置访问策略?

centos8操作系统如何通过firewall配置访问策略?说白了就是如何添加白名单。我自己试了试,只允许特定IP段访问特定端口无法起到阻断作用。不是说有默认阻断功能么?为什么特定IP段外的IP还是可以访问。但是我再添加一个drop的富规则阻断掉一个C段或者阻断B段,设备本身的Ip也会被阻断导致无法连接。到底如何才能做好一个完美的访问控制?

2025-07-10 18:43 从以下回答中试了试,还是不行。
发现几个问题需要专家们解答一下:
问题1:把公开service里面的SSH服务和公开ports里面的22端口全部关掉后,添加富规则允许特定IP访问22端口为什么不能登录?
问题2:public的默认策略为defult=reject。那如果改成accept,并在富规则里添加阻断全部IP访问,按理来说应该可以登录,为何依旧无法登录?

  • 写回答

7条回答 默认 最新

  • 檀越@新空间 2025-07-10 17:02
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在 CentOS 8 系统中,firewalld 是默认的防火墙管理工具,它通过 firewall-cmd 命令进行配置。你提到的问题是:如何通过 firewall 配置访问策略(白名单),并且希望只允许特定 IP 段访问特定端口,同时阻止其他 IP 的访问


    核心问题分析

    1. 默认策略firewalld 默认是 允许所有流量,除非你明确设置了 拒绝或丢弃规则
    2. 富规则(Rich Rules):用于更精细的控制,比如基于源 IP、端口等。
    3. 区域(Zone)设置:不同的网络接口可以绑定到不同的区域(如 public、internal),每个区域有不同的默认策略。

    实现“白名单”访问控制的步骤

    1. 设置默认区域为 public(或其他需要的区域)

    sudo firewall-cmd --set-default-zone=public
    

    注意:如果你使用的是 internal 区域,可能默认允许更多流量,建议使用 public 并手动设置规则。


    2. 查看当前区域的默认策略

    sudo firewall-cmd --zone=public --list-all
    

    如果看到 policy: accept,说明默认是允许所有流量。你需要修改为 dropreject


    3. 修改区域的默认策略为 drop(即默认拒绝所有流量)

    sudo firewall-cmd --permanent --zone=public --set-policy=drop
    sudo firewall-cmd --reload
    

    重要提示:这个操作会拒绝所有流量,包括你自己的连接。务必确保你有其他方式(如 SSH 通道)可以重新连接


    4. 添加允许特定 IP 段访问的规则

    假设你要允许 192.168.1.0/24 这个网段访问 22 端口(SSH):

    sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
    

    加粗重点

    • family="ipv4":指定 IPv4
    • source address="192.168.1.0/24":允许的 IP 段
    • port port="22":要开放的端口
    • protocol="tcp":协议类型
    • accept:允许该流量

    5. 添加拒绝其他 IP 访问的规则(可选)

    如果你想显式地拒绝其他 IP 的访问(虽然默认已经拒绝,但为了保险):

    sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source not address="192.168.1.0/24" port port="22" protocol="tcp" drop'
    

    加粗重点

    • source not address="192.168.1.0/24":排除该 IP 段
    • drop:丢弃流量,不响应

    6. 重新加载防火墙配置

    sudo firewall-cmd --reload
    

    完整解决方案步骤(有序列表)

    1. 设置默认区域

      sudo firewall-cmd --set-default-zone=public
      
    2. 查看当前区域配置

      sudo firewall-cmd --zone=public --list-all
      
    3. 修改区域默认策略为 drop

      sudo firewall-cmd --permanent --zone=public --set-policy=drop
      sudo firewall-cmd --reload
      
    4. 添加允许特定 IP 段访问的规则

      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
      
    5. 添加拒绝其他 IP 的规则(可选)

      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source not address="192.168.1.0/24" port port="22" protocol="tcp" drop'
      
    6. 重新加载防火墙配置

      sudo firewall-cmd --reload
      

    常见问题解答

    ❓为什么我设置了白名单,其他 IP 还能访问?

    • 原因firewalld 默认是 accept,没有设置 drop 策略。即使你设置了允许规则,如果没有设置默认拒绝,其他 IP 也会被允许。
    • 解决方法:将区域默认策略改为 drop,并添加允许规则。

    ❓设置 drop 后,我的 IP 也被阻断了怎么办?

    • 原因:你的 IP 不在允许的 IP 段内,导致被 drop 规则拦截。
    • 解决方法
      • 确保你的 IP 在允许的 IP 段中。
      • 使用 --add-source 来允许你的 IP。
      • 或者临时切换到 trusted 区域(仅限内部网络)。

    示例:允许一个 IP 和一个网段访问 22 端口

    sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept'
    sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
    sudo firewall-cmd --reload
    

    总结

    | 步骤 | 内容 | |------|------| | 1 | 设置默认区域为 public | | 2 | 查看区域配置 | | 3 | 设置默认策略为 drop | | 4 | 添加允许特定 IP 段的规则 | | 5 | 可选:添加拒绝其他 IP 的规则 | | 6 | 重新加载防火墙配置 |


    如果你还有其他问题,比如如何配置 HTTP、HTTPS、MySQL 等服务的白名单,也可以继续提问,我可以提供对应的配置命令。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月10日
  • 已采纳回答 7月10日
  • 修改了问题 7月10日
  • 修改了问题 7月10日
  • 展开全部