如何在 Rocky Linux 9 中配置端口过滤规则来限制网络访问?

问题浏览数Icon
8
问题创建时间Icon
2025-05-29 11:58:00
作者头像
slowfrost88

在Rocky Linux 9中配置端口过滤规则主要通过firewalld实现,结合nftables底层技术。我的实践经验分为四个阶段:

  1. 基础配置

    • 使用firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'创建白名单规则,遇到过规则未持久化问题,后发现必须加--permanent参数并执行--reload
    • 配置端口拒绝策略时,--remove-service=http比直接拒绝更安全,避免误封SSH管理端口。
  2. 高级防护

    • 针对DDoS防护,通过nft add rule ip filter INPUT tcp dport 80 meter ddos { tcp dport 80 limit rate 10/second } counter accept实现限流,但需要定期清理nftables计数器避免内存占用。
    • 使用firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --syn -m connlimit --connlimit-above 50 -j DROP防御SYN洪水攻击,需注意内核参数net.ipv4.tcp_max_syn_backlog的联动配置。
  3. 实践挑战

    • 规则优先级冲突:曾出现IP白名单规则被全局拒绝规则覆盖,通过firewall-cmd --list-rich-rules --zone=public --permanent检查顺序后,采用--priority=5参数显式定义优先级解决。
    • 容器网络穿透:当Docker容器暴露端口时,发现firewalld规则失效,需在docker.service配置中追加--iptables=false并手动配置nftables桥接规则。
  4. 验证与监控

    • 使用nft monitor trace实时跟踪规则命中情况,配合conntrack -L检查连接状态。
    • 关键业务端口采用双验证机制:先通过nc -zv测试基础连通性,再使用hping3 -S -p 80 目标IP模拟攻击验证防护效果。

特别注意:Rocky Linux 9默认启用SELinux,网络规则需与/etc/selinux/targeted/contexts/files/file_contexts.local中的端口上下文匹配,否则会导致规则生效但服务不可达。

更多回答

作者头像
hufeng77

在Rocky Linux 9中配置端口过滤规则建议通过firewalld或iptables实现。以下为常用方案:


方案一:firewalld(推荐)

  1. 启动服务:systemctl enable --now firewalld
  2. 限制特定IP访问端口(示例允许192.168.1.100访问SSH):
    firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.100 port port=22 protocol=tcp accept'
  3. 全局禁止端口(示例禁止3306端口):
    firewall-cmd --permanent --remove-port=3306/tcp
  4. 重载生效:firewall-cmd --reload

方案二:iptables

  1. 禁止所有IP访问端口(示例禁止80端口):
    iptables -A INPUT -p tcp --dport 80 -j DROP
  2. 允许指定IP段(示例允许10.0.0.0/24访问443):
    iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 443 -j ACCEPT
  3. 持久化规则:
    iptables-save > /etc/sysconfig/iptables
    systemctl enable iptables

验证命令

  • 查看生效规则:firewall-cmd --list-alliptables -L -n -v
  • 端口扫描测试:nmap -p 端口号 目标IP
作者头像
mistbird77

在 Rocky Linux 9 中,可使用 firewalld 配置端口过滤规则。例如,限制 SSH 端口仅允许特定 IP 访问:

  1. firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
  2. firewall-cmd --reload

延伸知识点:firewalld 的富规则(Rich Rules) 富规则允许复杂条件配置:

  • family:协议族(ipv4/ipv6)
  • source address:源 IP 或网段
  • port/protocol:端口及协议类型
  • action:accept/reject/drop 例:拒绝 192.168.1.0/24 以外的所有 HTTP 请求: firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source not address=192.168.1.0/24 service name=http drop' 使用 --list-rich-rules 查看规则,--remove-rich-rule 删除规则。