И снова DDoS атака...

Автор:
Опубліковано: 4370 днів назад (10 квітня 2012)
0
Голосів: 0
Такс, ну начнем с того что же такое этот DDoS?
DDoS – это сокращение английского выражения Distributed Denial of Service, что переводится на русский язык как «Распределённый отказ от обслуживания». Это означает отказ от обслуживания сетевого ресурса в результате многочисленных распределенных (то есть происходящих с разных точек интернет-доступа) запросов. Отличие DoS-атаки (Denial of Service — «Отказ от обслуживания») от DDos состоит в том, что в этом случае перегрузка происходит в результате запросов с какого-либо определенного интернет-узла.
Схематически это так:

Вот так получается что тысячи зомби прут на ваш бедный сервер.

К делу. В нашем распоряжении есть сервер Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz 2666.444 Mhz X 4 и 8 гигов озу. Из ПО установлено Apache2, php, nginx, mysql и почтовый сервер.
Как надстройка над iptables трудиться скрипт csf я его описывал, так что на нем останавливаться не буду, скажу так он многие вещи помогает автоматизировать и управлять ими более быстро и проще.
Так перед моменты ядра:
Код PHP:
  1.  
  2. #!/bin/sh
  3. #Увеличиваем размер очереди полуоткрытых соединений (также полезно при SYN флуде)
  4. sysctl -w net.ipv4.tcp_max_syn_backlog="4096"
  5. sysctl -w net.ipv4.tcp_synack_retries=1
  6. #Изменяем время ожидания приема FIN до полного закрытия сокета:
  7. sysctl -w net.ipv4.tcp_fin_timeout=10
  8. #Практически отключаем TCP keepalive:
  9. sysctl -w net.ipv4.tcp_keepalive_time=1
  10. #Изменяем количество пакетов проверки keepalive, которые пошлет сервер прежде чем соединение будет закрыто:
  11. sysctl -w net.ipv4.tcp_keepalive_probes=1
  12.  
Для просто ты все на баше написано.

Дальше, считаем что в конфиге апача и nginx у Вас все прописано так что бы не завалить всю оперативку.

Моменты в nginx:
в секцию http
limit_req_zone $binary_remote_addr zone=one:16m rate=3r/s;
Это значит что лимитируем для зоны one 3 конекта в 1 сек.

Дальше в секцию server вирт хоста вписываем:
limit_req zone=one burst=3;
или ставим 1, вообщем это значит что законектится с лимитом в 3 подключения за 1 сек можно 3 раза, а дальше 503 ошибка. Что и пишется в лог access.

Вот дальше берем пишем такой скрипт на sh
Код PHP:
  1. #!/bin/bash
  2. cat /var/log/nginx/error.log\
  3. | egrep '(limiting requests|limiting connections)'\
  4. | awk -F'client: ' '{print $2}'\
  5. | awk -F', ' '{print $1}'\
  6. | sort -nr\
  7. | uniq -c\
  8. | awk '{if($1>5)print "csf -d "$2""}'\
  9. | sh
  10.  
  11. cat /var/log/nginx/access.log\
  12. | egrep '( 499 | 400 | 503 )'\
  13. | awk '{print $1}'\
  14. | sort -nr\
  15. | uniq -c\
  16. | awk '{if($1>5)print "csf -d "$2" "}'\
  17. | sh
  18.  
  19. cat /dev/null > /var/log/nginx/error.log
  20. cat /dev/null > /var/log/nginx/access.log
Скрипт частично взять с инета, частично изменен мной.

Он отпарсит негодников с логов и отошлет их в csf -d (DROP), прошлый парсер был не настолько гибок и долго работал, пока сформирует в файл список потом его пересортирует и скопирует в фф. А этот работает быстро.
Тем более csf не даст блокировать айпи которые уже есть в alow и повторяющиеся.

В результате мы получаем список заблокированных айпи.
Украшаем ssh | РеИнстал акустики в авто
Коментарі (1)
0 # 10 квітня 2012 в 19:51 0
Еще моменты в конфиге
Код PHP:
  1. client_max_body_size 60m;
  2. client_body_buffer_size 128k;
  3. proxy_connect_timeout 120;
  4. proxy_send_timeout 120;
  5. proxy_read_timeout 120;
  6. proxy_buffer_size 16k;
  7. proxy_buffers 8 64k;
  8. proxy_busy_buffers_size 128k;
  9. proxy_temp_file_write_size 128k;
  10. # даже обычные медленные клиенты, обычно дороги
  11. reset_timedout_connection on;
  12. client_header_timeout 15;
  13. client_body_timeout 15;
  14. send_timeout 5;
  15. keepalive_timeout 30 15;

← Назад

Яндекс.Метрика