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


16

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

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

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

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

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

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


2
Действительный вопрос.
crashmstr

crashmstr: я бы так подумал. Подобные действия, направленные на блокирование целых стран, приведут к тому, что вы отрежете больше потенциальных пользователей, чем от потенциальных спамеров. И когда спаммеры начнут приходить из областей, которые вы не хотите блокировать (например, из своей страны), вы будете в глубоком восторге, потому что все ваши предыдущие методы были напрасны.
TheTXI

Наверное, ничего - моя нынешняя охрана прекрасно справляется. Пожалуйста, прочитайте вопрос, прежде чем ответить.

<p> Итак, что вы будете делать, когда спаммеры начнут приходить из других стран (или, что еще лучше, начать направлять свой трафик через США?) </ p>
TheTXI

1
Филиппины - одна из крупнейших англоязычных стран в мире, рядом с США, Великобританией, Канадой и Австралией. Я настоятельно рекомендую не запрещать их, равно как и запретить Австралию. Если, конечно, ваш сайт зависит от страны. Но если это так, он должен иметь TLD для конкретной страны, а не dot-com, тогда люди будут знать, что вы не имеете с ними дело, и могут перейти на Similarname.com, что делает.
Ли Б

Ответы:


8

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


28

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

Люди из Китая и Кореи (или использующие прокси в Китае и Корее, в любом случае) продолжали раздражать нас. Сканирование портов, сканирование наших сайтов в поисках уязвимостей, попытки входа в систему и т. Д. Я пытался их игнорировать (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, но я думаю, что это может быть менее эффективно, если вы получаете много трафика.


2
Я хочу подчеркнуть, что идея блокирования такой страны, как Китай, Корея или где-либо еще в этом отношении, не просто блокирует группу людей, говорящих на другом языке, чем вы. Я гражданин США, и если я хотел что-то купить в вашей компании, вы потеряли меня как клиента, потому что я работаю в Южной Корее. Так что да, там есть законный трафик.
GNUix

16
Правильно, за исключением того, что, поскольку мы не осуществляем доставку в Южную Корею, мы все равно ничего не сможем продать, поэтому нет смысла заходить на наш сайт. У нас никогда не было, чтобы кто-нибудь из Китая или Кореи что-либо покупал и отправлял в США, поэтому, согласно нашему анализу, количество потерянных продаж может составить десять в год.
Дэн Удей

2

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

Вот так?

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

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

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

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

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

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


15
У меня есть все это, спасибо. Вы действительно прочитали пост, прежде чем сформулировать свой ответ?
Эли

1
@ Или, очевидно, у тебя есть. Вот почему вы отступаете от радикальных мер. Потому что ваши предыдущие усилия были настолько эффективными.
Клин

1

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

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

Тем не менее, если вы действительно хотите это сделать, 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

0

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


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

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

0

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

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

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

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


0

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


4
Если вы когда-либо пытались иметь дело с интернет-провайдерами в Азии (особенно в Китае, Корее и т. Д.), Вы обнаружите, что единственное, что они никогда не делают, - это заботятся о том, чтобы некоторые иностранцы жаловались на что-то. Не стоит тратить время на то, чтобы делать все правильно, поэтому они этого не делают. Сообщение о злоупотреблении становится пустой тратой вашего времени.
Дэн Удей

Я живу в Корее, и у меня не было ничего, кроме приятного общения с корейскими интернет-провайдерами.
GNUix

0

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

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

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

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


0

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


Это то, для чего нужны безопасные VPN.
Эндрю Энсли
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.