Бан по континентам



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

    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 бед – один ответ.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 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

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