Salut,
J'ai adapté la table de filtrage pour l'ipv6, à mon avis, c'est pas très beau, mais ça marche : les tests ipv6 depuis le PC sont validés (
https://test-ipv6.com/). Je suis passé en conntrack pour le fun, j'ai lu que en fait, le state est converti en conntrack par le noyau. En faisant comme ça, je me dis que je gagne un demi millième de seconde.
J'ai encore des questions concernant ces règles :
- Je n'ai pas vu d'états configurés pour les neighbor discovery, seulement des hop limit. Ca suffit ? J'ai fait un essai avec des états et ça n'a pas marché
- J'ai lu que pour un routeur, le router-advertisement pouvait poser problème en OUTPUT (vers les réseaux publiques, je présume). Tu confirmes ?
- Est-ce que j'ai des choses à rajouter ou à modifier avant de clôturer cette partie ?
Merci de me donner ton avis quand tu auras le temps.
/etc/ip6tables.rules
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
# chaines utilisateur
-N in_priv
-N in_pub
-N out_priv
-N out_pub
-N in
-N out
-N icmp_error
-N ping
-N ssh
-A INPUT -i eth0 -j in_priv
-A OUTPUT -o eth0 -j out_priv
-A INPUT -i wlan0 -j in_priv
-A OUTPUT -o wlan0 -j out_priv
-A INPUT -i eth1 -j in_pub
-A OUTPUT -o eth1 -j out_pub
-A INPUT -i wlan1 -j in_pub
-A OUTPUT -o wlan1 -j out_pub
-A in_pub -j in
-A out_pub -j out
-A FORWARD -i eth0 -o eth1 -j out
-A FORWARD -i eth1 -o eth0 -j in
-A FORWARD -i eth0 -o wlan1 -j out
-A FORWARD -i wlan1 -o eth0 -j in
-A FORWARD -i wlan0 -o eth1 -j out
-A FORWARD -i eth1 -o wlan0 -j in
-A FORWARD -i wlan0 -o wlan1 -j out
-A FORWARD -i wlan1 -o wlan0 -j in
# type 1
-A icmp_error -p icmpv6 --icmpv6-type destination-unreachable -m conntrack --ctstate RELATED -j ACCEPT
# type 2
-A icmp_error -p icmpv6 --icmpv6-type packet-too-big -m conntrack --ctstate RELATED -j ACCEPT
# type 3
-A icmp_error -p icmpv6 --icmpv6-type time-exceeded -m conntrack --ctstate RELATED -j ACCEPT
# type 4
-A icmp_error -p icmpv6 --icmpv6-type parameter-problem -m conntrack --ctstate RELATED -j ACCEPT
# --- Neighbor Discovery ---
# type 135
-A icmp_error -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
# type 136
-A icmp_error -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
# type 133
-A icmp_error -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT
# type 134 EN INPUT SEULEMENT ?
-A icmp_error -s fe80::/64 -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
# --- Ping ---
# type 128
-A ping -p icmpv6 --icmpv6-type echo-request -m limit --limit 900/min -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# type 129
-A ping -p icmpv6 --icmpv6-type echo-reply -m limit --limit 900/min -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A ssh -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A ssh -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# - loopback -
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# - SSH - sens réseau privé <-> routeur
-A in_priv -j ssh
-A out_priv -j ssh
# - ICMP -
-A in_priv -j icmp_error
-A out_priv -j icmp_error
-A in -j icmp_error
-A out -j icmp_error
# - PING - réseau privé <-> routeur
-A in_priv -j ping
-A out_priv -j ping
# - PING - sens routeur et réseau privé -> réseau publique
-A out -j ping
-A in -m state ! --state NEW -j ping
# - DNS - en passant par dnsmasq (routeur)
-A in_priv -p tcp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A out_priv -p tcp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A in_priv -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A out_priv -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# - DNS - pour le routeur
-A out_pub -p tcp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A in_pub -p tcp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A out_pub -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A in_pub -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# - DNS - FORWARD (sans passer par le routeur)
#-A out -p tcp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
#-A in -p tcp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
#-A out -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
#-A in -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# - DHCP - eth0 et wlan0
-A in_priv -p udp --sport 68 --dport 67 -j ACCEPT
-A out_priv -p udp --sport 67 --dport 68 -j ACCEPT
# - DCHP - eth1 et wlan1 (supprimer les # en cas de besoin)
#-A out_pub -p udp --sport 67 --dport 68 -j ACCEPT
#-A in_pub -p udp --sport 68 --dport 67 -j ACCEPT
# - HTTP -
-A out -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A in -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o wlan1 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT