FortiGate DoS策略工作原理

一、DoS防护

       拒绝服务(DoS)策略会检查到达FortiGate接口的网络流量是否存在异常模式,这通常表明存在攻击。当攻击者启动与目标的异常大量会话时(穿过或到达FortiGate),将发生拒绝服务。大量会话会减慢或禁用目标系统,从而阻止合法用户使用它。
       在安全策略之前先检查DoS策略,以防止攻击触发更多的资源密集型安全保护并减慢FortiGate的速度。

二、DoS异常

       FortiGate针对特定的异常流量设置了预定义的异常种类,用户无法添加自定义的DoS异常,以下是每个异常阈值的解释。

       1、L3异常
       ip_src_session(并发):如果来自一个源IP地址的并发IP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。
       ip_dst_session(并发):如果到一个目标IP地址的并发IP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。

       2、L4异常
       tcp_syn_flood(速率):如果到一个目标IP地址的新TCP连接(包括重传)的SYN数据包速率超过配置的阈值,则执行配置的操作。建议值:2000/s。
       tcp_port_scan(速率):如果来自一个源IP地址的新TCP连接的SYN包速率(包括重传)超过了配置的阈值,则将执行配置的操作。建议值:1000/s。
       tcp_src_session(并发):如果来自一个源IP地址的并发TCP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。
       tcp_dst_session(并发):如果到一个目标IP地址的并发TCP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。
       udp_flood(速率):如果到一个目标IP地址的UDP会话速率超过配置的阈值,则将执行配置的操作。建议值:2000/s。
       udp_scan(速率):如果来自一个源IP地址的UDP会话速率超过配置的阈值,则将执行配置的操作。建议值:2000/s。
       udp_src_session(并发):如果来自一个源IP地址的并发UDP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。
       udp_dst_session(并发):如果到一个目标IP地址的并发UDP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。
       icmp_flood(速率):如果发送到一个目标IP地址的ICMP数据包的速率超过配置的阈值,则将执行配置的操作。建议值:250/s。
       icmp_sweep(速率):如果来自一个源IP地址的ICMP数据包的速率超过配置的阈值,则将执行配置的操作。建议值:100/s。
       icmp_src_session(并发):如果来自一个源IP地址的并发ICMP连接数超过配置的阈值,则将执行配置的操作。建议值:300。
       icmp_dst_session(并发):如果到一个目标IP地址的并发ICMP连接数超过配置的阈值,则将执行配置的操作。 建议值:1000。
       sctp_flood(速率):如果发送到一个目标IP地址的SCTP数据包的速率超过配置的阈值,则将执行配置的操作。建议值:2000/s。
       sctp_scan(速率):如果来自一个源IP地址的SCTP会话速率超过配置的阈值,则将执行配置的操作。建议值:1000/s。
       sctp_src_session(并发):如果来自一个源IP地址的并发SCTP连接数超过配置的阈值,则将执行配置的操作。建议值:5000。
       sctp_dst_session(并发):如果到一个目标IP地址的并发SCTP连接数超过配置的阈值,则执行配置的操作。 建议值:5000。
   
三、基于并发会话数的阈值

       对于基于并发会话数的阈值,DoS策略会将超过设置阈值的连接阻断。这里举个例子:
       1、在FortiGate的DoS策略中,将icmp_src_session的阈值设置为10,攻击者发送了10条匹配异常条件的连接通过FortiGate。
       2、这10条连接将被放通,但第11条及以后匹配的连接将被阻断。此时,匹配异常条件的允许通过会话计数器变为10。
       3、之后,这10条连接没有后续报文传输,FortiGate针对ICMP流量的的老化时间为60s,那么60s的计时器到期后,匹配异常条件的允许通过会话计数器被重置为0。
       4、所以,如果在阻止之前允许进行10个会话,则在60秒后,将允许再进行10个会话。

四、基于速率的阈值

       对于基于速率的阈值,其中阈值以每秒通过或到达的数据包为单位进行度量,“阻止”操作可通过两种方式防止异常流量瘫痪目标系统:
       1、continuous:检测到异常后立即阻止数据包,并在速率高于阈值时继续阻止数据包。此为默认配置。
       2、periodical:检测到异常后,允许每秒配置的数据包数量。
       这里举个例子:
       1、在FortiGate的DoS策略中,将icmp_flood的阈值设置为10/s,攻击者以20pps的速率启动1000个数据包的连续ping通过FortiGate。
       2、在continuous模式下,如果前10个数据包触发了DoS策略,则前10个数据包通过,阻断剩余的990个数据包。
       3、在periodical模式下,每秒钟允许通过10个数据包,所以会有500个数据包被阻断。
       (注:由于发包速率可能会发生波动,因此通过和阻止的数据包的实际数量可能不准确,但数量应接近定义的阈值。)
       periodical模式需要在CLI下启动:
config ips global
    set anomaly-mode {continuous | periodical}
end

五、Quarantine

       Quarantine用于阻止来自被认为是恶意行为者的源IP地址或对网络有害的流量源的任何其他流量。在隔离期间,将阻止来自源IP地址的流量,并将源IP地址添加到被禁止的用户列表中。禁止的用户列表保留在内核中,并由防病毒,数据泄漏防护(DLP),DoS和入侵防护系统(IPS)使用。使用任何这些功能的任何策略都将阻止来自攻击者IP地址的流量。该功能仅在CLI下可以配置,请参考“FortiGate DoS策略配置”。
       查看Quarantine用户列表:
# diagnose user quarantine list
src-ip-addr       created                  expires                  cause            
192.168.118.77     Fri Jan 15 18:47:54 2021 Fri Jan 15 18:57:54 2021 DOS