Относительно простой способ заблокировать весь трафик из конкретной страны?

У меня есть веб-приложение, которое не имеет пользователей на Филиппинах, но постоянно подвергается бомбардировке спамерами, карточками тестирования кардеров и другой нежелательной деятельностью оттуда. Я вижу в журналах, что у них есть IP-адреса на Филиппинах, и они первоначально находят мой сайт через google.ph или другой .ph места.

У меня есть довольно хорошие фильтры и проверки безопасности, так что они не наносят большого ущерба, но, тем не менее, я действительно устал от этого. Они используют пропускную способность, наполняют мою базу данных, журналы злоупотреблений и журналы безопасности дерьмом, тратят мое время на определение учетных записей и т. Д.

Хотя подавляющее большинство граждан Филиппин не являются спамерами, и я не могу просто заблокировать каждую страну, которая меня раздражает, на данный момент, я думаю, что решения - просто заблокировать весь трафик с Филиппин в мое веб-приложение. (Я знаю, что блокировка IP-блоков целых стран - не очень хорошая практика, и у нее много проблем, но для этой страны я хочу сделать исключение.)

(Я знаю, что они могут подделать свой IP-адрес, но, по крайней мере, я могу заставить их немного поработать.)

Я знаю, что есть несколько гео-сервисов. Кто-нибудь знает какие-либо бесплатные или недорогие услуги? Или любой другой способ отфильтровать трафик из конкретной страны?

Я использую PHP на Apache 2, если это имеет значение.

9 ответов

Решение

Вы можете сделать это на основе IP-адреса, используя бесплатный IP Locatin API, такой как IPInfoDB http://ipinfodb.com/index.php.

В отличие от большинства других постеров здесь, я не собираюсь говорить вам, что это плохая идея, что вы не должны этого делать, что это не решит вашу проблему, или что вы должны сделать что-то еще. Вот что случилось с нами:

Люди из Китая и Кореи (или использующие прокси в Китае и Корее, в любом случае) продолжали раздражать нас. Сканирование портов, сканирование наших сайтов в поисках уязвимостей, попытки входа в систему и т. Д. Я пытался их игнорировать (fail2ban обычно о них заботится), но в некоторых моментах они поражали нас настолько сильно, что фактически превращались в DoS-атаку. Когда у вас есть сотни соединений одновременно от людей, пытающихся использовать ваш веб-сервер в качестве прокси-сервера, пытающихся подключиться к вашей машине через SSH, пробующих случайные имена пользователей и пароли, это имеет тенденцию оказывать влияние на сайт. В конце концов я сыт по горло.

Мы не получаем никакого законного трафика из Китая или Кореи; наша компания там не продает (мы занимаемся электронной коммерцией), поэтому не было никакого риска потерять законный трафик, поэтому я решил, что было бы проще заблокировать их заранее, вместо того, чтобы ждать, пока они станут хреном.

  1. Посетил http://ip.ludost.net/ и скачал базу данных их IP<->стран.
  2. Извлечены все диапазоны IP-адресов Китая и Кореи.
  3. Установил модуль ipset для netfilter
  4. Встроенные дампы ipset для Китая и Кореи (см. Ниже)
  5. Добавлены правила в iptables, чтобы молча отбрасывать любой трафик из этих наборов.

И это все. Наши проблемные пользователи ушли, нагрузка на сеть и сервер уменьшились, и мы без проблем выдержали рождественский сезон.

Примечание 1: вы можете сделать это с обычными iptables (т.е. без ipset), но это дороже в вычислительном отношении, чем при использовании ipset.

Примечание 2: Вот как выглядят дампы (ipset сгенерирует их для вас, если хотите):

# Generated by ipset 2.3.3 on Sat Oct  4 18:02:57 2008
-N china nethash --hashsize 5184 --probes 4 --resize 50
-A china 203.207.128.0/17
-A china 221.176.0.0/13
-A china 58.154.0.0/15
-A china 114.54.0.0/15
...etc...

Примечание 3: Мы используем nethash, потому что все наши диапазоны хранятся в виде блоков CIDR. Если вы не хотите конвертировать их в CIDR, вместо этого вы можете использовать iptreemap, но я полагаю, что это может быть менее эффективно, если вы получаете много трафика.

Во-первых, я бы настоятельно рекомендовал не делать этого.

Как красноречиво говорят другие, блокирование конкретной страны не решает проблему, а лишь слегка ее откладывает. Кроме того, когда пользователи из этой страны увидят, что вы их специально заблокировали, это только мотивирует их вызывать больше проблем.

Тем не менее, если вы действительно хотите это сделать, IPinfoDB предоставляет бесплатную базу данных геолокации IP,

Во-первых, было бы найти IP просто по стране.

Вы искали бы этот путь:

SELECT * FROM `ip_group_country` where `ip_start` <= INET_ATON('74.125.45.100') order by ip_start desc limit 1;

Или же

SELECT * FROM `ip_group_country` where `ip_start` <= 1249717504 order by ip_start desc limit 1;

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

SELECT `ip_cidr` FROM `ip_group_country` WHERE `country_code` = 'AF' order by ip_start;

который дал бы вам:

63.243.149.0/24
67.212.160.0/24

Как исправить ошибку в коде?

Вот так?

Ошибка: Добавить (2,2) возвращает 0, должно возвращать 4.

Фиксированный код:

int Add(int x, int y)
{
   if (x == 2 && y == 2)
      { return 4; }
   return 0;
}

Очевидно нет. Вы не просто создаете чудовищное колебание особых случаев, это чрезвычайно хрупкое и рецепт катастрофы. Вы также не просто исправляете СЕГОДНЯ признак основной проблемы.

Вместо этого выясните причину и устраните ее. Это гораздо надежнее любого хакерского патча для особых случаев, который вы могли бы реализовать.

Почему ваше веб-приложение уязвимо для спама? Какие характеристики делают его уязвимым? Какие характеристики делают его ценной целью? Есть ли способы, которыми вы можете изменить эти характеристики, чтобы сделать ваше приложение более устойчивым к спаму и менее заманчивым объектом? Почти наверняка ответ на эти вопросы - да. Добавьте цепочки проверки к вашим формам, используйте интеллектуальную капчу, рандомизируйте URL-адреса и / или имена параметров, чтобы сделать их недружественными для ботов. Существуют миллионы способов решения этой проблемы, извините, что вы выбрали одно из наименее ценных, наименее полезных и наиболее хрупких решений.

Вы имеете полное право блокировать IP-адреса по любой причине, которую вы можете оправдать для себя. Именно вы оказываете услугу, и именно вы решаете, кто может иметь ее или нет. Возможно, сомнительно, если это морально, но это то, что вы можете решить только для себя.

Однако блокирование сегмента IP, поскольку он имеет некоторые географические аспекты, звучит для меня более или менее как панический подход.

То, что я делал в прошлом, - это просмотрщик, просматривающий мои последние журналы и основанный на этом запрете отдельных IP-адресов, которые раздражают в течение 24 часов. Если этот конкретный IP снова плохо себя ведет, его забанят на 2 дня, затем на 3 дня и т. Д., И т. Д.

IP-адреса, которые запрещены на срок более недели, будут отправлены мне по почте, и я отправлю письмо об оскорблении этому поставщику услуг (который знает, что это может даже помочь).

Вы должны использовать такие продукты, как fail2ban, чтобы отключить ошибки, которые вы выбрасываете в своем веб-приложении, что указывает на попытку спама. Это будет блокировать IP на определенный период времени, делая ваш сайт устойчивым, но не блокировать все блоки IP.

Пара решений:

  • исключить некоторые IP-адреса в конфигурации Apache с помощью mod_access
  • используйте GeoIp напрямую из Apache: http://www.maxmind.com/app/mod_geoip
  • Исключите некоторые IP-адреса из Linux iptables напрямую. Это более рискованно, если у вас есть только удаленный доступ, вы можете заблокировать себя из машины
  • geoip + iptables

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

Более долгосрочным решением будет обнаружение спама в вашем веб-приложении, регистрация IP-адреса и подача ваших iptables для автоматической их блокировки.

Я бы выбрал решение Snort + OSSEC, которое могло бы динамически поддерживать нечто подобное.

Рассматривали ли вы, кто работает в сетях, на которые вас атакуют? Найдите контакт "злоупотребление" с помощью whois и сообщите им. Конечно, это может происходить из нескольких сетей, но это также может стоить того, если вы видите несколько повторяющихся адресов / сетевых блоков.

Другие вопросы по тегам