OpenSSH 应配置 ListenAddress 限定监听私有IP并配合防火墙,如 ListenAddress 192.168.10.5、ufw/firewalld 限制来源、云平台同步安全组,再通过 ss 和 telnet 验证生效。

OpenSSH 默认监听所有网络接口(0.0.0.0 和 ::),这在私有网络环境中可能带来不必要的暴露风险。合理配置 ListenAddress 并结合系统级网络策略,能精准控制 SSH 服务的可访问范围,兼顾安全性与运维便利性。
明确指定监听地址,缩小攻击面
在 /etc/ssh/sshd_config 中使用 ListenAddress 限制 SSH 守护进程只绑定到特定 IP,避免监听公网或无关网卡。例如:
- 仅允许内网管理网段访问:
ListenAddress 192.168.10.5(假设该 IP 属于管理 VLAN) - 若服务器有多个私有网卡(如 eth1=10.0.2.10,eth2=172.16.1.10),可逐行指定:
ListenAddress 10.0.2.10ListenAddress 172.16.1.10 - 禁用 IPv6 监听可加:
ListenAddress 0.0.0.0(显式启用 IPv4)并配合AddressFamily inet
修改后需执行 sudo systemctl reload sshd 生效,用 ss -tlnp | grep :22 验证实际监听地址。
配合防火墙强化私有网络边界
仅靠 ListenAddress 不足以替代网络层访问控制。建议在主机防火墙中补充规则,形成双重保障:
- Ubuntu/Debian 使用 ufw:
sudo ufw allow from 192.168.10.0/24 to any port 22 - CentOS/RHEL 使用 firewalld:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" accept' - 若使用云平台(如 AWS/Aliyun),务必同步配置安全组,只放行可信私有 CIDR 到 TCP 22
注意:防火墙规则应优先于 SSH 配置生效——即使误配了 ListenAddress 0.0.0.0,防火墙仍可兜底拦截非授权来源。
区分管理流量与业务流量的网卡绑定
在多网卡服务器上,推荐将 SSH 流量严格限定在专用管理网卡,与业务流量物理/逻辑隔离:
- 为管理网卡配置独立子网(如 10.100.0.0/24),不参与路由转发
- 在
sshd_config中仅写该网卡 IP:ListenAddress 10.100.0.5 - 操作系统层面禁用该网卡的 ICMP 响应和反向路径过滤(
net.ipv4.conf.eth0.rp_filter=0)以防干扰,但保持 SSH 连通性
这种设计可防止业务侧配置错误导致 SSH 意外暴露,也便于网络设备做基于端口或 VLAN 的精细化审计。
验证与日常检查要点
上线前和定期维护时,应确认以下几项是否一致:
- 运行中的 sshd 进程实际监听地址(
ss -tlnp | grep sshd)与sshd_config中的ListenAddress一致 - 防火墙规则未被临时关闭(
sudo ufw status或sudo firewall-cmd --list-all) - 从不同网络位置(如办公网、跳板机、业务子网)发起
telnet 192.168.10.5 22测试连通性,确保仅预期来源可达 - 检查
PermitRootLogin、PasswordAuthentication等关联安全选项是否符合私有网络策略(例如允许密钥登录但禁用密码)
不复杂但容易忽略:重启 sshd 后,旧连接不受影响,新连接才受新配置约束,因此验证必须用新连接测试。

















