Let’s Encrypt: Filtrage IP et liste blanche des validateurs

Sur certains serveurs privés, j’applique régulièrement des règles de filtrage sévères, basée sur du geofencing. Cela revient souvent a dire que si l’IP source d’un paquet entrant ne provient pas de France, je le rejette.

Les serveur sortant de Let’s Encrypt sont actuellement situés aux US, ce qui dans ce cadre empêche toute validation de certificat.
Il n’y a pas de solution parfaite lorsque l’on applique des stratégies aussi radicales. Ce qui est sûre c’est que l’on ne peut jamais présager de la pérennité d’une adresse IP, Let’s Encrypt prévoit d’ailleurs de changer régulièrement les siennes.

Sans garantie pour autant, il faut donc s’appuyer sur les noms de domaine dédiés à leurs serveurs de validation.

outbound1.letsencrypt.org > 66.133.109.36
outbound2.letsencrypt.org > 64.78.149.164

De nombreuses solutions réseau comme pfSense (ou son fork OPNsense) permettent d’écrire des règles avec un nom de domaine source comme critère. Pour des raisons de performances, la résolution DNS se fait une fois lors de interprétation des règles, avec un rafraîchissement planifié sur un intervalle donné.

Sous IPtables, on peut imaginer le script suivant:

le_pool="outbound1.letsencrypt.org outbound2.letsencrypt.org"
for host in $le_pool
do
    ipaddr=$(ping -c1 google.fr | head -n1 | grep -Po "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
    if [ $ipaddr ]; then
        iptables -A INPUT -s $ipaddr -dport 3232 -j ACCEPT
    fi
done