我有一台暴露在互联网上的服务器,我想提供一些针对 DDOS 攻击的保护。目前,我正在考虑使用 fail2ban 和/或 snort。我知道它们的工作方式不同。据我所知,Fail2Ban 监视日志文件以确定入侵,而 snort 监视传入的数据包。
我应该同时使用两者吗?只使用其中一个就足够了吗?什么功能是其中一个独有的,而另一个不是?我担心的一个问题是性能。Snort 会减慢我们的网络速度吗?
答案1
如果我是你,我会从 fail2ban 开始。
如果配置不正确,两者都可能耗尽您的资源,但我想您会更熟悉使用正则表达式的注意事项。
fail2ban 更容易立即发挥作用(至少在我看来)。
与 snort 相比,设置起来实际上阻止恶意源要简单得多,并且您可以配置 fail2ban 来扫描 snort 日志,以便禁止它们。
两者都很可能无法真正保护您免受 DDoS 攻击,但两者都可以在其相当于阻止的模式下用于防止非网络资源耗尽,通过(实际上)避免与实际应用服务器的交互。
snort 的一个问题是,让它在 IPS 模式下工作(即实际阻止流量)有点不简单 - 据我所知,更常见的是将其作为 IDS 运行(即仅检测恶意流量)。
正如您所说,fail2ban 本质上只是一个脚本,它对日志文件执行正则表达式,从这些日志中提取恶意源(例如失败的 SSH 登录、触发重复 4xx 或 5xx 响应的 Web 客户端,或具有与已知攻击者配置文件相关联的用户代理)。它与 iptables(以及可能在 iptables 上运行的任何程序,例如,firewalld、shorewall)集成,以阻止与恶意主机相关的流量。这些阻止往往被实现为简单的 iptables 规则,或 iptables 规则 + ipset。
snort(以及 suricata 和其他 IDSen)实际上检查流量的各个方面,以检测潜在的恶意流量。它使用域特定格式的规则,也可以进行 IP 地址(和/或主机名/域)匹配,以及数据包检查、重组等。EmergingThreat 的- 您可能想要通读其中的一些内容,以了解 snort 的功能。
一个考虑因素是,fail2ban 通常开箱即用,但对于 snort 来说并非完全如此 - 您通常需要调整其规则(并可能添加一些您自己的规则)以平衡事件量和其可操作性。
就我个人而言,我花了一些时间来提高 Snort 的使用水平,以下设置对我很有用:
- 使用 ssh 和相关的 web jails 设置 fail2ban
- 创建一个监狱,读取 IDS 警报日志(在我的例子中是 suricata,但这是一个细节),特别是查找 Prio 1 警报,并查看任何标记为 DROP 的主机(是的,我可以只加载相关的 ipset)
- 让 fail2ban 完成剩下的工作。
这可能对你有用,也可能没用,但这意味着你得到一些无需特别了解其内部结构即可获得额外的 Snort 保护。
不过,我想说的是,Snort 规则看起来可能有点过于危言耸听,但了解一下它们指向的威胁,以及如何理解/解释警报,通常是值得的。
一旦您对 snort 更加熟悉,请首先对其进行调整,然后考虑是否要允许它直接处理事情(例如,将其置于 IPS 模式)。
顺便说一句,如果您的许多暴露资产都是基于网络的,那么您可能需要考虑 WAF 如何成为其中的一部分。