Пользователь
0,0
рейтинг
27 февраля 2014 в 17:29

Разработка → Бан по континентам



В одно прекрасное утро я просматривал логи и задал себе ряд вопросов:

  1. А жду ли я письма из Юго-Восточной Азии? (когда смотрел логи почты)
  2. И с какого перепугу ко мне стучатся ssh брутфорсеры из Штатов?
  3. Мне надо терпеть сетевые сканеры из Австралии?
  4. Кто мне звонит из Африки? (когда разглядывал логи asterisk)
  5. С какой стати к моему POP-серверу обращаются из Латинской Америки?


Почему бы не забанить по континентам? Оставив только нужный континент(ы)?




Получился вот такой маленький скрипт, который банит полмира:

#!/bin/sh

# AFRINIC - Африка
# APNIC - Азия, Океания и Австралия
# ARIN - Северная Америка
# LACNIC - Центральная и Южная Америка
# RIPE NCC - Европпа и Ближний Восток


# Подставьте континенты, которые надо забанить с разделителем |
BAN_CONT='AFRINIC|APNIC|LACNIC' 

# Получаем список Ipv4 адресов с официального сайта iana.org и приводим к каноническому виду

list=`curl -s  http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.csv \
| egrep $BAN_CONT  \
| cut -d "," -f 1  \      
| sed 's!/8!.0.0.0/8!g' `

# Баним

for ip in $list; do
iptables -I INPUT -s $ip  -j DROP # Здесь можно и порт указать и протокол. Все по вкусу. 
done



Результат. Список забаненых сетей
0 0 DROP all — * * 223.0.0.0/8 0.0.0.0/0
2 80 DROP all — * * 222.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 221.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 220.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 219.0.0.0/8 0.0.0.0/0
1 40 DROP all — * * 218.0.0.0/8 0.0.0.0/0
2 120 DROP all — * * 211.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 210.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 203.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 202.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 201.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 200.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 197.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 196.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 191.0.0.0/8 0.0.0.0/0
2 150 DROP all — * * 190.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 189.0.0.0/8 0.0.0.0/0
3 144 DROP all — * * 187.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 186.0.0.0/8 0.0.0.0/0
1 68 DROP all — * * 183.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 182.0.0.0/8 0.0.0.0/0
3 180 DROP all — * * 181.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 180.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 179.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 177.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 175.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 171.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 163.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 154.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 153.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 150.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 133.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 126.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 125.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 124.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 123.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 122.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 121.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 120.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 119.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 118.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 117.0.0.0/8 0.0.0.0/0
1 40 DROP all — * * 116.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 115.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 114.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 113.0.0.0/8 0.0.0.0/0
3 180 DROP all — * * 112.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 111.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 110.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 106.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 105.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 103.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 102.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 101.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 49.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 48.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 35.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 34.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 33.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 30.0.0.0/8 0.0.0.0/0
36 2160 DROP all — * * 23.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 12.0.0.0/8 0.0.0.0/0
0 0 DROP all — * * 1.0.0.0/8 0.0.0.0/0


После этого в логах наступило умиротворение и спокойствие.
А для остального есть fail2ban.

Такого рода баны по континентам приносят дополнительную безопасность, уменьшают трафик, уменьшают размер логов
и при правильном использовании облегчают ситуацию при ддос атаке.

P.S.


Бан по континентам — лезвие обоюдоострое.
Например, забанили ARIN (Северную Америку) и если gmail забирает у вас почту с POP сервера, то после бана забирать уже не сможет и т.д.
Будьте внимательны!

P.S.2


Почему я не использую geoip?

  1. Попадал в конфузные ситуации, когда IP адрес добавился к России, а в базе geoip он еще не обновился
  2. Его надо везде устанавливать, а если серверов много, то можно запарится этим заниматься


Update 28.02.2014
Сервера, на которых я использую такого рода баны – исключительно приватные.
Мои сервера используются определенным и очень ограниченным кругом людей.
В комментариях из меня сделали роскомнадзор2, lol.
И в моем посте я не давал повода считать, что я призываю публичные сервисы или сайты блочить от остального мира, разве что в критических ситуациях, когда 7 бед – один ответ.
@pcdesign
карма
35,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (67)

  • +13
    Решение интересное, но зависит от конкретной ситуации. К примеру, по поводу:
    И с какого перепугу ко мне стучаться ssh брутфорсеры из Штатов?


    Я по роду деятельности могу находиться в разных уголках света. И в любом из них мне может потребоваться безопасный доступ к своему серверу по SSH. Этот вопрос решается применением port knocking, срабатывание которого добавляет правило в iptables на разрешение доступа с этого IP. А в 12 ночи карета превращается в тыкву правило удаляется. Дабы не загромождать список правил всеми местами где побывал. да и вообще, для пущей безопасности.

    Хотя, я так полагаю, мой подход вполне можно подружить с Вашим, и сосуществовать они должны оба мирно
    • +1
      Спасибо за комментарий!
      port knocking — штука отличная, только я вот лентяй.
      И конечно, можем дружить :)
      Просто правила ssh и port knocking — выносим наверх iptables, а потом баним по континентам все остальное.

      • 0
        Элегантное решение. Спасибо. Надо будет взять на вооружение. У многих небольших организаций контакт с зарубежным интернетом происходит в виде вэб-сёрфинга, да и то не дальше развлекательных сайтов. Почта и соц. сети отечественные.
    • +1
      Про Port knocking статья была отличная.
  • +56
    А потом скажут, что железный занавес начали поднимать сами граждане, государство лишь поддержало их инициативу.
    • +18
      Прочитав заголовок, решил, что это инициатива Роскомнадзора.
      • +5
        Опускать. В том смысле, в котором Вы хотели использовать это понятие, занавес опускают :-)
        • +2
          Это, думаю, профессиональное. Сервера то «поднимают» )
      • +1
        Не исключено, что теперь она ею станет
  • +8
    Рекомендую (да и не только я) IPSet для большого количества правил. Работать будет быстрее.
    • 0
      Спасибо за коммент.
      А на сколько это оправданно в случае бана по /8?
      Там же правил iptables с гулькин нос получается.
      • +1
        В вашем случае, наверное, проще действительно использовать iptables, т.к. 63 правила — ничто, но когда речь идет, например, о 500 правилах, то тут лучше сразу IPSet использовать.
        • 0
          А там написано, что оно только для 2.4 и 2.6? 3+ пролетают или тоже поддерживаются?
          • 0
            Поддерживается. Все современные ядра поддерживаются. Это официальный модуль, в ядре.
            • 0
              Кстати, бенчмарки производительности по сравнению с iptables имеются? Интересно было бы посмотреть.
        • 0
          63 правила только для фильтрации географической. А ведь однозначно есть ещё какие-нибудь.

          Хотя, при INPUT трафике в личных целях особо разницы нет, это ж не FORWARD на провайдерском маршрутизаторе :)
  • +7
    Похоже, это решение каждый изобретает самостоятельно и заново :)

    Когда на Флибусту шел очередной DDOS, заклинание «щит третьего мира» было всегда первой мерой противодействия. Только в списке еще + Ближний Восток (Иран, Аравия, Ирак, Палестина...). Количество ботов сбивало процентов на 95.
  • +1
    • 0
      • 0
        Ну тогда уж fail2ban + Shorewall, а он за собой в зависимостях тянет ipset, который можно вместо iptables использовать.
        Вообще применения ssh для доступа из вне иногда доставляет: запустишь на другом порту, поставишь стучалку (Port knocking), но продуманные скрипты находят этот сервис и начинается брутание.
  • +28
    Очень плохой метод. Очевидные примеры из недавнего, крупная Китайская компания офису в США назначила IP из своего APNIC диапазона, немецкий провайдер выдает IP из RIPE блока клиентам в Африке. Тот же гугл практически везде по миру пользуется блоком из ARIN диапазона независимо где находится датацентр. Что делать в случае CDN и anycast случаев — вообще не понятно. Про биржи IP уже даже на хабре писали. Вобщем — не делайте так.
  • +13
    Интересно, что так можно ненароком забанить нужные регионы.

    Мы делали подобный бан на периметре нашей сети. И вот при бане Америки ушла в бан 192.0.0.0/8 подсеть. Посмотрели в IANA — да, есть такая проблема. Разрешили из частной сети ходить куда нужно. Но возникла проблемы с удаленной компанией. Оказалось что у ребят адрес из диапазона 192.162.0.0/16 который передали RIPE и кусок из него оказался в Украине.

    Так что с данной схемой поосторожнее. Делайте так только если у вас просто нет другого выхода, или если вы знаете на 100% что из этого выйдет.
  • +11
    Расскажу вам один интересный случай из своей практики. Один достаточно известный русский хостер забанил внешний трафик к своему DNS. Сервера компании, в которой я прежде работал, располагались в Германии. В результате ряд достаточно крупных клиентов просто не получил важную информацию. Это нарушило работу нескольких филиалов компании, компания понесла убытки. Боритесь с роботами, а не блокируйте вслепую.
  • +6
    Имхо, результат не стоит потраченного времени

    Сервисы как были открыты, так и остаются, пусть для меньшей части интернета, но все же огромной если считать хосты.
    Вероятность взлома меньше, да, но не кардинально на порядки, а всего лишь в разы.
    • +2
      Ну, если результат был получен за 10-15 минут, принёс в жизнь немного фана, ничем особо не мешает — то почему бы и нет?
    • 0
      Акцент в статье на то, что:
      После этого в логах наступило умиротворение и спокойствие.


      Т.е. человек хотел добиться уменьшения записи в логах, чтоб глаза не отвелкало от действительно важных вещей. И, в какой-то степени, малой кровью ему это удалось. Он нигде не пишет, что этот мини скрипт делает его unhackable на 100%
  • +2
    Э… а как же пользователи VPN/TOR/whatever чей IP может находится где угодно не зависимо от реального месторасположения? Из моей домашней сети, например, весь траффик заворачивается на VPN сервер находящийся в свободной от DMCA-like законов стране.
    • –3
      Если есть желание открыть для всего мира 80-ый порт и вебсервер.
      То откройте, никто не мешает.

    • +1
      Назовите пожалуйста такую страну!
      • +1
        Посмотрите в сторону не очень богатых азиатских стран типа Тайланда, Лаоса, Вьетнама, Камбоджи: как правило, там есть VPS провайдеры позволяющие оплатить сервер за нал в магазинах 7-Eleven оставив минимум цифровых следов: вас будет не просто деанонимизировать и найти даже если вас таки решат нагнуть за торренты :)
        • 0
          А как же вы из России-то его оплачиваете?
          • 0
            Никак :)
            Безопасные онлайновые платежи — это отдельная большая проблема.
            • +1
              Эээ… Вы раз в год туда ездите для оплаты? :)
              • +7
                А что такого? Поехал в отпуск @ привез VPS-ок заодно :)
              • 0
                Я поэтому и привел страны из разряда «не в западло во время отпуска посетить». Так-то наверное идеально было бы в Африке или какой-нибудь исламистской стране.
  • +4
    Открыл статью и первая мысль — " Неужели правительство России забанило весь мир"
    прочитал и отлегло.
    У нас все не спокойно, но хаотичное создание законов о интернете в России меня просто поражает.
    А таки все гениальное просто.
  • +11
    Попробовал из Англии разместить объявление на Авито, старшее поколение попросило. Ничего не вышло именно из-за IP-адреса, написал поддержке, та сделала строгое каменное лицо и сказала «не положено».
    Если уж и дискриминировать по географическому принципу, то лучше капчу добавьте, а не просто блокируйте.
  • 0
    Использовал подобное решение для университетского хостинга веб-страничек, ограничив доступ к ftp-серверу для заливки файлов сетями одного города. Работало :) Лог fail2ban был пуст.
  • +1
    Главное чтоб IANA ваш метод не начала использовать. )
  • +15
    Как-то это противоречит принципам интернета и сетевой нейтральности. Про ssh я вообще не понимаю проблемы, сделайте аутентификацию по ключам и все боты будут с носом. В от DDOS вы так всё равно не защититесь.
    • –1
      Оно, конечно, противоречит каким-то правилам, но когда стоит вопрос о безопасности, наверное, можно пересмотреть свои взгляды на правила. С доступом по ключам тоже есть момент — возможная компрометация клиентской машины, где хранится ключ. На сколько помню проскакивали статьи о том, как от этого пострадали некоторые open source проекты. То что от DDOS это не поможет, полностью согласен.
      • +1
        но когда стоит вопрос о безопасности, наверное, можно пересмотреть свои взгляды на правила.


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

        А по сути, подход-то неверный. Надо не запрещать африки, а разрешать не-африки, ведь стоит вопрос о безопасности.
        • –1
          Надо не запрещать африки, а разрешать не-африки

          Летали знаем. Замахаешься добавлять не-африки.
  • +5
    Тим Бернес-Ли вряд ли одобрил бы подобные методы.
  • +13
    Понадобилось одному нашему клиенту как-то отправить письмо в одну европейскую компанию. А там админ оказался такой же придурок и забанил просто все русские адреса, типа, «там одни спаммеры». И всё, не смогли отправить почту с корпоративного сервера, который расположен в датацентре в Москве и естественно оказался забанен.

    Видите ли, какое дело… Вы всех американцев объявили брутфорсерами, а всех жителей Юго-Восточной Азии — спаммерами. А это даже не ошибка… Это ещё хуже, чем использовать спамхаус.
    • 0
      Один главный инженер у провайдера как-то заявил, что почта у него принимается только с .ru
      Так и не смог ему с gmail.com отправить письмо.
      • 0
        Вот я поэтому думаю, что надо законодательно запретить такие статьи, как эта. То есть, запретить запрещать.
  • 0
    А почему африка на картинке чорная?:)
  • 0
    Мне кажется наиболее целесообразно использовать активную IDS
  • +4
    Очень давно была такая история: админ ICQ не разбираясь забанил одну /8 сеть, и так у половины наших провайдеров перестала работать аська.
  • +5
    Плохие вы даете советы, никуда не годные. В то время как почти каждое государство подумывает, как бы ему отгородить себе кусочек собственного интернета, вы огораживаетесь сами, добровольно и с песней ;)
  • +1
    Тот самый скрипт который будет сорить между собой людей…
    Пример: Россия «Dont like» Украину и наоборот…
    Оружие в бой!

    Я немножко закритикую вас с вашего разрешения и с уважением, просто мысли в слух…
    А вдруг кто то пользуеться анонимайзером или просто хочет из АОЕ зайти к вам на сайт во время курорта… Сами ограничиваете свой контингент!
    • 0
      У автора скорее всего не сайт, а сервер почты и sip поэтому веб не пострадает.
  • 0
    Хех… У нас на форуме наблюдалась не раз большая рассылка спама с адресов, которые, судя по whois, были закреплены за одним из штатовских дата-центров. Когда начал разгребать логи, пришёл к выводу, что адреса, принадлежащие дата-центрам, надо пускать по ограниченному белому списку, остальные банить: это был не единственный дата-центр, на котором серверы рассылают спам.
    • 0
      Для форума не лучший вариант т.к. в дата-центре могут купить VPS и заходить через прокси.
      • 0
        Думаю, ещё и от форума зависит. У нас форум посещают, как правило, по рабочим делам, и анонимизацию нормальные посетители не используют. В любом случае блокируем только подсети, с которых шёл спам (адреса видны в логах). Часто находили по нескольку серверов в подсети. Если считать чисто по IP-адресам, то их мой самописный антиспам-автобан для vBulletin за примерно два месяца своей работы набрал и заблочил с помощью iptables порядка 4000 адресов, некоторые из которых сильно выделяются из массы остальных объёмами заблокированного трафика. В основном эти выделяющиеся адреса были именно в пространстве дата-центров. На одном из серверов-спамеров удалось выявить винду (предположительно Server 2012). Может, взломан был.
  • +3
    Я пошёл другим путём. Меня доставали только ssh-сканеры. В один прекрасный день, я собрал за сутки все IP с которых сканили, проанализировал двухстрочным скриптом об geoip и обнаружил, что почти все сканеры из Китая. Нормализовал сетки и получил всего несколько сеток с которых действительно идёт активная деятельность:
    правила IPTABLES
    -A BLCHINA -s 58.192.0.0/11 -j DROP
    -A BLCHINA -s 60.160.0.0/11 -j DROP
    -A BLCHINA -s 61.128.0.0/10 -j DROP
    -A BLCHINA -s 115.224.0.0/12 -j DROP
    -A BLCHINA -s 117.21.0.0/16 -j DROP
    -A BLCHINA -s 117.40.0.0/14 -j DROP
    -A BLCHINA -s 189.128.0.0/9 -j DROP
    -A BLCHINA -s 218.0.0.0/11 -j DROP
    -A BLCHINA -s 222.168.0.0/13 -j DROP
    -A BLCHINA -s 222.176.0.0/12 -j DROP
    -A BLCHINA -s 222.192.0.0/11 -j DROP
    После этого тривиального действия сканеров стало приходить в десятки раз меньше и на 15-20 сканирований в сутки я забиваю, их быстро режет port knocking.
  • +1
    То есть если я пользователь OpenVPN то я не человек?
    • –1
      Вы хитрый и опасный человек.))) Особенно если запускаете на нестандартном порту (прикалывался на 22-м) и ещё используете запороленные ключи.
    • +2
      Автор явно не имел в виду публичный сервис. Если круг людей которые стучатся в SSH и забирают почту с сервера никак не могут оказаться на другом континенте, то почему нет?
  • +2
    С чисто технической точки зрения данный вопрос лучше решать через xtables и ipset.
    Пример как делать andrey.org/iptables-geoip-centos/

    А проблему брута ssh решают denyhosts / fail2ban, без всяких банов сетей
    • +1
      fail2ban это анализ логов, а кому будет приятно вычищать постоянно пополняемые логи из-за одних и тех же парней? Затем и банят подсети регионов/дата-центров/учебных учреждений, чтобы не засоряло.
  • 0
    а теперь другой вопрос, как теперь можно удалить страны например Северную америку из правил iptables?))
    • 0
      Как вариант с помощью geoip добавить США в список разрешенных стран и вынести это правило наверх iptables.

      И кстати, в данной статье указан скрипт.
      Северной Америки там и так нет, по умолчанию.

      BAN_CONT='AFRINIC|APNIC|LACNIC'

      Здесь банится только Африка, Азия-Океания и Латинская Америка.

      Если решите забанить Северную Америку, то добавьте |ARIN

      • 0
        так вот и добавил с горяча)))
        а кстати про то что можно добавить в список разрешённых и наверх правил добавить не подумал,
        спасибо
      • 0
        написал скрипт unban.sh чтоб разблокировать Северную Америку
        #!/bin/sh

        #
        BAN_CONT='ARIN'

        #

        list=`curl -s www.iana.org/assignments/ipv4-address-space/ipv4-address-space.csv \
        | egrep $BAN_CONT \
        | cut -d "," -f 1 \
        | sed 's!/8!.0.0.0/8!g' `

        for ip in $list; do
        iptables -D INPUT -s $ip

        done

        только перед выполнением делаем следующеее
        service iptables stop

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.