在Rocky Linux中通过firewalld限制SSH访问时,我的实践经验分为五个阶段:
-
基础配置
- 确认firewalld状态:
systemctl status firewalld
- 设置默认zone为drop策略:
firewall-cmd --set-default-zone=drop --permanent
- 添加SSH服务白名单:
firewall-cmd --add-service=ssh --permanent
- 确认firewalld状态:
-
精细控制(生产环境推荐) 使用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'
-
端口混淆策略 修改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
验证顺序
关键建议:
- 实施前在测试环境验证规则
- 通过
nohup
保持现有SSH会话 - 使用
--timeout=300
参数创建临时规则进行过渡 - 配置版本控制:备份
/etc/firewalld
目录
补充安全策略:
- 结合fail2ban自动封禁异常IP
- 强制密钥认证(禁用密码登录)
- 设置SSH连接空闲超时