AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 17870
Accepted
MattMcKnight
MattMcKnight
Asked: 2009-06-03 08:18:04 +0800 CST2009-06-03 08:18:04 +0800 CST 2009-06-03 08:18:04 +0800 CST

数百次失败的 ssh 登录

  • 772

每天晚上我都会在我的 RedHat 4 服务器上收到数百甚至数千次失败的 ssh 登录。出于远程站点的防火墙原因,我需要在标准端口上运行。我应该做些什么来阻止它。我注意到许多来自同一个 IP 地址。不应该过一段时间就停止吗?

linux redhat ssh
  • 16 16 个回答
  • 17504 Views

16 个回答

  • Voted
  1. Best Answer
    Evan Anderson
    2009-06-03T08:25:16+08:002009-06-03T08:25:16+08:00

    您可以使用 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 有关,我不会使用需要安装软件且更复杂的用户模式。

    • 69
  2. Kyle Brandt
    2009-06-03T08:20:53+08:002009-06-03T08:20:53+08:00

    fail2ban可以通过阻止登录尝试失败次数过多的 IP 地址来帮助解决此问题。

    • 39
  3. KPWINC
    2009-06-03T09:16:50+08:002009-06-03T09:16:50+08:00

    如果可以的话,我建议使用非标准的 SSH 端口(即端口 10222),但既然你提到你不能这样做,我建议使用诸如 DenyHosts 之类的东西。

    http://denyhosts.sourceforge.net/

    很棒的软件包,易于安装和配置。

    • 25
  4. David Mackintosh
    2009-06-03T09:07:26+08:002009-06-03T09:07:26+08:00

    虽然能够从 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 包含它) .

    现在,当您在 Web 上的某个任意系统上并想要 ssh 到该系统时,首先使用 Web 浏览器并点击此文件(或使用 wget 或等效项):

    $ wget http://your.system.name/my-sshd-access.php
    

    现在你应该可以通过 ssh 进入你的系统了。如果这是您可能会经常 ssh 的地方,那么读取 /etc/hosts.allow.temporary-sshd-access 文件的内容并将 IP 地址永久添加到 /etc/hosts 将是微不足道的。允许。

    • 15
  5. Zoredache
    2009-06-03T08:23:18+08:002009-06-03T08:23:18+08:00

    您可能还想查看拒绝主机。

    仅供参考:OpenSSH 6.7 放弃了 tcpwrappers 支持,这意味着拒绝主机可能不是新安装的解决方案。

    • 9
  6. Manu
    2009-08-18T14:08:16+08:002009-08-18T14:08:16+08:00

    帮自己一个忙,禁用密码登录。仅使用身份验证密钥(例如 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 暴力攻击的受害者。

    • 8
  7. disserman
    2009-06-03T08:28:14+08:002009-06-03T08:28:14+08:00

    另一种解决方案是将 ssh 移动到另一个端口。这些蠕虫非常愚蠢。

    • 2
  8. Evan
    2009-06-03T16:51:51+08:002009-06-03T16:51:51+08:00

    另一种选择可能是要求所有 ssh 连接都由证书验证并完全取消密码。

    我曾经使用 Denyhosts,但我发现我只是定期从少数几个地方远程连接,所以我阻止了所有端口 22 连接,除了其他任何地方,并使用端口敲击,这样我可以在需要时从任何地方用笔记本电脑连接.

    • 2
  9. goldPseudo
    2009-06-03T09:03:25+08:002009-06-03T09:03:25+08:00

    任何涉及在多次故障后自动阻止 IP 的解决方案都会带来拒绝服务攻击的风险。只要有一个好的密码策略来降低暴力破解或字典攻击的有效性,我就不会太担心它们。

    如果您将用户/组限制为只允许首先允许 ssh 登录的用户/组,并禁用以 root 身份登录,那么您应该足够安全。而且,如果这还不够,总是有基于密钥的身份验证。

    • 1
  10. erik
    2009-08-18T14:51:07+08:002009-08-18T14:51:07+08:00

    老实说,如果您必须运行 SSH(并且在端口 22 上),您无法避免这些。如果您必须接受密码,那么您的情况会更糟。

    最好的办法是配置日志分析软件以排除 SSH 日志。然后运行一个单独的实例只查看 SSH 日志,并使用 procmail 过滤掉不成功的尝试。您甚至可以编写脚本来监视来自 IP 地址的成功登录以及多次不成功的尝试。

    没有办法阻止人们探测您的 SSH 服务器。Denyhosts、fail2ban 和 iptables 示例可以在一定程度上发挥作用,但会增加意外阻止合法用户的危险。最好的方法是将其吸收并尝试自动化日志分析过程,以减少您必须考虑的时间。

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve