作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。
介绍
BGP(边界网关协议) 是负责在互联网上路由数据包的核心协议之一,因此当它出错时,可能会发生重大中断。 例如,在 2019 年,一家小型 ISP 错误配置了 BGP,不幸地向上游传播, 导致 Cloudflare 和 AWS 的大部分离线超过一个小时 。 此外,一年前,发生了 BGP 劫持事件,目的是拦截到知名加密货币钱包提供商 的流量并窃取毫无戒心的客户的资金。
BGPalerter 是一个开源 BGP 网络监控工具,可以提供有关 BGP 活动的实时警报,包括路由可见性和新路由公告,以及潜在的恶意活动,例如 路由劫持或路由泄漏。
注意: BGPalerter 自动获取公开可用的网络路由信息,这意味着它不必具有任何级别的特权访问或集成到您希望监控的网络中。 所有监控都完全符合《计算机滥用法》、《计算机欺诈和滥用法》以及其他类似法律。 但是,建议负责任地向受影响的网络运营商披露任何相关调查结果。
在本教程中,您将安装和配置 BGPalerter 以监控您的重要网络以发现潜在的可疑活动。
先决条件
要完成本教程,您需要:
按照 Initial Server Setup 和 Ubuntu 18.04 设置的 Ubuntu 18.04 服务器,包括 sudo 非 root 用户。
您希望监控的一个或多个网络或设备,例如:
- 您维护的服务器
- 您的公司网络
- 您当地的 ISP
对于每个设备或网络,您需要识别其所属的单个 IP 地址、IP 地址范围或自治系统编号。 这在第 1 步中介绍。
准备好这些后,以非 root 用户身份登录到您的服务器即可开始。
第 1 步 — 确定要监控的网络
在此步骤中,您将确定要监控的网络的相关详细信息。
BGPalerter 可以根据单个 IP 地址或网络前缀进行监控。 它还可以根据自治系统 (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 Releases 页面并获取最新 Linux x64 版本的下载链接的副本。
您现在可以使用 wget
下载 BGPalerter 的副本,确保替换为正确的下载链接:
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 编号。
添加以下示例并使用您在 Step 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
表示 IPv6。
ignoreMorespecifics
值用于控制 BGPalerter 是否应该忽略比您正在监视的路由更具体(更小)的活动。 例如,如果您正在监视 /20
并且检测到其中的 /24
的路由更改,则认为这更具体。 在大多数情况下,您不想忽略这些,但是如果您正在监视具有多个委派客户前缀的大型网络,这可能有助于减少背景噪音。
您现在可以首次运行 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 警报。 BGPalerter 将向主输出提要输出警报,还可以选择向可以在 config.yml
中配置的任何其他报告端点输出警报,如 BGPalerter 文档 中所述。
默认情况下,BGPalerter 会监控以下内容并发出警报:
- Route hijacks:当一个AS宣布一个不允许它的前缀时发生,导致流量被错误地路由。 这可能是蓄意的攻击,也可能是意外的配置错误。
- 路由可见性丢失:当互联网上的大多数 BGP 路由器能够可靠地路由到它时,该路由被认为是可见的。 失去可见性是指您的网络可能不可用,例如,如果您的 BGP 对等 已停止工作。
- 新的子前缀公告:当一个AS开始宣布一个小于预期的前缀时。 这可能表示预期的配置更改、意外的错误配置,或者在某些情况下是攻击。
- 您的 AS 内的活动:通常指的是新的路线公告。 如果 BGPalerter 还不知道路由,则认为它是“新的”。
以下是一些示例警报,以及对其含义的简短描述:
警报 #1
The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
此警报显示路线劫持的证据,其中 AS64496 已宣布 203.0.113.0/24
,而预计此路线将由 AS65540 宣布。 这是导致路由泄漏或攻击者故意劫持的错误配置的有力指标。
警报 #2
The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
此警报显示 203.0.113.0/24
网络不再可见。 这可能是因为上游路由问题,或者路由器出现电源故障。
警报 #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
此警报显示已在未预料到的地方公布了更具体的前缀,例如,在只预期 /24
时公布了 /25
。 这很可能是错误配置,但在某些情况下可能是路由劫持的证据。
警报 #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 -e
接下来,将以下条目添加到 crontab 文件的底部:
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: