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 / 问题 / 128962
Accepted
spiffytech
spiffytech
Asked: 2010-04-03 17:07:49 +0800 CST2010-04-03 17:07:49 +0800 CST 2010-04-03 17:07:49 +0800 CST

Denyhosts vs fail2ban vs iptables - 防止暴力登录的最佳方法?

  • 772

我正在设置 LAMP 服务器,需要阻止 SSH/FTP/等。暴力登录尝试成功。我已经看到很多关于拒绝主机和 fail2ban 的建议,但很少对两者进行比较。我还读到 IPTables 规则可以填充相同的功能。

为什么我会选择其中一种方法而不是另一种?serverfault上的人如何处理这个问题?

iptables brute-force-attacks denyhosts fail2ban
  • 11 11 个回答
  • 63181 Views

11 个回答

  • Voted
  1. Best Answer
    Ron
    2010-04-04T21:33:15+08:002010-04-04T21:33:15+08:00

    IIRC,DenyHosts 只会监视您的 SSH 服务。如果您还需要它来保护其他服务,Fail2ban 绝对是更好的选择。如果您愿意调整其配置,它几乎可以配置为监视任何服务,但这不是必需的,因为 Fail2ban 的较新版本包含适用于许多流行服务器守护程序的规则集。在简单的 iptables 速率限制上使用 fail2ban 具有在指定时间内完全阻止攻击者的优势,而不是简单地降低攻击者攻击服务器的速度。我已经在许多生产服务器上使用了fail2ban,并取得了很好的效果,并且自从我开始使用它以来,从未见过其中一台服务器遭到暴力攻击。

    • 56
  2. Drew Khoury
    2014-05-13T02:42:11+08:002014-05-13T02:42:11+08:00

    防止暴力登录的最佳方法?

    首先不要让他们进入您的机器!有很多方法可以在暴力尝试到达您的主机之前阻止它们,甚至在 SSH 级别。

    话虽如此,使用类似 fail2ban 的东西保护您的操作系统是一个好主意。Fail2ban 与 DenyHosts 略有不同,尽管它们确实在同一个空间中运行。Fail2ban 使用 iptables。

    http://en.wikipedia.org/wiki/Fail2ban

    Fail2ban 类似于 DenyHosts ...但与专注于 SSH 的 DenyHosts 不同,fail2ban 可以配置为监视将登录尝试写入日志文件的任何服务,而不是仅使用 /etc/hosts.deny 来阻止 IP 地址/主机, fail2ban 可以使用 Netfilter/iptables 和 TCP Wrappers /etc/hosts.deny。

    您应该考虑一些重要的安全技术来帮助防止暴力登录:

    SSH:

    • 不允许root登录
    • 不允许 ssh 密码(使用私钥认证)
    • 不要在每个界面上都听
    • 为 SSH 创建一个网络接口(例如 eth1),它不同于您提供请求的接口(例如 eth0)
    • 不要使用常见的用户名
    • 使用允许列表,并且只允许需要 SSH 访问的用户
    • 如果您需要 Internet 访问...限制对有限 IP 集的访问。一个静态 IP 是理想的,但是将其锁定为 xx0.0/16 比 0.0.0.0/0 更好
    • 如果可能的话,找到一种无需 Internet 访问即可连接的方法,这样您就可以拒绝 SSH 的所有 Internet 流量(例如,使用 AWS,您可以获得绕过 Internet 的直接连接,称为 Direct Connect)
    • 使用fail2ban之类的软件来捕获任何暴力攻击
    • 确保操作系统始终是最新的,尤其是安全和 ssh 包

    应用:

    • 确保您的应用程序始终是最新的,尤其是安全包
    • 锁定您的应用程序“管理”页面。上面的许多建议也适用于您的应用程序的管理区域。
    • 密码保护您的管理区域,例如用于 Web 控制台的 htpasswd 将投射任何底层应用程序漏洞并创建额外的进入障碍
    • 锁定文件权限。“上传文件夹”因成为各种令人讨厌的东西的入口点而臭名昭著。
    • 考虑将您的应用程序放在私有网络后面,并且只公开您的前端负载均衡器和跳转盒(这是 AWS 中使用 VPC 的典型设置)
    • 23
  3. Jeff Moore
    2014-09-30T14:11:56+08:002014-09-30T14:11:56+08:00

    保护 SSH 的另一种好方法(我已经使用了十年或更长时间)是在本地使用 iptables 中的最新库(取决于您的发行版)。
    基本上它可以用作 iptables 内置的端口敲击。这将为您省去很多麻烦。只要你可以 tcp 连接(telnet 是一种方式。我也使用过 ssh 客户端并将它们指向端口。任何可以与指定端口号建立 tcp 连接的东西。我在看着你 Putty!)从客户端启动 ssh 连接,您可以使用它。

    下面是一个示例,当您从主机远程登录到端口 4103 上的服务器时,iptables 将打开到主机的端口 22。然后您可以使用远程登录到端口 4102 或 4104 来关闭 sed 开放。使用 4102 和 4104 的原因是为了防止打开 22 进行简单的 tcp 扫描。只有到端口 4103 的 tcp connect(telnet) 才会允许您进入。

    享受!

    哦,我赞成 Fail2Ban。更大的灵活性,我喜欢禁令发生在 iptables 而不是 tcpwrappers 中。

    SSH 端口敲门

    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP
    
    • 9
  4. Kevin Keane
    2015-11-09T11:29:52+08:002015-11-09T11:29:52+08:00

    Fail2ban 和 Denyhosts 之间的另一个区别是 Denyhosts 可以与其他 Denyhosts 用户共享阻止列表。使用 Fail2ban,您只能阻止您的服务器以前见过的 IP - 使用 Denyhosts,暴力尝试甚至可能永远不会到达您的服务器,如果其他人已经看到它,并且阻止列表在攻击者之前下载到您的服务器进入您的计算机。

    另一个区别是 Fail2ban 使用 iptables,而 Denyhosts 使用 tcpwrappers。其他人之前已经提到过这种差异,但有一些旁注值得一提。

    iptables 限制了您可以有效阻止的 IP 地址数量。这可能是 Fail2ban 没有共享阻止列表的机制的原因之一。

    另一个影响是,当 iptables 被 nftables 替换时,Fail2ban 可能会停止工作或需要重写。拒绝主机可能会继续工作。

    因此,两者都有优点和缺点。我都喜欢;对于我自己,我使用 Denyhosts,因为通常我只想保护 SSH,而且我喜欢共享阻止列表。

    • 8
  5. Evan Anderson
    2010-04-03T17:12:09+08:002010-04-03T17:12:09+08:00

    我使用 iptables 规则来限制来自同一 IP 地址的新连接(主要是 SSH,但它也适用于 FTP)。在我看来,与“fail2ban”和其他此类工具相比的优势在于 iptables 路由完全发生在内核模式下,并且不依赖任何用户模式工具来跟踪/解析日志文件。

    数百次失败的 ssh 登录

    如果你能做到这一点,限制可以访问相关协议的源地址显然也会有所帮助。

    使用 SSH,您确实应该使用证书身份验证而不是接受密码。

    • 7
  6. Xeoncross
    2010-09-26T10:49:49+08:002010-09-26T10:49:49+08:00

    关于 Fail2Ban 需要注意的一点是,它似乎比 DenyHosts 使用了大约 10MB 的内存。因此,如果您使用的是 128MB VPS,您可能需要研究一下。此外,开箱即用的 fail2ban 仅在 SSH 上设置,这意味着无需更改配置 - DenyHosts 在更少的内存中执行相同的操作。

    • 5
  7. Ignacio Vazquez-Abrams
    2010-04-03T17:13:19+08:002010-04-03T17:13:19+08:00

    denyhosts 用于 ssh。fail2ban 更全面(HTTP、FTP 等)。两者都在幕后使用 iptables。

    • 3
  8. Ian D. Allen
    2018-10-05T12:14:14+08:002018-10-05T12:14:14+08:00

    Denyhosts 3.0 版:每次 IP 地址出现在日志文件中时,Denyhosts 都会打开 hosts.deny 文件并读取整个内容以匹配该地址。每次。没有任何东西缓存在内存中。如果您有一个巨大的 hosts.deny 文件并且受到许多探测(许多日志文件条目)的影响,那么 Denyhosts 就会成为 CPU 占用者,会为每个出现的 IP 地址读取和重新读取 hosts.deny 文件。不好。

    如果您启用 iptables 支持,Denyhosts 将创建大量、缓慢的被阻止 IP 地址列表。Denyhosts 不使用 ipset 或 nftables 来创建有效的 IP 映射。

    • 2
  9. Ben
    2014-05-13T01:54:07+08:002014-05-13T01:54:07+08:00

    为什么不让开放社区为您完成所有工作,而不是使用繁琐的 iptables 或 fail2ban 配置,而是使用 CSF/LFD 呢?我可以强烈推荐它高于所有其他提到的选项。请参阅http://configserver.com/cp/csf.html了解它可以为您的服务器做什么。CSF 不需要控制面板,它本身提供了一个简单的 UI,供那些不想通过 shell 进行操作的人使用。它是很多稳定可靠的非驻留 perl 脚本。

    • 1
  10. mc0e
    2016-11-23T05:49:32+08:002016-11-23T05:49:32+08:00

    fail2ban 似乎没有一种机制来识别成功的 ssh 登录并重置其失败次数。

    sshd 的标准过滤器(至少在我的 debian 安装中)为客户端提供的服务器拒绝的每个 ssh 密钥计算失败计数。一些用户在每次登录时都会显示许多密钥,并且经常被锁定,尽管一旦通过了几个密钥,他们的登录就成功了。

    由于上述原因,我目前正在考虑放弃fail2ban。至少在这方面,denyhosts 更好。但是,它显然不再是一个好的选择,并且在最近的 debian 版本中不再受支持(一些讨论在https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- Debian/ )

    我这里没有很好的解决方案。

    • 1

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

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

    • 30 个回答
  • Marko Smith

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

    • 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
    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