ssh本身能抵御mitm和重放攻击,但需强制使用sshv2、禁用弱kex/mac算法(如curve25519-sha256、hmac-sha2-512-etm)、启用stricthostkeychecking、关闭tcpforwarding/x11forwarding,并叠加系统级防护。

SSH 本身在设计上已能有效抵御中间人(MITM)和重放攻击,前提是正确使用 SSHv2 协议、合理配置密钥验证机制,并避免降级到不安全的旧模式。真正需要加固的,是防止协议被绕过、密钥被滥用或会话被劫持的薄弱环节。
强制使用 SSHv2 并禁用弱加密套件
SSHv1 协议存在已知设计缺陷,可被用于 MITM 攻击;而 SSHv2 支持密钥交换完整性校验(如 diffie-hellman-group-exchange-sha256)、会话密钥派生与消息认证码(MAC),天然防御重放。必须显式声明并收紧算法:
- 确保配置中包含 Protocol 2(OpenSSH 8.0+ 默认已禁用 v1,但显式设置更稳妥)
- 禁用不安全的密钥交换算法:在
/etc/ssh/sshd_config中添加
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 - 禁用弱 MAC 算法:MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
- 重启服务后可用
ssh -Q kex和ssh -Q mac在客户端验证支持列表
启用主机密钥严格校验与轮换机制
MITM 攻击成功的关键,是客户端未校验或忽略服务器主机密钥变更。加固重点在两端协同:
- 服务端确保 HostKey 指向强算法密钥文件(如
/etc/ssh/ssh_host_ed25519_key),避免仅保留 RSA 且密钥过期 - 客户端首次连接时,自动记录
~/.ssh/known_hosts;后续连接若指纹不匹配,OpenSSH 默认拒绝——切勿手动加-o StrictHostKeyChecking=no - 定期轮换主机密钥(如每年一次),并提前将新公钥分发至可信客户端,避免“密钥变更即中断”误判为攻击
关闭不必要功能,阻断会话劫持路径
重放攻击虽在协议层被 MAC 防御,但若开启某些高危功能,可能间接扩大攻击面:
- 禁用 AllowTcpForwarding no:防止攻击者通过 SSH 隧道代理其他连接,规避网络层检测
- 禁用 GatewayPorts no:阻止用户将本地端口映射到公网,减少横向渗透出口
- 禁用 X11Forwarding no:X11 协议本身无加密重放防护,且易泄露图形会话上下文
- 启用 UsePrivilegeSeparation yes(现代 OpenSSH 默认开启):隔离预认证进程,限制漏洞利用后权限提升范围
配合系统级防护增强会话可信度
单靠 SSH 配置不足以覆盖所有场景,需叠加操作系统层保障:
- 启用内核 TCP SYN Cookies(
net.ipv4.tcp_syncookies = 1)缓解 SYN 泛洪导致的连接耗尽,保障正常会话建立 - 配置 iptables/firewalld 限制 SSH 连接速率(如每分钟最多 3 个新建连接),抑制暴力试探引发的会话风暴
- 审计日志中关注
sshd的debug2级别输出(临时启用),确认密钥交换过程是否始终使用 etm(encrypt-then-mac)模式











