Як захистити Nginx від інструменту HULK DoS


0

Є інструмент під назвою HULK (Http Unbearable Load King). Це інструмент відмови в сервісі веб-сервера. Він призначений для генерування обсягів унікального та затуманеного трафіку на веб-сервері, минаючи кешування двигунів і, отже, потрапляючи на прямий пул ресурсів сервера.

Я тестував це на Nginx, і він відклав Nginx за лічені секунди. Нижче наведено фрагмент журналу мого тестування.

192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?UDY=CLZFTJP HTTP/1.1" 200 199265 "http://www.usatoday.com/search/results?q=BZWVGQ" "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?YGNBNQK=BEPPWCSMKJ HTTP/1.1" 200 199272 "http://www.google.com/?q=PJCSSRQLT" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?XETRTJ=LFV HTTP/1.1" 200 199264 "http://www.usatoday.com/search/results?q=QHDEEM" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?JYJHZB=ZHIB HTTP/1.1" 200 199265 "http://www.mywebsite.com/UPHIBL" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?VHXLKAIB=NCU HTTP/1.1" 200 199266 "http://www.mywebsite.com/KIPQLJH" "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
192.168.1.10 - - [17/May/2013:16:37:36 +0800] "GET /?IGCQSNG=BNKSM HTTP/1.1" 200 199267 "http://engadget.search.aol.com/search?q=POZWPGSTV" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:36 +0800] "GET /?HUL=BMZAQXXXF HTTP/1.1" 200 199267 "http://www.usatoday.com/search/results?q=KUQNRADOUP" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:36 +0800] "GET /?ZWOWYGEZ=PBEAVXZF HTTP/1.1" 200 199271 "http://engadget.search.aol.com/search?q=FXWHN" "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"

Мій тестовий сервер (CentOS 6.4 64bit) налаштований з Varnish, але, як сказав інструмент, він обійшов кешування Varnish.

Я можу встановити fail2ban, але як я можу визначити регулярний вимір для такого запиту? Або є спосіб налаштувати Nginx для захисту від подібної атаки? Може, переписати правило чи щось таке?


Є відповідь на ваше дуже схоже запитання з вчорашнього сервера defaultfault.com/questions/508180/nginx-redirect-get-pattern Що ви шукаєте в цьому питанні?
Данак

1
ModSecurity має правила, які блокують цей інструмент. Я повинен знати, я відповідаю за них. Повну відповідь я опублікую пізніше.
Майкл Хемптон

@Danack Це насправді пов'язано. Я шукав в мережі, який інструмент використовувався для того, щоб вдарити по моєму серверу, і HULK був дуже схожий на запити на цьому потоці serverfault.com/questions/508180/nginx-redirect-get-pattern . Я спробував різну схему регексу, але нічого не вийшло. Тому я думаю, чи є більш простий спосіб та / або кращий підхід для захисту Nginx від інструменту HULK.
chr1x2

@MichaelHampton Я чекаю на це. тия.
chr1x2

Я б запропонував Cloudflare
Йосип Шимборський

Відповіді:


0

Я просто наткнувся на цю нитку і помітив, що у неї є 2 голоси. У будь-якому випадку, я просто хочу опублікувати те, що я зробив, щоб заблокувати HULK-запити.

В /etc/nginx/conf.d/default.conf(або подібному). Я додав наступне всередині serverблоку:

if ($args ~* "(.{1,})=(.{1,})" ){
        rewrite ^/$ /444_rewrite?;
}
location  /444_rewrite {
        return 444;
}

Що це робить? Оскільки сайт використовує дружню URL-адресу, і жодна URL-адреса сайту не починається з, ?і =я можу перенаправити всі ті дивні GET-запити на 444. Аргумент (.{1,})=(.{1,})вказує Nginx перенаправляти всі GET-запити, які містять =між собою будь-які символи .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.