我正在设置LAMP服务器,需要防止SSH / FTP / etc。成功进行暴力登录尝试。我已经看到了很多有关denyhosts和fail2ban的建议,但是两者的比较却很少。我还读到IPTables规则可以填充相同的功能。
为什么我要选择其中一种方法而不是另一种方法?serverfault上的人员如何处理此问题?
我正在设置LAMP服务器,需要防止SSH / FTP / etc。成功进行暴力登录尝试。我已经看到了很多有关denyhosts和fail2ban的建议,但是两者的比较却很少。我还读到IPTables规则可以填充相同的功能。
为什么我要选择其中一种方法而不是另一种方法?serverfault上的人员如何处理此问题?
Answers:
IIRC,DenyHosts将仅监视您的SSH服务。如果您还需要它来保护其他服务,则Fail2ban绝对是一个更好的选择。如果愿意调整它的配置,几乎可以监视任何服务,但这不是必需的,因为较新版本的Fail2ban包括适用于许多流行服务器守护程序的规则集。在简单的iptables速率限制上使用fail2ban的优点是,可以在指定的时间内完全阻止攻击者,而不是简单地降低攻击者锤击服务器的速度。我在许多生产服务器上使用了fail2ban并取得了不错的效果,自从我开始使用它以来,从未见过其中一台服务器受到暴力攻击。
首先不要让他们进入您的机器!有很多方法可以阻止蛮力尝试在到达您的主机之前甚至在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:
应用:
我使用iptables规则对来自同一IP地址的新连接进行速率限制(主要是SSH,但对于FTP来说也很好)。如我所见,与“ fail2ban”和其他此类工具相比,优点是iptables路由完全在内核模式下发生,并且不依赖任何用户模式工具来尾部/解析日志文件。
如果能够做到,那么限制可以访问所讨论协议的源地址显然也会有所帮助。
使用SSH,您确实应该使用证书身份验证,并且仍然不接受密码。
保护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中。
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
Fail2ban和Denyhosts之间的另一个区别是Denyhosts可以与其他Denyhosts用户共享阻止列表。使用Fail2ban,您只能阻止服务器以前查看过的IP-使用Denyhosts,如果其他人已经看到过暴力破解尝试,甚至可能永远不会进入您的服务器,并且阻止列表在攻击者之前下载到您的服务器进入您的计算机。
另一个区别是Fail2ban使用iptables,而Denyhosts使用tcpwrappers。其他人以前也提到过这种差异,但是有一些值得一提的附带说明。
iptables限制了您可以有效阻止的IP地址数量。这可能是Fail2ban没有共享阻止列表的机制的原因之一。
另一个影响是,将iptables替换为nftables时,Fail2ban可能会停止工作或需要重写。Denyhosts可能会继续工作。
因此,两者都有优点和缺点。我都喜欢 就我自己而言,我使用Denyhosts是因为通常我只想保护SSH,并且我喜欢共享阻止列表。
关于Fail2Ban需要注意的一件事是,它似乎比DenyHosts使用大约10MB的内存。因此,如果您使用的是128MB VPS,则可能需要调查一下。另外,开箱即用的fail2ban仅在SSH上设置,这意味着无需更改配置-DenyHosts可以在更少的内存中完成相同的操作。
denyhosts用于ssh。fail2ban更为全面(HTTP,FTP等)。两者都在后台使用iptables。
与其搞乱繁琐的iptables或fail2ban配置,不如让开放社区为您做所有工作,而改用CSF / LFD?我强烈建议您在所有其他提到的选项之上。请参阅http://configserver.com/cp/csf.html以了解它对服务器的作用。CSF不需要控制面板,它为不想使用shell的用户提供了一个简单的UI本身。而且这是很多稳定可靠的非居民Perl脚本。
fail2ban似乎没有识别成功ssh登录并重置其失败计数的机制。
sshd的标准过滤器(至少在我的debian安装中),为客户端提供的服务器拒绝的每个ssh密钥增加失败计数。一些用户在每次登录时都会显示许多密钥,并且会定期被锁定,尽管他们的登录一旦完成几个键就已经成功。
由于上述原因,我目前正在考虑摆脱fail2ban。至少在这方面,拒绝主机更好。但是,它显然不再是一个好选择,并且在最新版本的debian中也不再受支持(在https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- debian /)
我在这里没有好的解决方案。
实际上,我认为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服务。