3 minute(s) de lecture
Cet article contient 577 mots.
Source brute de l'article : MD
Description
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 :
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, neighbradv }"
icmp6_in = "{ redir }"
icmp6_out = "{ echorep, routersol, neighborsol }"
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
pass out quick on egress inet6 proto icmp6 icmp6-type $icmp6_out 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 redirectionredir
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 ! - La règle
icmp6_out
gére les cas de réponse ping - le pong -, des réponses de routeur, et de voisins.
⇒ 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