*Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.*

Введение

BGP (таблица пограничного межсетевого протокола) — один из ключевых протоколов, отвечающих за маршрутизацию пакетов через Интернет, поэтому когда он работает неправильно, могут возникать серьезные перебои с Интернетом. Например, в 2019 году небольшой интернет-провайдер создал неправильную конфигурацию BGP, которая, к сожалению, распространилась на более высокие уровни и вывела большие сегменты Cloudflare и AWS оффлайн более чем на час. Кроме того, годом ранее был осуществлен захват BGP, чтобы перехватить трафик к известному провайдеру криптовалютных кошельков и похитить средства ничего не подозревающих клиентов.

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

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

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

Предварительные требования

bgp illustration for: Предварительные требования

Для данного обучающего руководства вам потребуется следующее:

  • Одна или несколько сетей и устройств, которые вы хотите отслеживать, например:
  • Ваш сервер
  • Сеть вашей компании
  • Ваш локальный интернет-провайдер

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

Подготовив все вышеперечисленное, войдите на сервер в качестве пользователя без прав root, чтобы начать подготовку.

Шаг 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 вашего хостинг-провайдера — например, the cloud provider.

				
					
[secondary_label Output]

AS | IP | AS Name

14061 | <^>your-ip-address<^> | <^>the cloud provider-ASN, US<^>

				
			

Далее вы можете выполнить поиск для определения префикса/диапазона сети, в которой находится ваш сервер. Это можно сделать, добавив к запросу аргумент -p:

				
					
whois -h whois.cymru.com " -p <^>your-ip-address<^>"

				
			

Вывод будет очень похож на предыдущую команду, но теперь он будет показывать префикс IP-адреса, к которому относится IP-адрес вашего сервера:

				
					
[secondary_label Output]

AS | IP | BGP Prefix | AS Name

14061 | <^>your-ip-address<^> | 157.230.80.0/20 | <^>the cloud provider-ASN, US<^>

				
			

В итоге, вы сможете найти дополнительные сведения об AS, в котором находится ваш сервер, включая географический регион и дату распределения.

Подставьте номер AS, который вы определили с помощью предыдущих команд. Вы используете аргумент -v для активации вывода подробной информации с отображением всех соответствующих данных:

				
					
whois -h whois.cymru.com " -v <^>as14061<^>"

				
			

При этом будет показана дополнительная информация об AS:

				
					
[secondary_label Output]

AS | CC | Registry | Allocated | AS Name

14061 | US | arin | 2012-09-25 | <^>the cloud provider-ASN, US<^>

				
			

Вы определили ключевую информацию о сетях, которые вы хотите отслеживать. Запишите эти данные, т.к. они потребуются вам позднее. Далее вы начнете настройку BGPalerter.

Шаг 2 — Создание непривилегированного пользователя для BGPalerter

На этом шаге вы создадите новую учетную запись непривилегированного пользователя для BGPalerter, т. к. для работы этой программы не требуются права sudo/root.

Сначала создайте нового пользователя с отключенным паролем:

				
					
sudo adduser --disabled-password <^>bgpalerter<^>

				
			

Вам не нужно настраивать пароль или ключи SSH, поскольку вы будете использовать этого пользователя только в качестве служебной учетной записи для работы/обслуживания BGPalerter.

Войдите под именем нового пользователя с помощью команды su:

				
					
sudo su <^>bgpalerter<^>

				
			

Вы вошли как новый пользователь:

				
					
[environment second]

bgpalerter@droplet:/home/user$

				
			

Используйте команду cd для перехода в домашнюю директорию нового пользователя:

				
					
[environment second]

bgpalerter@droplet:/home/user$ cd

bgpalerter@droplet:~$

				
			

Вы создали нового непривилегированного пользователя для BGPalerter. Далее вы установите и настроите BGPalerter в своей системе.

Шаг 3 — Установка и настройка BGPalerter

На этом шаге вы установите и настроите BGPalerter. Убедитесь, что вы все еще в системе под именем своего нового непривилегированного пользователя.

Сначала вам нужно определить последний выпуск BGPalerter, чтобы убедиться, что вы загружаете актуальную версию. Перейдите на страницу Выпуски BGPalerter и скопируйте ссылки на загрузку самой последней версии Linux x64.

Теперь вы можете загрузить копию BGPalerter с помощью wget, если подставите правильную ссылку на загрузку:

				
					
[environment second]

wget <^>https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64<^>

				
			

Когда файл загрузится, отметьте его как исполняемый:

				
					
[environment second]

chmod +x bgpalerter-linux-x64

				
			

Затем убедитесь, что BGPalerter загружен и успешно установлен, сверив номер версии:

				
					
[environment second]

./bgpalerter-linux-x64 --version

				
			

В результате будет выведен текущий номер версии:

				
					
[environment second]

[secondary_label Output]

<^>1.24.0<^>

				
			

Чтобы корректно запустить BGPalerter, необходимо сначала определить сети, которые вы хотите отслеживать в файле конфигурации. Создайте и откройте файл prefixes.yml в предпочитаемом текстовом редакторе:

				
					
[environment second]

nano ~/prefixes.yml

				
			

В этом файле конфигурации вы укажете каждый пользовательский IP-адрес, диапазоны IP-адресов и номера AS, которые вы хотите отслеживать.

Добавьте следующий пример и измените значения конфигурации, как необходимо, используя сетевую информацию, которую вы определили на шаге 1:

				
					
[label ~/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 в первый раз, чтобы начать отслеживать свои сети:

				
					
[environment second]

./bgpalerter-linux-x64

				
			

Если BGPalerter запущен успешно, то вы увидите примерно следующий результат. Обратите внимание, что запуск мониторинга может занять несколько минут:

				
					
[environment second]

[secondary_label 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 начинает объявлять префикс, который меньше ожидаемого. Это может свидетельствовать об изменении целевой конфигурации, случайной ошибочной конфигурации или, в некоторых случаях — о нападении.

Ниже представлены некоторые примеры предупреждений, а также краткое описание их значения:

				
					
[label Alert #1]

The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540

				
			

Это предупреждение свидетельствует о захвате маршрута, т.к. AS64496 объявил 203.013.0/24, хотя ожидается, что этот маршрут будет объявлен AS65540. Это надежный показатель ошибочной конфигурации, приводящей к утечке маршрута, либо преднамеренного захвата злоумышленником.

				
					
[label Alert #2]

The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers

				
			

Это предупреждение говорит о том, что сеть 203.013.0/24 стала невидимой. Это может быть связано с проблемой исходящей маршрутизации, либо произошел сбой питания маршрутизатора.

				
					
[label 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. Скорее всего, это ошибочная конфигурация, но в некоторых случаях это может свидетельствовать о захвате маршрута.

				
					
[label 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:

				
					
[environment second]

crontab -e

				
			

Добавьте следующую строку внизу файла crontab:

				
					
[label crontab]

@reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"

				
			

При каждой загрузке системы будет создаваться отдельная экранная сессия с именем bgpalerter, в которой будет запускаться BGPalerter.

Сохраните изменения и закройте редактор crontab. Теперь можно перезагрузить систему, чтобы убедиться, что BGPalerter корректно запускается во время начальной загрузки.

Сначала нужно выйти из вашего пользователя BGPalerter:

				
					
[environment second]

logout

				
			

Затем перезагрузите систему, как обычно:

				
					
sudo reboot

				
			

После перезагрузки системы снова войдите на сервер и при помощи su еще раз получите доступ к вашему пользователю BGPalerter:

				
					
sudo su <^>bgpalerter<^>

				
			

Затем можно в любой момент присоединиться к сессии для просмотра вывода BGPalerter:

				
					
[environment second]

screen -r bgpalerter

				
			

На этом последнем шаге вы настроили BGPalerter для запуска во время начальной загрузки.

Заключение

В этой статье вы настроили BGPalerter и использовали его для отслеживания сетей с целью внесения изменений в маршрутизацию BGP.

Если хотите сделать BGPalerter более удобным для пользователя, то можно настроить его для отправки предупреждений через канал Slack посредством веб-хука:

Если хотите узнать больше о самой системе BGP, но у нас нет доступа к производственной среде BGP, то вам может пригодиться DN42 для экспериментов с BGP в безопасной изолированной среде: