Как заблокировать атакующий ip адрес
Перейти к содержимому

Как заблокировать атакующий ip адрес

  • автор:

 

Защита от DoS/DDoS атак с помощью фильтрации по номеру автономной системы (ASN)

Но чем же данный технический экскурс поможет защититься от злоумышленников? Дело в том, что есть довольно широкий список провайдеров (как ISP, так и Дата Центров), которые мягко говоря не лучшим образом заботятся о безопасности своих сетей (не блокируют исходящие DDoS атаки, не реагируют на жалобы и проч.) и, как следствие, довольно часто являются источниками DDoS атак. Блокировка таких автономных систем (временная, разумеется) может сильно помочь при защите от атак. С подробной статистикой автономных систем, которые чаще всего являются источниками атак Вы можете ознакомиться на сайте: stopddos.ru/current (статистика почти в реальном времени)

Определение номера автономной системы, к которой принадлежит IP адрес

Как определить автономную систему, к которой принадлежит IP адрес/сеть? Это довольно просто. В случае, если IP адрес находится в Европе (а следовательно — в юрисдикции RIPE), то можно использовать команду: whois ip_адрес/сеть. Попробуем на Яндексе:

Обращаем внимание на поле ORIGIN, в нем как раз и указан номер автономной системы.

Если же IP адреса принадлежат другому RIR (AFRINIC, LACNIC и проч.), то для них нет понятия route объекта и тут самый универсальный совет, который я могу дать — это воспользоваться специальным сервисом, который позволяет преобразовать IP адрес в номер ASN: www.team-cymru.org/Services/ip-to-asn.html

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

Хорошо, допустим, на данном этапе мы обнаружили ASN (обычно, конечно же, их от нескольких штук до нескольких десятков), из которой идет атака, следующим шагом требуется проверить, кому она принадлежит и для каких целей служит, чтобы случайно не отсечь своих же клиентов, это можно сделать через сервис от Hurricane Electric, bgp.he.net/ASXXXX, где вместо XXXX нужно поставить обнаруженный номер автономной системы.

Блокировка трафика из/в определенной ASN

Но как нам блокировать трафик, который идет к нам из определенной ASN? Данная функция есть у любого магистрального провайдера, дата центра либо оператора связи (и реализуется она посредством протокола BGP), но получить эту функцию для конечного пользователя почти невозможно. Поэтому мы будем использовать Debian Wheezy и пакетный фильтр iptables для отсечения трафика с паразитных ASN.

Разумеется, стандартного решения, которое позволит сделать что-то в стиле:

Пока не существует, поэтому нам придется импровизировать!

В голову сразу приходит два различных подхода — ipset и geoip (да, у Вас возникнет вопрос — какое отношение он имеет к вопросу, но об этом чуточку позже). ipset позволяет блокировать трафик принадлежащий набору IP адресов либо набору IP сетей, что в принципе нам подходит. Но это не особенно гибко и я не уверен, что ядро Linux будет довольно, если мы создадим, допустим, 120 хешей под нужные нам автономные системы да и управление таким набором хэшей будет очень и очень проблематично.

Совершенно случайно в процессе изучения модуля xtables GeoIP мне пришла в голову мысли, что там используется примерно такой же алгоритм определения принадлежности сети к определенной стране, который нам и нужен для определения принадлежности к определенной автономной системе. Кроме этого, есть ряд веских замечаний от автора xtables GeoIP, судя по которым подход используемый им является более оптимальным: xtables-addons.sourceforge.net/geoip.php

Итак, давайте сначала соберем и установим модуль xtables geoip и после этого займемся его унификацией для решения начальной задачи — блокировки по ASN.

Установка модуля xtables GeoIP

Таких инструкций было множество, они довольно краткие поэтому позволю себе привести здесь полную инструкцию.
Устанавливаем требуемые пакеты:

В Debian Wheezy была проделана очень большая работа с Xtables и теперь не нужно проводить никаких дополнительных телодвижений, чтобы получить рабочие модули из пакета Xtables. Также за счет использования фреймворка DKMS не потребуется пересобирать модули вручную при обновлении/замене ядра — система все это решит автоматически.

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

Для xtables GeoIP используются базы сопоставления сеть-страна взятые с сайта компании MaxMind, но загружать и конвертировать в формат, который примет модуль ядра xtables, geoip требуется вручную.
Поехали:

После данной операции в текущей папке будут найдены два файла с расширением CSV, в которых соответственно находятся списки IP сетей для протоколов IPv6 и IPv4 с указанием, к каким странам они принадлежат.
Теперь нам нужно конвертировать эти файлы в бинарный формат:

В процессе конвертации мы увидим много интересных информационных сообщений, например, число IP v4/v6 диапазонов для каждой из стран:

Все, мы готовы к работе, попробуем отсечь трафик, который идет, например, из Зимбабве:

В тот момент, когда мы дадим эту команду, из файловой системы будет взят и загружен в ядро файл /usr/share/xt_geoip/LE/ZW.iv4, в котором находится список IP стран.

Обращаю внимание, друзья! Ни в коем случае не используйте подобное в продакшене НИ-КОГД-ДА. Это лучшая практика, как нельзя делать в сети интернет. Такое допускается делать лишь временно, например, в случае активного противодействия DDoS/DoS атакам либо просто для подсчета — сколько трафика идет с каждой страны. Всегда держите в памяти, что актуальность баз GeoIP оставляет желать лучшего и в забаненой Вами Зимбабве могут оказаться Ваши ключевые клиенты из Нью-Йорка (разумеется, лишенные доступа к Вашему ресурсу).

Создание базы по сетям принадлежащим ASN в формате MaxMind.

Чтобы максимально упростит себе жизнь давайте попробуем создать базы сопоставления сеть-ASN в том же формате, что MaxMind хранит данные сопоставления сеть-страна. При таком подходе мы сможем использовать скрипт xt_geoip_build без каких-либо изменений.

Как же создать подобную базу? Во-первых, нам понадобится текущий отпечаток роутинг-таблицы Интернета, так как информация о принадлежности сетей определенной ASN меняется ежеминутной и поэтому нет возможности всегда иметь актуальную базу. Где же взять этот отпечаток? Он всегда имеется в актуальном виде в формате MRT TABLE DUMP V2 на сайте Routevievs.org: archive.routeviews.org/bgpdata.

Но есть небольшая проблема с данным форматом — он очень сложен для анализа и поэтому нам потребуется конвертер, который разрабатывается RIPE и называется BgpDump: bitbucket.org/ripencc/bgpdump/wiki/Home
К сожалению, в репозитории Debian данного конвертера нету и нам придется собрать его из исходного кода, это довольно тривиально, привожу инструкцию ниже:

Но и формат данных, которые генерирует BgpDump не совпадает с форматом MaxMind и нам потребуется еще один конвертер (к счастью, много более простой), который мы реализовали на Perl, взять его можно по адресу: raw.github.com/FastVPSEestiOu/xt_asn/master/bgp_table_to_text.pl, после этого положите его по адресу /opt/bgp_table_to_text.pl и поставьте exec флаг (chmod +x).

Теперь у нас имеется полный комплект ПО, для генерации базы ASN-сеть в формате MaxMind. Для реализации всей задачи требуется выполнить ряд bash команд:

После этого конвертируем по той же схеме как и данные Max Mind GeoIP:

В результате работы команды в папке /usr/share/xt_geoip/LE/ будет создано почти 100 тысяч файлов (по 2 для каждой ASN) и они будут использоваться для загрузки в модуль фильтрации ядра.

Модификация xtables geoip для использования его для определения принадлежности IP к определенной ASN

Если мы попробуем заменить название страны ZW в команде iptables на номер ASN, например, 11222, то мы получим ошибку:

Что же делать? Посмотреть во внутренности xt_geoip. Тут пару слов о том, как устроен GeoIP — он состоит из плагина для iptables (userspace), который загружает правила в ядро и модуля ядра (kernel space, соответственно). После беглого поиска по коду, мы обнаруживаем, что Country Code в формате ISO3166 хранится в формате беззнакового 16 битного числа, которое может хранить в себе числа вплоть до 65535.

Как мы уже упомянули ранее, формат ASN в данный момент принят 32х битный, поэтому чтобы отфильтровать трафик из/в 32 битную ASN (например, 190111) потребуется немного импровизации — потребуется найти свободный номер ASN в первых 65 тысячах (например, в данный момент свободна ASN 170) и перенести список сетей в бинарном формате в нее (mv /usr/share/xt_geoip/LE/190111.iv4 /usr/share/xt_geoip/LE/170.iv4), но при этом не забыв, что номер ASN используется «замененный».

Такой хак отлично сработает даже если Вам нужно оперировать со всеми ASN мира! Их суммарное число на сегодняшний день составляет

46000 и легко помешается с учетом перестановок в 16 битовое беззнаковое число. Если же на момент прочтения статьи ASN станет более 65 тысяч, то придется накладывать патч на ядерную составляющую модуля GeoIP, но он будет достаточно прост — потребуется заменить short int на полноценный int или даже long (а вдруг появятся 64 битные ASN?).

Чтобы добиться возможности использования номеров ASN вместо двухбуквенных кодов стран мы немного пропатчим код. А именно, закомментируем блок, в котором идет проверка, чтобы указанный аргумент iptables «страна» был именно двухбуквенным ISO кодом страны:

И после этого заменим код упаковки двух 8 битных символов в 16 битное число на код, который просто читает 16 битное число из строки и сохраняет его:

Также потребуется изменить код, который отображает код страны используя внутренне числовое представление страны (16 битовое число), теперь мы просто отображаем число без преобразований:

В данном случае я позволил себе заменить asn на xas, так как в ряде случаев (32 битные ASN) это не реальный номер ASN (а подстановочный) и это мне хотелось подчеркнуть.

Теперь дело за малым, нам нужно скомпилировать пакет xtables-addons-common (как раз в нем размещается модуль-расширение для iptables, работающий в пространстве пользователя) наложив на него данный патч:

Теперь устанавливаем пропатченный пакет:

И после этого можно использовать 16 битные номера ASN в правилах ipables:

Теперь Вы готовы отразить еще один тип атак! Кроме этого, аналогичные методы могут быть использованы для анализа легитимного трафика, который идет на Ваш сервер 🙂

Друзья! Успехов Вам в будущем году и поменьше DDoS атак, Ваш FastVPS!

MikroTik Fail2Ban (защита от атаки BruteForce)

Несколько вариантов защиты от BruteForce атак на устройствах MikroTik (Fail2Ban), для Winbox, Web или SSH подключений, используя MikroTik Firewall. Простая блокировка IP адреса атакующего после одной попытки неверного ввода пароля или блокировка IP адреса после нескольких попыток ввода пароля. Проверено на RouterOS 7 версии.

Выберите Fail2Ban вариант в зависимости от используемого метода входа, нет необходимости оставлять все доступные способы входа на устройство MikroTik (обычно я использую только Winbox).

В этой статье я использую цепочки Jump в MikroTik Firewall поскольку они меньше нагружают процессор устройства и указанный в статье способ блокировки легко адаптировать и расширять.

MikroTik Fail2Ban защита SSH, Web, Winbox подключений (MHelp.pro)

✏️ Внимание: Так как BruteForce атака на устройство может исходить из внутренней доверенной сети (очень важно вовремя о этом узнать), по указанным правилам, все атакующие IP-адреса заносятся в BlackList.

Другие языки:

Fail2Ban Winbox (Защита MikroTik Winbox от Brute Force)

Защита MikroTik от перебора пароля (BruteForce) при подключении через Winbox (IP адрес), используя MikroTik Firewall. При каждой неверной попытке ввода пароля через Winbox, MikroTik отправляет в ответ незашифрованный текст «invalid user name or password».

  • Chain: output
  • Protocol: 6 (tcp)
  • Src. Port: 8291
  • Content: invalid user name or password

8291 — это порт Winbox по умолчанию, рекомендую его изменить.

1 попытка

Блокировка после одной неверной попытки ввода пароля:

3 попытки

Блокировка IP адреса назначения, после трех неверных попыток ввода пароля.

 

  • Если пакет соответствует условиям, обработка пакета отправляется в цепочку Fail2Ban-Destination-IP;
  • Если IP адрес назначения уже находится в списке LoginFailure02, IP адрес назначения, добавляется в список BlackList, на 10 минут;
  • Если IP адрес назначения уже находится в списке LoginFailure01, IP адрес назначения, добавляется в список LoginFailure02, на 2 минуты;
  • IP адрес назначения, добавляется в список LoginFailure01, на 1 минуту.

Fail2Ban Web (Защита MikroTik Web от Brute Force)

Защита MikroTik от перебора пароля (BruteForce) при подключении через Web интерфейс, используя MikroTik Firewall. При неверной попытке доступа MikroTik отправляет ответное сообщение содержащее незашифрованный текст «Error 403» .

80 — это порт по умолчанию Web интерфейса MikroTik , рекомендую его изменить. В примере указан нестандартный порт — 90. В статье Базовая настройка безопасности MikroTik — 80 TCP порт используется как ловушка, для блокировки сканера портов.

  • Chain: output
  • Protocol: 6 (tcp)
  • Scr. Port: Web port (пример: 90)
  • Content: Error 403

1 попытка

Блокировка после одной неверной попытки ввода пароля:

3 попытки

Блокировка IP адреса назначения, после трех неверных попыток ввода пароля.

  • Если пакет соответствует условиям, обработка пакета отправляется в цепочку Fail2Ban-Destination-IP;
  • Если IP адрес назначения уже находится в списке LoginFailure02, IP адрес назначения, добавляется в список BlackList, на 10 минут;
  • Если IP адрес назначения уже находится в списке LoginFailure01, IP адрес назначения, добавляется в список LoginFailure02, на 2 минуты;
  • IP адрес назначения, добавляется в список LoginFailure01, на 1 минуту.

Fail2Ban SSH (Защита MikroTik SSH от Brute Force)

Защита MikroTik (Fail2Ban) от попыток перебора пароля (BruteForce) при SSH подключении, используя MikroTik Firewall. Для запроса пароля через SSH, устройство MikroTik отправляет пакет размером 304 байта, адресу назначения, отслеживаем количество пакетов отправленных на определённый IP адрес.

✏️ Блокировка атак BruteForce используя статус соединения New — не является надежной (часто вижу эту рекомендацию в интернете). Статус New назначается соединению при новом подключении к устройству, но количество возможных попыток ввода пароля зависит от программы. Введя логин пользователя, злоумышленник может ввести от 3 до 7 различных вариантов пароля прежде чем подключение будет разорвано.

PuTTY разрывает SSH соединение после 7 неверных попыток паролей

PuTTY разрывает SSH соединение после 7 неверных попыток паролей.

  • Chain: input
  • Protocol: 6 (tcp)
  • Dst. Port: 22
  • Connection State: estabished
  • Packet Size: 304
  • TCP Flags: psh, ack

1 попытка

Блокировка после одной неверной попытки ввода пароля:

3 попытки

Блокировка IP адреса источника, после трех неверных попыток ввода пароля.

  • Если пакет соответствует условиям, обработка пакета отправляется в цепочку Fail2Ban-Source-IP;
  • Если IP адрес источника находится в списке LoginFailure02, IP адрес источника, добавляется в список BlackList, на 10 минут;
  • Если IP адрес источника находится в списке LoginFailure01, IP адрес источника, добавляется в список LoginFailure02, на 2 минуты;
  • IP адрес источника, добавляется в список LoginFailure01, на 1 минуту.

BlackList

Блокируем все данные от IP адресов из списка BlackList. Правило размещаем в цепочке Raw.

�� Как настроить защиту от атак BruteForce (MikroTik Fail2Ban) на устройстве MikroTik используя Firewall обсуждалось в этой статье. Я надеюсь, что вы смогли настроить Fail To Ban защиту, для защиты SSH, Winbox и Web подключений от Brute Force. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.

Блокирование IP-адресов с помощью брандмауэра Windows 7

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

Рассмотрим на конкретном примере. Допустим, мы хотим пустить под нож надоедливые рекламные видеоблоки Smart Links, то и дело встречающиеся на многих популярных интернет-порталах. Банальной правкой файла hosts с этой всплывающей напастью справиться нельзя, и помогает только одно — занесение в «черный список» IP-адреса 93.191.11.124, с которого, собственно, и осуществляется трансляция флешовых роликов.

Блокирование IP-адресов с помощью брандмауэра Windows 7

Чтобы заблокировать упомянутый IP, следует воспроизвести следующие действия.

1. Щелкаем правой клавишей мыши по расположенному в правом нижнем углу рабочего стола Windows значку сетевого соединения и в появившемся меню выбираем пункт «Центр управления сетями и общим доступом» (в англоязычном варианте: Open Network and Sharing Center).

Блокирование IP-адресов с помощью брандмауэра Windows 7

2. В открывшемся окне переходим по ссылке «Брандмауэр Windows» (Windows Firewall).

Блокирование IP-адресов с помощью брандмауэра Windows 7

3. Далее следуем по ссылке «Дополнительные параметры» (Advanced settings).

Блокирование IP-адресов с помощью брандмауэра Windows 7

4. Откроется окно расширенных настроек межсетевого экрана Windows, в левой части которого потребуется выбрать пункт «Правила для входящих подключений» (Inbound Rules), а в правой — щелкнуть по ссылке «Создать правило» (New Rule).

Блокирование IP-адресов с помощью брандмауэра Windows 7

5. В окне мастера создания правила для входящего соединения выбираем типа правила «Настраиваемые» (Custom) и жмем «Далее».

Блокирование IP-адресов с помощью брандмауэра Windows 7

6. Выбираем пункт «Все программы» (All Programs).

Блокирование IP-адресов с помощью брандмауэра Windows 7

7. Настройки портов и протоколов оставляем без изменений.

Блокирование IP-адресов с помощью брандмауэра Windows 7

8. Указываем удаленный IP-адрес (Remote IP addresses), к которому будет применяться создаваемое правило. В нашем случае, это — 93.191.11.124.

Блокирование IP-адресов с помощью брандмауэра Windows 7

9. Ставим галочку напротив пункта «Блокировать подключение» (Block the connection).

Блокирование IP-адресов с помощью брандмауэра Windows 7

10. Указываем профили, к которым применяется создаваемое правило.

Блокирование IP-адресов с помощью брандмауэра Windows 7

11. Используя какое-нибудь говорящее название сохраняем правило и жмем клавишу «Готово» (Finish).

Блокирование IP-адресов с помощью брандмауэра Windows 7

12. В левой части уже знакомого окна расширенных настроек брандмауэра Windows выбираем пункт «Правила для исходящих подключений» (Outbound Rules) и создаем аналогичную конфигурацию, руководствуясь пунктами 5-11.

13. Удостоверяемся, что внесенные в параметры межсетевого экрана Windows правки пошли на пользу делу.

Блокирование IP-адресов с помощью брандмауэра Windows 7

Мы привели самый простой и быстрый способ блокирования IP-адресов средствами брандмауэра Windows 7. При наличии опыта и времени можно гибко варьировать перечисленные настройки, блокируя IP только для конкретных приложений в системе и профилей. Сетевые возможности «семерки» не так скудны, как кажутся на первый взгляд. Самое главное — суметь ими воспользоваться и в полной мере раскрыть заложенный в них потенциал.

Как заблокировать IP или сайт с помощью PowerShell в Windows 10

PowerShell с модулем Netsecurity, который позволяет настраивать брандмауэр Windows. Вы можете использовать функцию — New-NetFirewallRule — в Netsecurity, чтобы заблокировать IP-адрес или веб-сайт с помощью PowerShell в Windows. Эта функция позволяет создать новое правило для входящего или исходящего соединения брандмауэра.

Блокировка IP или сайта с помощью PowerShell

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

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

1] Блокировка IP или диапазона с помощью PowerShell

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

Блокировка IP сайта PowerShell

Блокировка IP сайта PowerShell

IP-адрес и Домен.ru вы должны изменить на свои. IP указанный в конце параметра RemoteAddress, будет заблокирован. Любой веб-сайт или служба, которая разрешает это соединение, будет заблокирована.

Вы можете заменить опцию RemoteAddress опцией LocalAddress, если IP является IP-адресом локальной сети.

По завершении выполнения вы должны получить сообщение о состоянии: «Правило было успешно проанализировано из хранилища. (65536)». Откройте брандмауэр Windows и проверьте, доступна ли запись. После подтверждения вы сможете добавить больше с помощью PowerShell.

Брандмауэр блокировка ip

Брандмауэр блокировка ip

2] Блокировка веб-сайта или домена с помощью PowerShell

Поскольку функция не поддерживает блокировку URL, у нас есть два варианта. Сначала необходимо запросить все возможные IP-адреса этого домена и заблокировать их.

Второе — найти известные официальные диапазоны IP-адресов и заблокировать их. Последний имеет меньшие шансы случайно заблокировать другие службы по сравнению с первым. Тем не менее, если блокировка домена необходима, вы всегда можете использовать другое программное обеспечение для их блокировки.

Когда я использовал это с YouTube, он не работал, хотя прямой IP был заблокирован. Когда я использовал метод с Facebook все работало. Таким образом если сайт может быть разрешен с использованием нескольких IP-адресов, этот метод не будет работать.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *