本文将介绍通过ip白名单和黑名单限制SSH访问的方法。
版本说明:下面的
/etc/hosts.allow、/etc/hosts.deny是历史 TCP Wrappers 用法,只适用于确实启用了 libwrap 的 sshd。上游 OpenSSH 从 6.7 起移除了这项支持,部分发行版曾保留补丁;不能仅凭 Linux 系统或文件存在就判断有效。现代系统请使用发行版防火墙,或按 sshd_config 的AllowUsers USER@HOST等配置限制 SSH 登录。
以下白名单和黑名单是两种独立策略,按需要选择一种。示例 IP 请替换成自己的地址。
- 白名单:只允许指定来源
在 /etc/hosts.allow 中配置允许的地址;单个 IP 与整个子网按需要选择:
1 | # 允许单个 IP |
在 /etc/hosts.deny 中拒绝其他来源:
1 | sshd:ALL:deny |
仅写 hosts.allow 不够:TCP Wrappers 在两个文件都未命中时默认允许。
- 黑名单:只拒绝指定来源
先确认 /etc/hosts.allow 没有允许这些来源的规则,再在 /etc/hosts.deny 中配置:
1 | # 拒绝单个 IP |
hosts.allow 优先于 hosts.deny,命中后就停止匹配,不能把同一地址同时写成允许和拒绝。
- 配置生效
支持 TCP Wrappers 的服务会在新连接时读取这些规则,一般不必为了修改这两个文件而重启 sshd。保持当前管理会话,并从第二个会话分别测试允许和拒绝的地址;确认有效后再退出。若 sshd 不支持 libwrap,重启也不会让这些文件生效。
- 参考链接