Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.
Введение
BGP (таблица пограничного межсетевого протокола) — один из ключевых протоколов, отвечающих за маршрутизацию пакетов через Интернет, поэтому когда он работает неправильно, могут возникать серьезные перебои с Интернетом. Например, в 2019 году небольшой интернет-провайдер создал неправильную конфигурацию BGP, которая, к сожалению, распространилась на более высокие уровни и вывела большие сегменты Cloudflare и AWS оффлайн более чем на час. Кроме того, годом ранее был осуществлен захват BGP, чтобы перехватить трафик к известному провайдеру криптовалютных кошельков и похитить средства ничего не подозревающих клиентов.
BGPalerter — сетевое средство мониторинга с открытым исходным кодом, которое может предоставлять уведомления в реальном времени об активности BGP, включая видимость маршрутов и новые сообщения о маршрутах, а также потенциально опасную деятельность — например, перехваты маршрутов или утечки маршрутов. BGPalerter автоматически принимает общедоступную информацию о маршрутизации, т.е. ему не нужен какой-либо уровень привилегированного доступа или интеграции с сетью/сетями, которые вы хотите отслеживать.
Примечание: BGPalerter автоматически принимает общедоступную информацию о маршрутизации, т.е. ему не нужен какой-либо уровень привилегированного доступа или интеграции с сетью/сетями, которые вы хотите отслеживать. Весь мониторинг полностью соответствует Закону о компьютерных злоупотреблениях, Закону о мошенничестве с использованием компьютеров и иным аналогичным законам. Тем не менее, рекомендуется ответственно относиться к передаче любой соответствующей информации пострадавшему сетевому оператору.
В этом обучающем руководстве вы установите и настроите BGPalerter для мониторинга ваших важных сетей на предмет потенциально подозрительной деятельности.
Предварительные требования
Для данного обучающего руководства вам потребуется следующее:
Сервер Ubuntu 18.04, настроенный согласно руководству по первоначальной настройке сервера с Ubuntu 18.04, включая пользователя non-root user с привилегиями sudo.
Одна или несколько сетей и устройств, которые вы хотите отслеживать, например:
- Ваш сервер
- Сеть вашей компании
- Ваш локальный интернет-провайдер
Для каждого устройства или сети вам потребуется идентифицировать либо отдельный IP-адрес, диапазон IP-адресов, либо номер автономной системы в этом диапазоне. Эти действия рассматриваются в шаге 1.
Подготовив все вышеперечисленное, войдите на сервер в качестве non-root user, чтобы начать подготовку.
Шаг 1 — Определение сетей для мониторинга
На этом шаге вы узнаете соответствующие данные о сетях, которые вы хотите отслеживать.
BGPalerter может выполнять мониторинг на основе отдельных IP-адресов или сетевых префиксов. Он также может отслеживать целые сети на основе номера автономной системы — уникального в глобальном масштабе идентификатора сети, принадлежащего конкретному административному объекту.
Для нахождения этой информации вы можете использовать службу пооиска IP-to-ASN WHOIS, которую предоставляет служба разведки угроз Team Cymru. Это пользовательский сервер WHOIS, предназначенный для просмотра IP-адресов и информации о сетевой маршрутизации.
Если у вас не установлен whois
, вы можете сделать это с помощью следующих команд:
- sudo apt update
- sudo apt install whois
Как только вы убедились, что whois
установлен, начните с поиска IP-адресов вашего собственного сервера с помощью аргумента -h
для указания настраиваемого сервера:
- whois -h whois.cymru.com your-ip-address
Это выведет примерно следующий результат, где указано имя и номер AS, в котором находится ваш сервер. Как правило, это будет AS вашего хостинг-провайдера — например, DigitalOcean.
Output
AS | IP | AS Name
14061 | your-ip-address | DIGITALOCEAN-ASN, US
Далее вы можете выполнить поиск для определения префикса/диапазона сети, в которой находится ваш сервер. Это можно сделать, добавив к запросу аргумент -p
:
- whois -h whois.cymru.com " -p your-ip-address"
Вывод будет очень похож на предыдущую команду, но теперь он будет показывать префикс IP-адреса, к которому относится IP-адрес вашего сервера:
Output
AS | IP | BGP Prefix | AS Name
14061 | your-ip-address | 157.230.80.0/20 | DIGITALOCEAN-ASN, US
В итоге, вы сможете найти дополнительные сведения об AS, в котором находится ваш сервер, включая географический регион и дату распределения.
Подставьте номер AS, который вы определили с помощью предыдущих команд. Вы используете аргумент -v
для активации вывода подробной информации с отображением всех соответствующих данных:
- whois -h whois.cymru.com " -v as14061"
При этом будет показана дополнительная информация об AS:
Output
AS | CC | Registry | Allocated | AS Name
14061 | US | arin | 2012-09-25 | DIGITALOCEAN-ASN, US
Вы определили ключевую информацию о сетях, которые вы хотите отслеживать. Запишите эти данные, т.к. они потребуются вам позднее. Далее вы начнете настройку BGPalerter.
Шаг 2 — Создание непривилегированного пользователя для BGPalerter
На этом шаге вы создадите новую учетную запись непривилегированного пользователя для BGPalerter, т.к. для работы этой программы не требуются права sudo/root.
Сначала создайте нового пользователя с отключенным паролем:
- sudo adduser --disabled-password bgpalerter
Вам не нужно настраивать пароль или ключи SSH, поскольку вы будете использовать этого пользователя только в качестве служебной учетной записи для работы/обслуживания BGPalerter.
Войдите под именем нового пользователя с помощью команды su
:
Вы вошли как новый пользователь:
[email protected]:/home/user$
Используйте команду cd
для перехода в домашнюю директорию нового пользователя:
[email protected]:/home/user$ cd
[email protected]:~$
Вы создали нового непривилегированного пользователя для BGPalerter. Далее вы установите и настроите BGPalerter в своей системе.
Шаг 3 — Установка и настройка BGPalerter
На этом шаге вы установите и настроите BGPalerter. Убедитесь, что вы все еще в системе под именем своего нового непривилегированного пользователя.
Сначала вам нужно определить последний выпуск BGPalerter, чтобы убедиться, что вы загружаете актуальную версию. Перейдите на страницу Выпуски BGPalerter и скопируйте ссылки на загрузку самой последней версии Linux x64.
Теперь вы можете загрузить копию BGPalerter с помощью wget
, если подставите правильную ссылку на загрузку:
- wget https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64
Когда файл загрузится, отметьте его как исполняемый:
- chmod +x bgpalerter-linux-x64
Затем убедитесь, что BGPalerter загружен и успешно установлен, сверив номер версии:
- ./bgpalerter-linux-x64 --version
В результате будет выведен текущий номер версии:
Output
1.24.0
Чтобы корректно запустить BGPalerter, необходимо сначала определить сети, которые вы хотите отслеживать в файле конфигурации. Создайте и откройте файл prefixes.yml
в предпочитаемом текстовом редакторе:
В этом файле конфигурации вы укажете каждый пользовательский IP-адрес, диапазоны IP-адресов и номера AS, которые вы хотите отслеживать.
Добавьте следующий пример и измените значения конфигурации, как необходимо, используя сетевую информацию, которую вы определили на шаге 1:
~/prefixes.yml
your-ip-address/32:
description: My Server
asn:
- 14061
ignoreMorespecifics: false
157.230.80.0/20:
description: IP range for my Server
asn:
- 14061
ignoreMorespecifics: false
options:
monitorASns:
'14061':
group: default
Вы можете отслеживать столько диапазонов IP-адресов или номеров AS, сколько захотите. Чтобы отслеживать отдельные IP-адреса, указывайте /32
для IPv4 и /128
для IPvv6.
Значение ignoreMorespecifics
используется, чтобы контролировать, должен ли BGPalerter игнорировать деятельность на маршрутах, более специфичных (меньших) по сравнению с тем, который вы отслеживаете. Например, если вы отслеживаете /20
, и изменение маршрутизации обнаружено в нем для /24
, то это считается более специфичным маршрутом. В большинстве случаев их не нужно игнорировать, но если вы отслеживаете большую сеть с несколькими префиксами делегированных пользователей, то это может снизить фоновый шум.
Теперь вы можете запустить BGPalerter в первый раз, чтобы начать отслеживать свои сети:
Если BGPalerter запущен успешно, то вы увидите примерно следующий результат. Обратите внимание, что запуск мониторинга может занять несколько минут:
Output
Impossible to load config.yml. A default configuration file has been generated.
BGPalerter, version: 1.24.0 environment: production
Loaded config: /home/bgpalerter/config.yml
Monitoring 157.230.80.0/20
Monitoring your-ip-address/32
Monitoring AS 14061
BGPalerter будет продолжать работать, пока вы не остановите его нажатием Ctrl+C
.
На следующем шаге вы перейдете к интерпретации некоторых предупреждений, которые может создавать BGPalerter.
Шаг 4 — Интерпретация интерфейсов BGPalerter
На этом шаге вы рассмотрите несколько типовых предупреждений BGPalerter. BGPalerter будет выдавать предупреждения в основном потоке выдачи, а также, опционально, в любые дополнительные конечные точки отчетности, которые можно настроить в файле config.yml
, как указано в документации BGPalerter.
По умолчанию BGPalerter отслеживает и предупреждает о следующем:
Route hijacks: выдается в случае, когда AS объявляет запрещенный префикс, вызывая ошибочную маршрутизацию трафика. Это может быть либо преднамеренным нападением, либо случайной ошибки в конфигурации.
Потеря видимости маршрута: маршрут считается видимым, когда большинство маршрутизаторов BGP в Интернете может надежно создавать маршруты к нему. Потеря видимости указывает на потенциальную недоступность вашей сети — например, если ваш BGP peering прекращает работать.
Новые объявления субпрефиксов заключаются в том, что AS начинает объявлять префикс, который меньше ожидаемого. Это может свидетельствовать об изменении целевой конфигурации, случайной ошибочной конфигурации или, в некоторых случаях — о нападении.
Деятельность в рамках вашего AS: обычно используется для новых сообщений о маршрутах. Трафик считается «новым», если BGPalerter еще не знает о нем.
Ниже представлены некоторые примеры предупреждений, а также краткое описание их значения:
Alert #1
The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
Это предупреждение свидетельствует о захвате маршрута, т.к. AS64496 объявил 203.013.0/24
, хотя ожидается, что этот маршрут будет объявлен AS65540. Это надежный показатель ошибочной конфигурации, приводящей к утечке маршрута, либо преднамеренного захвата злоумышленником.
Alert #2
The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
Это предупреждение говорит о том, что сеть 203.013.0/24
стала невидимой. Это может быть связано с проблемой исходящей маршрутизации, либо произошел сбой питания маршрутизатора.
Alert #3
A new prefix 203.0.113.0/25 is announced by AS64496. It should be instead 203.0.113.0/24 announced by AS64496
Это предупреждение показывает, что был объявлен более специфичный префикс там, где это не ожидалось — например, /25
, когда ожидалось только /24
. Скорее всего, это ошибочная конфигурация, но в некоторых случаях это может свидетельствовать о захвате маршрута.
Alert #4
AS64496 is announcing 192.0.2.0/24 but this prefix is not in the configured list of announced prefixes
Помимо этого, данное предупреждение показывает, что AS64496 объявил префикс, который BGPalerter еще не знает. Это может быть связано с тем, что вы обоснованно объявляете новый префикс, или может говорить об ошибочной конфигурации, из-за которой вы случайно объявили чужой префикс.
На этом шаге вы рассмотрели несколько примеров предупреждений BGPalerter. Далее вы настроите BGPalerter для автоматического запуска во время начальной загрузки.
Шаг 5 — Запуск BGPalerter во время начальной загрузки
На этом последнем шаге вы настроите BGPalerter для запуска во время начальной загрузки.
Убедитесь, что вы все еще в системе под именем нового непривилегированного пользователя, затем откройте crontab:
Добавьте следующую строку внизу файла crontab:
crontab
@reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"
При каждой загрузке системы будет создаваться отдельная экранная
сессия с именем bgpalerter, в которой будет запускаться BGPalerter.
Сохраните изменения и закройте редактор crontab. Теперь можно перезагрузить систему, чтобы убедиться, что BGPalerter корректно запускается во время начальной загрузки.
Сначала нужно выйти из вашего пользователя BGPalerter:
Затем перезагрузите систему, как обычно:
После перезагрузки системы снова войдите на сервер и при помощи su
еще раз получите доступ к вашему пользователю BGPalerter:
Затем можно в любой момент присоединиться к сессии для просмотра вывода BGPalerter:
На этом последнем шаге вы настроили BGPalerter для запуска во время начальной загрузки.
Заключение
В этой статье вы настроили BGPalerter и использовали его для отслеживания сетей с целью внесения изменений в маршрутизацию BGP.
Если хотите сделать BGPalerter более удобным для пользователя, то можно настроить его для отправки предупреждений через канал Slack посредством веб-хука:
Если хотите узнать больше о самой системе BGP, но у нас нет доступа к производственной среде BGP, то вам может пригодиться DN42 для экспериментов с BGP в безопасной изолированной среде: