任何暴露于公共互联网的服务端点都容易受到黑客的大量攻击。您的服务可能是网站、API 端点或任何其他应用程序层服务。恶意用户和机器人将通过重复发送更高频率的请求来尝试侵入您的系统。在这篇文章中,我将向您简要介绍 DDoS 攻击和使用 Fail2ban 的缓解解决方案。

什么是 DDoS 攻击?

分布式拒绝服务 (DDoS) 攻击是一种恶意尝试,通过来自多个攻击源的大量网络流量来中断特定目标服务器或服务的正常流量。这会导致站点或服务的可用性由于资源耗尽而突然变慢或不可用。

应用层 DDoS 攻击

应用层 DDoS 攻击针对第 7 层(OSI 模型的第 7 层),其中网站在服务器上生成并响应 HTTP 请求而交付。例如,不处理大量并发连接(打开大量连接并保持它们建立)的系统可能会耗尽系统的新连接容量。这类似于同时从许多不同的计算机上一遍又一遍地刷新网页,会产生大量的 HTTP 请求淹没服务器。

这些攻击是由僵尸网络而不是实际用户进行的,攻击者可以很容易地产生大量连接并以更高的频率发送大量请求。这些类型的第 7 层攻击很难防御,因为很难区分恶意流量和合法流量。

应用层 DDoS 攻击如何缓解?

正如我之前提到的,缓解第 7 层攻击有点复杂。缓解涉及丢弃或限制流量的应用层 DDoS 攻击尝试,我们可以轻松实施一些方法,从而获得最大的收益。

对请求的挑战

通过对请求源实施质询以检查它是否是机器人,这就像在线提交在线表单时常见的验证码检查一样。给出诸如 javascript 级别挑战之类的要求,可以减轻许多攻击。

使用 Web 应用程序防火墙 (WAF)

Web 应用程序防火墙是一种安全增强工具,可以通过将其放置在您的 Web 服务器前面来帮助缓解第 7 层 DDoS 攻击。这可能会充当您的 Web 服务器的反向代理,并根据一系列规则保护它免受某些类型的恶意流量。WAF 的一个关键优势是能够快速实施自定义规则以响应攻击。还可以维护 IP 信誉数据库,以便跟踪和有选择地阻止恶意流量。

请求速率限制

请求速率限制是有效 DDoS 缓解策略的重要组成部分。这将限制请求的数量,并且服务器将在某个时间窗口内接受。例如,您知道普通人类用户每秒向您的登录 API 端点提交登录详细信息的次数不能超过五次,那么您可以确定是否有任何用户发送请求的频率高于这可能是恶意尝试。然后,您可以在您的登录 API 端点上定义一个每秒 5 个的速率限制,并锁定/阻止任何违反该规则的客户端 IP。

什么是Fail2ban?

Fail2ban 是一种入侵检测系统 (IDS),它持续扫描日志文件(例如 /var/log/nginx/error.log)以查找可疑活动并禁止 IP 或采取预先配置的操作。通常,Fail2ban 操作会更新防火墙规则,以在指定的时间内拒绝从日志文件中检测到的 IP 地址,尽管也可以配置发送电子邮件。开箱即用,Fail2Ban 带有用于各种服务(Apache、Nginx、SSH 等)的过滤器。

让我们开始实施

实施此 DDoS 缓解解决方案时有 2 个部分。首先,我们需要配置 Nginx 来限制基于 IP 地址的请求数。这将使用 Nginx 模块“ngx_http_limit_req_module”。然后 Nginx 会将有关被禁止 IP 的信息记录到错误日志中。Fail2ban 解析 Nginx 错误日志,如果它发现同一个 IP 的出现次数过多,它将通过创建防火墙(iptables)规则将其禁止 x 时间。

如果您不熟悉 Nginx 及其配置,可以参考我之前的帖子:Nginx 最佳实践和初始设置。

在 Nginx 中启用速率限制

速率限制允许您限制用户在特定时间段内可以发出的 HTTP/HTTPS 请求的数量。这也可以用于安全目的,我可以帮助您保护您的网站免受 DDoS 攻击。如果您需要更多关于 NGINX 速率限制的信息,可以查看此链接Rate Limiting with NGINX。

首先,我们必须定义一个限制区域。您可以有多个区域,并且可以分配给不同的位置块。将以下行添加到您的 server 或 http 上下文块中:

1 # vim /etc/nginx/nginx.conf limit_req_zone $binary_remote_addr zone=myzone:20m rate=5r/s;

让我解释一下这里发生了什么:

  • $binary_remote_addr – 客户端的 IP 地址。
  • zone=myzone:20m – “myzone” 是区域名称,它分配内存块。在这种情况下,10m 分配了 10 兆字节的内存,足以每秒处理 160,000 个连接。
  • rate=5r/s – 定义每个客户端允许的默认连接数。这里设置为每秒 5 个请求,最大为 10,但您可以通过将其格式化为 30r/m(每分钟 30 个请求)将其设置为较慢。

区域配置完成后,将其应用于所需的位置块。

1 vim /etc/nginx/sites-enabled/example.com.conf location / { limit_req zone=myzone burst=5 nodelay; }

让我解释一下这里发生了什么:

  • burst=10 – 每秒单个 IP 可以排队的请求数,每个 IP 总共有 10 个请求(5 个在处理中,5 个在队列中)。
  • nodelay - 排队的请求尽快处理。

重新启动 Nginx 服务以影响更改。

1 systemctl restart nginx

我已将服务器的公共 IP 添加到我的 /etc/hosts 文件中并命名为“example.com”,现在站点正在正确加载。

安装 Fail2ban

1 apt-get update apt-get install fail2ban

开箱即用,fail2ban 配置为仅禁止失败的 ssh 登录尝试 IP。因此,我们需要启用一些将配置为检查 Nginx 日志的规则。

配置 Fail2ban 的常规设置

一旦安装了fail2ban,需要配置本地配置文件。在 fail2ban 中,它们被称为“监狱”。jail.conf使用以下命令制作文件的本地副本:

1 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local vim /etc/fail2ban/jail.local #Find the "[nginx-limit-req]" line and comment on the existing lines under it and add the following lines, which define the bantime, findtime, retries, and actions. [nginx-limit-req] enabled = true filter = nginx-limit-req action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp] logpath = /var/log/nginx/*error.log findtime = 300 maxretry = 3 bantime = 3600

让我解释一下这里发生了什么:

  • [nginx-req-limit] – 过滤器名称,您可以为此指定任何名称。
  • enabled = true – 启用过滤器。
  • filter = nginx-req-limit – 这是来自 fail2ban 的默认过滤器。
  • action = iptables-multiport[name=ReqLimit, port=”http,https”, protocol=tcp] – 这是当在 Nginx error.log 文件中发现可疑 IP 时 fail2nam 将触发的操作。
  • logpath = /var/log/nginx/*error.log – 我们告诉 fail2ban 哪个日志文件需要检查可疑 IP。
  • findtime = 300 – fail2ban 限制搜索的时间。(5分钟)
  • maxretry = 3 – IP 在被禁止之前可以出现在日志中的最大次数。
  • bantime = 3600 – IP 将被禁止多长时间。(1小时)

在这种情况下,如果一个 IP 地址在 5 分钟内出现在我们的错误日志中 3 次,fail2ban 将禁止它。

findtime 和 值很重要,maxretry 因为它们决定了可疑 IP 被禁止的频率。如果您将这些值调整得更小,攻击者 IP 将更频繁地被禁止。根据需要调整值。

如果需要,修改nginx-req-limit过滤器我的编辑nginx-limit-req.conf文件。

1 vim /etc/fail2ban/filter.d/nginx-limit-req.conf [Definition] failregex = limiting requests, excess:.* by zone.*client: <HOST> ignoreregex =

完成所有 fail2ban 配置后,重新启动服务并检查状态。

1 systemctl restart fail2ban.service systemctl status fail2ban.service

测试和故障排除

现在是时候验证配置是否按预期运行了。可以使用 Siege 或 Apache Benchmark Tool 等工具进行测试,对于这个测试,我将使用 apache benchmark 工具来测试网页上的速率限制。

如果您的系统上没有安装 ab,则必须使用发行版的包管理器安装 apache2-utils 包。如果您使用的是 Windows,请下载 Apache Binaries .zip 文件,然后在命令提示符下使用所需参数运行 ab.exe。

1 #On Debian Servers apt-get update && apt-get upgrade apt-get install -y apache2-utils #On Redhat Servers yum update yum install httpd httpd-tools -y

假设我们想看看一个网络服务器处理 20 个请求的速度有多快,最多同时运行 10 个请求:

1 ab -n 20 -c 10 Example Domain

Nginx 错误日志:

1 tail -f /var/log/nginx/error.log

运行以下命令以查看 fail2ban 过滤器是否适用于上述日志文件。如果匹配项为零,则正则表达式过滤器可能存在问题。

1 fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-limit-req.conf

Fail2ban 日志:

1 tail -f /var/log/fail2ban.log

Fail2ban 状态:

通过使用以下命令检查 fail2ban 状态,您可以看到带状 IP 列表。

1 fail2ban-client status nginx-limit-req

要验证 Fail2ban 添加到 iptables 的规则,请使用以下命令:

1 iptables -L

现在,如果您重新加载站点,该站点将无法加载,因为它被 fail2ban 使用 iptables 阻止。

手动添加/删除禁止 IP(可选)

您还可以手动禁止或取消禁止 IP 地址。

1 #Ban a specific IP with that jail fail2ban-client set nginx-limit-req banip 1.2.3.4 #Unban a specific IP with that jail fail2ban-client set nginx-limit-req unbanip 1.2.3.4

设置 fail2ban 以保护您的 Nginx 服务器免受 DDoS 攻击是相当简单的。但是,fail2ban 提供了很大的灵活性来定制适合您的安全需求的策略。

使用 Fail2ban 保护 Web 服务器免受 DDoS 攻击相关推荐

  1. 如何保护企业网络免受DDoS攻击?—Vecloud微云

    使DNS服务器成为放大攻击的目标选择的原因在于,它们的Internet基础结构旨在每分钟处理数百万个请求,并连接到高带宽链接以处理这种流量. 因此,犯罪者利用DNS服务器行为来放大攻击,并将最初的小查 ...

  2. ubuntu使用fail2ban_「干货分享」手把手教你如何使用Fail2Ban保护Linux服务器

    导语:解决问题肯定是越简单越好,而Fail2Ban就是解决棘手问题的一种优雅的解决方案,它只需很少的配置,几乎不会给您或您的计算机带来任何操作开销. 使用Fail2Ban,您的Linux计算机会自动阻 ...

  3. DDoS deflate 解决服务器被DDOS攻击的问题

    23.2.1 如何查是否受到了DDOS攻击 DDOS概述:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻 ...

  4. 微软蜜罐服务器,搭建蜜罐来保护web服务器 -电脑资料

    "蜜罐"即让 误以为已经成功入侵网络,并且让其继续"为所欲为",我们的目的在于拖延时间,以便我们的管理员能把 "抓住", 我们使用的软件是& ...

  5. 服务器被ddos攻击了怎么处理

    服务器被DDOS攻击是很常见的事情,但对于网站管理员来说,这可能是一件非常麻烦的事情.那么,当服务器被DDOS攻击时,我们应该怎么处理呢? 第一步,尽快确定服务器是否真的被DDOS攻击了.可以使用网站 ...

  6. 用iptables来防止web服务器被CC攻击

    今天在网上又学了一招. 要学会攻防兼备哦. 当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能. 1.系统要求 (1)LINUX 内核 ...

  7. 手游服务器被ddos攻击要怎么解决?

    手游服务器被ddos攻击要怎么解决? 如今做网络游戏的企业都知道服务器的安全对于我们来说至关重要!互联网上面的DDoS攻击和CC攻击几乎无处不在,而游戏服务器防御能力和处理能力要求又相对较高,普通的服 ...

  8. 游戏服务器被ddos攻击怎么办,如何防御?

    很多游戏公司会遇到这样的情况,游戏开发完刚刚上线,游戏服务器被ddos攻击被迫下线.那么,游戏被ddos攻击怎么办,如何防御? 黑客为达目的,会专门针对这个客户的多个游戏业务量身定制完善的DDoS攻击 ...

  9. 服务器被DDoS攻击,怎么破?

    文章目录 前言 网站受到DDoS的症状 判断是否被攻击 查看网络带宽占用 查看网络连接 TCP连接攻击 SYN洪水攻击 防御措施 TCP/IP内核参数优化 iptables 防火墙预防 防止同步包洪水 ...

最新文章

  1. Python可迭代的对象与迭代器
  2. 你现在还在使用刷脸支付吗?不,刷手支付已来!!!不侵犯隐私、秒速支付...
  3. Linux-man命令
  4. TeeChart经验总结 10.ZoomScroll
  5. MySQL 系统架构 说明
  6. 【tensorflow】Sequential 模型方法 compile, model.compile
  7. 汇编语言 修改内存中的过时数据
  8. python中的[-1]、[:-1]、[::-1]、[n::-1]
  9. Grunt构建工具能做哪些事?
  10. Android ThreadPool
  11. js 调用百度地图,并且定位用户地址,显示省市区街,经纬度
  12. 戴尔DCS两周年庆 推新型数据中心设备
  13. 【数据攻略】 假设检验 | 统计功效 | 最小样本量
  14. ear的英语怎么念_ear的三种发音各有哪些英文单词
  15. Office软件Android无法登录,office mobile(安卓版)无法使用
  16. 2022/9/11 Python进阶--Linux版 持续更新
  17. 解决 win10 商店无法登录, win10 账号问题
  18. 【专家观点】超大规模数据要素市场体系下数据价格生成机制研究
  19. ubuntu top命令详解
  20. 数据可视化——R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合)

热门文章

  1. 动漫轮播html,带17种内置过渡动画的jquery轮播图插件
  2. Excel制作俄罗斯方块
  3. JNPF3.4.2系统升级公告
  4. 微带线与带状线的初步了解
  5. 授予解锁本该遭拒的十大科技专利:苹果滑动解锁上榜
  6. 研究生论文开题报告技巧分享
  7. HTML中的上下角标
  8. 单片机STM32H7 运动控制源码,通过双DMA实现脉冲输出8个轴插补能达到500k
  9. 铁死亡中的铁代谢 | Nature Reviews Nephrology 2023
  10. 设置word默认打开所有文档的显示比例