作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。
介绍
BGP(边界网关协议)是负责在互联网上路由数据包的核心协议之一,因此当它出错时,可能会发生重大中断。例如,在 2019 年,一家小型 ISP 进行了 BGP 错误配置,不幸的是,该错误配置向上游传播并导致 Cloudflare 和 AWS 的大部分离线超过一个小时。此外,一年前发生了 BGP 劫持,目的是拦截流向知名加密货币钱包提供商的流量并窃取毫无戒心的客户的资金。
BGPalerter是一种开源 BGP 网络监控工具,可以提供有关 BGP 活动的实时警报,包括路由可见性和新路由公告,以及潜在的恶意活动,例如路由劫持或路由泄漏。
注意: BGPalerter 自动摄取公开可用的网络路由信息,这意味着它不必具有任何级别的特权访问或集成到您希望监控的网络中。所有监控都完全符合《计算机滥用法》、《计算机欺诈和滥用法》以及其他类似法律。但是,建议负责任地向受影响的网络运营商披露任何相关调查结果。
在本教程中,您将安装和配置 BGPalerter 以监控重要网络是否存在潜在的可疑活动。
先决条件
要完成本教程,您需要:
-
按照 Ubuntu 18.04 的初始服务器设置(包括 sudo 非 root 用户)设置的 Ubuntu 18.04 服务器。
-
您希望监控的一个或多个网络或设备,例如:
- 您维护的服务器
- 您的公司网络
- 您当地的 ISP
对于每个设备或网络,您需要确定其所属的单个 IP 地址、IP 地址范围或自治系统编号。这在步骤 1 中有介绍。
准备好这些后,以非 root 用户身份登录到您的服务器开始。
步骤 1 — 确定要监控的网络
在此步骤中,您将确定要监控的网络的相关详细信息。
BGPalerter 可以基于单个 IP 地址或网络前缀进行监控。它还可以根据自治系统 (AS) 编号监控整个网络,AS 编号是特定管理实体拥有的网络的全球唯一标识符。
为了找到这些信息,您可以使用威胁情报服务Team Cymru提供的IP-to-ASN WHOIS 查找服务。这是一个定制的 WHOIS 服务器,用于查找 IP 地址和网络路由信息。
如果您还没有whois
安装,可以使用以下命令进行安装:
- sudo apt update
- sudo apt install whois
确认whois
安装后,开始查找您自己服务器的 IP 地址,使用-h
参数指定自定义服务器:
- whois -h whois.cymru.com your-ip-address
这将输出类似于以下内容的结果,其中显示了您的服务器所属的 AS 名称和编号。这通常是您的服务器托管提供商的 AS,例如 DigitalOcean。
OutputAS | IP | AS Name
14061 | your-ip-address | DIGITALOCEAN-ASN, US
接下来,您可以执行查找以识别您的服务器所属的网络前缀/范围。您可以通过将-p
参数添加到您的请求中来做到这一点:
- whois -h whois.cymru.com " -p your-ip-address"
输出将与之前的命令非常相似,但现在将显示您的服务器的 IP 地址所属的 IP 地址前缀:
OutputAS | 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 的更多信息:
OutputAS | 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
:
- sudo su bgpalerter
您现在将以新用户身份登录:
bgpalerter@droplet:/home/user$
使用cd
命令移动到新用户的主目录:
bgpalerter@droplet:/home/user$ cd
bgpalerter@droplet:~$
您已经为 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
这将输出当前版本号:
Output1.24.0
在您可以正确运行 BGPalerter 之前,您需要在配置文件中定义您希望监控的网络。prefixes.yml
在您喜欢的文本编辑器中创建并打开文件:
- nano ~/prefixes.yml
在此配置文件中,您将指定要监视的每个单独的 IP 地址、IP 地址范围和 AS 编号。
添加以下示例并使用您在步骤 1 中确定的网络信息根据需要调整配置值:
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
IPv6来表示它们。
该ignoreMorespecifics
值用于控制 BGPalerter 是否应忽略比您正在监视的路由更具体(更小)的路由的活动。例如,如果您正在监控 a/20
并且/24
在其中检测到 a 的路由更改,则这被认为是更具体的。在大多数情况下,您不想忽略这些,但是如果您正在监控具有多个委托客户前缀的大型网络,这可能有助于减少背景噪音。
您现在可以第一次运行 BGPalerter 以开始监控您的网络:
- ./bgpalerter-linux-x64
如果 BGPalerter 成功启动,您将看到类似于以下内容的输出。请注意,有时可能需要几分钟才能开始监视:
OutputImpossible 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 警报。config.yml
如BGPalerter 文档中所述,BGPalerter 将向主输出提要输出警报,并且还可以选择向可以在其中配置的任何其他报告端点输出警报。
默认情况下,BGPalerter 监控以下内容并发出警报:
-
路由劫持:发生在 AS 宣布不允许的前缀时,导致流量被错误路由。这可能是故意的攻击,也可能是意外的配置错误。
-
路由可见性丢失:当 Internet 上的大多数 BGP 路由器能够可靠地路由到某个路由时,该路由被认为是可见的。失去可见性是指您的网络可能不可用,例如,如果您的BGP 对等互连已停止工作。
-
新的子前缀公告:是当 AS 开始公告比预期更小的前缀时。这可能表示预期的配置更改、意外配置错误或在某些情况下是攻击。
-
AS 内的活动:通常是指新的路线公告。如果 BGPalerter 还不知道路由,则该路由被认为是“新的”。
以下是一些示例警报,以及对其含义的简短描述:
The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
此警报显示路由劫持的证据,其中 AS64496 已203.0.113.0/24
在预期AS65540 宣布此路由时宣布。这是导致路由泄漏或攻击者故意劫持的错误配置的强烈指示。
The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
此警报表明203.0.113.0/24
网络不再可见。这可能是因为上游路由问题,或者路由器出现电源故障。
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
预期只有 a 时宣布了a 。这很可能是配置错误,但在某些情况下可能是路由劫持的证据。
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 -e
接下来,将以下条目添加到 crontab 文件的底部:
@reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"
每次系统启动时,这将创建一个screen
名为“bgpalerter”的分离会话,并在其中启动 BGPalerter。
保存并退出 crontab 编辑器。您现在可能希望重新启动系统以确保 BGPalerter 在启动时正确启动。
您首先需要注销您的 BGPalerter 用户:
- logout
然后继续正常的系统重启:
- sudo reboot
系统重新启动后,重新登录到您的服务器并su
再次访问您的 BGPalerter 用户:
- sudo su bgpalerter
然后您可以随时附加到会话以查看 BGPalerter 的输出:
- screen -r bgpalerter
在这最后一步中,您将 BGPalerter 配置为在启动时运行。
结论
在本文中,您设置了 BGPalerter 并使用它来监视网络的 BGP 路由更改。
如果您希望使 BGPalerter 更加用户友好,您可以将其配置为通过 webhook 向 Slack 通道发送警报:
如果您想了解有关 BGP 本身的更多信息,但无法访问生产 BGP 环境,您可能会喜欢使用 DN42 在安全、隔离的环境中试验 BGP: