Пограничные войны

Автор: | 9 мая 2010

Не секрет, что настоящую сильную DDoS-атаку может отбить (отфильтровать) только серьезная железка [магистрального] провайдера. Бороться своими силами (силами серверной ОСи) можно только с небольшими атаками и с разными другими мелкими неприятностями, как то подбор паролей (брутфорс), наплыв нецелевого траффика (китайцев на русский сайт 🙂 ), взлом сайтов и т.п.

От наплыва посетителей из нежелательных стран можно бороться путем блокирования IP-адреса по коду страны, для этого понядобится установленный GeoIP и следующий  код в файле .htaccess:

1SetEnvIf GEOIP_COUNTRY_CODE CN BadCountry
2SetEnvIf GEOIP_COUNTRY_CODE TW BadCountry
3Order Deny,Allow
4Deny from env=BadCountry
5 
6Allow from 1.2.3.4 # разрешенный адрес заблокированнй страны
7Allow from 2.3.4.5 # разрешенный адрес заблокированнй страны

Можно открыть доступ только определенным странам:

1SetEnvIf GEOIP_COUNTRY_CODE UA GoodCountry
2SetEnvIf GEOIP_COUNTRY_CODE RU GoodCountry
3Order Allow,Deny
4Allow from env=GoodCountry
Under Attack: рубим с плеча

Если сайт подвергается DDoS-атаке и вы определили, что все запросы идут из какой-то определенной страны, будет лучше, если заблокировать страну в фаерволе, чтобы не было большой нагрузки на Apache.

 

1wget https://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
2unzip GeoIPCountryCSV.zip
3make -C /usr/ports/www/nginx fetch
4tar tvf /usr/ports/distfiles/nginx-0.7.65.tar.gz | grep geo2
5tar xvf /usr/ports/distfiles/nginx-0.7.65.tar.gz nginx-0.7.65/contrib/geo2nginx.pl
6mv nginx-0.7.65/contrib/geo2nginx.pl . && chmod 700 geo2nginx.pl && rm -rf nginx-0.7.65/
7cat GeoIPCountryWhois.csv | ./geo2nginx.pl | grep CN | awk '{print $1}' > ips.list

В файле ips.list мы получим список IP-сетей выбранной страны (в данном случае – Китая/CN).
NB
База данных GeoIP может содержать незначительные погрешности.

Добавляем правило в фаервол, например:

Может оказаться, что система собрана без фаервола, если есть исходники, можем быстренько собрать:

Редактируем Makefile, нужно раскомментировать строку:

иначе отрубим машину от сети =)
Дальше:

1make
2cp ipfw.ko /boot/kernel/.
3kldload ipfw
4cd -

Проверяем:

Должна выводиться строчка "{цифры} allow ip from any to any".

Заливаем список айпишников скриптом:

1#!/bin/sh
2 
3lips=`cat ips.list`
4for f in ${lips}
5do
6   IP=$f
7   /sbin/ipfw table 1 add $IP
8done

Можем проверить, блокируются ли забаненные айпишники:

Количество забаненных сетей:

Надеюсь это никому не пригодится. А если пригодится, то надеюсь поможет устоять перед натиском врага. 🙂

Пограничные войны: 3 комментария

  1. Victor

    Автор, Вы лично пробовали добавлять GeoIP в .htaccess? Как вел себя при этом апач? Нагрузка не росла ли за запредельно? Мне кажется, этот способ вряд-ли подходит для нагруженных проектов…

    1. NetSpider Автор записи

      во-первых, здесь не идет речь ни о нагруженных проектах ни о серьезных DDoS-атаках, во-вторых, прямым текстом указано:
      «будет лучше, если заблокировать страну в фаерволе, чтобы не было большой нагрузки на Apache».

Добавить комментарий