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

为什么我会选择其中一种方法而不是另一种方法?服务器故障人员如何处理此问题?

#1 楼

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

评论


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

–果酱
13年2月6日在11:57

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

– spiffytech
13年2月28日在3:36

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

–彼得·格拉德基克(Petr Gladkikh)
16-11-19在12:01



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

–拉尔夫·博尔顿(Ralph Bolton)
17年11月9日在11:02

#2 楼

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

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

话虽如此,用fail2ban之类的东西保护您的操作系统是一个好主意。 Fail2ban与DenyHosts稍有不同,尽管它们在相同的空间中播放。 Fail2ban使用iptables。

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


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


有许多重要的安全技术应考虑以防止暴力登录:

SSH:


不允许root登录
不允许ssh密码(使用私钥身份验证)
Don不要监听每个接口
为SSH创建一个网络接口(例如eth1),该网络接口不同于您提供请求的接口(例如eth0)
不要使用通用用户名
使用允许列表,仅允许需要SSH访问权限的用户
如果您需要Internet访问权限...请限制对IP的有限集合。一个静态IP是理想的,但是将其锁定为xx0.0 / 16优于0.0.0.0/0
如果可能的话,找到一种无需Internet访问的连接方式,则可以拒绝SSH的所有Internet流量(例如借助AWS,您可以获得绕过Internet的直接连接,称为直接连接)。
使用fail2ban之类的软件来捕获任何暴力攻击
确保操作系统始终处于最新状态,尤其是安全性和ssh包

应用程序:


确保您的应用程序始终是最新的,尤其是安全软件包。
锁定应用程序的“管理”页面。上面的许多建议也适用于您应用程序的管理区域。
密码保护您的管理区域,例如用于Web控制台的htpasswd之类的东西会投射出任何潜在的应用程序漏洞,并为进入系统设置额外的障碍
锁定文件权限。 “上传文件夹”因是各种令人讨厌的东西的入口点而臭名昭著。
考虑将您的应用程序放置在专用网络之后,并且只暴露前端负载均衡器和跳转框(这是AWS中的典型设置)使用VPC)


评论


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

–凯文·基恩(Kevin Keane)
2015年11月8日19:33



#3 楼

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

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

享受吧!

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

SSH PORTKNOCKING

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


#4 楼

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

成百上千次失败的ssh登录

如果可以的话,限制可以访问所讨论协议的源地址显然也会有所帮助。

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

评论


@ mc0e-我没有关注。

–埃文·安德森(Evan Anderson)
16-11-24在2:06

#5 楼

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

另一个区别是Fail2ban使用iptables,而Denyhosts使用tcpwrappers。其他人以前已经提到过这种区别,但是有一些值得一提的补充说明。

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

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

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

#6 楼

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

评论


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

–pkoch
2012年12月17日下午4:15

#7 楼

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

评论


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

–埃文·安德森(Evan Anderson)
2010年4月3日,1:14

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

– Zoredache
2010-4-3在2:05

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

–埃文·安德森(Evan Anderson)
2010-4-5 15:53

#8 楼

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

评论


这听起来更像是广告,掩盖了实际问题。

–德鲁·科里(Drew Khoury)
2014年5月12日上午11:07

好吧,我没有掩盖实际问题。我提出了一个替代方案,以防止您不得不打扰自己。认真地讲,CSF / LFD不仅是另一个防火墙控制系统,它还源于这里提到的各种问题。为什么有人不想发展?它为您节省了很多时间,因为其他人已经解决了它。这就是CSF存在的原因。

–本
2014年5月28日在12:33

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

–大卫
15年4月13日在1:47

#9 楼

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 Conigliaro)
17年5月1日在20:03

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

–BillThor
19年7月20日在20:05

#10 楼

实际上,我认为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服务。

#11 楼

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

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