PF accepte de gèrer le protocole ICMPv6

Article publié, le et modifié le
3 minute(s) de lecture

Cet article contient 549 mots.
Source brute de l'article : MD

Description

Astuce

Reprenant le principe des informations renfermées dans mon autre article, à-propos des recommandations faites pour autoriser ou bloquer le flux ICMPv6, voici les règles PF adéquates pour tout BSD qui utilise Packet Filter, dont OpenBSD :

Attention

Gestion

Les codes ICMP à rejeter

icmp6_block = "{ 100 101 127 138 139 140 144 145 146 147 150 200 201 }"
block drop quick log on egress inet6 proto icmp6 icmp6-type $icmp6_block


⇒ Cas d’un routeur :

Un routeur ne doit jamais transmettre un paquet ayant pour adresse source ou de destination une adresse de type lien local :

block drop quick on egress inet6 proto icmp6 from fe80::/64 to any
block drop quick on egress inet6 proto icmp6 from any to fe80::/64

Les codes ICMPv6 à autoriser

⇒ Gestion d’une station :

icmp6_auth = "{ unreach toobig timex paramprob echoreq routeradv neighbrsol neighbradv }"
#pass in quick on egress inet6 proto icmp6 from fe80::/64 to ff02::01/64
pass quick on egress inet6 proto icmp6 icmp6-type $icmp6_auth allow-opts
pass in quick on egress inet6 proto icmp6 icmp6-type redir allow-opts

Explications

  • La première règle, mis en commentaire, autorise en entrée tout ce vient de la pile IPv6 vers ICMPv6 à partir d’une adresse de lien local vers l’adresse multicast de lien local - issue de secours au cas où !
  • La deuxième règle autorise en entrée et sortie tout ce qui vient de la pile IPv6 vers ou depuis ICMPv6 ciblant les types mentionnés dans la macro $icmp6_auth.
  • La troisième règle autorise en entrée tout ce qui vient de la pile IPv6 vers l’annonce ICMPv6 de redirection vers une route plus courte.

Autorisations plus restrictives

icmp6_auth = "{ unreach, toobig, timex code 0, timex code 1, paramprob code 1, paramprob code 2, echoreq, routeradv, neighbrsol, neighbradv }"
icmp6_in = "{ redir }"
pass quick on egress inet6 proto icmp6 icmp6-type $icmp6_auth allow-opts
pass in quick on egress inet6 proto icmp6 icmp6-type $icmp6_in allow-opts

Explications

  • La règle icmp6_auth ne gère que ce qui est absolument nécessaire… attention à bien utiliser les virgules séparant les codes, autrement elle ne serait pas fonctionnelle !
  • La règle icmp6_in gère le cas de l’annonce de redirection redir vers une route sortante plus courte, et normalement ne doit être qu’entrante, pour une station ou un serveur ; mieux, elle devrait cibler le fait de ne venir absolument que d’un routeur !

⇒ Cas d’un routeur :

Si vous avez la belle idée de “construire”, vous-même, votre propre routeur sous OpenBSD, par exemple, il est nécessaire que celui-ci autorise tous les codes ND dits de découvertes des voisins, c’est-à-dire les options 133 à 137, à destination de lui et depuis lui :

icmp6_auth = "{ unreach toobig timex paramprob echorep echoreq }"
icmp6_nd = "{ routersol routeradv neighbrsol neighbradv redir }"
pass quick on egress inet6 proto icmp6 icmp6-type $icmp6_auth allow-opts
pass inet6 proto ipv6-icmp from any to { ff02::/8, (self) } icmp6-type $icmp6_nd allow-opts

Documentation

Remerciements

Merci à @22decembre pour ses explications ! :D