强制 OpenSSH(sshd)仅监听选定的多个 IP 地址
那么如何强制 sshd 监听多个 IP 地址呢?假设您总共有八个公共 IPv4 地址和一个私有 IP 地址。您希望将 sshd 仅绑定到一个选定的公共 IP(例如 70.5.xx.xx)和私有 IP(10.1.5.1)。幸运的是,有一个简单的方法可以使用 ListenAddress 选项来实现这一点。它指定 sshd 应该监听传入 ssh 连接的本地地址。如果您的配置文件中未设置此指令,sshd 将绑定到所有可用的 IP 地址。
让我们看看如何强制 OpenSSH (SSHD) 在 Linux、FreeBSD、NetBSD、OpenBSD 和类 Unix 系统上监听多个 IP 地址。
要查看当前设置,请使用grep 命令或egrep 命令,如下所示:
grep -w -i listenaddress /etc/ssh/sshd_config egrep -w -i 'listenaddress|port' /etc/ssh/sshd_config
如何强制 OpenSSH(sshd)仅监听选定的 IP 地址
打开 sshd_config 文件。例如,以 root 用户身份输入以下命令:
# vi /etc/ssh/sshd_config
然后,在每个新行上用 指定多个 ip 地址,因为允许ListenAddress多个选项。例如:保存并关闭文件。 最后,重新启动 sshd:
使用基于 systemd 的 Linux 用户尝试 systemctl 命令:
现在,使用 ss 命令或 netstat 命令验证 sshd 是否仅列出指定的 IP 地址:
输出:ListenAddress
ListenAddress 70.5.1.1
ListenAddress 10.1.5.1
# /etc/init.d/sshd restart
### RHEL/Fedora/Rocky/CentOS/AlmaLinux type: ###
$ sudo systemctl restart sshd.service
### Debian/Ubuntu Linux, type: ###
$ sudo systemctl restart ssh.service
# netstat -tulpn | grep :22
tcp 0 0 70.5.1.1:22 0.0.0.0:* LISTEN 26472/sshd tcp 0 0 10.1.5.1:22 0.0.0.0:* LISTEN 26472/sshd
因此,如果由于配置问题而无法使用公共 SSHD IP 地址,这很好。您始终可以通过连接到 KVM 或板载服务器 IPMI 卡的私有 IP 登录 ????
句法
语法如下:
ListenAddress hostname|address
ListenAddress hostname:port
ListenAddress IPv4_address:port
ListenAddress [hostname|address]:port
如果未指定端口,sshd 将监听指定的地址和所有端口选项。例如,sshd_config 中的默认端口为 TCP/22 端口:
port 22
我可以按如下方式将其覆盖为 TCP/2222:
ListenAddress 70.5.1.1:2222 ListenAddress 10.1.5.1:22
关于在 Linux 上处理 OpenVPN 或 Wireguard VPN 绑定的注意事项
SSHD 通常在网络服务之后但在 Wireguard 或 OpenVPN 服务之前启动。因此,如果您尝试设置ListenAddress为OpenVPN或Wireguard IP 地址,它将失败。您需要在 Linux 上设置 net.ipv4.ip_nonlocal_bind,它允许进程将 bind() 到非本地 IP 地址,这在这种情况下非常有用。例如:
然后为内部 VPN IP 添加 ListenAddress:
然后重新启动 ssh 服务,输入:
现在,它将在启动时在 Linux 上正常工作,而不会出现任何问题。有关更多信息,请参阅“ Linux 使用 net.ipv4.ip_nonlocal_bind 绑定不存在的 IP ”。
# echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.d/99-custom.conf
# sysctl -f /etc/sysctl.d/99-custom.conf
ListenAddress 10.8.0.1
sudo systemctl restart sshd.service
总结
我们可以指定 sshd 服务器应监听的本地 IP 地址(或主机名),以保证安全或其他原因。请确保您也使用 man 命令阅读了 sshd 文档:
man sshd_config
man systemctl
man service
- 20 个 OpenSSH 服务器最佳安全实践
- 如何在 Linux / Unix 系统上设置 SSH 密钥
- Linux / Unix 用户的 OpenSSH 配置文件示例
- 审计 Linux/Unix 上的 SSH 服务器和客户端配置
- 如何在 FreeBSD 上安装和升级 OpenSSH 服务器
- Ubuntu Linux 安装 OpenSSH 服务器
- 在 Alpine Linux 上安装 OpenSSH 服务器(包括 Docker)
- Debian Linux 安装 OpenSSH SSHD 服务器
- 配置 OpenSSH 以监听 IPv6 地址
- OpenSSH 服务器连接在几分钟不活动后断开
- 在 OpenSSH 身份验证之前显示横幅/消息
- 强制 OpenSSH(sshd)仅监听选定的多个 IP 地址
- OpenSSH 使用 ssh-keygen 命令更改密码
- 重复使用 SSH 连接以通过多路复用加速远程登录过程
- 重新启动 SSHD 服务器之前检查语法错误
- 更改 Linux 或 Unix 服务器上的 ssh 端口
- OpenSSH 拒绝或限制用户和组的访问
- Linux OpenSSH 服务器拒绝 root 用户访问/登录
- 在 Linux 上禁用 ssh 密码登录以提高安全性
- SSH ProxyCommand 示例:通过一台主机到达服务器
- OpenSSH 多路复用器可加速 OpenSSH 连接
- 在远程 Linux / UNIX 服务器中安装 / 附加 SSH 密钥 Authorized_keys
- 使用 ssh-copy-id 与监听不同端口的 OpenSSH 服务器配合使用