Re: Работа с ип адресом

Maxim Dounin mdounin на mdounin.ru
Вт Ноя 1 17:28:21 UTC 2011


Hello!

On Tue, Nov 01, 2011 at 12:55:44PM -0400, xoper wrote:

> Доброго времени суток.
> Столкнулся с такой проблемой, сервер
> находится под ДДОС атакой уже
> несколько суток, вроде эту проблему
> победили на уровне nginx'a следующим
> образом:
> раз в 15 минут парсится access.log и
> выбираются плохие адреса с занесением
> в файл в виде
> ип_адрес 1;
> в конфиге нгинкса прописано так:
> http
> {
> ..........
>     geo $remote_addr $ip_blocklist_out {
>         default 0;
>         include /home/test/ddos_ip;
>    }
>    server{
>   ................
>        if ($ip_blocklist_out = 1){
>               rewrite ^/(.*) /index_ddos.htm last;
>               return 403;

Just a side note: до "return" тут дело не дойдёт.

>        }
> 
>   ..............
>  }
> }
> Все работает LA с 66 упал до привычных 0.5
> но попались юзеры, у которых оказался
> хитрый провайдер:
> вместо $remote_addr подставляется "общий ип",
> а ип адрес пользователя прописывается
> в $http_x_forwarded_for, следовательно
> конструкция банит всю подсеть
> провайдера по $remote_addr.
> Так вот вопрос в следующем, как при
> наличии ип адреса в $http_x_forwarded_for
> учитывать его в geo фильтре а при
> отсутствии использовать $remote_addr.
> Спасибо.

Для этого в модуле geo есть директива proxy.  Подробнее тут:

http://nginx.org/ru/docs/http/ngx_http_geo_module.html

Желательно туда не заносить всех подряд, а только реально 
существующих провайдеров, которые делают так.  В противном случае 
такая блокировка будет легко и непринуждённо обходиться 
дописыванием в запрос заголовка "X-Forwarded-For: <случайный ip>".

Maxim Dounin



Подробная информация о списке рассылки nginx-ru