nginx return 403

L
На сайте с 13.01.2011
Offline
132
1968

подскажите как правильно в nginx забанить GET запрос (с локейшен или как )

GET //?s=BYE&x=0&y=0 HTTP/1.1" 503 212 "-"

чтобы if этот GET return 403

ip забанил но странно в nginx - все равно доходит в логи было HTTP/1.1" 499

поставил proxy_ignore_client_abort on; стало 503

типа школоддос

Контакты-icq 535609 ()
P
На сайте с 16.03.2009
Offline
144
#1
Logger:
подскажите как правильно в nginx забанить GET запрос (с локейшен или как )

GET //?s=BYE&x=0&y=0 HTTP/1.1" 503 212 "-"

чтобы if этот GET return 403

ip забанил но странно в nginx - все равно доходит в логи было HTTP/1.1" 499
поставил proxy_ignore_client_abort on; стало 503

типа школоддос

Если школоддос из нескольких ипов:

iptables -A INPUT --source x.x.x.x -j DROP

Если IP`ов много и их не отфильтровать руками, можно определять ботов по http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html

Далее или прикрутить fail2ban или проверять скриптом лог и банить например как описано тут http://habrahabr.ru/post/84172/

Den73
На сайте с 26.06.2010
Offline
523
#2

iptables -I INPUT 1 -p tcp --dport 80 -m string --string "GET //?s=BYE&x=0&y=0" --algo kmp -j DROP

L
На сайте с 13.01.2011
Offline
132
#3

спасибо. поставил

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

limit_req zone=one burst=5 nodelay;

и

if ($is_args = "?") {

return 444;

}

все равно везде чпу .

только вот не понимаю - все ip забанены - а в логах nginx идут постоянно - или iptables не работает или не успевает закрывать коннект

Chain ban (0 references)

pkts bytes target prot opt in out source destination

0 0 DROP all -- * * 193.232.107.153 0.0.0.0/0

0 0 DROP all -- * * 91.215.53.191 0.0.0.0/0

0 0 DROP all -- * * 193.93.50.8 0.0.0.0/0

0 0 DROP all -- * * 217.28.223.115 0.0.0.0/0

0 0 DROP all -- * * 91.144.8.15 0.0.0.0/0

0 0 DROP all -- * * 78.159.39.220 0.0.0.0/0

0 0 DROP all -- * * 195.146.72.148 0.0.0.0/0

0 0 DROP all -- * * 195.146.72.146 0.0.0.0/0

итого load average: 1.09, 1.35, 2.87

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j DROP

iptables -I INPUT -p tcp --syn --dport 80 -m hashlimit --hashlimit-above 30/minute --hashlimit-burst 3 --hashlimit-mode srcip --hashlimit-srcmask 24 --hashlimit-name blip -j DROP

окончательно прибило load average: 0.13, 0.10, 0.39

zexis
На сайте с 09.08.2005
Offline
388
#4

Вы цепочку ban создали, а ссылку на нее в таблице INPUT не сделали.

iptables –A INPUT –j ban

поэтому забанивание у вас и не работает.

---------- Добавлено 07.07.2012 в 23:21 ----------

лимиты в nginx правильнее сделать так

В блок http поставить

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

rate=5r/s; - скорее всего слишком много.

Лучше поставить 1r/s или 2r/s

А в блок location /

поставить

limit_req zone=one burst=10 nodelay;

Что бы ограничивались лишь запросы на бекенд, а статика отдавалась без ограничения.

L
На сайте с 13.01.2011
Offline
132
#5

спасибо zexis, действительно ошибся при внесении цепочек, теперь проблем нет

pkts bytes target prot opt in out source destination

1850 88712 DROP all -- * * 193.93.50.8 0.0.0.0/0

3497 170K DROP all -- * * 91.215.53.191 0.0.0.0/0

ultrasparc
На сайте с 29.11.2006
Offline
61
#6

Можно самим nginx блокировать такой запрос

if ($request-uri ~* s=BYE&x=0&y=0) {

return 403;

}

Хостинг в Украине - svai.net
L
На сайте с 13.01.2011
Offline
132
#7

не подскажете как сделать цепочку ban в iptables centos 5.8

iptables –A INPUT –j ban не канает

PS: решил

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий