• Форум посвящен самостоятельной (бесплатной) защите от ддос атак.
    Есть мануалы по настройке сервера от Ddos для сисадминов и готовые инструменты от ддос-атак для вебмастеров.

    Простое, эффективное, точное и проверенное бесплатное решение от мощных ддос-атак: PHP скрипт + Cloudflare, с панелью управления.

Защита от Ддос с помощью Nginx и модуля Geoip (ограничение по странам)

A

adm

Администратор
Команда форума
Администрация
#1
Ботнеты, используемые в дешевых (или "школьных") ддос-атаках состоят почти на 100% из иностранных IP-адресов: там может быть много зараженных китайских, иранских, иракских, индонезийских машин. Русские провайдеры более-менее реагируют на абузы, поэтому ддос русскими ботами сопоставим с некоторыми потерями для ддосера, а значит стоит дороже.

update
Удобнее и эффективнее использовать Cloudflare с защитой по странам.

Спрашивается, зачем нам пускать на сервер IP азиатских стран или даже фильтровать такой траффик, когда его можно целиком перекрыть. Один из таких способов: привязка к серверу Nginx модуля Geoip, что позволит указать в настройках список разрешенных или запрещенных стран.

1) Итак, первым делом устанавливаем Nginx и модуль Geoip.

2) Далее идем на страницу http://www.maxmind.com/app/geolitecountry и скачиваем latest GeoLite Country Binary Format, это бесплатный вариант базы стран и соответствующих им блоков IP адресов. Распаковываем архив и кидаем файл GeIP.dat в папку /usr/local/etc/nginx/conf/geo (FreeBSD) или /etc/nginx/conf.d (CentOS) . Осталось отредактировать конфиги nginx.

Открываем nginx.conf, дописываем в секцию http следующий блок директив:
Код:
geoip_country /usr/local/etc/nginx/conf/geo/GeoIP.dat; # подключаем GeIP базу
map $geoip_country_code $bad_country { # модуль map создает переменные, значения которых зависят от других переменных, очень полезная штука
default 1; # значение по умолчанию
include geo/good_countries; # инклудим файл, к нему вернемся чуть позже
}
Этот блок map, означает, что все страны находящиеся в базе данных, являются запрещенными по умолчанию, а в файле good_countries, будут перечислены разрешенные страны. Если у вас например ситуация, когда разрешенных стран больше чем запрещенных, можно легко инвертировать данную логику и создать файл bad_countries со списком запрещенных стран, разрешив все остальные.

Теперь настройки хоста. Я предпочитаю держать хосты в отдельной папке, например hosts, каждый в своем файле.

Код:
server {
listen IP:80;
server_name testhost.com;

if ($bad_country){ # если данная переменная установлена, то есть если страна не перечислена в файле good_countries
      return 444; # выдаем клиенту пустой ответ ( незачем отдавать 403 ошибку или еще какую-либо )
}

}
Теперь вернемся к файлу good_countries. Тут все предельно просто, коды стран, которым разрешен доступ на сайт, перечислены в следующем формате:

Код:
TM 0;
UA 0;
UZ 0;
RU 0;
Чтобы изменения вступили в силу нужно перезагрузить Nginx:
Код:
/etc/init.d/nginx reload
Проверить, работает geoip модуль или нет, можно, удалив из списка разрешенных стран свою, и попробовав зайти на сайт.


В основу материала взята статья: http://gnu.su/news.php?extend.1453
 
Последнее редактирование модератором:
Andy

Andy

New Member
#2
судя по статистике QRATOR, опубликованной где-то на хабре
такой метод защиты становится с каждым годом все менее и менее эффективным, т.к. чаще начинают использовать ботнеты из России
 
Дискетка

Дискетка

New Member
#3
По России Netcraft nginx обслуживал или проксировал 19.21% самых нагруженных сайтов в июне, в т.ч. соцсети. Жаль, что культура - кто кого остается неизменной - так что будем ждать nginx 2...
 
admin

admin

Администратор
Администрация
#4
судя по статистике QRATOR, опубликованной где-то на хабре
такой метод защиты становится с каждым годом все менее и менее эффективным, т.к. чаще начинают использовать ботнеты из России
Его можно использовать в связке с другими методами.

Кроме того, русские ботнеты дороже и их можно абузить.

А QRATOR, как и подобные конторы, зарабатывают деньги в том числе на незнании клиентов. Простая настройка Nginx могла бы уберечь многих владельцев сайтов от лишних трат. И наивно думать, что антиддос-сервисы будут помогать им в этом.
 
Последнее редактирование:
T

toxaonline

New Member
#5
Вы конечно извините за нубские вопросы но подскажите пожалуйста куда кидать архив в убунту 10.04 и вместо testhost.com писать свой сайт я правильно понял?
 
admin

admin

Администратор
Администрация
#6
Вы конечно извините за нубские вопросы но подскажите пожалуйста куда кидать архив в убунту 10.04 и вместо testhost.com писать свой сайт я правильно понял?
Это не важно, главное в конфиге прописать путь до модуля. Можно разместить его в папке с Nginx, в Ubuntu (как и в Centos и Debian) он находится в папке etc/nginx. Создадим в этой папке подпапку GeoIP и пропишем путь в etc/nginx/nginx.conf:
Код:
geoip_country /etc/nginx/GeoIP/GeoIP.dat; # подключаем GeIP базу
map $geoip_country_code $bad_country { # модуль map создает переменные, значения которых зависят от других переменных, очень полезная штука
default 1; # значение по умолчанию
include geo/good_countries.txt; # инклудим файл, к нему вернемся чуть позже
}
Где good_countries.txt будет содержать коды стран.
Код:
TM 0;
UA 0;
US 0;
UZ 0;
RU 0;
BY 0;
NL 0;
GE 0;
Можно составить список стран, основываясь на данных геотаргетинга счетчика (в любом счетчике есть статистика заходов по странам). Буквенные обозначения стран можно посмотреть здесь.

Чтобы не нагружать сервер мы отдаем клиенту пустой ответ. Но можно отдавать страницу с сообщением о ддос-атаке и даже формой обратной связи, чтобы пользователь мог сообщить о недоступности сайта.
 
Последнее редактирование:
Сверху