Neighbor AS MsgRcvd MsgSent OutQ Up/Down State/PrfRcvd
AS 65001 peer 1 65001 18 18 0 00:13:18 1
~~~
Voir un résumé des informations relatives aux voisins :
~~~
# bgpctl show neighbor
BGP neighbor is 10.0.0.2, remote AS 65001
Description: AS 65001 peer 1
BGP version 4, remote router-id 10.0.0.2
BGP state = Established, up for 00:13:40
Last read 00:00:41, holdtime 180s, keepalive interval 60s
Neighbor capabilities:
Multiprotocol extensions: IPv4 unicast
Route Refresh
4-byte AS numbers
Message statistics:
Sent Received
Opens 2 2
Notifications 0 1
Updates 1 1
Keepalives 15 14
Route Refresh 0 0
Total 18 18
Update statistics:
Sent Received
Updates 4 1
Withdraws 0 0
Local host: 10.0.0.3, Local port: 179
Remote host: 10.0.0.2, Remote port: 40598
~~~
Voir la FIB (Forwarding Information Base) IPv4 :
~~~
# bgpctl show fib ipv4
flags: * = valid, B = BGP, C = Connected, S = Static
N = BGP Nexthop reachable via this route
r = reject route, b = blackhole route
flags prio destination gateway
*S 8 0.0.0.0/0 10.0.0.1
*CN 4 10.0.0.0/24 link#1
*C 0 127.0.0.0/8 link#0
*S r 8 127.0.0.0/8 127.0.0.1
* 4 127.0.0.1/32 127.0.0.1
*B 48 192.0.33.0/24 10.0.0.3
*S r 8 224.0.0.0/4 127.0.0.1
~~~
On notera principalement la présence de la ligne ***B 48 192.0.33.0/24 10.0.0.3 ** qui signifie la présence de cette route grâce à BGP. On voit donc que l'on peut joindre un IP du réseau 192.0.33.0/24 via 10.0.0.3 :
~~~
# route get 192.0.33.1
route to: 33-1.lax.icann.org
destination: 192.0.33.0
mask: 255.255.255.0
gateway: 10.0.0.3
interface: em0
if address: routeur0
priority: 48 (bgp)
flags: <UP,GATEWAY,DONE>
use mtu expire
0 0 0
~~~
Voir la RIB (Routing Information Base) :
~~~
# bgpctl show rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced
origin: i = IGP, e = EGP, ? = Incomplete
flags destination gateway lpref med aspath origin
AI*> 192.0.32.0/24 0.0.0.0 100 0 i
*> 192.0.33.0/24 10.0.0.3 100 0 65002 i
~~~
Voir le détail concernant le routage vers une IP :
~~~
# bgpctl show rib detail 1.2.3.4
BGP routing table entry for 1.2.0.0/19
65002 43100 1234
Nexthop 192.0.34.1 (via 192.0.34.1) from AS 65002 peer 1 (192.0.35.254)
Origin IGP, metric 0, localpref 100, external, valid, best
Last update: 06:04:53 ago
Communities: 65002:6600
~~~
### Faire une modification à chaud pour privilégier un opérateur en sortie
On modifie les paramètres associés aux neighbors, par exemple :
~~~
set metric 1
set localpref 120
~~~
Puis on recharge le démon :
~~~
# bgpctl reload
reload request sent.
request processed
~~~
On pourra ensuite constater les changements en examinant la table de routage via `bgpctl show rib`
### Faire une modification à chaud pour privilégier un opérateur en entrée
C'est beaucoup plus délicat car on ne peut qu'influencer/aimanter le trafic entrant.
Et si un opérateur a des règles de son côté également (localpref), on peut ne pas pouvoir
En cas d'attaque DDoS sur une IP, on peut utiliser le RTBH <http://www.rfc-editor.org/rfc/rfc3882.txtRFC3882>
On pourra alors annoncer un préfix /32, via une communauté BGP, à bloquer en amont.
Considérons l'IP 192.0.33.10 attaquée. L'idée ici est de pouvoir annoncer au routeur de l'AS 65001 de rediriger tout le trafic à destination de la cible vers un trou noir.
Sur la machine avec l'adresse IP 10.0.0.2, on crée une règle avec une communauté BGP de notre choix assignée au blackhole dans bgpd.conf
~~~
allow from group "peering AS65002" community 65001:666 prefixlen = 32 set nexthope blackhole
~~~
puis on recharge la configuration:
~~~
# bgpctl reload
~~~
Sur la machine avec l'adresse IP 10.0.0.3, on blackhole l'IP ciblée par l'attaque
~~~
# bgpctl network add 192.0.33.10/32 community 65001:666
~~~
Après l'attaque on supprime l'annonce
~~~
# bgpctl network delete 192.0.33.10/32 community 65001:666
~~~
## bgplg : Looking Glass
On ajoute à la configuration d'OpenBGPD :
~~~
socket "/var/www/logs/bgpd.rsock" restricted
~~~
on recharge le démon :
~~~
# bgpctl reload
~~~
puis on ajoute les droits pour les binaires nécessaires :
~~~
# chmod 555 /var/www/cgi-bin/bgplg
# chmod 555 /var/www/bin/bgpctl
# mkdir /var/www/etc
# cp /etc/resolv.conf /var/www/etc
~~~
Et on configure httpd(8) via `/etc/httpd.conf`
~~~
ext_addr="0.0.0.0"
server "lg.example.net" {
listen on $ext_addr port 80
location "/cgi-bin/*" {
fastcgi
root ""
}
}
~~~
On active et démarre les démons httpd(8) et slowcgi(8) :