DDoS protection

本页说明 MikroTik RouterOS 的 DDoS 防护配置,涵盖用于检测和阻止各种攻击类型(如 HTTP 洪水、SYN 洪水和 DNS 放大)的防火墙规则。文中包含地址列表、防火墙链以及特定 TCP SYN cookie 设置的详细配置示例,以缓解 DoS/DDoS 攻击。

DDoS 防护

拒绝服务(DoS)或分布式拒绝服务(DDoS)攻击是一种恶意尝试,它通过用大量互联网流量淹没目标或其周边基础设施,来破坏目标服务器、服务或网络的正常流量。DDoS 攻击有多种类型,例如 HTTP 洪水、SYN 洪水、DNS 放大等。

针对 DDoS 的防护

配置命令

警告

这些规则只是对防火墙的改进,不要忘记妥善保护你的设备。

/ip/firewall/address-list
add list=ddos-attackers
add list=ddos-targets
/ip/firewall/filter
add chain=forward connection-state=new action=jump jump-target=detect-ddos
add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s
add action=add-dst-to-address-list address-list=ddos-targets address-list-timeout=10m chain=detect-ddos
add action=add-src-to-address-list address-list=ddos-attackers address-list-timeout=10m chain=detect-ddos
/ip/firewall/raw
add action=drop chain=prerouting dst-address-list=ddos-targets src-address-list=ddos-attackers

配置说明

首先,我们会将每个新连接发送到特定的防火墙链,在那里检测 DDoS:

/ip/firewall/filter/add chain=forward connection-state=new action=jump jump-target=detect-ddos

在新建的链中,我们将添加以下带有 "dst-limit" 参数的规则。该参数的书写格式如下:dst-limit=****count[/time],burst,mode[/expire]。我们将基于目标和源地址流匹配 32 个数据包,突发为 32 个数据包,每 10 秒更新一次。该规则会一直工作,直到超过给定速率。

/ip/firewall/filter/add chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s action=return

到目前为止,所有合法流量都应通过 "action=return",但在 DoS/DDoS 的情况下,"dst-limit" 缓冲区将被填满,规则将不再“捕获”任何新流量。接下来就是处理攻击的规则。让我们先创建一个包含将被丢弃的攻击者和受害者的列表:

/ip/firewall/address-list/add list=ddos-attackers
/ip/firewall/address-list/add list=ddos-targets
/ip/firewall/raw/add chain=prerouting action=drop src-address-list=ddos-attackers dst-address-list=ddos-targets

通过防火墙过滤器部分,我们将把攻击者添加到 "DDoS-attackers",将受害者添加到 "ddos-targets" 列表:

/ip/firewall/filter
add action=add-dst-to-address-list address-list=ddos-targets address-list-timeout=10m chain=detect-ddos
add action=add-src-to-address-list address-list=ddos-attackers address-list-timeout=10m chain=detect-ddos

SYN 攻击

SYN 洪水

SYN 洪水是一种 DoS 攻击形式,攻击者向目标系统发送一连串 SYN 请求,试图消耗足够的服务器资源,使系统对合法流量无响应。幸运的是,在 RouterOS 中我们有一个针对此类攻击的特定功能:

/ip/settings/set tcp-syncookies=yes

该功能的原理是回送包含少量加密哈希的 SYN-ACK 数据包,响应的客户端会在其 ACK 数据包中回显该哈希。如果内核在回复数据包中看不到这个“cookie”,就会认为该连接是伪造的并将其丢弃。

SYN-ACK 洪水

SYN-ACK 洪水是一种攻击方法,它以高速率向目标服务器发送伪造的 SYN-ACK 数据包。服务器需要大量资源来处理这些乱序到达的数据包(不符合正常的 SYN、SYN-ACK、ACK TCP 三次握手机制)。它可能忙于处理攻击流量,以至于无法处理合法流量,从而使攻击者达到 DoS/DDoS 的状态。在 RouterOS 中,我们可以配置前面示例中类似的规则,但更专门地针对 SYN-ACK 洪水:

/ip/firewall/filter/add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s protocol=tcp tcp-flags=syn,ack