欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用HAProxy防范简单的DDos攻击

程序员文章站 2022-07-13 17:34:36
...
第一部分: 系统级防护

1.TCP syn flood 攻击

syn flood攻击是通过发送大量SYN包到一台服务器,使其饱和或者至少造成其上行带宽饱和。
如果攻击规模很大,已经撑满了你的所有Internet带宽,那么唯一的方法就是请求你的ISP给与协助。
我们本地的HAProxy上可以做一点简单防护,聊胜于无。

修改/etc/sysctl.conf,加入如下内容:

# Protection SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_max_syn_backlog = 1024

第二部分: HAProxy的防护功能

HAProxy 1.5版本中多了一些有趣的功能,我们可以拿来防范一些小规模的攻击行为。
主要是stick-table表中可以存储额外的附加信息了。

形式如下:
stick-table type {ip | integer | string [len ] | binary [len ]} size [expire ] [nopurge] [peers ] [store ]*

每个主机只能有一个stick-table,表中能存储的额外信息类型如下:

- server_id : 用户请求被分配到的服务器的ID。形式为整数。
                这个值可以被"stick match", "stick store","stick on"规则使用。
                 It is automatically enabled when referenced.

- gpc0 : 第一个通用计数器,形式为一个正32位整数。
           可以用于任何东西。通常会用于给一些特定的entry打tag。

- conn_cnt : Connection计数器,形式为一个正32位整数。
               记录了匹配当前entry的,从一个客户端处接收到的连接的绝对数量。
               这个数量并不意味着被accepted的连接数量,单纯就是收到的数量。

- conn_cur : 当前连接数,形式为一个正32位整数。
               当一新连接匹配指定的entry的时候,这个数值增加。
               当连接结束的时候,这个数值减少。
               通过这个值可以了解一个entry上任意时间点的准确的连接数。

- conn_rate() : connection的连接频率 (takes 12 bytes).
                          这个值统计指定时间范围内(毫秒为单位)进来的connection的频率。
                          这个数值可以通过ACL匹配一些规则。

- sess_cnt : Session计数器,形式为一个正32位整数。
               记录了匹配当前entry的,从一个客户端处接收到的session的绝对数量。
               一个session指的是一个已经被layer 4规则接受的connection。

- sess_rate() : session的连接频率 (takes 12 bytes).
                          这个值统计指定时间范围内(毫秒为单位)进来的session的频率。
                          这个数值可以通过ACL匹配一些规则。

- http_req_cnt : HTTP请求计数器,形式为一个正32位整数。
                   记录了匹配当前entry的,从一个客户端接受到的HTTP请求的绝对数量。
                   无论这个请求是合法还是非法。
相关标签: haproxy