http {limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求server {location ~ \.php$ {limit_req zone=one burst=5 nodelay; //执行的动作,通过zone名字对应 }}location /download/ {limit_conn addr 1; // 限制同一时间内1个连接,超出的连接返回503}}}
frontend httpbind 10.0.0.20:80acl anti_DDoS always_true#白名单acl whiteip src -f /usr/local/haproxy/etc/whiteip.lst#标记非法用户stick-table type ip size 20k expire 2m store gpc0tcp-request connection track-sc1 srctcp-request inspect-delay 5s#拒绝非法用户建立连接tcp-request connection reject if anti_DDoS { src_get_gpc0 gt 0 }
frontend httpbind 10.0.0.20:80acl anti_DDoS always_true#白名单acl whiteip src -f /usr/local/haproxy/etc/whiteip.lst#标记非法用户stick-table type ip size 20k expire 2m store gpc0tcp-request connection track-sc1 srctcp-request inspect-delay 5s#拒绝非法用户建立连接tcp-request connection reject if anti_DDoS { src_get_gpc0 gt 0 }
frontend httpbind 10.0.0.20:80acl anti_DDoS always_true#白名单acl whiteip src -f /usr/local/haproxy/etc/whiteip.lst#标记非法用户stick-table type ip size 20k expire 2m store gpc0tcp-request connection track-sc1 srctcp-request inspect-delay 5s#拒绝非法用户建立连接tcp-request connection reject if anti_DDoS { src_get_gpc0 gt 0 }后端:backend xxx.xxx.cnmode httpoption forwardforoption httplogbalance roundrobincookie SERVERID insert indirectoption httpchk GET /KeepAlive.ashx HTTP/1.1\r\nHost:\ server.1card1.cnacl anti_DDoS always_false#白名单acl whiteip src -f /usr/local/haproxy/etc/whiteip.lst#存储client10秒内的会话速率stick-table type ip size 20k expire 2m store http_req_rate(10s),bytes_out_rate(10s)tcp-request content track-sc2 src#十秒内会话速率超过50个则可疑acl conn_rate_limit src_http_req_rate(server.1card1.cn) gt 80#判断http请求中是否存在SERVERID的cookieacl cookie_present cook(SERVERID) -m found#标记为非法用户acl mark_as_abuser sc1_inc_gpc0 gt 0tcp-request content reject if anti_DDoS !whiteip conn_rate_limit mark_as_abuser
frontend httpbind 10.0.0.20:80acl anti_DDoS always_true#白名单acl whiteip src -f /usr/local/haproxy/etc/whiteip.lst#标记非法用户stick-table type ip size 20k expire 2m store gpc0tcp-request connection track-sc1 srctcp-request inspect-delay 5s#拒绝非法用户建立连接tcp-request connection reject if anti_DDoS { src_get_gpc0 gt 0 }后端:backend xxx.xxx.cnmode httpoption forwardforoption httplogbalance roundrobincookie SERVERID insert indirectoption httpchk GET /KeepAlive.ashx HTTP/1.1\r\nHost:\ server.1card1.cnacl anti_DDoS always_false#白名单acl whiteip src -f /usr/local/haproxy/etc/whiteip.lst#存储client10秒内的会话速率stick-table type ip size 20k expire 2m store http_req_rate(10s),bytes_out_rate(10s)tcp-request content track-sc2 src#十秒内会话速率超过50个则可疑acl conn_rate_limit src_http_req_rate(server.1card1.cn) gt 80#判断http请求中是否存在SERVERID的cookieacl cookie_present cook(SERVERID) -m found#标记为非法用户acl mark_as_abuser sc1_inc_gpc0 gt 0tcp-request content reject if anti_DDoS !whiteip conn_rate_limit mark_as_abuser
global_defs {router_id {{ server_id }}}vrrp_script chk_haproxy{script “/home/proxy/keepalived/{{ project }}/check_haproxy_{{ server_id }}.sh”interval 2weight -10}vrrp_instance VI_1 {state {{ role }}interface {{ interface }}virtual_router_id 10{{ tag }}priority {{ value }}advert_int 1authentication {auth_type PASSauth_pass keepalived_DDoStrack_script {chk_haproxy}}virtual_ipaddress {{{ vip }}/24 dev {{ interface }} label {{ interface }}:{{ tag }}}
(阿里云防御5折,联系Q/微信:3192603)
调度系统:在 DDoS 分布式防御系统中起着智能域名解析、网络监控、流量调度等作用。
源站:开发商业务服务器。
攻击防护点:主要作用是过滤攻击流量,并将正常流量转发到源站。
后端机房:在 DDoS 分布式防御系统中会与攻击防护点配合起来,以起到超大流量的防护作用,提供双重防护的能力。
步骤主要有:
1. 向公有云 or CDN 厂商申请接入高防 IP 或者 DDoS 清洗系统,同时提交站点域名原解析记录
2. 修改站点域名解析记录指向公有云 or CDN 厂商提供的 ip
3. 公有云 or CDN 厂商清洗 DDoS 攻击流量,将清洗过后的正常流量回送到站点域名原解析记录的 ip
公有云 DDoS 防护服务介绍
目前大部分公有云厂商都把 DDoS 防护列入服务清单,但由于技术、资源、管理等方面的区别,存在着以下不同点:
1. 计费模式不同:有的将 DDoS 防护作为附赠服务,有的将 DDoS 防护收费,而且不同厂商的收费价格或者收费起点都不同。
2. 业务场景不同:有的公有云厂商会区分客户业务场景,比如直播、金融、游戏之类,但大部分厂商并不会区分这么细。
3. 功能丰富度不同:公有云 DDoS 防护服务提供给用户自定义的东西多少,依赖于产品成熟度。
4. 清洗能力不同:DDoS 清洗流量规模因厂家差异从几十 Gbps 到几百 Gbps,使用的防御技术成熟度和效果也各有差异,比如有的 cc 攻击防御效果立杆见影,有的则非常一般。
2.2 高效的 DDoS 攻击探测与分析工具 FastNetMon
也可以使用 FastNetMon 进行实时流量探测和分析,直接在命令行展示结果,但是如果攻击流量很大,多半是派不上用场了。
2.3 攻击溯源
Linux 服务器上开启 uRPF 反向路径转发协议,可以有效识别虚假源 ip,将虚假源 ip 流量抛弃。另外,使用 unicast 稀释攻击流量,因为 unicast 的特点是源-目的=1:n,但消息只会发往离源最近的节点,所以可以把攻击引导到某个节点,确保其他节点业务可用。