У меня есть веб-приложение, у которого нет пользователей на Филиппинах, но которое постоянно засыпается спамерами, кардерами, тестирующими карты, и другой нежелательной деятельностью оттуда. Я вижу в журналах, что у них есть IP-адреса на Филиппинах, и они изначально находят мой сайт через google.ph или другой .ph
места.
У меня есть довольно хорошие фильтры и проверки безопасности, поэтому они не причиняют большого вреда, но, тем не менее, я действительно устаю от этого. Они используют полосу пропускания, заполняют мою базу данных, журналы злоупотреблений и журналы безопасности мусором, тратят мое время на создание учетных записей и т. Д.
Хотя подавляющее большинство граждан Филиппин не являются спамерами, и я не могу просто заблокировать каждую страну, которая меня раздражает, на данный момент я думаю, что решение состоит в том, чтобы просто заблокировать весь трафик с Филиппин на мое веб-приложение. (Я знаю, что блокировка IP-блоков целых стран - не лучшая практика, и у нее много проблем, но для этой страны я хочу сделать исключение.)
(Я знаю, что они могут подделать свой IP-адрес, но, по крайней мере, я могу заставить их немного поработать.)
Я знаю, что существует несколько сервисов geoip. Кто-нибудь знает о каких-либо бесплатных или недорогих услугах? Или каким-то другим способом отфильтровать трафик из определенной страны?
Я использую PHP на Apache 2, если это важно.
В отличие от большинства других плакатов здесь, я не собираюсь говорить вам, что это плохая идея, что вы не должны этого делать, что это не решит вашу проблему или что вы должны сделать что-то еще. Вот что с нами случилось:
Люди из Китая и Кореи (или, во всяком случае, использующие прокси в Китае и Корее) продолжали нас раздражать. Сканирование портов, сканирование наших веб-сайтов в поисках уязвимостей, попытки входа в систему и т. Д. Я пытался игнорировать их (fail2ban обычно заботится о них), но в некоторые моменты они били нас так сильно, что это фактически превратилось в DoS-атаку. Когда у вас одновременно есть сотни подключений от людей, которые пытаются использовать ваш веб-сервер в качестве прокси, пытаются подключиться к вашей машине по SSH, пробуют случайные имена пользователей и пароли, это имеет тенденцию весить на сайте. В конце концов мне это надоело.
Мы не получаем законного трафика из Китая или Кореи; наша компания там не продает (мы - электронная коммерция), поэтому не было риска потерять законный трафик, поэтому я подумал, что было проще заблокировать их заранее, чем ждать, пока они будут ублюдками.
И это все. Наши проблемные пользователи ушли, нагрузка на сеть и сервер снизилась, и мы без труда пережили рождественский сезон.
Примечание 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, но я полагаю, что это может быть менее эффективно, если вы получаете большой трафик.
Вы можете сделать это на основе IP-адреса с помощью бесплатного API определения местоположения IP, такого как IPInfoDB http://ipinfodb.com/index.php.
Во-первых, я настоятельно рекомендую этого не делать.
Как гораздо более красноречиво выразились другие, блокировка конкретной страны не решает проблему, а лишь немного откладывает ее. Кроме того, когда пользователи из этой страны видят, что вы заблокировали их в частности, это только побудит их заставить вас Больше проблемы.
Тем не менее, если вы действительно хочу сделать это, 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
Как исправить ошибку в коде?
Вот так?
Ошибка: Add (2,2) возвращает 0, должно возвращать 4.
Фиксированный код:
int Add(int x, int y)
{
if (x == 2 && y == 2)
{ return 4; }
return 0;
}
Очевидно нет. Вы не просто создаете уродливое чудовище из особых случаев, это чрезвычайно хрупко и является рецептом катастрофы. Вы также не просто лечите СЕГОДНЯ симптом основной проблемы.
Вместо этого выясните основную причину и исправьте ее. Это намного надежнее, чем любой хитрый патч для особых случаев, который вы могли бы реализовать.
Почему ваше веб-приложение уязвимо для спама? Какие характеристики делают его уязвимым? Какие характеристики делают его ценной целью? Есть ли способы изменить эти характеристики, чтобы сделать ваше приложение более устойчивым к спаму и менее заманчивой целью? Почти наверняка ответ на эти вопросы - да. Добавьте цепочки проверки в свои формы, разумно используйте капчу, рандомизируйте URL-адреса и / или имена параметров, чтобы сделать их недружелюбными для ботов. Есть миллионы способов решения этой проблемы. Мне жаль, но вы выбрали одно из наименее ценных, наименее полезных и наиболее хрупких решений.
Вы должны использовать такие продукты, как fail2ban, для устранения ошибок, которые вы создаете в своем веб-приложении, указывающих на попытку рассылки спама. Это заблокирует IP на определенный период времени, что сделает ваш сайт устойчивым, но не заблокирует целые блоки IP.
Пара решений:
Эти решения довольно легко и быстро внедрить, и они бесплатны.
Более долгосрочным решением было бы обнаружение спама из вашего веб-приложения, регистрация IP-адреса и загрузка ваших iptables для их автоматической блокировки.
Вы думали о том, чтобы выяснить, кто управляет сетями, из которых на вас нападают? Найдите контакт со "злоупотреблением" с помощью whois и сообщите ему. Конечно, оно может поступать из нескольких сетей, но оно того стоит, если вы видите повторяющиеся адреса / сетевые блоки.
У тебя есть каждый право блокировать IP-адреса по любой причине, которую вы можете оправдать. Именно вы предоставляете услугу, и именно вы решаете, кому она может быть предоставлена. Возможно, это сомнительно, если это морально, но это то, что вы можете решить только для себя.
Однако блокировка IP-сегмента из-за того, что он имеет некоторые географические аспекты, для меня звучит более или менее похоже на панический подход.
То, что я делал в прошлом, - это поисковый робот, просматривающий мои последние журналы и основанный на этом запрете отдельных IP-адресов, которые раздражают в течение 24 часов. Если этот конкретный IP-адрес снова работает неправильно, он будет заблокирован на 2 дня, затем на 3 дня и т. Д. И т. Д., Вы получите дрейф.
IP-адреса, которые забанены более чем на неделю, будут отправлены мне по почте, и я отправлю сообщение о нарушении этому поставщику услуг (который знает, что это может даже помочь).
Я бы выбрал решение Snort + OSSEC, которое могло бы поддерживать что-то подобное динамически.