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


62

我正在设置LAMP服务器,需要防止SSH / FTP / etc。成功进行暴力登录尝试。我已经看到了很多有关denyhosts和fail2ban的建议,但是两者的比较却很少。我还读到IPTables规则可以填充相同的功能。

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

Answers:


53

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


3
请注意,DenyHosts实际上会阻止其他服务-主要区别是fail2ban使用iptables,而DenyHosts使用hosts.deny,某些服务不会查看主机文件,例如Apache。
jammypeach 2013年

为了在表上添加另一个选项,我最近发现ufw防火墙配置器还允许您对任何TCP或UDP端口应用(不可配置)速率限制。如果您已经在使用UFW,这可能是一个不错的选择,而不是配置和运行其他守护程序。
spiffytech

防止暴力破解的第一件事是使用合理的强密码(甚至完全禁用密码身份验证:)。为此,速率限制(单独)较弱。我没有尝试其他方法,但是我自己使用了fail2ban,发现抵御密码探测机器人非常有用。
Petr Gladkikh '16

以我的经验,fail2ban需要更多的工作才能使其真正执行任何操作。相比之下,您可以只安装denyhosts RPM并启动它以保护您的服务器,同时制定更复杂的选项。我绝对同意fail2ban是“更好”的选择,但是为了易于保护,您无法击败denyhosts。
拉尔夫·博尔顿

21

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

首先不要让他们进入您的机器!有很多方法可以阻止蛮力尝试在到达您的主机之前甚至在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包装器/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之类的东西会投射出任何潜在的应用程序漏洞,并造成额外的进入障碍
  • 锁定文件权限。“上传文件夹”是各种令人讨厌的东西的入口点。
  • 考虑将您的应用程序放置在专用网络之后,仅公开您的前端负载均衡器和跳转框(这是使用VPC在AWS中的典型设置)

1
您能否详细说明一下“有很多方法可以阻止蛮力尝试在到达您的主机之前甚至在SSH级别。” 如果您对无法控制外部网络的托管计算机有任何建议,我特别感兴趣。谢谢!
凯文·基恩

7

我使用iptables规则对来自同一IP地址的新连接进行速率限制(主要是SSH,但对于FTP来说也很好)。如我所见,与“ fail2ban”和其他此类工具相比,优点是iptables路由完全在内核模式下发生,并且不依赖任何用户模式工具来尾部/解析日志文件。

数以百计的ssh登录失败

如果能够做到,那么限制可以访问所讨论协议的源地址显然也会有所帮助。

使用SSH,您确实应该使用证书身份验证,并且仍然不接受密码。


@ mc0e-我没有关注。
埃文·安德森

7

保护SSH的另一种好方法(我已经使用它十年或更长时间了)是在iptables中本地使用最新的库(取决于您的发行版)。
基本上,它可以用作iptables中内置的端口终止功能。这将为您节省很多头痛。只要您可以进行tcp connect(telnet是一种方法,我也使用过ssh客户端,并将它们指向端口。任何可以将tcp连接到指定端口号的事情。我正在看您的Putty!)。客户端启动ssh连接,您可以使用它。

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

请享用!

哦,我更喜欢Fail2Ban。灵活性更高,我喜欢该禁令发生在iptables中,而不是tcpwrappers中。

SSH PORTKNOKKING

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

6

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

另一个区别是Fail2ban使用iptables,而Denyhosts使用tcpwrappers。其他人以前也提到过这种差异,但是有一些值得一提的附带说明。

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

另一个影响是,将iptables替换为nftables时,Fail2ban可能会停止工作或需要重写。Denyhosts可能会继续工作。

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


5

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


2
尝试将“ ulimit -s 256”附加到/ etc / default / fail2ban。在我的系统上降低了10MB。
pkoch 2012年

3

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


“ denyhosts”和“ fail2ban”都使用iptables完成其“阻止”行为,但是它们不使用iptables进行速率限制。他们解析“用户土地”中的日志,并根据日志条目采取行动。
埃文·安德森

10
@ Evan,denyhosts不使用iptables(默认情况下)。当要禁止系统时,它使用TCP包装程序并更新/etc/hosts.deny。
Zoredache

@Zoredache:我的立场是正确的。之前曾经使用过“ denyhosts”,但我对它如何调用其“阻止”功能做出了错误的假设。不过,作为用户级日志分析/响应工具,我还是希望使用严格基于iptables的解决方案来代替“ denyhosts”。
埃文·安德森

1

与其搞乱繁琐的iptables或fail2ban配置,不如让开放社区为您做所有工作,而改用CSF / LFD?我强烈建议您在所有其他提到的选项之上。请参阅http://configserver.com/cp/csf.html以了解它对服务器的作用。CSF不需要控制面板,它为不想使用shell的用户提供了一个简单的UI本身。而且这是很多稳定可靠的非居民Perl脚本。


8
这听起来更像是广告,掩盖了实际问题。
德鲁·科里

好吧,我没有掩盖实际问题。我提出了另一种选择,可以防止您不得不为这个问题而烦恼。认真地讲,CSF / LFD不仅是另一个防火墙控制系统,它还源于此处讨论的各种问题。为什么有人不想发展?它为您节省了很多时间,因为其他人已经解决了它。这就是CSF存在的原因。
2014年

对于它的价值而言,作为一个珍惜我的时间的赚钱能力的人,如果价格合适,我宁愿有一个“即插即用”的解决方案,即使花费几美元。这样,我不必浪费时间学习我真正不在意的内容,而是意识到拥有保护的重要性。
戴维(David)

1

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

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

由于上述原因,我目前正在考虑摆脱fail2ban。至少在这方面,拒绝主机更好。但是,它显然不再是一个好选择,并且在最新版本的debian中也不再受支持(在https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- debian /

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


如果您使用LDAP认证,也会有类似的问题。成功的登录太多会导致您被锁定:bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/562388
Mike

为了防止显示所有密钥,请向用户显示如何在其〜/ .ssh / config文件中指定要使用的密钥。
BillThor

0

实际上,我认为denyHost可以阻止sshd服务之外的许多其他服务。在其配置文件-中/etc/denyhosts.conf,有几行代码说:

# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:  
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE  = sshd

因此,如果我们将BLOCK_SERVICE变量设置ALL为如上所述,则可以观看ssh服务。


0

Denyhosts 3.0版:每当IP地址出现在日志文件中时,Denyhosts都会打开hosts.deny文件并读取整个内容以匹配该地址。每次。内存中没有任何缓存。如果您有一个庞大的hosts.deny文件,并且要进行很多探测(许多日志文件条目),则Denyhosts会成为CPU的读取和重新读取出现的每个IP地址的hosts.deny文件的CPU。不好。

如果启用iptables支持,则Denyhosts将创建庞大且缓慢的已阻止IP地址列表。Denyhosts不使用ipset或nftables创建有效的IP映射。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.