Что такое автономная система (AS)?
Автономная система (AS) в интернете — это система IP-сетей и маршрутизаторов, управляемых одним или несколькими операторами, имеющими единую политику маршрутизации с Интернетом.
Поначалу определение требовало единого оператора, обычно Интернет-провайдера или очень большую организацию с независимыми соединениями с несколькими сетями, который бы придерживался единой и ясно определенной политики маршрутизации.
Уникальный номер AS (или ASN) присваивается каждой AS для использования в BGP маршрутизации. На середину 2011 года в глобальной таблице маршрутизации представлено более 37 тысяч автономных систем.
Номера AS выделяются Internet Assigned Numbers Authority, которая также выделяет IP-адреса, региональным интернет-регистраторам (Regional Internet Registry) блоками. Локальные RIR затем присваивают организации номер AS из блока, полученного от IANA. Организации, желающие получить ASN, должны пройти процесс регистрации в своем локальном RIR и получить одобрение.
Автономные системы можно сгруппировать в 3 категории, в зависимости от их соединений и режима работы.
Многоинтерфейсная (multihomed) AS — это AS, которая имеет соединения с более чем одним Интернет-провайдером. Это позволяет данной AS оставаться подключенной к Интернету в случае выхода из строя соединения с одним из Интернет-провайдеров. Кроме того, этот тип AS не разрешает транзитный трафик от одного Интернет-провайдера к другому.
Ограниченная (stub) AS — это AS, имеющая единственное подключение к одной внешней автономной системе. Это расценивается как бесполезное использование номера AS, так как сеть размещается полностью под одним Интернет-провайдером и, следовательно, не нуждается в уникальной идентификации.
Транзитная (transit) AS — это AS, которая пропускает через себя транзитный трафик сетей, подключенных к ней. Таким образом, сеть A может использовать транзитную AS для связи с сетью B.
Инфраструктура сети: AS, PI, LIR и прочие вкусности. 🙂
Не нашел на Хабре внятного этой RIPEвской кухни, потому пишу сам 🙂
Здесь я попробую (кратко) рассказать, как работает Интернет 🙂
И какие бонусы может извлечь из этого администратор сети предприятия, хостер или ISP.
Для начала — треминология.
IANA — Администрация адресного пространства Интернета. Занимается распределением номеров AS и IP-адресов в глобальном масштабе. Назначает RIR, подчиняется напрямую ICANN. Она такая одна и в этой статье она нас не интересует.
RIR — Региональная регистратура Интернета. Занимается выделением крупных блоков адресов, регистрацией LIR и распределением AS. Россия находится в юрисдикции RIPE NCC, расположенной в Амстердаме.
LIR — Локальная Регистратура Интернета. Занимается поддержкой работы сети, распределением PI (о них — дальше) и номеров AS. Как правило, это — ISP. Минимальный блок адресного пространства для LIR — 4096 IP-адресов.
AS — Автономная система. Содержит в себе адресное пространство (IP-адреса), имеет уникальный ASN — номер, позволяющий однозначно идентифицировать AS в Интернете. Номер AS — ключевая часть маршрутизации.
PI — Provider Independent. Провайдеро-независимые IP адреса. Находятся в определенной AS, маршрут к ним зависит только от политики маршрутизации. Принадлежат конечному пользователю [компании или LIR], а не его вышестоящему провайдеру. Следственно, сохраняются при смене ISP\подключении дополнительного ISP.
Путь распределения пространства:
Остановимся более подробно на каждом из интересных нам пунктов.
RIR — Regional Internet Registry, региональная регистратура интернета. Всего их пять — RIPE для Европы и Ближнего Востока, ARIN для Северной Америки, APNIC для Азии и Тихого Океана, LANIC для Латинской Америки и AfriNIC для Африки.
Статус RIR присваивается IANA и стать RIR для организации не возможно.
RIR занимаются выделением адресного пространства, регистрацией LIR, статистикой и разрешением споров. Это некоммерческие организации, они ничего не продают. Однако, каждый LIR платит членские взносы (рассчитываются исходя из размера сети) в RIR. RIR не работают с конечными пользователями и физическими лицами.
Карта RIR по регионам:
LIR — Local Internet Registry, локальная регистратура Интернета.
LIR делятся на категории, исходя из размера сети. Всего есть 5 категорий — Extra Large, Large, Medium, Small и Extra Small. Категории зависят от размера и нескольких других факторов, и присваиваются самим RIR.
В России существует 3 Extra Large, 20 Large и несколько сотен Medium\Small\ESmall LIR.
LIR платит членские взносы в RIR. Они не велики и рассчитываются исходя из класса LIR. Для RIPE это 1300 € в год для Extra Small и 5500 € в год для Extra Large.
LIR имеет минимум 1 ASN и минимум 4096 IP-адресов.
LIR имеет право выделения (Sub-Allocated) либо продажи ASN и IP/PI своим клиентам (Provider Aggregatable, PA. У всех пользователей сети, имеющих «белый» IP такие адреса). Также, LIR может быть посредником между конечным пользователем и RIPE (например, в ситуации регистрации AS\PI\LIR).
Как правило, статус LIR имеют крупные сетевики (провайдеры, дата-центры, регистраторы и т.д.). Обычной организации, 99.9% случаев это не нужно.
Автономные системы.
AS — Autonomous System, автономная система.
AS имеет свой порядковый номер — ASN, который используется в протоколе динамической маршрутизации BGP. Все IP-адреса закреплены за какой-то AS.
Существует 4 типа AS:
multihomed: имеющая 2 и более аплинка.
stub: имеющая 1 аплинк.
transit: транзитная, пропускающая через себя трафик других AS.
«приватная» AS, номера от 64512 до 65534, использующиеся для внутрисетевых нужд, тестов и обучения (аналогично «приватным» IP-адресам, таким как 192.168.0.0/24).
«Жизнь» AS регламентируется стандартом RFC 1930.
Если кому-то интересно, то есть список всех выданных ASN.
А вот здесь можно узнать номер AS по IP адресу, принадлежность этой AS и ее аплинки.
PI-адреса.
PI — Provider Independed, провайдеро-независимые IP-адреса. В отличие от PA и SUB-ALLOCATED IP-адресов, это адресное пространство принадлежит тому, кто его получил, а не его ISP. Вы можете использовать его как вам угодно, менять ISP без смены адресов, подключатся к 2м и более ISP с созданием собственной multihomed AS и политики маршруизации (например, включится в Internet eXchange и получать локальный трафик дешевле, чем продает его ваш оператор).
Вопросы регистрации.
Для регистрации AS и PI нет необходимости становится LIR. Для этого необходимо:
ХостингКонсалт, например, берет за регистрацию PI 8 000 руб. единоразово.
Либо, стать LIR самому:
Как стать LIR.
Если у кого-то остались вопросы, готов ответить на них в комментариях. 🙂
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как по IP узнать Autonomous system в командной строке Linux и как узнать все IP Автономной системы
Что такое Автономная Система — Autonomous System (AS)
Чтобы понимать, для чего нужно понятие «Автономные Системы», нужно иметь представление о маршрутизации данных в Интернете.
Структуру сети Интернет-провайдера или крупной организации можно упрощённо представить как совокупность локальных сетей, которые для обмена данными с Глобальной сетью (Интернет), подключены к маршрутизатору, соединённому с маршрутизаторами других Интернет-провайдеров и организаций. Кстати, группа маршрутизаторов одной компании фактически и является Автономной Системой.
Допустим, это понятно, но зачем им нужно было всем присваивать номера?
Если пакет предназначен для узла находящегося в Глобальной сети, то когда он доходит до маршрутизатора, то поскольку маршрутизатор может быть соединён сразу с несколькими другими маршрутизаторами других Автономных Систем, то возникает вопрос — куда именно отправить этот пакет? Допустим, от маршрутизатора A нужно передать пакет маршрутизатору B:

Как узнать, какому именно узлу отправить пакет? Как второй узел выберет следующий для отправки? Как поступить третьему узлу? Даже по моему простому рисунку видно, что есть длинные маршруты до одной и той же точки, а есть даже тупиковые.
На эти вопросы отвечают протоколы маршрутизации, например, Border Gateway Protocol. Именно благодаря им маршрутизатор «знает» самый лучший (не обязательно короткий — критериев оценки несколько) путь из точки A в точку B. И именно понятиями «Автономная Система» оперируют подобные протоколы. То есть, упрощённо говоря, подобные протоколы строят маршруты по узлам автономной системы, при этом учитывают, какие узлы подключены к данному маршрутизатору, какие к следующему и так далее.
Итак, Автономная Система (AS) это термин, обозначающий группу шлюзов (роутеров, маршрутизаторов), которые находятся в одном административном управлении, то есть принадлежат одной организации.
Такими организациями могут быть:
Номер Автономной Системы (ASN) — это числовой идентификатор для сетей, участвующих в Border Gateway Protocol (BGP). BGP — это протокол, в котором определяются маршруты для передачи пакетов по всему миру. Без BGP, Internet трафик не мог бы покинуть локальные сети.
ASN определяет группу блоков протокола Internet protocol для версий 4 или 6.
Зачем вообще пытаться определить ASN по IP?
При сборе информации с помощью ASN можно добыть некоторые дополнительные данные:
Как по IP узнать Autonomous system в командной строке Linux
1. Как узнать Автономною Систему с помощью команды dig
Используя такую конструкцию с командой dig (замените в ней 185.117.153.79 на интересующий IP), можно узнать номер Автономной Системы, диапазон, к которому принадлежит данный IP адрес, страну и дату выделения:
Именно такой способ (запрос DNS *.origin.asn.cymru.com) узнать AS используется в команде mtr (она рассматривалась в статью про трассировку узлов).
Её можно поместить в файл
/.bashrc. Тогда прямо в консоли можно будет использовать короткую запись вызова:
2. Получение AS из базы данных cymru.com
База данных cymru.com поддерживает запросы по протоколу whois (в команде замените 185.117.153.79 на интересующий IP адрес):
В предыдущей команде два тире подряд говорят команде, что последующий ввод не является её опциями. Это сделано для того, чтобы команда whois не обрабатывала -v как свою опцию.
3. Получение AS из базы данных whois.radb.net
А этот способ я подсмотрел в программе traceroute — когда ей нужно узнать номер Автономной Системы, то она обращается к базе данных whois.radb.net. Пример запроса:
Если нужен только номер AS, то можно запустить так:
4. С помощью API hackertarget.com
Сайт hackertarget.com содержит базу данных и предоставляет дружественные к командной строке API: https://api.hackertarget.com/aslookup/?q=185.117.153.79
Чтобы получить данные в командной строке:
5. Как узнать номер автономной системы с помощью WHOIS
По умолчанию запрос от команды whois адресуется базе данных whois.ripe.net. Она также для некоторых IP адресов показывает поле origin:
Ещё один вариант (вывод команды будет ограничен разделом route):
Пример вывода (комментарии удалены):
Как узнать информацию об Автономной Системе
1. Получение информации об Автономной Системе из базы данных whois.cymru.com:
2. Получение информации об Autonomous system из базы данных whois.radb.net:
База данных whois.radb.net содержит дополнительную техническую информацию об Автономной Системе:

В информации о некоторых автономных системах:
Содержаться ссылки на другие записи в базе данных
которые также можно посмотреть:
3. Автономные Системы в WHOIS
Обычная команда whois также умеет показывать информацию об AS по их номеру:
Как узнать все IP диапазоны Автономной Системы
По номеру AS можно узнать диапазоны IP адресов Интернет-провайдера, поисковой системы, хостера, любой другой организации, которой выделены IP.
1. Получение IP Автономной Системы из radb.net
Следующая команда выведет информацию о маршрутах данной AS:
Боле сжатая запись:

Фильтрация только нужных строк:

Но списки диапазонов, полученные таким образом, требуют дополнительного внимания, поскольку некоторые из них включают в себя другие диапазоны из этого же списка.
2. Диапазоны IP из базы данных hackertarget.com
Используя API hackertarget.com можно получить диапазоны IP организаций: https://api.hackertarget.com/aslookup/?q=AS48666
В том числе в командной строке:
Заключение
Обратите внимание, что показываемые диапазоны могут содержать одни и те же IP адреса. Для своего сервиса «Все IP провайдера» (там не только провайдеры — любые AS) я в начале использовал похожий метод получения диапазонов, но из-за этого недостатка написал свой собственный скрипт извлечения данных из базы данных. Поэтому на сервисе по ссылке получаемые диапазоны не должны содержать одинаковых 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!






