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

我正在build立一个LAMP服务器,需要防止SSH / FTP /等。 蛮力login尝试从成功。 我已经看到许多关于denyhosts和fail2ban的build议,但是两者的比较很less。 我也读了IPTables规则可以填充相同的function。

为什么我会select这些方法之一? serverfault上的人如何处理这个问题?

IIRC,DenyHosts只会看你的SSH服务。 如果您需要它来保护其他服务,Fail2ban绝对是一个更好的select。 如果您愿意调整其configuration,则几乎可以configuration任何服务,但是由于较新版本的Fail2ban包含适用于许多常用服务器守护程序的规则集,因此不需要这样做。 在简单的iptables速率限制上使用fail2ban具有在指定时间内完全阻止攻击者的优势,而不是简单地减less他能够快速攻击服务器的速度。 我已经在很多生产服务器上使用了fail2ban,并取得了很好的效果,并且从我开始使用这个服务器以来,从来没有见过那些受到暴力攻击的服务器。

防止暴力login的最佳方法是什么?

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

话虽如此,保护您的操作系统像fail2ban是一个好主意。 Fail2ban与DenyHosts略有不同,尽pipe它们在同一个空间中玩。 Fail2ban使用iptables。

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

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

有几个重要的安全技术,您应该考虑帮助防止暴力login:

SSH:

  • 不要让rootlogin
  • 不要允许ssh密码(使用私钥authentication)
  • 不要听每个接口
  • 为SSH(例如eth1)创build一个networking接口,这与你服务的接口不同(例如eth0)
  • 不要使用通用的用户名
  • 使用允许列表,只允许需要SSH访问的用户
  • 如果您需要Internet访问…限制访问一组有限的IP。 一个静态IP是理想的,但是将其locking到xx0.0 / 16要好于0.0.0.0/0
  • 如果可能的话,find一种方式来连接没有互联网接入,这样你就可以拒绝所有的互联网stream量的SSH(例如与AWS,你可以得到绕过互联网的直接连接,它被称为直接连接)
  • 使用像fail2ban这样的软件来捕捉任何暴力攻击
  • 确保操作系统始终处于最新状态,特别是安全和ssh软件包

应用:

  • 确保您的应用程序始终处于最新状态,特别是安全软件包
  • locking应用程序的“pipe理”页面。 上面的许多build议也适用于您的应用程序的pipe理区域。
  • 密码保护您的pipe理员区域,类似于htpasswd for web console,可以预测任何潜在的应用程序漏洞,并为进入创build一个额外的屏障
  • locking文件权限。 “上传文件夹”是各种讨厌的东西的入口点臭名昭着。
  • 考虑将您的应用程序放在专用networking后面,只公开您的前端负载均衡器和跳转盒(这是使用VPC的AWS中的典型设置)

另一个很好的方法来保护SSH (我已经使用了十年或更好)是使用最新的iptables在本地(取决于你的发行版)的iptables。
基本上它可以被用来作为端口敲入内置到iptables中。 这将为您节省大量的头痛。 只要你可以通过tcp连接(telnet是一种方法,我也使用了ssh客户端,并指向它们的端口,任何可以通过tcp连接到指定的端口号的方法)客户端启动SSH连接,你可以使用这个。

下面是一个例子,当您从主机到端口4103上的服务器进行远程login时,iptables将打开端口22到您的主机。然后,您可以使用telnet到端口4102或4104来closuressed打开。 4102和4104的原因是保持一个简单的tcp扫描22开头。只有一个TCP连接(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 

我使用iptables规则来限制来自同一个IP地址的新连接(主要是SSH,但对于FTP也能正常工作)。 就我所见,“fail2ban”和其他工具的优点是iptables路由完全在内核模式下发生,不依赖任何用户模式工具来对日志文件进行尾部/分析。

数百个失败的sshlogin

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

使用SSH,你真的应该使用证书authentication,而不是接受密码。

关于Fail2Ban的一点需要注意的是它似乎比DenyHosts使用了大约10MB的内存。 所以,如果你在一个128MB的VPS你可能想看看。 而且,开箱即用的fail2ban只能在SSH上设置,这意味着在不改变configuration的情况下 – DenyHosts可以在更less的内存中执行相同的操作。

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

Fail2ban和Denyhosts之间的另一个区别是,Denyhosts可以与其他Denyhosts用户共享阻止列表。 使用Fail2ban,您只能阻止您的服务器之前看到的IP – 使用Denyhosts,如果其他人看到它,暴力破解尝试甚至可能永远不会到达您的服务器,并且在攻击者之前将阻止列表下载到您的服务器到达你的电脑。

另一个区别是Fail2ban使用iptables,而Denyhosts使用tcpwrappers。 其他人曾经提到过这个差异,但是有一些值得一提的附注。

iptables是有限的,你可以有效阻止多less个IP地址。 这可能是Fail2ban没有共享阻止列表机制的原因之一。

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

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

为什么没有开放的社区为你做所有的工作,而用CSF / LFD来代替繁琐的iptables或fail2banconfiguration呢? 我可以高度推荐它高于所有其他提到的选项。 请参阅http://configserver.com/cp/csf.html了解它可以为您的服务器做些什么。 CSF不需要一个控制面板,它提供了一个简单的用户界面,对于那些不想通过shell来完成的人来说。 这是很多稳定可靠的非常驻perl脚本。

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

sshd的标准filter(至less在我的debian安装中),为客户端呈现哪个服务器拒绝的每个ssh密钥logging一个失败计数。 有些用户在每次login时都会出现许多密钥,并且经常会被locking,尽pipe一旦几个密钥通过,login就会成功。

由于以上所述,我正在考虑从fail2ban移开。 至less在这方面,拒绝主义者更好。 然而,这显然不再是一个好的select,并且不再支持更新版本的debian(一些讨论在https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- debian / )

这里我没有一个好的解决scheme。