Настройка Nginx для отражения небольших ddos атак
Nginx – веб сервер предназначенный для работы на высоконагруженных серверах. Ddos атака как раз и является той нагрузкой с которой этот web сервер может вполне удачно справится. Решения которые предоставляет Antiddos.org построены на кластерах под управлением FreeBSD и веб сервера Nginx. Мы провели очень много экспериментов по реакции nginx под нагрузкой и пришли к мнению что он является правильным выбором для работы на серверах которые подвергаются ddos атакам. Ниже привожу основные настройки данного сервера чтобы обеспечить минимальную защиту от DDOS.
FreeBSD, сетевая Intel fxp, порт 100Мбит, polling, http accept-filter
в sysctl
1 2 3 4 5 6 7 8 9 10 11 12 13 | sysctl kern.maxfiles=90000 sysctl kern.maxfilesperproc=80000 sysctl net.inet.tcp.blackhole=2 sysctl net.inet.udp.blackhole=1 sysctl kern.polling.burst_max=1000 sysctl kern.polling.each_burst=50 sysctl kern.ipc.somaxconn=32768 sysctl net.inet.tcp.msl=3000 sysctl net.inet.tcp.maxtcptw=40960 sysctl net.inet.tcp.nolocaltimewait=1 sysctl net.inet.ip.portrange.first=1024 sysctl net.inet.ip.portrange.last=65535 sysctl net.inet.ip.portrange.randomized=0 |
в nginx моменты
1 2 3 4 5 6 7 8 9 10 11 | worker_processes 1; worker_rlimit_nofile 80000; events { worker_connections 50000; } server_tokens off; log_format IP ‘$remote_addr’; reset_timedout_connection on; listen xx.xx.xx.xx:80 default rcvbuf=8192 sndbuf=16384 backlog=32000 accept_filter=httpready; |
фильтрацию url например по критерию POST index.php?action=login с пустым реферером можно реализовать так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | set $add 1; location /index.php { limit_except GET POST { deny all; } set $ban “”; if ($http_referer = “” ) {set $ban $ban$add;} if ($request_method = POST ) {set $ban $ban$add;} if ($query_string = “action=login” ){set $ban $ban$add;} if ($ban = 111 ) { access_log /var/log/nginx/ban IP; return 404; } proxy_pass http://127.0.0.1:8000; #тут живёт апач } |
Дальше резали на уровне pf – загружали в таблицу IP с которых приходило слишком много хитов. PF с таблицами работает очень быстро. Исходники парсера логов есть на http://www.comsys.com.ua/files.
ну и по крону уже раз в минуту добавлять в ip table новые ip из лога 25М-битный DDoS, преимущесвенно режущийся ip, остатки проходят на nginx, который по критерию обучает ip и остатки проксирует на апач – LA 0, сайт работает.
взято с wiz.su