BGP-aankondigingen monitoren met BGPalerter op Linux
Installeer BGPalerter v2 op een Linux VPS om je prefixen te bewaken op hijacks, route leaks en RPKI-invalidaties. Stel Slack- en e-mailmeldingen in en draai alles als systemd-service.
Als je je eigen prefixen via BGP aankondigt, moet je weten wanneer er iets misgaat. Een prefix-hijack, een route leak, een RPKI-misconfiguratie: deze incidenten kunnen je netwerk offline halen of je verkeer via een aanvaller routeren. BGPalerter bewaakt publieke route collector-data en waarschuwt je in realtime.
Deze tutorial installeert BGPalerter v2 op Ubuntu 24.04, configureert prefix- en ASN-monitoring, stelt Slack- en e-mailnotificaties in, en draait alles als systemd-service. Er wordt van uitgegaan dat BGP al draait met BIRD2 of FRR.
Wat monitort BGPalerter en hoe werkt het?
BGPalerter monitort je BGP-prefixen in realtime via publieke route collector-data van RIPE RIS. Het maakt een WebSocket-verbinding met ris-live.ripe.net, dat feeds van meer dan 600 peers wereldwijd aggregeert. Integratie met je routers is niet nodig. Het draait op elke Linux-server met uitgaand internetverkeer.
BGPalerter bevat deze monitors:
| Monitor | Wat het detecteert | Standaardkanaal |
|---|---|---|
| monitorHijack | Verkeerde origin-AS, sub-prefix-hijacks | hijack |
| monitorVisibility | Prefix teruggetrokken of door te weinig peers gezien | visibility |
| monitorNewPrefix | Onverwacht sub-prefix aangekondigd door jouw AS | newprefix |
| monitorPath | AS-pad matcht een regex-patroon (scrubbing, transit-wijziging) | path |
| monitorPathNeighbors | Onverwachte upstream/downstream-AS in het pad | path |
| monitorAS | Jouw ASN kondigt een niet-gedeclareerd prefix aan | misconfiguration |
| monitorRPKI | Prefix aangekondigd met RPKI-status Invalid | rpki |
| monitorROAS | ROA toegevoegd, bewerkt, verwijderd of bijna verlopen | roa |
Elke monitor heeft een thresholdMinPeers-parameter. Een waarschuwing wordt pas gegeven wanneer de anomalie door minstens dat aantal route collector-peers is bevestigd, wat valse meldingen vermindert.
Hoe installeer ik BGPalerter op Ubuntu 24.04?
Download het nieuwste BGPalerter-binary van GitHub en maak het uitvoerbaar. Bij gebruik van het voorgebouwde binary is geen Node.js-installatie nodig. Het zelfstandige binary bevat de Node.js-runtime; reken op minstens 1 GB vrij RAM op de monitoringserver.
Een dedicated gebruiker aanmaken
Draai BGPalerter onder een eigen onbevoegd account. Draai netwerkmonitoringtools nooit als root als dat niet nodig is.
sudo adduser --system --group --home /opt/bgpalerter --shell /usr/sbin/nologin bgpalerter
Het binary downloaden
cd /opt/bgpalerter
sudo -u bgpalerter curl -Lo /opt/bgpalerter/bgpalerter-linux-x64 https://github.com/nttgin/BGPalerter/releases/latest/download/bgpalerter-linux-x64
sudo chmod +x /opt/bgpalerter/bgpalerter-linux-x64
ls -la /opt/bgpalerter/bgpalerter-linux-x64
Het bestand is ongeveer 140 MB. Het binary is zelfstandig en bevat de Node.js-runtime. Geen externe afhankelijkheden.
Docker-alternatief
Als je de voorkeur geeft aan containers:
docker run -d --name bgpalerter \
-v /opt/bgpalerter/volume:/opt/bgpalerter/volume \
--restart unless-stopped \
nttgin/bgpalerter:latest run serve -- --d /opt/bgpalerter/volume/
Plaats je config.yml en prefixes.yml in /opt/bgpalerter/volume/ voordat je de container start. De rest van deze tutorial behandelt de binary-methode. De configuratiebestanden zijn in beide gevallen identiek.
Hoe configureer ik prefixes.yml om mijn ASN te monitoren?
BGPalerter moet weten welke prefixen en ASN's van jou zijn. Het generate-commando bevraagt publieke routingdata en bouwt prefixes.yml op basis van wat jouw AS momenteel aankondigt.
sudo -u bgpalerter /opt/bgpalerter/bgpalerter-linux-x64 generate \
-a YOUR_ASN \
-o /opt/bgpalerter/prefixes.yml \
-i -m
Vervang YOUR_ASN door je AS-nummer (alleen cijfers, zonder "AS"-prefix). De opties:
| Optie | Doel |
|---|---|
-a |
Te monitoren ASN('s). Kommagescheiden voor meerdere: -a 64496,64497 |
-o |
Pad van het uitvoerbestand |
-i |
Gedelegeerde prefixen negeren (georigineerd door andere ASN's) |
-m |
Automatisch alle origin-ASN's voor je prefixen detecteren |
Het commando produceert een bestand als dit:
198.51.100.0/24:
description: Production network
asn: 64496
ignoreMorespecifics: false
ignore: false
2001:db8::/32:
description: IPv6 allocation
asn: 64496
ignoreMorespecifics: false
ignore: false
options:
monitorASns:
64496:
group: default
Belangrijke velden
ignoreMorespecifics: Zet op true als je bewust deaggregeert (bijvoorbeeld zowel /24 als /25 aankondigt). Bij false waarschuwt BGPalerter bij elke onverwachte meer-specifieke aankondiging. Voor de meeste operators is false de juiste standaard. Onverwachte more-specifics zijn een hijack-signaal.
options.monitorASns: Activeert monitorAS voor jouw ASN. BGPalerter waarschuwt als jouw ASN een prefix begint te origineren dat niet in het bestand staat.
group: Bepaalt de routering van waarschuwingen. De groep default is gekoppeld aan de notificatiekanalen. Je kunt aparte groepen maken (bijvoorbeeld noc, engineering) en ze naar verschillende Slack-kanalen of mailinglijsten sturen.
Bewerk het gegenereerde bestand om beschrijvingen toe te voegen, ignoreMorespecifics per prefix aan te passen, of prefixen toe te voegen die nog niet aangekondigd worden maar gemonitord moeten worden op ongeautoriseerde originatie.
Hoe configureer ik config.yml?
De automatische configuratiewizard maakt bij de eerste start een standaard config.yml aan. Voor productie wil je expliciete controle over elke parameter.
Maak /opt/bgpalerter/config.yml aan:
connectors:
- file: connectorRIS
name: ris
params:
carefulSubscription: true
url: ws://ris-live.ripe.net/v1/ws/
perMessageDeflate: true
monitors:
- file: monitorHijack
channel: hijack
name: basic-hijack-detection
params:
thresholdMinPeers: 3
- file: monitorVisibility
channel: visibility
name: withdrawal-detection
params:
thresholdMinPeers: 40
notificationIntervalSeconds: 3600
- file: monitorNewPrefix
channel: newprefix
name: newprefix-detection
params:
thresholdMinPeers: 3
- file: monitorAS
channel: misconfiguration
name: asn-monitor
params:
thresholdMinPeers: 3
- file: monitorRPKI
channel: rpki
name: rpki-monitor
params:
thresholdMinPeers: 3
checkUncovered: true
checkDisappearing: true
- file: monitorROAS
channel: roa
name: rpki-diff
params:
enableDiffAlerts: true
enableExpirationAlerts: true
roaExpirationAlertHours: 2
checkOnlyASns: true
- file: monitorPathNeighbors
channel: path
name: path-neighbors
params:
thresholdMinPeers: 3
reports:
- file: reportFile
channels:
- hijack
- newprefix
- visibility
- path
- misconfiguration
- rpki
- roa
params:
persistAlertData: false
alertDataDirectory: alertdata/
notificationIntervalSeconds: 86400
persistStatus: true
alertOnlyOnce: false
fadeOffSeconds: 360
checkFadeOffGroupsSeconds: 30
logging:
directory: logs
logRotatePattern: YYYY-MM-DD
maxRetainedFiles: 30
maxFileSizeMB: 15
compressOnRotation: true
useUTC: true
rest:
host: localhost
port: 8011
rpki:
vrpProvider: rpkiclient
refreshVrpListMinutes: 15
monitoredPrefixesFiles:
- prefixes.yml
checkForUpdatesAtBoot: true
generatePrefixListEveryDays: 0
pidFile: bgpalerter.pid
maxMessagesPerSecond: 6000
multiProcess: false
environment: production
configVersion: 2
Opmerkingen over de connector
connectorRIS streamt live BGP-updates van RIPE RIS via WebSocket. De instelling carefulSubscription: true beperkt de stream tot alleen je gemonitorde prefixen, wat bandbreedte en CPU vermindert.
Je firewall moet uitgaande WebSocket-verbindingen naar ris-live.ripe.net op poort 80 (ws://) of 443 (wss://) toestaan. Inkomende regels zijn niet nodig.
De rest-sectie stelt een lokale HTTP-API beschikbaar op poort 8011 voor health checks. Deze luistert standaard op localhost en is dus niet bereikbaar via het netwerk.
Monitor-tuning
thresholdMinPeers regelt de gevoeligheid. Een waarde van 3 betekent dat minstens 3 route collector-peers een anomalie moeten bevestigen voordat er een waarschuwing wordt gegeven. Lagere waarden vangen meer events op maar produceren meer valse meldingen. Voor hijack-detectie is 3 een goed startpunt. Voor visibility is 40 geschikt aangezien RIPE RIS meer dan 600 peers heeft.
notificationIntervalSeconds op monitorniveau overschrijft de globale instelling. Voor visibility voorkomt 3600 (1 uur) waarschuwingsmoeheid tijdens flapping.
Hoe monitor ik RPKI-ongeldige aankondigingen met BGPalerter?
BGPalerter controleert de RPKI-geldigheid van elke ontvangen BGP-aankondiging voor je prefixen. Als je prefix verschijnt met RPKI-status Invalid, krijg je een waarschuwing. Dit detecteert ROA-misconfiguraties en bepaalde hijack-typen die RPKI-gebaseerde filtering zou afwijzen.
De monitorRPKI-sectie in config.yml regelt dit:
checkUncovered: truewaarschuwt wanneer je prefix geen ROA heeft. Elk aangekondigd prefix zou ROA-dekking moeten hebben.checkDisappearing: truewaarschuwt wanneer een ROA die je prefix dekte verdwijnt.
De aparte monitorROAS-module bewaakt ROA-wijzigingen op RPKI-niveau: nieuwe ROA's aangemaakt, bestaande ROA's bewerkt of verwijderd, en ROA's die bijna verlopen. De instelling roaExpirationAlertHours: 2 waarschuwt je 2 uur voor het verlopen van een ROA.
Een voorbeeld van een RPKI-waarschuwing:
The prefix 198.51.100.0/24 (AS64496) is announced with RPKI state Invalid.
Seen by 5 peers. Top 3 AS paths: 64496 174 3356, 64496 6939, 64496 1299
Hoe stel ik e-mailwaarschuwingen in bij BGPalerter?
Voeg een reportEmail-blok toe aan de reports-sectie van config.yml. BGPalerter gebruikt SMTP rechtstreeks.
reports:
# ... behoud reportFile van hierboven ...
- file: reportEmail
channels:
- hijack
- newprefix
- visibility
- path
- misconfiguration
- rpki
- roa
params:
showPaths: 5
senderEmail: bgpalerter@example.com
smtp:
host: mail.example.com
port: 587
secure: false
ignoreTLS: false
auth:
user: bgpalerter@example.com
pass: your-smtp-password-here
type: login
tls:
rejectUnauthorized: true
notifiedEmails:
default:
- noc@example.com
Vervang de SMTP-waarden door die van je mailserver. De instelling showPaths: 5 voegt tot 5 AS-paden toe aan de waarschuwingsmail zodat je kunt zien waar de afwijkende route zich verspreidde.
Aangezien config.yml het SMTP-wachtwoord in platte tekst bevat, beperk je de bestandsrechten zodat alleen de bgpalerter-gebruiker en root het kunnen lezen:
sudo chown root:bgpalerter /opt/bgpalerter/config.yml
sudo chmod 640 /opt/bgpalerter/config.yml
De notifiedEmails-sectie koppelt groepen aan e-mailadressen. De groep default ontvangt alle waarschuwingen. Als je aangepaste groepen hebt gedefinieerd in prefixes.yml, voeg dan overeenkomstige vermeldingen toe:
notifiedEmails:
default:
- noc@example.com
noc:
- oncall@example.com
- sre@example.com
Hoe stel ik Slack-notificaties in bij BGPalerter?
Voeg een reportSlack-blok toe aan de reports-sectie. Je hebt een Slack incoming webhook-URL nodig.
Maak de webhook aan in Slack: ga naar je workspace-instellingen, zoek "Incoming Webhooks" onder Apps, en maak een webhook voor het kanaal waar je waarschuwingen wilt ontvangen.
reports:
# ... behoud reportFile en reportEmail ...
- file: reportSlack
channels:
- hijack
- newprefix
- visibility
- path
- misconfiguration
- rpki
- roa
params:
showPaths: 3
colors:
hijack: "#d60b1c"
newprefix: "#fa9548"
visibility: "#fad648"
path: "#42cbf5"
rpki: "#d892f0"
roa: "#d892f0"
hooks:
default: https://hooks.slack.com/services/T00/B00/xxxx
De colors-map geeft elk waarschuwingstype een eigen kleur in Slack. Rood voor hijacks, geel voor zichtbaarheidsverlies, paars voor RPKI-problemen.
Vervang de placeholder webhook-URL door je echte Slack-webhook. De eerder ingestelde config.yml-rechten (640, root:bgpalerter) houden de webhook-URL alleen leesbaar voor de service.
Hoe draai ik BGPalerter als systemd-service?
De systemd-unit aanmaken
sudo tee /etc/systemd/system/bgpalerter.service > /dev/null << 'EOF'
[Unit]
Description=BGPalerter - BGP Monitoring
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=bgpalerter
Group=bgpalerter
WorkingDirectory=/opt/bgpalerter
ExecStart=/opt/bgpalerter/bgpalerter-linux-x64
Restart=on-failure
RestartSec=30s
# Hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/bgpalerter
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
De directieven ProtectSystem=strict en ProtectHome=true beperken de toegang tot het bestandssysteem. BGPalerter hoeft alleen in zijn eigen directory te schrijven.
Inschakelen en starten
sudo systemctl daemon-reload
sudo systemctl enable --now bgpalerter
enable zorgt ervoor dat de service bij het opstarten draait. --now start het direct.
systemctl status bgpalerter
● bgpalerter.service - BGPalerter - BGP Monitoring
Loaded: loaded (/etc/systemd/system/bgpalerter.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-03-20 10:20:00 UTC; 5s ago
Main PID: 1373 (bgpalerter-linu)
Tasks: 10 (limit: 9443)
Memory: 724.3M
CPU: 4.483s
CGroup: /system.slice/bgpalerter.service
└─1373 /opt/bgpalerter/bgpalerter-linux-x64
Het zelfstandige binary bevat de volledige Node.js-runtime, dus het basisgeheugengebruik ligt rond 500-800 MB ongeacht het aantal prefixen. Zorg voor minstens 1 GB vrij RAM op de monitoringserver.
Logs bekijken
journalctl -u bgpalerter -f --no-pager
Bij het opstarten laadt BGPalerter de configuratie en maakt verbinding met RIPE RIS. De eerste regels in het journal zien er zo uit:
Loaded config: /opt/bgpalerter/config.yml
BGPalerter, version: 2.0.1 environment: production
BGPalerter schrijft ook logs naar /opt/bgpalerter/logs/. De instelling logRotatePattern: YYYY-MM-DD maakt dagelijks een nieuw logbestand. Met maxRetainedFiles: 30 en compressOnRotation: true bewaar je een maand aan gecomprimeerde logs zonder handmatig ingrijpen.
Hoe test ik BGPalerter-waarschuwingen?
Start BGPalerter met de -t-vlag om testwaarschuwingen via alle geconfigureerde notificatiekanalen te sturen. De ingebouwde testconnector simuleert elk waarschuwingstype zonder te wachten op echte BGP-events.
sudo -u bgpalerter /opt/bgpalerter/bgpalerter-linux-x64 -t
Dit stuurt testberichten naar je Slack-kanaal en per e-mail. Controleer of waarschuwingen aankomen met de juiste opmaak en routering. Als je meerdere groepen hebt gedefinieerd, moet elke groep de toegewezen waarschuwingen ontvangen.
Voor doorlopende monitoring bekijk je het journal:
journalctl -u bgpalerter --since "1 hour ago" --no-pager
Hoe verhoudt BGPalerter zich tot alternatieven?
BGPalerter is niet de enige BGP-monitoringoptie. Hier een snelle vergelijking:
| Tool | Type | Primair gebruik |
|---|---|---|
| BGPalerter | Self-hosted, open source | Enkel AS, prefix-monitoring, realtime waarschuwingen |
| ARTEMIS | Self-hosted, open source | Grote netwerken, aangepaste detectiemodules, onderzoek |
| Cloudflare Radar | SaaS | Snelle lookup, geen self-hosting, beperkte alerting |
| BGPStream | Bibliotheek/SaaS | Programmatische analyse, historisch dataonderzoek |
| bgp.tools | SaaS | Visuele verkenning, communitydata, snelle checks |
BGPalerter past goed bij de self-hosted single-AS-usecase. Het vereist geen routerintegratie en draait op een kleine VPS. ARTEMIS is krachtiger maar aanzienlijk complexer om te deployen.
Voor defense-in-depth combineer je BGPalerter met RPKI ROA-deployment en goede routefiltering op je BGP-sessies.
Iets gaat mis?
BGPalerter stopt direct: Controleer journalctl -u bgpalerter -e. Veelvoorkomende oorzaken: onjuiste YAML in config.yml of prefixes.yml. Valideer met python3 -c "import yaml; yaml.safe_load(open('config.yml'))".
Geen data van RIPE RIS: Je firewall moet uitgaande verbindingen naar ris-live.ripe.net op poort 80 (WebSocket) toestaan. Als je achter een beperkende proxy zit, gebruik dan de wss://-URL op poort 443. Werk de connector-URL in config.yml dienovereenkomstig bij.
Waarschuwingen komen niet aan (e-mail): Start met -t om te isoleren. Controleer SMTP-credentials in config.yml. Verifieer dat het afzenderadres is toegestaan door je mailserver (SPF, authenticatie). Bekijk journalctl -u bgpalerter voor SMTP-foutmeldingen.
Waarschuwingen komen niet aan (Slack): Controleer of de webhook-URL geldig is. Slack deactiveert webhooks voor ongebruikte apps. Test de webhook direct: curl -X POST -H 'Content-type: application/json' --data '{"text":"test"}' "https://hooks.slack.com/services/T00/B00/xxxx".
Hoog geheugengebruik: Grote prefixlijsten verbruiken meer geheugen. Als je veel ASN's monitort, vergroot dan de swap of splits op in meerdere BGPalerter-instanties met aparte prefixbestanden.
Service herstart niet: RestartSec=30s in het unit-bestand voegt een vertraging van 30 seconden toe tussen herstartpogingen. Bij aanhoudende fouten controleer je de exit-code in systemctl status bgpalerter.
Copyright 2026 Virtua.Cloud. Alle rechten voorbehouden. Deze inhoud is een origineel werk van het Virtua.Cloud-team. Reproductie, herpublicatie of herdistributie zonder schriftelijke toestemming is verboden.
Klaar om het zelf te proberen?
Deploy uw eigen server in seconden. Linux, Windows of FreeBSD.
Bekijk VPS-aanbod