Cloudflare 中文文档
Radar
编辑这个页面
跳转官方原文档
Set theme to dark (⇧+D)

BGP anomalies

Beta

To access Cloudflare Radar BGP Anomaly Detection results, you will first need to create an API token that includes a User:User Details permission. All the following examples should work with a free-tier Cloudflare account.

​​ Search BGP hijack events

In the following example, we will query the BGP hijack events API for the most recent BGP origin hijacks originated by or affecting AS64512 (example ASN).

The result shows the most recent 10 BGP hijack events that affects AS64512.

In the response we can learn about the following information about each event:

  • hijack_msg_count: the number of potential BGP hijack messages observed from all peers.
  • peer_asns: the AS numbers of the route collector peers who observed the hijack messages.
  • prefixes: the affected prefixes.
  • hijacker_asn and victim_asns: the potential hijacker ASN and victim ASNs.
  • confidence_score: a quantitative score describing how confident the system is for this event being a hijack:
    • 1-3: low confidence.
    • 4-7: medium confidence.
    • 8-above: high confidence.
  • tags: the evidence collected for the events. Each tag is also associated with a score that affects the overall confidence score:
    • a positive score indicates that the event is more likely to be a hijack.
    • a negative score indicates that the event is less likely to be a hijack.

Users can further filter out low-confidence events by attaching a minConfidence=8 parameter, which will return only events with a confidence_score of 8 or higher.

​​ Search BGP route leak events

BGP route leak is another type of BGP anomalies that Cloudflare Radar detects. Currently, we focus on detecting specifically the provider-customer-provider type of route leak. You can learn more about our design and methodology in our blog post.

In the following example, we will query the BGP route leak events API for the most recent BGP route leak events affecting AS64512.

The result shows the most recent 10 BGP route leak events that affects AS64512.

In the response we can learn about the following information about each event:

  • leak_asn: the AS who potentially caused the leak.
  • leak_seg: the AS path segment observed and believed to be a leak.
  • min_ts and max_ts: the earliest and latest timestamps of the leak announcements.
  • leak_count: the total number of BGP route leak announcements observed.
  • peer_count: the number of route collector peers observed the leak.
  • prefix_count and origin_count: the number of prefixes and origin ASes affected by the leak.

​​ Send alerts for BGP hijacks

In this example, we will show you how you can build a Cloudflare Workers app that sends out alerts for BGP hijacks relevant to a given ASN using webhooks (works for Google Hangouts, Discord, Telegram, etc) or email.

We will use Cloudflare Workers as the platform and use its Cron Triggers to periodically check for new alerts.

For the app, we would like it to do the following things:

  • Fetch from Cloudflare API with a given API token.
  • Check against Cloudflare KV to know what events are new.
  • Construct messages for new hijacks and send out alerts via webhook triggers.

​​ Worker app setup

We will start with setting up a Cloudflare Worker app using wrangler.

First, create a new Workers app in a local directory:

When prompted to select a type of Worker, choose Scheduled handler.

In your wrangler.toml file, change the default checking frequency (once per hour) to what you like. Here is an example of configuring the workers to run the script five minutes.

In this example, we will also need to use Cloudflare KV to save the latest checked event IDs which allows us to know what events are new. Once you have created a KV, you can head back to the wranglers.toml file and add the following sections:

​​ Fetch for newly detected BGP hijacks

Start with the API fetching function.

The following apiFetch(env, paramsStr) handles taking in a request parameters string, construct proper headers and fetch from the Cloudflare API BGP hijacks endpoint.

The env parameter is passed in from the caller, and we do not need to worry about construct it. The paramsStr is a string variable that holds the query parameters in a query URL.

Now in our main cron trigger function, we will need to construct the query parameters and call the API fetch function. The default cron trigger worker script is defined as the follows:

In our example, we use the env variables to get the runtime variables like the TOKEN and ASN of interest, and Cloudflare KV bindings. We do not use the controller and ctx variables in this example.

First, we will need to learn about what are the new events. We define new events as the events the app has not yet processed. We use the Cloudflare KV bucket previously created and defined (HIJACKS_KV) to save and retrieve the most recent processed event ID.

The main loop that checks for the most recent events looks like this (some of the validation code is skipped):

Now that we have all the newly detected events saved in new_events variable, we can then send out alerts:

​​ Send alerts using webhook

The function send_alert handles constructing alert message and sending out alerts using webhook. Here we demonstrate an example plain-text message template using Google Hangouts webhook. Users can customize the message and the use of webhook based on their platform of choice and needs.

Note that the webhook is considered secret and should be set to the environment via wrangler secret put WEBHOOK_URL command.

The last step is to deploy the application with command npx wrangler deploy and the app should be up and running on your Cloudflare account, and will be triggered to execute every five minutes.

​​ Send email alerts from Workers

If you have Email Routing enabled for your domain, you can also send email alerts directly from Workers. Refer to Send emails from Workers to learn more.

For this alert to work, you will need to configure the proper email bindings in the wrangler.toml file.

Then, you can create an email-sending function to send alert emails to your configured destination address:

​​ Next steps

Refer to our API documentation for BGP route leaks and BGP hijacks for more information on these topics.