WenJunjie Blog

sysadmin

DDOS Attack

| Comments

DDOS: Distributed Denial of Service 分布式拒绝服务 利用合理的请求造成资源过载,导致服务不可用。将正常请求放大若干倍,通过若干个网络节点同时发起攻击,达成规范效应。

网络层DDOS TCP三次握手连接过程中发起 SYN flood、UDP flood、ICMP flood SYN flood: 伪造大量的源IP地址,分别向服务器端发送大量的SYN包,服务器端会返回SYN/ACK包,因源地址是伪造,伪造IP并不会应答,服务器端没收到伪造IP的回应,会重试3-5次且等待下一个SYN Time(30-120s) 对抗SYN flood主要措施 SYN Cookie/SYN Proxy…

应用层DDOS TCP三次握手已经完成 CC(Challenge Collapaser)攻击 对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务器资源的目的。 应用层DDOS攻击与正常业务的界线比较模糊 对抗手段: 优化服务器、应用代码性能缓解此类攻击;在应用中限制每个客户端请求频率;优化网络架构、利用负载均衡分流缓解网站压力 资源耗尽攻击

iptables iptables -A INPUT -p tcp –dport 80 –syn -m recent –name webpool –rcheck –seconds 60 –hitcount 10 -j LOG –log-prefix ‘DDOS:’ –log-ip-options iptables -A INPUT -p tcp –dport 80 –syn -m recent –name webpool –rcheck –seconds 60 –hitcount 10 -j DROP

tengine req_limit

主动防御 nginx模块防ddos抓取 ngx_http_limit_conn_module 限制单个ip连接数 ngx_http_limit_req_module 限制单个ip每秒请求数 nginx_limit_speed_module 对ip限速

fail2ban 通过扫描log来异步判断是否用iptable封掉,性能如何需观测 封掉每120秒超过120次访问的ip /etc/fail2ban/jail.conf [http-get-dos] enabled = true port = http,https filter = nginx-bansniffer logpath = /usr/local/nginx/logs/access.log maxretry = 120 findtime = 120 bantime = 3600 action = iptables[name=HTTP, port=http, protocol=tcp]

/etc/fail2ban/filter.d/nginx-bansniffer.conf #404 [Definition]

failregex = -.- .HTTP/1. . .*$ ignoreregex =

/etc/init.d/fail2ban restart

vim /etc/fail2ban/jail.conf [DEFAULT] ignoreip = 127.0.0.1 #这里最好加上办公区的ip ,呵呵,把自己封了就太傻B 了 bantime = 600 #ban 它多久 findtime = 600 #检查多长时间内的日志 maxretry = 3 #在监控的日志中,出现了多少次就要ban 了 backend = auto #好像是说读取日志文件的算法,这里让它自动吧

全局变量,下面可以覆盖的 有很多模块,定义一个自己的吧

[nginx-iptables] enabled = true # 启用模块的意思 filter = nginx # filter.d/nginx.conf , 必须在这里面写点东西 action = iptables[name=NGINX, port=80, protocol=tcp] # iptables 的设置 mail-whois[name=nginx, dest=you@admin.com] # 报警设置,写自己的邮箱吧,要起sendmail 噢 logpath = /data/nginx/logs/t.access.log # 监控的log maxretry = 100 #10 分钟使用100 次,ban 了你!

添加 /etc/fail2ban/filter.d/nginx.conf [Definition] failregex = ^ -.”(GET|POST) \/search.json. HTTP\/.*$ # 写自己的正则吧,符合这个正则的,就算一次fail ,10分钟内100 次(我的设置),就ban 了, 可以指代ip 或 hostname 什么的 ignoreregex =

配置完成,启动服务:/etc/init.d/fail2ban start chkconfig fail2ban on

shorewall:iptables防火墙配置工具 TCP Wrapper:限制连接来源的工具 Gamin:实时监视文件或文件夹变动的工具

从User-Agent阻止spider抓取 ### Block download agents ### if ($http_user_agent ~* WebZIP|wget) { return 403; } ###

if ($args ~* “action=lostpassword$”) { deny all; }

被动防御 iptables限制同一个ip同时连接数 限制同一ip一分钟最多建立15连接,超出的连接会被丢弃 /sbin/iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set /sbin/iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –secondes 60 –hitcount 15 -j DROP service iptables save

用bash统计ip访问频率,超过频率的ip放进黑名单,黑名单的ip用iptables或nginx.conf封掉一定时间,或降低其许可的访问频率,另可加白名单功能 #!/bin/sh status=netstat -na|awk ‘$5 ~ /[0-9]+:[0-9]+/ {print $5}’ |awk -F “:” — ‘{print $1}’ |sort -n|uniq -c |sort -n|tail -n 1 NUM=echo $status|awk ‘{print $1}’ IP=echo $status|awk ‘{print $2}’ result=echo “$NUM > 150″ | bc if [ $result = 1 ] then echo IP:$IP is over $NUM, BAN IT! /sbin/iptables -I INPUT -s $IP -j DROP fi

根据特征码屏蔽请求(对CC攻击效果较好)

YDoD(Yahoo! Department of Defense) appche module -> taobao tdod

监测请求,打开页面频率太高或打开太多页面,请求会被服务器临时屏蔽,提示怀疑为机器人,要求输入验证码

购买机房流量清洗服务 ddos流量清洗设备,主要还是绿盟的黑洞和isp运营商的cisco guard为主 mrtg对带宽进行监视,配合ddos防火墙报警判断ddos攻击,通过对ddos抓包的流量协议进行分析以提取部分特殊的特征码进行过滤 流量来源进行检测,短时间内某个源地址连接数、请求数、发送数据流量超过限定阈值(有安全经验的人员制定)直接通过isp deny或路由牵引 纯流量DDOS到了出口网关就无解 纯暴力 安全宝或360网站卫士缓解DDOS攻击(基于CDN加入侵防御),阿里出类似服务 自建CDN防御DDoS(1):知己知彼,建设持久防线

大量数据包拥塞带宽 流量攻击 利用协议的缺陷,大量半连接耗尽资源 syn攻击

使用负载均衡分担流量 CDN 代理服务器引流 syn proxy 通过分析日志了解攻击规律 ip url User-Agent

包过滤技术:过滤对外开放端口 使用dns跟踪匿名攻击 使用ngrep来处理tfnsk(假冒源地址工具)攻击

OWASP

Comments