是否有“一步一步”或预装包来阻止来自美国以外任何地方的传入 ssh 尝试?
除了我或少数同事之外,没有人应该尝试通过 ssh 进入我家里的桌面;当然生活并没有那么美好,我的 /var/log/auth.log 充满了来自世界各地的 root 登录尝试......
一个复杂的解决方案是以某种方式获取 IP,通过脚本 HTTP 查找在网络上查找,然后决定采取何种行动...是否有一个按国家/地区阻止的固定脚本或包?
(注意:我已经安装了denyhosts,在尝试后可以很好地阻止,但是来自各种IP的尝试实在是太多了!)
相关问题: 游戏服务器 - 如何阻止来自其他国家的连接?
答案1
我认为不存在任何预先准备好的解决方案。由于各种原因,这些解决方案只能起到部分作用。
安装一个好的防火墙。(我使用 Shorewall 来构建我的防火墙。)
考虑使用端口敲击来保持端口关闭,除非需要。打开 ssh 到您知道需要使用它的地址。对于使用动态地址的用户,您可以使用 whois 来确定他们所处的块的可能大小。开放规则需要先于端口敲击规则。
考虑使用 fail2ban 来阻止扫描您的地址。
答案2
如果您或您的同事拥有静态 IP,则可以使用 /etc/hosts.allow 和 /etc/hosts.deny 文件。
例如在 /etc/hosts.allow 中,您可以输入...
SSHD: 13.45.75.78
对于 /etc/hosts.deny...
SSHD: ALL
这将拒绝除 13.45.74.78 之外的所有 ssh 访问。如果需要,您还可以使用通配符。
答案3
阻止 ssh 攻击的一个简单方法是更改你的 ssh端口。您还可以将某些 IP 列入白名单使用denyhost或验证失败。
答案4
我同意 yanokwa 的观点但想补充一点。
我同意使用备用 SSH 端口和白名单 IP。付出的努力很少,但收获很大。
问题在于,如果家庭用户没有静态 IP,而大多数 ISP 都不提供静态 IP,那么问题就来了。另一种方法是采用混合方法。您可以将端口 22 保留为标准端口,并将该端口的 IP 列入白名单,例如您自己的子网上的任何 IP 和一些“受信任”的 IP(如果他们真的在意,这些 IP 可能会被欺骗)。然后,使用 iptables 使用另一个端口(大于 1024 的端口)来监听并在内部转发到端口 22。
因此,端口 22 的攻击面明显较小,并且您仍然可以从任何 IP 进行连接,例如如果您需要从本地 wifi 热点进行连接。