Инструменты пользователя

Инструменты сайта


ddos_apache_debian_ubuntu

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия Следующая версия справа и слева
ddos_apache_debian_ubuntu [2015/11/17 15:47]
admin создано
ddos_apache_debian_ubuntu [2015/11/17 15:54]
admin
Строка 5: Строка 5:
 <​note>​Очень популярная DoS атака заключается в посылке большого числа SYN пакетов на ваш сервер. При этом установка TCP связи не доводится до конца. Очередь полуоткрытых запросов соединений быстро заполняется,​ что мешает установке нормальных соединений. Так как соединение не должно быть обязательно завершено,​ такая атака не требует больших ресурсов от атакующей машины,​ поэтому её легко реализовать и контролировать.</​note>​ <​note>​Очень популярная DoS атака заключается в посылке большого числа SYN пакетов на ваш сервер. При этом установка TCP связи не доводится до конца. Очередь полуоткрытых запросов соединений быстро заполняется,​ что мешает установке нормальных соединений. Так как соединение не должно быть обязательно завершено,​ такая атака не требует больших ресурсов от атакующей машины,​ поэтому её легко реализовать и контролировать.</​note>​
  
 +Определить SYN атаку просто — команда netstat выдает огромный список полуоткрытых подключений:​
  
 +<​file>​
 +netstat -n --tcp | grep SYN_RECV
 +tcp     ​0 ​  0 xxx.xxx.xxx.xxx:​80 ​   yyy.yyy.yyy.yyy:​1084 ​   SYN_RECV ​  
 +tcp     ​0 ​  0 xxx.xxx.xxx.xxx:​80 ​   yyy.yyy.yyy.yyy:​1228 ​   SYN_RECV ​  
 +tcp     ​0 ​  0 xxx.xxx.xxx.xxx:​80 ​   yyy.yyy.yyy.yyy:​2652 ​   SYN_RECV ​  
 +tcp     ​0 ​  0 xxx.xxx.xxx.xxx:​80 ​   yyy.yyy.yyy.yyy:​3446 ​   SYN_RECV
 +</​file>​
 +
 +Можем просто подсчитать количество:​
 +
 +<​file>​
 +netstat -n --tcp | grep SYN_RECV | wc -l
 +238
 +</​file>​
 +
 +Для начала — проверяем параметр tcp_syncookies — он должен быть равен 1:
 +
 +<​file>​
 +cat /​proc/​sys/​net/​ipv4/​tcp_syncookies
 +1
 +</​file>​
 +
 +Так и оставляем. По умолчанию в новых дистрибутивах этот параметр всегда включен. ​
 +
 +<​note>​Если параметр tcp_syncookies установлен (доступен только когда ядро собрано с CONFIG_SYNCOOKIES),​ тогда ядро обрабатывает SYN пакеты TCP в обычном режиме до тех пор, пока очередь не заполнится. После заполнения очереди включается механизм SYN cookies.
 +
 +SYN cookies вообще не использует очередь SYN. Вместо этого ядро отвечает на каждый SYN пакет, как обычно SYN|ACK, но туда будет включено специально сгенерированное число на основе IP адресов и портов источника и получателя,​ а также времени посылки пакета. Атакующий никогда не получит эти пакеты,​ а поэтому и не ответит на них. При нормальном соединении,​ будет послан третий пакет, содержащий число, а сервер проверит был ли это ответ на SYN cookie и, если да, то разрешит соединение даже в том случае,​ если в очереди SYN нет соответствующей записи.
 +
 +Включение механизма SYN cookies является очень простым способом борьбы против атаки SYN флудом. При этом немного больше загружается процессор из-за необходимости создавать и сверять cookie. Так как альтернативным решением является отклонять все запросы на соединение,​ SYN cookies являются хорошим выбором.</​note>​
 +
 +Также нужно увеличить очередь полуоткрытых соединений — tcp_max_syn_backlog (в Debian Lenny по-умолчанию 1024 соединения):​
 +
 +<​file>​
 +cat /​proc/​sys/​net/​ipv4/​tcp_max_syn_backlog
 +1024
 +</​file>​
 +
 +Увеличиваем:​
 +
 +<​file>​
 +echo "​20000"​ > /​proc/​sys/​net/​ipv4/​tcp_max_syn_backlog
 +</​file>​
 +
 +Кроме того, можем уменьшить время ожидания соединения tcp_synack_retries:​
 +
 +<​note>​Целочисленное значение (1 байт) tcp_synack_retries определяет число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. Число попыток не должно превышать 255. Используемое по умолчанию значение 5 соответствует приблизительно 180 секундам на выполнение попыток организации соединения.</​note>​
 +
 +<​file>​
 +cat /​proc/​sys/​net/​ipv4/​tcp_synack_retries
 +5
 +</​file>​
 +
 +Уменьшаем до 1 (это примерно 9 секунд):​
 +
 +<​file>​
 +echo "​1"​ > /​proc/​sys/​net/​ipv4/​tcp_synack_retries
 +</​file>​
 +
 +tcp_fin_timeout
 +
 +<​note>​Целое число в файле tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. Партнер может не закрыть это соединение никогда,​ поэтому следует закрыть его по своей инициативе по истечении тайм-аута. По умолчанию тайм-аут составляет 60 секунд. В ядрах серии 2.2 обычно использовалось значение 180 секунд и вы можете сохранить это значение,​ но не следует забывать,​ что на загруженных WEB-серверах вы рискуете израсходовать много памяти на сохранение полуразорванных мертвых соединений. Сокеты в состоянии FIN-WAIT-2 менее опасны,​ нежели FIN-WAIT-1, поскольку поглощают не более 1,5 Кбайт памяти,​ но они могут существовать дольше.</​note>​
 +
 +<​file>​
 +cat /​proc/​sys/​net/​ipv4/​tcp_fin_timeout ​
 +60
 +</​file>​
 +
 +Меняем на 30:
 +
 +<​file>​
 +echo "​30"​ > /​proc/​sys/​net/​ipv4/​tcp_fin_timeout
 +</​file>​
 +
 +tcp_keepalive_probes
 +
 +<​note>​Целочисленная переменная tcp_keepalive_probes задает число передач проб keepalive, после которого соединение считается разорванным. По умолчанию передается 9 проб.</​note>​
ddos_apache_debian_ubuntu.txt · Последние изменения: 2015/11/17 16:13 — admin