我有一个小SVN服务器,老戴尔optiplex运行debian。 我对服务器没有那么高的要求,因为它只是一个小小的SVN服务器…但是希望它是安全的。
我只是将我的服务器更新为更新,更好的optiplex,并开始寻找旧服务器。 遇到问题后我把它拿下来。 当我检查日志时,它充满了蛮力的尝试,并有人成功地进入我的机器。 这个人创造了一些额外的卷叫“knarkgosse”与两个“根”和“交换1”或什么东西。 不知道他们为什么,他们做了什么,但是确实要防止这种情况再次发生。 我觉得这有点奇怪,不过因为我几个月左右换了口令,密码总是随机的字母和数字拼在一起…不容易暴力破解。
我知道我可以防止rootlogin,并使用sudoers …并更改SSH端口,但我还能做什么?
所以我有几个问题:
如何在X次错误尝试后阻止login5分钟 或每个不正确的尝试后慢下来?
是否有某种服务器可以连接的中央黑名单? 一个黑名单,跟踪IP地址是“不安全的”,永远不应该被授予访问权限?
我还能做些什么来将安全措施应用于我的服务器?
就像我之前说的,我正在用Apache(www-data用户问题?),svn,mysql,php,phpmyadmin,hudson运行Debian 5。 它在80,443,8080,8180,23和22端口转发的家庭networking上。
Fail2ban和Port Knocking应该满足大部分的需求。
还build议更改您的SSH端口并仅允许基于密钥的身份validation。
可以说,在增加额外的安全措施方面,你可能会达到收益递减点,但是再一次,由你来决定什么时候你“足够安全”。
禁止rootlogin也是一个好主意。
没有安全密码和密钥authentication的替代品。 话虽如此, Fail2Ban是禁止尝试多次validation的用户IP的绝佳工具。 它也可以作为大多数发行版的预build套件。 被警告,你可以不小心让自己被禁止,所以要确保你有一个恢复白名单的IP太简单的控制台访问…
Fail2Ban有几个很好的例子来说明如何configuration你所要求的所有东西……但是,它并没有一个通用的不良地址存储库。 我不认为有一个这样的存储库任何地方,由于获得另一个IP(dhcp更新/僵尸networking攻击/等…)的容易。 我也会禁用通过SSHlogin,使用普通的“pipe理员”types的用户名(root / admin / administrator / sysop / etc ..),因为这是最常见的。
我已经停止暴力攻击:
这里提供了很多好的build议。 我恭敬地build议,三件事情应该使这个相对安全:
UsePAM no
希望这可以帮助。
我一直是CSF / LFD的忠实粉丝,它可以阻止尝试暴力破解,端口扫描和其他一些选项的人的IP地址。 它基本上是一个巨大的perl封装的IP表,但configuration文件不难看,文档也不错。
你也可以看看sshguard。 我没有用过,但是我听说过好东西。
资料来源:
http://isc.sans.edu/diary.html?storyid=9370
http://www.sshguard.net/docs/faqs/
“Sshguard监视服务器的日志logging活动,当日志表明有人正在做一件坏事时,sshguard通过阻止他/她一点点做出反应.Sshguard有一个敏锐的个性:当一个顽皮的tyke坚持干扰你的主机,它会作出反应坚定而坚定“。
我有一个SSH服务器连接到互联网的默认端口,并没有遇到过的问题..
希望它有帮助!
有一个更好的方法来做到这一点,使用fail2ban意味着你必须添加一个应用程序,它在应用程序层运行。
如果你使用iptables,它在networking层运行效率更高,你不必安装额外的应用程序。
使用iptables最近的模块http://www.snowman.net/projects/ipt_recent/
iptables -N SSHSCAN iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN iptables -A SSHSCAN -m recent --set --name SSH iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: " iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP iptables -A SSHSCAN -j ACCEPT
一个选项(除了其他安全措施之外)使用sshd侦听22以外的端口。我没有尝试过,但是听说它减less了机器人纯粹的powershell攻击的次数。
我必须强调,这不是真正的安全,只是减less自动化的暴力攻击的数量。 太多的工作来检查每个端口,我猜。
这里没有提到的东西,应该是通过防火墙限制访问。 这并不适合所有情况,但是如果您使用静态IP从一个一致的位置连接到主机,则可以完全阻止SSH,除了该IP。 这将确保入侵者不能进入。正如我所提到的,这并不总是适合每种情况,特别是如果你的IP是dynamic的,经常变化。
DenyHosts, http: //denyhosts.sourceforge.net/,是一个很好的项目,我曾运气。 如果您将denyhosts设置为同步,则会下载新的IP以添加到禁止使用denyhosts强制其他系统的禁止列表。 它也过期了一段时间没有试图暴力的IP。
使用公共密钥身份validation和禁用密码logging可能是你可以做的最好的事情。 击败任何暴力攻击。
什么对我有效:
正如其他人所说的,在sshd_config中没有rootlogin,PasswordAuthentication设置为no(只有loginw / keys)
只有一两个用户允许通过sshlogin,他们有一些准晦涩的名字,这些名字并不在常用的蛮力工具用户名列表中(即不是“admin”或“apache”或“web”或“约翰尼“)
限制防火墙规则(基本上,一切都被阻止,但我的服务端口和SSH)。 我甚至限制了ping,以避免更粗略的扫描(很多我的合作伙伴的懊恼)。
在我的networking主机上,我限制访问特定的几个IP地址 – 但是这看起来不适合你。 当然不能在我们的所有主机上自己做。 你也可能想看看“敲门”。
而我最喜欢的是:OSSEC的积极响应模块,以阻止一些暴力条件,并警告其他错误。 它在y时间内检测到x次无效login,然后通过iptables firewall-drop命令阻塞一段时间。 我现在约12小时阻止乐趣。 🙂
我在这里做的一件事是确保我不会阻止太多的错误,是在/etc/ossec.conf中,我设置了一个高级别的响应(在默认configuration中不存在),然后通过sshd_rules.xml并将我想要阻止的规则设置为该级别,并根据需要修改block vs. alert的阈值。
如果你正在运行Apache,你也可以阻止违反Apache规则的东西。 我不会因为NAT问题而阻止这些,我想考虑阻止整个大学或其他事情。 :)另外,您可以编写自定义规则来阻止日志文件中的特定条件,这可能非常有帮助。