每天晚上,我都会在 RedHat 4 服务器上收到成百上千次失败的 ssh 登录。由于远程站点的防火墙原因,我需要在标准端口上运行。有什么我应该做的来阻止这个。我注意到许多来自相同的 IP 地址。它不应该在一段时间后停止那些吗?
Eva*_*son 69
您可以使用 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
Run Code Online (Sandbox Code Playgroud)
这些规则假定您接受表中较早的 ESTABLISHED 连接(因此只有新连接会符合这些规则)。新的 SSH 连接将符合这些规则并被标记。在 60 秒内,来自单个 IP 地址的 5 次尝试将导致来自该 IP 的新传入连接被丢弃。
这对我来说效果很好。
编辑:我更喜欢这种方法而不是“fail2ban”,因为不需要安装额外的软件,并且完全在内核模式下发生。它不会像“fail2ban”那样处理解析日志文件,但是如果您的问题仅与 SSH 有关,我不会使用需要安装软件且更复杂的用户模式。
KPW*_*INC 25
如果可以,我建议为 SSH 使用非标准端口(即端口 10222),但既然你提到你不能这样做,我建议使用诸如 DenyHosts 之类的东西。
http://denyhosts.sourceforge.net/
很棒的软件包,易于安装和配置。
Dav*_*osh 15
虽然能够从 Internet 上的任意位置通过 ssh 进入您的系统可能很好,但有自动密码攻击系统会锁定打开的 ssh 端口并对您的系统应用各种 joe 帐户和字典攻击。这可能会加重阅读您的夜间日志摘要,并且浪费您的带宽。
如果您在同一系统上有一个 Web 服务器,您可以使用 php 和 tcp 包装器来限制 ssh 入站流量到已知系统,并为您提供一个后门密钥以允许您从互联网上的任意系统访问。
这是你如何做到的:
拒绝 /etc/hosts.deny 中的所有 ssh 连接:
# /etc/hosts.deny fragment
sshd: all
Run Code Online (Sandbox Code Playgroud)
在 /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
Run Code Online (Sandbox Code Playgroud)
在您的 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);
?>
Run Code Online (Sandbox Code Playgroud)
原谅 php 代码——我从其他地方刷了它,所以它可能会被清理一大堆。它所做的只是将访问它的系统的 IP 地址添加到 /etc/hosts.allow.temporary-sshd-access 文件中,该文件在连接时由 sshd 读取(由于它包含在 /etc/hosts.allow 中) .
现在,当您在网络上的某个任意系统上并想通过 ssh 连接到该系统时,首先使用网络浏览器并点击此文件(或使用 wget 或等效):
$ wget http://your.system.name/my-sshd-access.php
Run Code Online (Sandbox Code Playgroud)
现在您应该能够通过 ssh 进入您的系统。如果这是您可能经常通过 ssh 进入的地方,那么读取 /etc/hosts.allow.temporary-sshd-access 文件的内容并将 IP 地址永久添加到 /etc/hosts 将是微不足道的。允许。
小智 8
帮自己一个忙并禁用密码登录。仅使用身份验证密钥(例如 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 暴力攻击的受害者。
| 归档时间: |
|
| 查看次数: |
16829 次 |
| 最近记录: |