Answers:
您可以使用iptables对与SSH端口的新传入连接进行速率限制。为了给您一个交钥匙的解决方案,我必须查看整个iptables配置,但是您基本上是在谈论添加规则,例如:
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT
这些规则假定您在表中的较早位置接受ESTABLISHED连接(这样,只有新连接才能达到这些规则)。新的SSH连接将符合这些规则并被标记。在60秒内,来自单个IP地址的5次尝试将导致该IP的新传入连接被丢弃。
这对我来说效果很好。
编辑:我更喜欢这种方法“ fail2ban”,因为没有要安装的其他软件,并且完全在内核模式下发生。它不像“ fail2ban”这样处理日志文件,但是如果您的问题仅在于SSH,我不会使用需要软件安装且更加复杂的用户模式。
-m condition
iptables match。
如果可以的话,我建议使用非标准的SSH端口(即端口10222),但是由于您提到您不能这样做,所以我建议使用诸如DenyHosts之类的东西。
http://denyhosts.sourceforge.net/
大包装,易于安装和配置。
能够从Internet上的任意位置ssh进入系统可能会很好,但是有一些自动密码攻击系统会锁定到打开的ssh端口,并对您的系统进行各种joe帐户和字典攻击。每天晚上的日志摘要中可能会令人讨厌阅读,这很浪费带宽。
如果在同一系统上有Web服务器,则可以使用php和tcp包装程序将ssh入站流量限制到已知系统,另外还提供了后门密钥,以允许您从Internet上的任意系统进行访问。
这是您的操作方式:
拒绝/etc/hosts.deny中的所有ssh连接:
# /etc/hosts.deny fragment
sshd: all
通过/etc/hosts.allow中的IP允许已知系统,并添加用于临时访问的文件:
# /etc/hosts.allow fragment
sshd: 10.0.10.2 # some system
sshd: 172.99.99.99 # some other system
sshd: /etc/hosts.allow.temporary-sshd-access
在您的Web服务器中创建一个php文件,并给它一个非显而易见的名称,例如my-sshd-access.php:
<?php
function get_ip()
{
return getenv("REMOTE_ADDR");
}
?>
<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';
print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);
$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);
print "Wrote: ";
readfile($out);
?>
原谅php代码-我从其他地方刷了它,因此很可能会被清理掉。它所做的只是将访问它的系统的IP地址添加到/etc/hosts.allow.temporary-sshd-access文件中,该文件在连接时由sshd读取(由于/etc/hosts.allow包含了该文件) 。
现在,当您在网络上的某个任意系统上并想要通过ssh切换到该系统时,请首先使用网络浏览器并点击该文件(或使用wget或等效文件):
$ wget http://your.system.name/my-sshd-access.php
现在,您应该可以进入您的系统了。如果这是您经常去的地方,那么读取/etc/hosts.allow.temporary-sshd-access文件的内容并将IP地址永久添加到/ etc / hosts会很简单。允许。
您可能还想看看denyhosts。
仅供参考:OpenSSH 6.7放弃了tcpwrappers支持,这意味着denyhosts可能不是新安装的解决方案。
帮个忙,禁用密码登录。仅使用身份验证密钥(例如Google ssh-keygen-示例:http : //www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 .html),您的服务器将更加安全,您将可以更轻松地连接到服务器(检查ssh-agent,ssh-add,keychain),并且不再是ssh暴力攻击的受害者。
老实说,如果您必须运行SSH(并在端口22上),则无法避免。如果您必须接受密码,则情况甚至更糟。
最好的选择是将日志分析软件配置为排除SSH日志。然后运行一个单独的实例,仅查看SSH日志,并使用procmail过滤掉不成功的尝试。您甚至可以编写脚本来监视IP地址是否多次成功登录失败。
无法阻止人们探测您的SSH服务器。Denyhosts,fail2ban和iptables示例可以工作到一定程度,但存在意外阻止合法用户的额外危险。最好的方法是将其吸收,然后尝试使日志分析过程自动化,以减少您必须考虑的时间。
当您说要失败时,请在您的Red Hat服务器上尝试临时登录,它位于后面的是哪种防火墙以及需要多少人进入它。我建议,如果可以的话,您希望在防火墙接近实际服务器之前限制对防火墙的尝试。
如果可以限制合法需要访问的IP地址范围,则应该可以在防火墙上设置访问列表。如果您可以限制防火墙处的流量,我建议您看一下网络入侵系统,因为听起来您的服务器正受到某些目标的攻击。
大多数Web主机使用APF + BFD对失败的SSH登录进行IP阻止。如今,有了CSF(配置服务器防火墙),其中包括一个称为LFD的工具,它可以执行相同的功能,并且还包括其他一些您不想访问服务器的国家(例如韩国,中国等)的阻止IP,其中有99%的SSH探针似乎起源于)。
如果您需要跨多个主机解决此问题,则可能需要查看OSSEC:http : //www.ossec.net/main/ossec-architecture
这将允许您从集中位置配置多个代理,以自动响应暴力攻击(以及可以从日志中提取的任何其他模式)。
非常好的软件:)
类似于DenyHosts的另一个选项是sshutout http://www.techfinesse.com/sshutout/sshutout.html