Les filtres BIRD ou comment lui ajouter une douane

Il peut (il est même indispensable) de filtrer les routes que l'on annonce et / ou que l'on reçoit avec ses peers BGP.
Voyons donc comment faire tout ceci.

Dans le fichier de configuration bird.conf, le filtrage se fait avec la "commande" filter.
Voici un filtre qui sert à rien vu qu'il accepte tout :

filter nom_filter {
    accept;
}

Dans le corps du filtre, tout un tas de variables sont accéssibles (voire le site officiel de BIRD pour une liste complete de ces variables).

Ci dessous, un exemple concret pour filtrer les annonces faites par le peer ExaBGP:

function is_net_ipfo() {
        return net ~ 172.16.0.0/12;
}

# Autorise seulement les IPs FailOver annoncees depuis exabgp
filter exa_only_ipfo {
        if is_net_ipfo() then
                accept;
        else
                reject "only_ipfo route rejetee";
}

PS: notez l'utilisation d'un fonction pour savoir si la route annoncée fait partie d'une liste. Cette fonction n'est pas obligatoire, c'est uniquement par soucis de lisibilité.

Et maintenant la configuration du protocole afin d'utiliser le filtre:

# session avec le peer exabgp
protocol bgp exabgp {
        export none;
        import filter exa_only_ipfo;
        local as 65042;
        neighbor 10.69.200.5 as 65042;
}