作者选择了 COVID-19 救援基金作为 Write for Donations计划的一部分接受捐款。
介绍
BGP (Border Gateway Protocol)是负责在互联网上路由包的核心协议之一,所以当它发生错误时,可能会发生重大中断。例如,在2019年,一个小型ISP做了一个BGP错误配置,不幸地蔓延到上游,并将Cloudflare和AWS的大部分离线超过一个小时(https://blog.cloudflare.com/how-verizon-and-a-bgp-optimizer-knocked-large-parts-of-the-internet-offline-today/)。
BGPalerter是一个开源的BGP网络监控工具,可以提供关于BGP活动的实时警报,包括路线可见性和新路线公告,以及潜在的恶意活动,如 路线劫持或路线泄露 。
<$>[注] 注: BGPalerter 自动吸收公开可用的网络路由信息,这意味着它不必在您希望监控的网络(s)中获得任何特权访问或集成。
在本教程中,您将安装并配置BGPalerter来监控您的重要网络,以检测潜在可疑活动。
前提条件
要完成本教程,您将需要:
- 一个 Ubuntu 18.04 服务器,根据 初始服务器设置与 Ubuntu 18.04设置,包括一个 sudo 非根用户。
- 一个或多个网络或设备,您希望监控,例如:
- 一个服务器,您维护
- 您的公司网络
- 您的本地 ISP 对于每个设备或网络,您需要识别单独的 IP 地址,IP 地址范围,或自动系统号码,它是其中的一部分。
一旦你已经准备好了,登录你的服务器作为你的非根用户开始。
步骤 1 – 识别要监控的网络
在此步骤中,您将识别您想要监控的网络的相关细节。
BGPalerter 可以根据单个 IP 地址或网络前缀进行监控,还可以根据其自治系统 (AS) 号码监控整个网络,该号码是特定管理实体所拥有的网络的全球唯一标识符。
为了找到这些信息,您可以使用威胁情报服务 Team Cymru提供的 IP-to-ASN WHOIS 搜索服务。
如果您尚未安装whois
,您可以使用以下命令安装它:
1sudo apt update
2sudo apt install whois
一旦您确认whois
已安装,请开始搜索您自己的服务器的 IP 地址,使用-h
参数来指定自定义服务器:
1whois -h whois.cymru.com your-ip-address
这将产生类似于以下的结果,显示您的服务器是其中的一部分的AS名称和号码,这通常是您的服务器托管提供商的AS,例如DigitalOcean。
1[secondary_label Output]
2AS | IP | AS Name
314061 | your-ip-address | DIGITALOCEAN-ASN, US
接下来,您可以进行搜索,以确定您的服务器是其中的一部分的网络前缀 / 范围. 您可以通过将 -p
参数添加到您的请求:
1whois -h whois.cymru.com " -p your-ip-address"
输出将与以前的命令非常相似,但现在会显示服务器的IP地址属于的IP地址前缀:
1[secondary_label Output]
2AS | IP | BGP Prefix | AS Name
314061 | your-ip-address | 157.230.80.0/20 | DIGITALOCEAN-ASN, US
最后,您可以查找服务器所组成的 AS 的详细信息,包括地理区域和分配日期。
在您使用之前的命令识别的 AS 号码中代替. 您使用 -v
参数来启用无语音输出,以确保显示所有相关细节:
1whois -h whois.cymru.com " -v as14061"
输出将显示有关AS的更多信息:
1[secondary_label Output]
2AS | CC | Registry | Allocated | AS Name
314061 | US | arin | 2012-09-25 | DIGITALOCEAN-ASN, US
您已经确定了您想要监控的网络(网络)的关键细节. 记住这些细节在某个地方,因为您以后会需要它们。
步骤 2 — 创建 BGPalerter 的非特权用户
在此步骤中,您将为 BGPalerter 创建一个新的非特权用户帐户,因为该程序不需要运行 sudo/root 特权。
首先,创建一个具有禁用密码的新用户:
1sudo adduser --disabled-password bgpalerter
您不需要设置密码或 SSH 密钥,因为您将只使用此用户作为运行/维护 BGPalerter 的服务帐户。
登录新用户使用su
:
1sudo su bgpalerter
您现在将登录为新用户:
1[environment second]
2bgpalerter@droplet:/home/user$
使用cd
命令移动到新用户的主目录:
1[environment second]
2bgpalerter@droplet:/home/user$ cd
3bgpalerter@droplet:~$
您已经为 BGPalerter 创建了一个新的非特权用户,接下来,您将在您的系统上安装和配置 BGPalerter。
步骤 3 – 安装和配置 BGPalerter
在此步骤中,您将安装并配置 BGPalerter. 确保您仍然登录为您的新非特权用户。
首先,您需要确定最新版本的 BGPalerter,以确保您下载最新的版本. 浏览到 BGPalerter 发布页面,并下载最新的 Linux x64 版本的下载链接的副本。
您现在可以使用wget
下载BGPalerter的副本,确保在正确的下载链接中取代:
1[environment second]
2wget https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64
文件下载完成后,将其标记为可执行:
1[environment second]
2chmod +x bgpalerter-linux-x64
接下来,通过检查版本号来检查BGPalerter是否已成功下载和安装:
1[environment second]
2./bgpalerter-linux-x64 --version
这将输出当前版本号码:
1[environment second]
2[secondary_label Output]
31.24.0
在正确运行 BGPalerter 之前,您需要在配置文件中定义您想要监控的网络,然后在您喜爱的文本编辑器中创建并打开 prefixes.yml
文件:
1[environment second]
2nano ~/prefixes.yml
在此配置文件中,您将指定每个单独的 IP 地址、IP 地址范围和 AS 号码,您想要监控。
添加以下示例并根据需要调整配置值,使用您在 步骤 1中识别的网络信息:
1[label ~/prefixes.yml]
2your-ip-address/32:
3 description: My Server
4 asn:
5 - 14061
6 ignoreMorespecifics: false
7
8157.230.80.0/20:
9 description: IP range for my Server
10 asn:
11 - 14061
12 ignoreMorespecifics: false
13
14options:
15 monitorASns:
16 '14061':
17 group: default
若要监控单个 IP 地址,请使用 IPv4 的 /32
和 IPv6 的 /128
来表示它们。
使用忽略Morespecifics
值来控制BGPalerter是否应该忽略比您监控的路径更具体(更小)的路径的活动。例如,如果您监控一个/20
,并检测到路由变更的/24
,这被认为是更具体的。
您现在可以首次运行 BGPalerter,以便开始监控您的网络:
1[environment second]
2./bgpalerter-linux-x64
如果 BGPalerter 成功启动,您将看到类似于以下的输出。
1[environment second]
2[secondary_label Output]
3Impossible to load config.yml. A default configuration file has been generated.
4BGPalerter, version: 1.24.0 environment: production
5Loaded config: /home/bgpalerter/config.yml
6Monitoring 157.230.80.0/20
7Monitoring your-ip-address/32
8Monitoring AS 14061
BGPalerter将继续运行,直到您使用Ctrl + C
来停止它。
在下一步中,您将解释 BGPalerter 可以生成的一些警报。
步骤 4 — 解释 BGPalerter 警报
在此步骤中,您将查看一些示例的 BGPalerter 警报. BGPalerter 将向主要输出源发出警报,以及可根据 BGPalerter 文档(https://github.com/nttgin/BGPalerter/blob/master/docs/configuration.md#reports)中所述,在 `config.yml 中配置的任何额外的报告终端。
默认情况下,BGPalerter 监控和警告如下:
- Route hijacks:当一个 AS 宣布一个不允许的前缀时发生,导致流量被错误地路由。这可能是故意的攻击,或者是意外的配置错误。
- 路径可见性丧失:当互联网上大多数 BGP 路由器能够可靠地路由时,路由器被认为是可见的。可见性丧失指你的网络可能无法使用,例如,如果你的 BGP peering已经停止工作。
- 新前缀公告:当一个 AS 开始宣布一个小于预期的前缀时。这可能表明有意的配置变化、意外的错误配置或在某些情况下遭到攻击。 _
以下是一些示例警告,以及其含义的简要描述:
1[label Alert #1]
2The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
此警报显示了路线劫持的证据,其中 AS64496 已宣布203.0.113.0/24
,当时预计该路线将由 AS65540 宣布。
1[label Alert #2]
2The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
此警报显示203.0.113.0/24
网络不再可见,可能是由于上游路由问题,或者路由器出现电源故障。
1[label Alert #3]
2A new prefix 203.0.113.0/25 is announced by AS64496. It should be instead 203.0.113.0/24 announced by AS64496
此警报表明,在没有预期的情况下,已经宣布了一个更具体的前缀,例如在预期只有一个/24
时宣布一个/25
。
1[label Alert #4]
2AS64496 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 编辑器:
1[environment second]
2crontab -e
接下来,在 crontab 文件的底部添加以下条目:
1[label crontab]
2@reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"
每次系统启动,都会创建一个独立的屏幕
会话,名为bgpalerter
,并在其中启动BGPalerter。
保存和退出crontab编辑器. 您现在可能想要重新启动您的系统,以确保BGPalerter在启动时正确启动。
您首先需要退出您的 BGPalerter 用户:
1[environment second]
2logout
然后继续正常系统重启:
1sudo reboot
系统重新启动后,重新登录您的服务器,并使用su
再次访问您的 BGPalerter 用户:
1sudo su bgpalerter
随后,您可以随时附加到会话中,以查看 BGPalerter 的输出:
1[environment second]
2screen -r bgpalerter
在此最后一步中,您将 BGPalerter 配置为在启动时运行。
结论
在本文中,您设置了 BGPalerter 并使用它来监控 BGP 路由变更的网络。
如果您想让 BGPalerter 更易于使用,您可以将其配置为通过 Webhook 向 Slack 频道发送警报:
如果您想了解更多关于 BGP 的信息,但无法访问生产 BGP 环境,您可以使用 DN42 在安全、孤立的环境中进行 BGP 实验: