保护 linux 服务器:iptables 与 fail2ban

kin*_*ilo 10 security ssh iptables brute-force-attacks fail2ban

我想挑选社区关于 linux 服务器安全性的大脑,特别是关于蛮力攻击和使用fail2ban与自定义iptables

那里有一些类似的问题,但没有一个能解决我满意的主题。简而言之,我正在尝试确定最佳解决方案来保护暴露在互联网上的 linux 服务器(运行通常的服务、ssh、web、邮件),免受暴力攻击。

我对服务器安全有很好的处理,即通过不允许 root 或密码登录来锁定 ssh,更改默认端口,确保软件是最新的,检查日志文件,只允许某些主机访问服务器并利用安全性审计工具,如Lynis ( https://cisofy.com/lynis/ ),用于一般安全合规性,因此这个问题不一定与此有关,尽管始终欢迎输入和建议

我的问题是我应该使用哪种解决方案(fail2ban 或 iptables),我应该如何配置它,或者我应该使用两者的组合来防止暴力攻击?

关于该主题有一个有趣的回应(Denyhosts vs fail2ban vs iptables-防止暴力登录的最佳方法?)。对我来说,最有趣的答案是个人(https://serverfault.com/a/128964),而且iptables的路由发生在内核,而不是的fail2ban这使得用户的使用模式工具来分析日志文件。Fail2ban 当然使用 iptables,但它仍然必须解析日志文件并匹配模式,直到它执行操作。

那么使用 iptables 并使用速率限制https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/)在一段时间内删除来自 IP 的请求是否有意义在特定时间段内进行过多连接尝试的时间,而不管它尝试连接到什么协议?如果是这样,那么这里有一些关于对这些数据包使用丢弃与拒绝的有趣想法(http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject),对此有什么想法吗?

Fail2ban 允许以能够为默认配置中可能无法解决的服务编写自定义“规则”的形式进行自定义配置。它易于安装和设置并且功能强大,但是如果我试图实现的只是“阻止”来自服务器的 IP,如果他们对任何服务/协议进行 2 次失败的访问尝试超过x数量,这会不会是一种矫枉过正时间?

此处的目标是打开每日日志监视报告,而不必滚动浏览尝试连接到服务器的失败页面。

感谢您抽出宝贵的时间。

HBr*_*ijn 22

我应该使用fail2ban 还是iptables?

除了防火墙解决方案之外,您还可以使用 fail2ban按需扩展那些现有的防火墙规则,并通过规则来阻止对其他公共服务执行不良操作的系统的特定 IP 地址。他们彼此协同工作。

简化:防火墙只能看到网络连接和数据包,并且可以了解其中的模式,但它没有应用程序级别的洞察力来区分所需和有效请求与恶意、格式错误和不合需要的请求。例如,您的防火墙无法区分一堆 HTTP API 请求和由在您的 Wordpress 管理页面上的蛮力密码猜测引起的大量错误登录尝试之间的区别,对于防火墙,它们都只是到端口 80 或 443 的 TCP 连接。

Fail2ban 是一种通用且可扩展的方法,可为您的防火墙提供应用程序级别的洞察力,尽管有些间接。
应用程序经常会像这样注册和记录恶意、格式错误和不需要的请求,但很少有它们具有防止进一步滥用的本机能力。尽管它稍微解耦,但Fail2ban 然后可以对那些记录的恶意事件采取行动并限制损害并防止进一步滥用,通常是通过动态重新配置您的防火墙以拒绝进一步访问。换句话说,Fail2ban 为您现有的应用程序提供了防止滥用的方法,而无需修改它们。

为防火墙提供应用级洞察力的另一种方法是通过入侵检测/预防系统


例如,网络服务器是一种常见的公共服务,并且在您的防火墙中,TCP 端口 80 和 443 对整个互联网开放。
通常,您对 HTTP/HTTPS 端口没有任何速率限制,因为多个有效用户可以有一个来源,例如,当他们位于 NAT 网关或 Web 代理之后。

当您检测到针对您的网络服务器的不良和/或恶意操作时,您可以使用 fail2ban 自动阻止此类攻击者(完全阻止他们或仅锁定他们对端口 80 和 443 的访问)。

另一方面,SSH 访问不是公共服务,但如果您无法将防火墙中的 SSH 访问限制为仅列入白名单的 ip 地址范围,则限制传入连接的速率是一种减慢暴力的方法- 强制攻击。但是您的防火墙仍然无法区分用户 bob 成功登录 5 次(因为他正在运行 ansible playbook)和 5 次尝试以 root 身份登录失败的机器人。

  • 尽管有可以执行深度数据包检查的应用程序防火墙(也称为应用程序网关)。 (2认同)

use*_*ser 8

我应该使用fail2ban 还是iptables?

这有点类似于问“我应该使用安全带还是汽车?”。

首先,请记住,fail2ban 实际上只是一个工具,用于自动检测文本文件中的重复条目并在满足指定阈值时执行某些命令。

我们经常使用它来阻止违反某些策略的主机,这可以通过指示违反策略的重复日志条目来证明,但这并不是您可以使用它的唯一目的。

可以使用 fail2ban 按需添加(和删除)iptables 规则。您还可以手动添加和删除 iptables 规则,或者您可以使用 fail2ban 做一些完全不同的响应。这就是您如何配置它的全部内容。

无论您是否运行fail2ban,您都应该安装通用防火墙。例如,此类防火墙将阻止您知道永远不会合法的(传入或传出)流量。例如,该数据库服务器是否真的需要处理来自整个 Internet 的端口 25 上的传入连接?

最重要的是,让fail2ban通过暂时切断违规IP来响应策略违规行为本身并不能保护您的服务器本身(一个好的漏洞只需要通过您的防火墙一次),但它会降低系统上的噪音水平,包括但不限于系统日志中的噪音水平。这样做的简单方法是让 fail2ban 运行 iptables 来配置内核以暂时丢弃数据包。如果您可以重新配置外围防火墙而不仅仅是主机防火墙,那就更好了。

换句话说,如果它们一开始就可以很容易地分开,那么您两者都想要。

如果我试图实现的所有目标是“阻止”来自服务器的 IP,如果他们对任何服务/协议进行了 2 次失败的访问尝试,这会不会是一种矫枉过正?

正是fail2ban旨在解决的用例。将工具用于其预期目的几乎从不矫枉过正。

此处的目标是打开每日日志监视报告,而不必滚动浏览尝试连接到服务器的失败页面。

旁白,与您的问题没有直接关系:每当您过滤日志以供审查时,请考虑您将对某些特定条目执行的操作。如果您对某个条目要做的只是说“meh”然后继续,那么您可能想将其过滤掉。确保保存完整的日志进行复审应该说是必要的,但只推到你的定期监测工作流程的东西,你实际上是打算什么用时,它显示了。如果您将 fail2ban 设置为在几次连接尝试失败后阻止主机,则很有可能您不需要手动查看这些内容,并且可以将它们从您的监控通知中删除。如果合法用户抱怨无法访问,只需拉出完整的日志并查看。