Защита сервера от DDoS атаки

Так получилось что мы попали под DDoS, ботнет был около 70-100к зараженных компов. Продолжительность DDoS`а была почти неделю. Атака была довольно примитивной, но колличество ботов брало свое, каждый бот несколко раз запрашивал индексовую страницу. Если страница статичная – ничего страшного, но если Вам нужно сделать несколько SQL запросов и обработать шаблон – начинаются проблемы. Если быть точнее то сервер ляжет и с 3000 ботов. Ниже будем рассматривать защиту именно при тех условиях что были даны, если у кого-то возникнут вопросы о том как защититься в случае других атак – постараюсь помочь.

Кстати результат был довольно плачевный для атаковавших, через несколько часов сервер работал в штатном режиме с нагрузкой около 10-15% и выдерживал эту атаку совершенно спокойно.

  • о хардварнйо части: Intel \ 3.2 GHz 800FSB \ P4 Xeon, 4GB DDR2, FreeBSD 7.1
  • софт: nginx 0.7.59, php 5.3rc2 в режиме fast-cgi и php-fpm, кеширование sql запросов, файлов, конфигов, сгенерированных страниц на memcached.

первым делом взялись за ядро:

sysctl net.inet.tcp.finwait2_timeout=5000
sysctl net.inet.tcp.fast_finwait2_recycle=1
sysctl kern.ipc.somaxconn=4096
sysctl net.inet.tcp.always_keepalive=0
sysctl net.inet.tcp.nolocaltimewait=1
sysctl net.inet.ip.portrange.first=1024
sysctl kern.ipc.nmbclusters=65536
sysctl net.inet.ip.portrange.randomized=0
sysctl net.inet.tcp.keepidle=60000
sysctl kern.ipc.nmbclusters=262144
sysctl kern.ipc.maxsockets=204800
sysctl net.inet.tcp.recvspace=8192
sysctl net.inet.tcp.sendspace=16384
sysctl net.inet.tcp.msl=15000

ловим наших ботов в nginx и тупо блочим их ipfw, хорошая статья написана тут:

if ($http_user_agent ~* "(vaginamook|2003100|ODI3|Hotbar|4.75|DigExt|20030718|Q312461|H010818|inktomi|googlebawt|FAST-WebCrawler|Microsoft-WebDAV-MiniRedir|FunWebProducts|looksmart|avastye)") {
   access_log /usr/local/nginx/logs/ddos IP;
   return   403;
}

Настройки nginx, рабочая конфигурация:

  worker_processes  2;
  events {
    worker_connections  9000;
  }
 
  client_body_buffer_size   8k;
  client_header_buffer_size 1k;
  client_max_body_size      1k;
  large_client_header_buffers 2 2k;
 
  client_body_timeout   5;
  client_header_timeout 5;
  keepalive_timeout     5 5;
  send_timeout          5;
 
  sendfile                 on;
  server_tokens           off;
 
  tcp_nodelay on;
  tcp_nopush  on;
 
  gzip              on;
  gzip_buffers      16 8k;
  gzip_comp_level   4;
  gzip_http_version 1.0;
  gzip_min_length   1024;
  gzip_types        text/plain text/html text/css;
  gzip_vary         on;

PHP как уже говорилось работает с php-fpm, на сокетах. Выставленны таймауты, корок небыло.

PS: Сегодня будет нереально заводной трек. Последнюю неделю только под него и бегаю в зале. А девушки… Эх, блин, где мой отпуск…

Похожие сообщения

  • Нет похожих сообщений