我想使用 WHM/Cpanel 的主机访问控制界面来更改 hosts.allow 和 hosts.deny 中的某些设置。我想阻止除我们办公室的 IP 之外的所有 SSH 访问。
Daemon Access List Action Comment
sshd ALL EXCEPT x.x.x.x deny Deny access from all other IPs apart from ours
但我担心如果我们的 IP 发生变化(大约每周两次),会发生什么情况。我该如何重新编辑 hosts.allow / hosts.deny 文件?
答案1
- 为您的办公室 IP 订阅免费动态 DNS(大量)。
- 确保定期更新动态 DNS。
- 在主机拒绝添加:
sshd: ALL
- 在主机允许添加:
sshd: /path/to/allowed_ip.file
- 在你的主机的 crontab 上:
*/30 * * * * host your_office_ddns_domain | awk '{print $4}' > /path/to/allowed_ip.file
- 你完成了。
警告:在使用远程主机的 tcpd 包装器时,请确保始终保持实时 ssh 会话打开,因为如果您出现错误,将无法建立新的连接。
答案2
你不会。所以,如果你没有静态 IP 来限制访问,就不要通过 IP 来限制对服务器的访问。如果你禁用密码 SSH 访问,只允许通过公钥访问,那么你可以向全世界开放 SSH 访问,而不会有实际的泄露风险。更危险的是 WHM 网络控制面板,它就像一个漏洞百出的瑞士奶酪,很难保护——那是您想要重点关注安全的地方。
答案3
更新:请在下面写下答案。在ssh
协议中,客户端不提供主机名,因此tcp_wrappers
很可能基于客户端的 IP 地址反向名称,而这显然不受您控制。
总而言之,坦率地说,您不应该使用基于 IP 的安全性ssh
。您不能指望 IP 地址能够正确识别互联网上的任何人。
您应该使用提供强大安全性的 RSA 密钥对,并禁用基于密码的身份验证。
如果你真的需要额外的安全保护,可以再进一步:添加 VPN 或双因素身份验证(例如 尤比克,并不是说我对他们的业务感兴趣)。
我可能会说显而易见的事情:在中使用主机名而不是 IP /etc/hosts.{allow,deny}
。
然后,如果 IP 经常更改,您可以使用任何提供低 TTL 的 DNS 提供商。
但是如果名称解析中断,您就陷入困境了!因此,我强烈建议您还允许“跳转主机”:一台您可以访问的具有静态 IP 地址的机器。如果您的资源有限,可以使用朋友的服务器。
您将在 中找到有关这些文件的可能性的更多内容hosts_access(5)
。
请注意,Arch Linux 认为该hosts.{allow,deny}
技术 ( tcp_wrappers
) 已过时 (公告)这并不意味着它很快就会出现在更主流的发行版中,但前景看起来也并不光明。