我想减less在Linux系统上成功的ssh攻击的可能性。 唯一的端口是22(我使用端口转发的一切),当然,我确信ssh只接受基于密钥对的login(无密码)。
失败的sshlogin尝试的数量( last -f /var/log/btmp
)是相当大的(因为任何开放22端口的人都应该这样做),所以在过去的2年中,我一直依靠变化af基于iptables的解决scheme经常提到阻止ssh攻击,例如, 数百个失败的sshlogin 。
这种scheme的一个令人讨厌的缺点是它限制了每个时间段从一个IP地址的新连接的数量,不pipe这个IP的先前连接是否成功以及它们是以同一个用户login还是不。 设想一个脚本,其中包含六十个来自国外的用来更新该服务器上各个区域的rsync
命令:它通常会遇到“新的连接限制”,并在中间的某个地方出现故障。 如果路由器后面的几个用户(显示为相同的IP地址)同时连接到我的服务器上,情况也是如此。
所以,我想知道,如果不诉诸parsing/var/log
文件 ,有可能实现以下策略与iptables
:
奖励积分:
user@ip
而不是所有人@ip
。 并试图遏制僵尸networking攻击:
在不分析日志文件的情况下,您无法知道sshlogin尝试是否成功。 幸运的是,你不必自己parsing这些日志文件。 fail2ban可以为你做这个。 我经常在3次失败的login尝试之后监禁一周的IP。
首先, 没有 ssh
监听port 22
以减less自动扫描器发现端口的机会。
还可以使用psad
自动阻止扫描您的计算机的主机达到可configuration的时间(默认为1小时)。
一个非常简单的解决方法是租一个64 or 128 meg
openvz
容器并configurationopenvpn
这样你就有一个fixed ip address
,然后将你的iptables
规则限制在你希望保护的主机上的--source vpn.ip.address
。
更好的解决scheme是用fwknop
完全隐藏你的ssh
端口。 那么当你的ssh
端口closures之前,不需要运行fail2ban
,直到你从fwknop-client
发送一个gpg
签名和encryption的数据包,这将打开你的防火墙一个可configuration的时间(默认30秒)。 你也可以configurationfwknop
只接受某些ip地址(比如你的vpn
)。
我在这里有一些相当广泛的笔记 fwknop
。
如果你认真对待ssh
安全,你也应该使用ed25519
键。 更多的注意事项在openssh
使用安全密码 。 另一个不错的select是tinyssh
,它不依赖于openssl
,默认情况下是安全的 。
这里提到的所有软件都存在于Alpine Linux中 ,它也受益于Parse在Grsecurity内核中的地址空间布局随机化 。