关键资产ssh访问须实现动态授权:首选sshd_config的match块条件准入,结合跳板机+ca签发带source_ip字段的短期证书,并联动fail2ban与ip信誉库实时决策,辅以verbose日志审计与90天留存。

关键核心资产的SSH访问不能依赖静态白名单或临时封禁,必须实现“来源IP可验证、权限可收敛、策略可演进”的动态授权。重点不是单纯限制IP,而是把IP作为可信身份链中的一环,结合上下文做实时判断。
用sshd_config的Match块做条件化准入
这是最贴近SSH协议原生能力的动态方式,支持基于源IP、用户、时间甚至命令的组合策略。
- 在/etc/ssh/sshd_config中配置带条件的Match Address块,例如:
- Match Address 192.168.10.0/24,203.0.113.45
- AllowUsers dev-admin ops-sre
- PermitTTY yes
- X11Forwarding no
- 再加一个兜底规则:DenyUsers *(放在所有Match块之后)
- 修改后执行systemctl restart sshd生效,不重启也能用sshd -t校验语法
通过跳板机出口统一+证书签发实现IP绑定
当终端用户IP不可控(如办公网NAT、移动办公),就不要直接信客户端IP,而是让所有流量经由可控出口,再由该出口代为签发短期证书。
- 用户先连可信跳板机(IP固定或段可控),完成多因素认证
- 跳板机调用内部CA服务,为本次会话签发带source_ip扩展字段的SSH证书,有效期设为2小时
- 目标服务器sshd_config启用TrustedUserCAKeys,只接受该CA签发、且source_ip匹配当前连接源的证书
- 这样即使密钥泄露,没有对应IP上下文也无法复用
联动fail2ban与IP信誉库做运行时决策
纯静态规则无法应对IP漂移或代理穿透,需引入行为反馈机制。
- 配置fail2ban监控/var/log/secure,对高频失败登录自动封禁IP
- 同时对接轻量级IP信誉服务(如本地部署的ip2location+自定义标记库),识别已知恶意ASN或云厂商高风险IP段
- 用iptables或nftables设置动态链:INPUT_ssh_dynamic,优先放行已通过跳板机认证的IP,再查信誉库,最后才走fail2ban封禁列表
- 规则更新无需重启服务,用nft -f /etc/nftables.d/ssh-dynamic.nft热加载
审计日志必须包含IP上下文并留存90天以上
动态授权的价值最终体现在可追溯性上。没有完整日志,所有策略都是纸面防线。
- 确保sshd_config开启LogLevel VERBOSE,记录每次登录的real IP(非X-Forwarded-For)
- 用auditd捕获execve系统调用,关联到具体SSH会话ID和源IP
- 日志集中投递至ELK或Loki,设置保留策略,并定期抽查IP段访问模式是否符合业务预期











