Уровень 1: простой DOS
Чтобы найти IP-адрес злоумышленника, я использую следующую командную строку:
netstat -ntu -4 -6 | awk '/^tcp/{ print $5 }' | sed -r 's/:[0-9]+$//' | sort | uniq -c | sort -n
Это даст вам количество активных соединений для каждого подключенного IP
Если вы находитесь под простой DOS-атакой, детка с одним или несколькими IP-адресами, тот, у кого 50-100 соединений (или более), скорее всего, является медленным атакующим, которого вы можете отбросить.
Это для обнаружения и удаления (с iptables или предпочитаемым hlfw) их «в реальном времени», если вы подключены к серверу во время атаки.
Добавление времени обработки (% D или% T аргумент) в ваши журналы apache, вероятно, также может помочь обнаружить медлительные атаки "postmortem" путем анализа журналов, если у вас нет этой информации в ваших журналах, вы не сможете найти ничего интересного , См. Http://httpd.apache.org/docs/current/mod/mod_log_config.html для конфигурации журнала.
Уровень 2: очень большой замедленный DDOS
netstat (используйте watch netstat для обновления) все еще может помочь вам увидеть, что некоторые IP-адреса просто всегда подключены
Чтобы бороться с slowloris, на apache установите модули reqtimeout и настройте его, например:
http://pastebin.com/3BNNwfyb
После этого каждые 408, которые вы видите в access_log, на 99,999% уверены, что IP-адрес медленно атакующего.
Используя модуль reqtimeout apache, вы можете легко противостоять тысячам ips и тысячам пакетов в секунду на приличном выделенном сервере.
Iptables также может немного помочь с чем-то вроде:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j DROP