如何通过 firewalld 在 Rocky Linux 中设置防火墙规则来限制 SSH 访问?

问题浏览数Icon
15
问题创建时间Icon
2025-05-16 11:58:00
作者头像
starflow88

是否考虑过使用TCP Wrappers来限制SSH访问,通过简单的hosts.allow/hosts.deny文件实现IP级控制?

更多回答

作者头像
shanguang77

在Rocky Linux中通过firewalld限制SSH访问的核心步骤如下:

  1. 启用firewalldsystemctl enable --now firewalld
  2. 验证默认区域firewall-cmd --get-default-zone(通常为public)
  3. 添加富规则限制IP
    firewall-cmd --permanent --zone=public \
    --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
  4. 禁止其他访问
    firewall-cmd --permanent --zone=public \
    --add-rich-rule='rule family="ipv4" service name="ssh" reject'
  5. 重载配置firewall-cmd --reload

关键注意:

  • 执行顺序必须先允许再拒绝,富规则按添加顺序生效
  • 使用--permanent保证重启后生效,但需配合--reload立即应用
  • 可通过firewall-cmd --list-all-zones验证规则层次结构
  • 强烈建议在物理控制台操作,避免规则错误导致SSH连接中断
作者头像
firestone77

在Rocky Linux中通过firewalld限制SSH访问时,我的实践经验分为五个阶段:

  1. 基础配置

    • 确认firewalld状态:systemctl status firewalld
    • 设置默认zone为drop策略:firewall-cmd --set-default-zone=drop --permanent
    • 添加SSH服务白名单:firewall-cmd --add-service=ssh --permanent
  2. 精细控制(生产环境推荐) 使用rich规则实现IP段限制:

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

    同时添加拒绝规则:

    firewall-cmd --permanent --zone=public \
    --add-rich-rule='rule family="ipv4" service name="ssh" reject'
  3. 端口混淆策略 修改SSH默认端口后需同步更新规则:

    firewall-cmd --permanent --remove-service=ssh
    firewall-cmd --permanent --add-port=59222/tcp

实践挑战:

  • 混合环境冲突:当存在多张业务网卡时,需通过--zone=明确指定接口归属
  • VPN穿透问题:通过OpenVPN连接的用户需额外添加10.8.0.0/24到白名单
  • 规则优先级:确保accept规则在reject之前,可通过firewall-cmd --list-rich-rules验证顺序

关键建议:

  1. 实施前在测试环境验证规则
  2. 通过nohup保持现有SSH会话
  3. 使用--timeout=300参数创建临时规则进行过渡
  4. 配置版本控制:备份/etc/firewalld目录

补充安全策略:

  • 结合fail2ban自动封禁异常IP
  • 强制密钥认证(禁用密码登录)
  • 设置SSH连接空闲超时
作者头像
earwind999

作为客户技术经理,建议通过以下步骤使用firewalld限制SSH访问:1. 启用并启动firewalld:systemctl enable --now firewalld;2. 添加IP白名单规则:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'(替换为实际IP段);3. 拒绝其他地址:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" reject';4. 重载配置:firewall-cmd --reload。注意:操作前需验证白名单IP,避免锁死管理权限。对于生产环境,建议结合跳板机或VPN二次验证,遵循最小权限原则。