Давайте Вас к примеру забаним на паре сотне крупных хостингов, при этом предположим у вас статика, а забаним просто так, по ошибке. А если вы попробуете решить проблему пошлем Вас вежливо и закроем лайвчат. Поверьте мне, Вы сразу осознаете что в этом похабного.
Там висела рефф ссылка просто, убрал, не заметил сразу, хотя и к делу это действительно не имеет отношения.
Другое решение заключается лишь в том, чтоб выкидывать при запросе алерт на который нужно нажать, чтобы попасть на сайт, либо проверка по кукам. Но при этих 2-х вариантах будут футболиться поисковые боты поисковиков.
Если же у Вас есть решение получше, позволяющее миновать просмотр логов, то предложите его здесь.
Поставьте модуль IPSET
В конфиг IPTABLES перед началом правил:
ipset -N banip iphash
iptables -A INPUT -m set --set banip src -j DROP
Далее необходимо написать скрипт, я покажу свой на примере NGINX :
$cat ddos.sh
#!/bin/sh
cat /dev/null > /root/botnet.blacklist
cat /var/log/nginx/cache.log | grep "HTTP/1.1" | grep "404 366" | awk '{print $1}'| awk -F"," '{print $1}'| sort | uniq -c | sort -nr > /root/botnet.blacklist
cat /dev/null > /root/iptables_ban.sh
awk '{print "/usr/sbin/ipset -A banip " $2 "" }' botnet.blacklist | head -n 500 >> /root/iptables_ban.sh
sh /root/iptables_ban.sh
cat /dev/null > /var/log/nginx/cache.log
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
Соответственно создаем так же файлы botnet.blacklist и iptables_ban.sh
Скрипт вешаем раз в минуту на крон.
В строке:
Меняем критерии выборки на свои : grep "HTTP/1.1" | grep "404 366"
Судя по вашему логу попробуйте:
grep "200 127011" | grep "AppleWebKit/537.36"
В первую очередь нужно проанализировать логи httpd и попробовать выявить дыру. Скорей всего удалось залить шелл. И если не закрыть, история повторится.
Поиском по базе пройдитесь
А это уже кому как удобней на любителя, я к примеру не предпочитаю держать тонну заблекхоленных IP в таблице маршрутизации, для этого IPSET и писался. Да и я бы не сказал, что IPSET больше кушает чем несколько тысяч маршрутов в таблице.
Судя по логу банальнейшая атака ботами HTTP флудом.
Для лечения Вы можете выбрать 2 варианта:
1. Воспользоваться услугами защиты от DDoS атак у любого хостера кто предоставляет эти услуги.
2. Переехать на VPS (вполне достаточно)
Сделать тюнинг сетевого стека в sysctl.conf (мануалов полно)
Перед апачем воткнуть NGINX проксей в режиме кеширования
Установить IPSET для работы с IPTABLES
Раз в 30 минут по крону парсить лог NGINX и делать выборку. В Вашем примере забить в парсер
"GET/HTTP/1.0" "200 146052"
"GET/HTTP/1.0" "404 112507"
Все IP пойманные на этом сливать на IPSET
В помощь:
http://habrahabr.ru/post/84172/
http://www.netangels.ru/support/vds-howto/ddos/
Для начала нужно определиться какой тип роутеров Вы используете, если это что то вроде домашних Cisco ASA 5505 то вполне можно реализовать.
Возможно, только на точке входа в туннель необходима очистка этого трафика, иначе что его чистить будет? Не будет очистки - весь трафик и полезный и паразитный польется через этот туннель. Нет никакого смысла в туннелировании без услуги защиты от атак. Эта услуга как раз и подразумевает процедуру защиты без переезда самого сервера в другой датацентр. И происходит это так - на точке входа в туннель стоит оборудование, которое противодействует DDoS атакам, на нем происходит очистка паразитного трафика, далее полезный трафик через тунель летит к Вам на сервер. В итоге мы получаем защиту от атаки без переезда сервера в другой датацентр.