我正在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,并取得了很好的效果,并且从我开始使用这个服务器以来,从来没有见过那些受到暴力攻击的服务器。
不要让他们首先到达您的机器! 在到达主机之前,甚至在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:
应用:
另一个很好的方法来保护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。
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。