Nginx защита от DDoS (testcookie-nginx-module)

Thank you for reading this post, don't forget to subscribe!

Наи­бо­лее часто для нару­ше­ния рабо­ты сай­та зло­умыш­лен­ни­ки исполь­зу­ют HTTP-флуд. Для защи­ты от HTTP-флу­да я буду исполь­зо­вать связ­ку из Nginx и моду­ля nginx-module-testcookie

Для нача­ла необ­хо­ди­мо доба­вить репо­зи­то­рий rpms.southbridge.ru в систе­му. Для это­го выпол­ни­те команду:

rpm -Uhv http://rpms.southbridge.ru/southbridge-rhel7-stable.rpm

Далее стан­дарт­ной коман­дой уста­нав­ли­ва­ем пакеты:

yum install nginx nginx-module-testcookie

С уче­том того, что Nginx я обнов­ляю доста­точ­но ред­ко, по ряду при­чин на посто­ян­ной осно­ве я не хочу исполь­зо­вать выше ука­зан­ный репо­зи­то­рий, то я выпол­ню уста­нов­ку непо­сред­ствен­но из ска­чан­ных rpm-пакетов:

wget http://rpms.southbridge.ru/rhel7/stable/x86_64/nginx-1.9.5-1.el7.centos.ngx.x86_64.rpm
wget http://rpms.southbridge.ru/rhel7/stable/x86_64/nginx-module-testcookie-1.15.6.1.24-1.el7.ngx.x86_64.rpm

Если в систе­ме ранее уже был уста­нов­лен Nginx, нуж­но его уда­лить. Уста­нав­ли­ва­ем Nginx и nginx-module-testcookie:

rpm -Uhv nginx-1.15.6-1.el7.ngx.x86_64.rpm
rpm -Uhv nginx-module-testcookie-1.15.6.1.24-1.el7.ngx.x86_64.rpm

Что­бы вклю­чить модуль добавь­те стро­ку ниже в файл /etc/nginx/nginx.conf:

Для вклю­че­ние и отклю­че­ния testcookie нам необ­хо­ди­мо пери­о­ди­че­ски про­смат­ри­вать ста­ти­сти­ку под­клю­че­ний. Для это­го добавь­те в конфиг:

При­ме­ня­ем настрой­ки, проверяем:

# service nginx restart
# curl http://localhost/nginx_status
Active connections: 4
server accepts handled requests
137 137 190
Reading: 0 Writing: 1 Waiting: 3
Берем файл https://github.com/duy13/vDDoS-Protection/blob/master/aes.min.js.txt и копи­ру­ем его в отдель­ный ката­лог на сер­ве­ре /www/public_html/aes.min.js

Добав­ля­ем в кон­фиг ваше­го сай­та сле­ду­ю­щие строки:

Сохра­ня­ем настройки:

nginx reload
Про­ве­ря­ем, что файл досту­пен по адре­су http://site.ru/aes.min.js

Добав­ля­ем в кон­фиг ваше­го сай­та пара­мет­ры по при­ме­ру ниже:

Пара­метр testcookie_secret запол­ня­ем слу­чай­ным набо­ром из 64 сим­во­лов. Для testcookie_refresh_encrypt_cookie_key и testcookie_refresh_encrypt_cookie_iv гене­ри­ру­ем hex чис­ло дли­ной 32 сим­во­ла этим гене­ра­то­ром.

Теперь оста­лось настро­ить скрипт, кото­рый будет авто­ма­ти­че­ски про­ве­рять коли­че­ство под­клю­че­ний к Nginx и в слу­чае пре­вы­ше­ния лими­та, авто­ма­ти­че­ски вклю­чать testcookie и атпров­лять уве­дом­ле­ние адми­ни­стра­то­ру на почту.

Добав­ля­ем зада­ние в cron:

* * * * * /etc/nginx/check.sh >/dev/null 2>&1