Итак, эта идея пришла мне когда наш сайт переехал на VDS сервер. Так как сервер был не настроен, мы были легко уязвимы для атак. И вот в одну из атак я сидел просматривал access.log, т.е логи nginx, дабы подропать айпи которые нас ддосили. Мои познание были не сильны в данной сфере, но очень скоро я понял что путем нехитрой настройки можно автоматизировать и заносить в бан iptables IP’ишники на автомате. Для начала нам нужен правельный конфиг nginx:
http {
limit_req_zone $binary_remote_addr zone=two:20m rate=2r/s;
server{
location / {
limit_req zone=two burst=5;
}
}
}
Вот грубо говоря один из моих логов, когда сервер ломился под натиском ботов:
177.153.133.91 — — [24/Feb/2011:21:15:47 +0100] «GET / HTTP/1.1» 503 206 «-» «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1»
Разберем логи:
— Боты просто ломятся на сайт
— Из-за правельного параметра nginx выдается 503 ошибка
— Было бы неплохо боту сменить браузер xD
И тут настает так сказать кульминация. Требуется сделать так чтобы если бот получил 503 ошибку, то он его автоматом отправляло в -j DROP. Честно признаюсь я долго вспоминал как это можно сделать, и вспомнил про tail -f.
tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1\" 503
Но очень скоро я понял что это не совсем действенно, нужно уводить IP в бан. А как мы знаем чтобы забанить нужен только чистый ип. Тут я не обошолся без гугл.рф, где было найден инструмент awk.
tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1\" 503 | awk '{ print $1 }'
Теперь осталось все запихнуть в единую команду. Но тут небольшие траблы. Просто пустить на stdin iptables нельзя, нужно сделать IP в качестве параметра запуска. Тут я исходя из курса в универе вспомнил про xargs, и вот что в конце концов получилось:
tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1\" 503 | awk '{ print $1 }' | xargs -t -l iptables -A INPUT -p tcp -j DROP -s
Удачи всем в борьбе с ддосерами
(c) EXPHack.ORG & Nonjkee
Просмотров: 1825