pub YouXOR

SSH, OpenSSL, Iptables, RSYNC, RAID, VPN

 Charge moyenne sur 1mn : 1.10 Charge moyenne sur 5mn : 0.99 Charge moyenne sur 15mn : 0.87



¿Cómo proteger una red, transmisión, datos?

Utilice un cortafuegos, un antivirus, haga una copia de seguridad de su sistema periódicamente, utilice un sistema de disco seguro para sus datos. Use protocolos seguros como HTTP, FTP, IMAP, POP, SMTP





Bloqueos de usuarios del sitio: información de cuenta / derechos de usuario / resumen

Comment-faire un réseau IPv6 ? Firewall ICMPv6

  • Comment-faire un réseau IPv6 ? Firewall ICMPv6
Firewall ICMPv6 - IPv6 : Pare-feu GNU/Linux

Información :

fechas
  • Publicar : : Friday 07 february 2020
  • Enmienda : Monday 07 september 2026

  • 7509 vistas

Cuota :

NdM : 2025/05/22 - Ajout d'informations
NdM : 2024/10/02 - Ajout de la fonction ipv6_ula() et nat_v6()
NdM : 2024/03/24 - Modification de la fonction ipv6_strongswan()
NdM : 2023/07/01 - Ajout de la fonction server_dns()

Je vais d'écrire comment-faire un pare-feu IPv6 - ICMPv6.

Installer les paquets qui sont des logiciels/commandes réseaux IPv6 en plus d'iptables.

Script avec 1 ligne

001apt install iptables iputils-ping dnsutils net-tools whois ipv6toolkit thc-ipv6 ipv6pref

Importance du pare-feu ICMPv6 :

Même si ICMPv6 est essentiel pour le bon fonctionnement d'IPv6 (découverte des voisins, configuration automatique, etc.), certains types de messages ICMPv6 peuvent être utilisés à des fins malveillantes (attaques par déni de service, reconnaissance du réseau).

Il est donc important de configurer un pare-feu pour contrôler le trafic ICMPv6 entrant et sortant ; Merci à Stéphane Huc pour sa documentation Firewall ICMPv6.

Outil principal : ip6tables

Sous Linux, le pare-feu pour IPv6 est géré par l'outil ip6tables, qui est l'équivalent d'iptables pour IPv4.

Types de messages ICMPv6 à considérer :

Messages essentiels à autoriser (en entrée et/ou en sortie) :

  • neighbor-solicitation et neighbor-advertisement (découverte des voisins)
  • router-solicitation et router-advertisement (configuration automatique)
  • packet-too-big (gestion de la MTU du chemin)
  • time-exceeded (indique que le paquet a dépassé sa durée de vie)
  • destination-unreachable (indique que la destination est inaccessible)

Messages potentiellement à limiter ou bloquer (en entrée) :

  • Certains types de messages echo-request (ping IPv6) peuvent être limités pour prévenir les attaques par inondation.
  • D'autres types de messages moins critiques peuvent être bloqués en fonction de vos besoins de sécurité.

Exemples de règles ip6tables :

Autoriser tous les messages ICMPv6 entrants et sortants (approche permissive, à adapter) :

Script avec 2 lignes

001$ ip6tables -A INPUT -p icmpv6 -j ACCEPT
002$ ip6tables -A OUTPUT -p icmpv6 -j ACCEPT

Bloquer tous les messages ICMPv6 entrants :

Script avec 1 ligne

001$ ip6tables -A INPUT -p icmpv6 -j DROP

Autoriser uniquement certains types de messages ICMPv6 entrants (approche plus restrictive) :

Script avec 9 lignes

001$ ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
002$ ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
003$ ip6tables -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
004$ ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
005$ ip6tables -A INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
006$ ip6tables -A INPUT -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
007$ ip6tables -A INPUT -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
008# Bloquer tout autre trafic ICMPv6 entrant
009$ ip6tables -A INPUT -p icmpv6 -j DROP

ICMPv6 (Internet Control Message Protocol version 6) fait partie intégrante d'IPv6 et joue un rôle plus crucial que ICMPv4 dans IPv4. Bien qu'il soit courant de bloquer de nombreux messages ICMPv4 dans les pare-feu, le faire sans discernement avec ICMPv6 peut gravement altérer les fonctionnalités du réseau IPv6.

Pourquoi ICMPv6 est essentiel :

Contrairement à IPv4, qui s'appuie sur ARP pour la résolution des adresses locales et sur des protocoles distincts pour d'autres fonctions, IPv6 utilise largement ICMPv6 pour :

Protocole de découverte de voisins (NDP Neighbor Discovery Protocol) :

Ce protocole est essentiel pour :

  • Sollicitation de routeur (RS Router Solicitation) (type 133) et Annonce de routeur (RA Router Advertisement) (type 134) : Utilisées par les hôtes pour trouver des routeurs et obtenir des informations de configuration réseau (préfixes, passerelle par défaut, serveurs DNS).
  • Sollicitation de voisin (NS Neighbor Solicitation) (Type 135) et Annonce de voisin (NA Neighbor Advertisement) (Type 136) : Utilisées pour la résolution d'adresses (comme ARP dans IPv4), la détection d'adresses dupliquées (DAD) et la détection d'inaccessibilité des voisins.
  • Découverte du MTU du chemin (PMTUD Path MTU Discovery) : S'appuie sur les messages « Paquet trop gros » (Type 2 Packet Too Big) pour empêcher la fragmentation et garantir un transfert de données efficace. Le blocage de ces messages peut entraîner des « trous noirs | black holes » où les connexions échouent en raison de paquets trop volumineux.
  • Rapport d'erreurs | Error Reporting : Les messages « Destination inaccessible » (Type 1 Destination Unreachable), « Délai dépassé » (Type 3 Time Exceeded) et « Problème de paramètre » (Type 4 Parameter Problem) sont essentiels pour le diagnostic et le dépannage du réseau.
  • Découverte d'écouteurs multicast (MLD Multicast Listener Discovery) : Utilisée pour gérer l'appartenance aux groupes multicast.

Pare-feu ICMPv6 - Bonnes pratiques :

L'approche générale du pare-feu ICMPv6 consiste à autoriser les messages nécessaires au fonctionnement du réseau tout en rejetant le trafic potentiellement malveillant ou inutile. La RFC 4890 (« Recommandations pour le filtrage des messages ICMPv6 dans les pare-feu ») fournit des instructions détaillées.

Voici une description des types ICMPv6 courants et de leur gestion par les pare-feu :

1. Messages à NE PAS IGNORER (essentiels pour les fonctionnalités de base) :

Ces messages sont généralement requis pour la connectivité IPv6 de base et doivent être autorisés :

  • Destination inaccessible (Type 1 Destination Unreachable) : Tous les codes. Essentiel pour signaler les problèmes d'accessibilité réseau.
  • Paquet trop volumineux (Type 2 Packet Too Big) : Tous les codes. Absolument essentiel pour la découverte du MTU du chemin. Son blocage entraînera des problèmes de connectivité.
  • Temps dépassé (Type 3 Time Exceeded) : Code 0 (Limite de sauts dépassée | Hop Limit Exceeded). Important pour diagnostiquer les boucles de routage et les hôtes inaccessibles. Le code 1 (Temps de réassemblage des fragments dépassé | Fragment Reassembly Time Exceeded) peut généralement être ignoré s'il n'est pas lié à une session active. Problème de paramètre (type 4 Parameter Problem) : Codes 1 (type d'en-tête suivant non reconnu Unrecognized Next Header Type) et 2 (option IPv6 non reconnue | Unrecognized IPv6 Option). Essentiels pour signaler les problèmes liés aux champs d'en-tête IPv6. Le code 0 (champ d'en-tête erroné | Erroneous Header Field) peut parfois être ignoré s'il n'est pas lié à une session active.
  • Sollicitation de voisin (type 135 Neighbor Solicitation) et Annonce de voisin (type 136 Neighbor Advertisement) : Essentielles au fonctionnement de la liaison locale, à la résolution d'adresses et à la détection des doublons. Elles doivent toujours être autorisées sur la liaison locale.
  • Sollicitation de routeur (type 133 Router Solicitation) et Annonce de routeur (type 134 Router Advertisement) : Nécessaires pour que les hôtes obtiennent la configuration réseau. Doivent être autorisées sur les interfaces client.

2. Messages qui ne devraient normalement pas être ignorés (important dans de nombreux scénarios) :

Il est généralement judicieux de les autoriser, bien que des politiques de sécurité spécifiques puissent en décider autrement.

  • Requête d'écho (type 128 Echo Request) et Réponse d'écho (type 129 Echo Reply) : (Ping). Souvent bloquées en IPv4 pour des raisons de sécurité (pour empêcher le mappage réseau), le vaste espace d'adressage d'IPv6 complique considérablement l'analyse. Leur blocage en IPv6 peut entraver le dépannage et les tests de connectivité. Il est souvent recommandé de les autoriser, éventuellement avec une limitation de débit, pour prévenir les attaques par déni de service.
  • Requête d'écouteur multicast (type 130 Multicast Listener Query), Rapport d'écouteur multicast (type 131 Multicast Listener Report), Écouteur multicast terminé (type 132 Multicast Listener Done), Rapport d'écouteur multicast v2 (type 143 Multicast Listener Report v2) : Requis pour la découverte d'écouteur multicast (MLD Multicast Listener Discovery), essentielle à l'efficacité de la distribution du trafic multicast.

Considérations clés concernant les pare-feu pour ICMPv6 :

  • Pare-feu à état (Stateful Firewalls) : La plupart des pare-feu modernes sont à état. Cela signifie qu'ils suivent les connexions actives et autorisent automatiquement les messages ICMPv6 liés à une session établie (par exemple, un message « Paquet trop volumineux (Packet Too Big) » pour une connexion TCP en cours). Cela simplifie grandement la création de règles.
  • Règles par interface/zone (Per-Interface/Zone Rules) : Les règles ICMPv6 doivent être appliquées contextuellement. Par exemple, les annonces de routeur sont attendues sur les réseaux clients internes, mais pas sur les interfaces WAN externes.
  • Limitation de débit (Rate Limiting) : Même pour les types ICMPv6 autorisés, comme les requêtes d’écho (Echo Request), envisagez de mettre en œuvre une limitation de débit afin de limiter les attaques par déni de service (DoS attacks) potentielles.
  • Journalisation (Logging) : Enregistrez les paquets ICMPv6 perdus, notamment lors du déploiement initial d’IPv6 ou du dépannage, afin d’identifier les erreurs de configuration ou les comportements réseau inattendus.
  • Conséquences pour la sécurité (Security Implications) : Si le blocage d’ICMPv6 peut perturber certaines fonctionnalités, autoriser sans discernement tout le trafic ICMPv6 peut exposer votre réseau à certains types d’attaques. Une approche équilibrée est cruciale.
  • Attaques par épuisement du cache voisin (Neighbor Cache Exhaustion Attacks) : Inonder/Flooder un réseau avec des messages NS/NA (Neighbor Solicitation/Neighbor Advertisement) peut épuiser le cache voisin des périphériques, entraînant un déni de service. Les pare-feu peuvent disposer de mécanismes de protection contre ce phénomène.
  • Inondation/usurpation d’adresses de routeur (Router Advertisement Flooding/Spoofing) : Des agents d’accès malveillants (Malicious RAs) peuvent rediriger le trafic ou annoncer des préfixes incorrects. Les pare-feu doivent être configurés pour prévenir de telles attaques, notamment aux frontières du réseau.

Exemples de règles de pare-feu (conceptuelles) :

  • Autoriser les protocoles ICMPv6 établis/liés (Allow established/related ICMPv6) : autoriser icmpv6 tout état établi, lié (state established,related).
  • Autoriser la sollicitation de routeur entrante (type 133) sur les interfaces internes : autoriser icmpv6 type 133 depuis le réseau interne vers tout.
  • Autoriser l'annonce de routeur sortante (type 134) depuis les routeurs internes : autoriser icmpv6 type 134 depuis le routeur interne vers tout.
  • Autoriser la sollicitation de voisin (type 135) et l'annonce de voisin (type 136) sur les liaisons locales : autoriser icmpv6 type 135, 136 pour n'importe quel lien local.
  • Autoriser les paquets trop volumineux (type 2) entrants et sortants.
  • Autoriser les demandes d'écho (type 128) et les réponses d'écho (type 129) (avec limitation de débit si nécessaire).
  • Refuser tous les autres messages ICMPv6 entrants par défaut.

En résumé, un pare-feu ICMPv6 efficace nécessite une compréhension fine de son rôle dans IPv6. L'approche « refuser tout », courante dans IPv4, n'est pas adaptée. Privilégiez plutôt l'autorisation explicite des messages ICMPv6 essentiels tout en maintenant une politique de refus par défaut pour tout le reste du trafic.


Exemple : Pare-feu Linux ip6tables

ip6tables vous offre un contrôle précis. Cet exemple définit les règles de base pour un réseau « interne » connecté à « Internet ».

Script avec 84 lignes

001#!/bin/bash
002
003# Define internal and external interfaces
004INT_IF="eth0"   # Your internal network interface
005EXT_IF="eth1"   # Your external (Internet-facing) interface
006
007# Clear existing rules (DANGEROUS on production systems without prior planning!)
008ip6tables -F
009ip6tables -X
010ip6tables -Z
011
012# Set default policies to DROP (secure by default)
013ip6tables -P INPUT DROP
014ip6tables -P FORWARD DROP
015ip6tables -P OUTPUT ACCEPT # Allow outbound traffic by default for now
016
017# --- Allow established and related connections ---
018# This is crucial for stateful firewalling.
019ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
020ip6tables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
021
022# --- Allow Loopback traffic ---
023ip6tables -A INPUT -i lo -j ACCEPT
024ip6tables -A OUTPUT -o lo -j ACCEPT
025
026# --- ICMPv6 Rules for INPUT Chain (Traffic to the Firewall itself) ---
027
028# Allow Router Advertisements (if this machine is a host that needs to receive them)
029ip6tables -A INPUT -i $EXT_IF -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
030ip6tables -A INPUT -i $INT_IF -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
031
032# Allow Neighbor Solicitation and Advertisement (essential for local link operation)
033# Limited to local link (fe80::/10) for security, though often allowed more broadly for simplicity.
034ip6tables -A INPUT -i $EXT_IF -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
035ip6tables -A INPUT -i $EXT_IF -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
036ip6tables -A INPUT -i $INT_IF -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
037ip6tables -A INPUT -i $INT_IF -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
038
039# Allow Echo Request (ping) to the firewall (optional, but good for troubleshooting)
040# You might want to rate-limit this on the external interface.
041ip6tables -A INPUT -i $EXT_IF -p icmpv6 --icmpv6-type echo-request -j ACCEPT
042ip6tables -A INPUT -i $INT_IF -p icmpv6 --icmpv6-type echo-request -j ACCEPT
043
044# Allow Router Solicitation (if this machine is a host that needs to send them)
045ip6tables -A INPUT -i $EXT_IF -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT # Unlikely from external
046ip6tables -A INPUT -i $INT_IF -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
047
048
049# --- ICMPv6 Rules for FORWARD Chain (Traffic passing through the Firewall) ---
050
051# Allow essential ICMPv6 error messages (Packet Too Big, Unreachable, Time Exceeded, Parameter Problem)
052# These are absolutely critical for IPv6 functionality and PMTUD.
053ip6tables -A FORWARD -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
054ip6tables -A FORWARD -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
055ip6tables -A FORWARD -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
056ip6tables -A FORWARD -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
057
058# Allow Router Solicitation/Advertisement for internal hosts passing through the firewall
059ip6tables -A FORWARD -i $INT_IF -o $EXT_IF -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
060ip6tables -A FORWARD -i $EXT_IF -o $INT_IF -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
061
062# Allow Neighbor Solicitation/Advertisement for traffic crossing segments (if applicable)
063# Typically handled by local link, but sometimes needed for proxy NDP etc.
064ip6tables -A FORWARD -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
065ip6tables -A FORWARD -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
066
067# Allow Echo Request/Reply for forwarded traffic (e.g., internal host pinging external)
068ip6tables -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
069ip6tables -A FORWARD -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
070
071
072# --- Log and drop anything else (for debugging dropped packets) ---
073# It's good practice to log before dropping during initial setup.
074# ip6tables -A INPUT -j LOG --log-prefix "Dropped INPUT: "
075# ip6tables -A FORWARD -j LOG --log-prefix "Dropped FORWARD: "
076# ip6tables -A OUTPUT -j LOG --log-prefix "Dropped OUTPUT: "
077
078# For OUTBOUND chain (usually ACCEPT by default for client machines, but can be restricted for servers)
079# If default OUTPUT policy is DROP, you'd need rules here for outgoing ICMPv6, e.g.:
080# ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
081# ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
082# ...and so on for necessary outgoing ICMPv6 types.
083
084echo "ip6tables rules applied."

Explication de l'exemple d'ip6tables ci-dessus :

  • Politique d'abandon par défaut (Default Drop Policy) : Définir les politiques par défaut sur DROP est l'approche la plus sécurisée, garantissant que tout ce qui n'est pas explicitement autorisé est bloqué.
  • RELATED,ESTABLISHED : Il s'agit de la pierre angulaire du pare-feu avec état. Elle autorise le trafic de retour pour les connexions provenant du pare-feu ou transitant par celui-ci, ainsi que le trafic associé, comme les messages « Packet Too Big ».
  • INPUT vs. FORWARD :
    • Les règles INPUT s'appliquent au trafic destiné au pare-feu lui-même.
    • Les règles FORWARD s'appliquent au trafic traversant le pare-feu (agissant comme un routeur).
  • Types ICMPv6 spécifiques : Chaque règle cible un type ICMPv6 spécifique à l'aide de l'option --icmpv6-type. Vous pouvez utiliser des noms (comme router-advertisement) ou des nombres (comme 134).
  • Spécificité de l'interface (Interface Specificity) : L'utilisation de -i (interface d'entrée) et de -o (interface de sortie) permet de préciser où les règles s'appliquent.
  • Journalisation (Logging) : Les règles LOG commentées sont très utiles pour déterminer les causes des abandons de trafic. Ces exemples illustrent l'équilibre critique requis pour un pare-feu ICMPv6 : autoriser ce qui est nécessaire au bon fonctionnement du réseau et refuser explicitement tout le reste. Consultez toujours la RFC 4890 pour des conseils complets et adaptez ces exemples à la topologie de votre réseau et à vos exigences de sécurité.


Mon Pare-feu Linux firewall-ipv6.sh :

Je me suis concocté un script firewall-ipv6.sh en quelques lignes, avec des fonctions complémentaires :

J'ai ajouté une fonction icmpv6_limit() pour la protection à 1 ping/seconde par adresse IPv6::/128 (--icmpv6-type 128/0 que Stéphane Bortzmeyer nous expliquer (ici et ) :) Au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion de PING, et cela par une seule IPv6 source (--hashlimit-srcmask 128).

J'ai ajouté une fonction pour filtrer les paquets ICMPv6 depuis IPtables pour les requetes des routeurs : c'est la fonction icmpv6_huc() ; j'ai pris comme exemple la page Firewall ICMPv6 (modifiée le 13 Juillet 2023) très instructive de Stéphane Huc.

NdMoi-même : Il faut lancer/executer la fonction en dessous de (pour qu'elle soit lancer après) la fonction icmpv6_huc pour que la règle ip6tables -I INPUT -p icmpv6 ... -j DROP soit au dessus de la chaîne aICMPs ;)

NdMoi-même 20250522 : J'ai inverssé l'ordre de certaines fonctions et il faut que je tate 2, 3 choses supplémentaires ; je reviens vite ajouter/modifier cette page ;)

Script avec 811 lignes

001#!/bin/bash
002### BEGIN INIT INFO
003# Provides:          firewall-ipv6
004# Required-Start:    $remote_fs $syslog
005# Required-Stop:     $remote_fs $syslog
006# Default-Start:     2 3 4 5
007# Default-Stop:      0 1 6
008# Short-Description: Start daemon at boot time
009# Description:       Enable service provided by daemon.
010### END INIT INFO
011
012# --------------------------------------------------------------------------
013# Author : O.Romain.Jaillet-ramey (orj@lab3w.fr)
014# Description : Firewall IPv6 ICMPv6 - ULA / MULTICAST / SWAN
015# Date Created : 2020-02-07
016# Date Modified : 2026-08-24
017# ------------------------------
018
019#####-------------------------- VARIABLES ----------------------------######
020
021# ip6tables command path
022
023IP6TABLE="/sbin/ip6tables"
024
025# Interface network
026
027LOOP_IF="lo"
028
029NET_IF="eth0"
030VPN_IF="eth0"
031
032INCUS_IF="incusbr0"
033LXC_IF="lxcbr0"
034
035# Addresses IPv6
036
037NET_IP="2a02:4780:28:5295:0000:0000:0000:0001"
038VPN_IP="fee1::1"
039
040INCUS_IP="fc00:4780:28:5295::fd"
041LXC_IP="fc00::10:0:3:fd"
042
043# Networks IPv6
044
045LAN_IPs="fc01::10:0:0:0/80"
046SLAN_IPs="fee1::/16"
047
048# SSH service port
049
050port_ssh="22"
051
052# TCP and UDP ports to open
053
054TCP_OK="514 4949 5201" # SYSLOG MUNIN IPERF
055UDP_OK="123 161 514 546 547" # NTP SNMP SYSLOG DHCP
056
057# IPs that normally have SSH access to the server
058
059SSH_OK="fc00::/7 fec0::/10"
060
061# IPs that normally have RSYNC access to the server
062
063RSYNC_OK="fc00::/7 fec0::/10"
064
065# ------------------------------
066
067WAN_ADDR="${NET_IP} ${VPN_IP}"
068
069#####-------------------------- VARIABLES ----------------------------######
070
071
072#####-------------------------- FONCTIONS ----------------------------######
073
074#####
075# Set sysctl parameters
076#####
077function kernel()
078{
079        # Don't accept source routed packets.
080        /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_source_route
081
082         # Disable ICMP redirect acceptance.
083        /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
084
085        # Enable the following lines only if a router!
086        # Enabling IPv6 forwarding disables route-advertisement reception.
087        # A static gateway will need to be assigned.
088        #
089        echo "1" >/proc/sys/net/ipv6/conf/all/forwarding
090        #
091       #End router forwarding rules
092
093        echo "   "+ KERNEL : [OK]
094}
095
096#####
097# We log the rest of the communications
098#####
099
100function logging()
101{
102        # Log
103        $IP6TABLE -A INPUT -j LOG --log-prefix "INPUT-v6:"
104        $IP6TABLE -A FORWARD -j LOG  --log-prefix "FORWARD-v6:"
105        $IP6TABLE -A OUTPUT -j LOG  --log-prefix "OUTPUT-v6:"
106
107        echo "   "+ LOGGING  : [OK]
108}
109
110#####
111# We accept everything from and for the local "lo"
112#####
113
114function loopback()
115{
116        $IP6TABLE -A INPUT  -i lo -j ACCEPT
117        $IP6TABLE -A FORWARD  -i lo -j ACCEPT
118        $IP6TABLE -A FORWARD  -o lo -j ACCEPT
119        $IP6TABLE -A OUTPUT -o lo -j ACCEPT
120
121        echo "   "+ LOOPBACK : [OK]
122}
123
124#####
125# We set the general rules (DROP||ACCEPT)
126#####
127
128function policy()
129{
130        $IP6TABLE -P INPUT $1
131        $IP6TABLE -P FORWARD $1
132        $IP6TABLE -P OUTPUT $1
133
134        echo "   "+ POLICY $1 : [OK]
135}
136
137#####
138# Set the RT (routage) rules (DROP||ACCEPT)
139#####
140
141function policy_rt()
142{
143        # Filter all packets that have RH0 headers:
144        ip6tables -A INPUT -m rt --rt-type 0 --rt-segsleft 0 -j $1
145        ip6tables -A FORWARD -m rt --rt-type 0 --rt-segsleft 0 -j $1
146        ip6tables -A OUTPUT -m rt --rt-type 0 --rt-segsleft 0 -j $1
147
148        echo "   "+ POLICY RT $1 : [OK]
149}
150
151
152#####
153# Block SYN-ACK type attacks
154#####
155
156function synflood()
157{
158        ## SYN-FLOODING PROTECTION
159        $IP6TABLE -N Syn-FLOOD
160        # tcp flags:0x17/0x02
161        $IP6TABLE -A INPUT -i $NET_IF -p tcp --syn -j Syn-FLOOD
162        $IP6TABLE -A Syn-FLOOD -m limit --limit 1/s --limit-burst 4 -j RETURN
163        $IP6TABLE -A Syn-FLOOD -j DROP
164        ## Make sure NEW tcp connections are SYN packets
165        # tcp flags:!0x17/0x02 state NEW
166        $IP6TABLE -I INPUT -i $NET_IF -p tcp ! --syn -m state --state NEW -j DROP
167        ########
168
169        ########
170        # ip6tables v1.8.11 (nf_tables): `-f' is not supported in IPv6, use -m frag instead
171#        $IP6TABLE -A INPUT -f -j DROP
172        $IP6TABLE -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
173        $IP6TABLE -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
174
175        echo "   "+ SYNFLOOD PROTECTION : [OK]
176}
177
178#####
179# Accepts responses to requests sent from itself.
180#####
181
182function generique()
183{
184        # Allow established, related packets back in
185        $IP6TABLE -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
186        $IP6TABLE -A OUTPUT -j ACCEPT
187
188        echo "   "+ GENERIQUE : [OK]
189
190}
191
192#####
193# Set the rules for IPv6 addresses
194#####
195
196function ipv6_link_local()
197{
198        echo "   |";
199        echo "   + IPv6 - Addrs Link-Local Unicast -----------------------";
200
201        # Allow Link-Local addresses
202        # network range : fe80:0000:0000:0000:0000:0000:0000:0000-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
203
204        echo "   |\";
205        $IP6TABLE -A INPUT -s fe80::/10 -j ACCEPT
206        $IP6TABLE -A FORWARD -s fe80::/10 -d fe80::/10 -j ACCEPT
207        $IP6TABLE -A OUTPUT -d fe80::/10 -j ACCEPT
208        echo "   | +--→ "fe80::/10 : ACCEPT;
209        echo "   | |";
210        echo "   | "+ IPv6 - Addrs Link-Local : [OK]
211
212}
213
214#####
215# Set rules for Multicast
216#####
217
218function ipv6_multicast()
219{
220        echo "   |";
221        echo "   + IPv6 - Addrs Multicast -----------------------";
222
223        # Allow multicast
224        # network range : ff00:0000:0000:0000:0000:0000:0000:0000-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
225
226        echo "   |\";
227        $IP6TABLE -A INPUT -d ff00::/8 -j ACCEPT
228        $IP6TABLE -A FORWARD -s ff00::/8 -d ff00::/8 -j ACCEPT
229        $IP6TABLE -A OUTPUT -d ff00::/8 -j ACCEPT
230
231        echo "   | +--→ "ff00::/8 : ACCEPT;
232        echo "   | |";
233        echo "   |" + IPv6 - Addrs Multicast : [OK]
234}
235
236#####
237# Set the rules for (ULA) Local IPv6 addresses (DROP||ACCEPT)
238#####
239
240function ipv6_ula()
241{
242        echo "   |";
243        echo "   + IPv6 - Addrs Unique Locale Area -----------------------";
244
245        # Allow Link-Local addresses
246        # network range : fe80:0000:0000:0000:0000:0000:0000:0000-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
247
248        echo "   |\";
249        $IP6TABLE -A INPUT -s fc00::/7 -j $1
250        $IP6TABLE -A FORWARD -s fc00::/7 -d fc00::/7 -j $1
251        $IP6TABLE -A OUTPUT -d fc00::/7 -j DROP
252
253        echo "   | +--→ "fc00::/7 : DROP;
254        echo "   | |";
255        echo "   |" + IPv6 - Addrs Unique Locale Area : [OK]
256
257}
258
259#####
260# Set rules for (SLA) secure IPv6 addresses  (DROP||ACCEPT)
261#####
262
263function ipv6_strongswan()
264{
265        # Default ------------------
266        echo "   |";
267        echo "   + IPv6 - Addrs Site-Local Secure Area Network -------------------------";
268
269        # Allow  Secure Area Network addresses
270        # network range : fec0:0000:0000:0000:0000:0000:0000:0000-feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
271
272        echo "   |\";
273        $IP6TABLE -A INPUT -s fec0::/10 -j $1
274        $IP6TABLE -A FORWARD -s fec0::/10 -d fec0::/10 -j $1
275        $IP6TABLE -A OUTPUT -d fec0::/10 -j $1
276        echo "   | +--→ "fec0::/10 : DROP;
277        echo "   | |";
278        echo "   | "+ IPv6 - Addrs Secure Area Network : [OK]
279
280        # Add ------------------
281
282        echo "   |";
283        # Allow  Forwarding SLAN (fec0::/10) <> ULA (fc00::/7)
284        # network range : fc00:0000:0000:0000:0000:0000:0000:0000-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
285
286        echo "   + IPv6 - Forwarding Addrs SWAN 2 ULA Networks -------------------------";
287        echo "   |\";
288        $IP6TABLE -A FORWARD -s fec0::/10 -d fc00::/7 -j ACCEPT
289        $IP6TABLE -A FORWARD -d fec0::/10 -s fc00::/7 -j ACCEPT
290
291#       $IP6TABLE -I FORWARD -s fec0::/10 -d fc00::/7 -p icmpv6 -j ACCEPT
292#       $IP6TABLE -I FORWARD -d fec0::/10 -s fc00::/7 -p icmpv6 -j ACCEPT
293
294        echo "   | +--→ fec0::/10 <←> fc00::/7 : ACCEPT";
295        echo "   | |";
296        echo "   | "+ IPv6 - Forwarding Addrs SWAN 2 ULA Networks : [OK]
297        echo "   |";
298
299}
300
301#####
302# Set rules for your Local IPv6 addresses (ULA)
303#####
304
305function ipv6_lan()
306{
307        echo "   |";
308        echo "   + IPv6 - Addrs Unique Locale Area - On Site -----------------------";
309
310        # Allow Link-Local addresses
311        # network range : fe80:0000:0000:0000:0000:0000:0000:0000-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
312
313        echo "   |\";
314        for ip in $LAN_IPs ;
315        do
316
317        $IP6TABLE -A INPUT -s $ip -j ACCEPT
318        $IP6TABLE -A FORWARD -s $ip -d fc00::/7 -j ACCEPT
319        $IP6TABLE -A FORWARD -d $ip -s fc00::/7 -j ACCEPT
320
321        $IP6TABLE -A FORWARD -s $ip -d fec0::/10 -j ACCEPT
322        $IP6TABLE -A FORWARD -d $ip -s fec0::/10 -j ACCEPT
323
324        $IP6TABLE -A OUTPUT -d $ip -j ACCEPT
325
326        echo "   | +--→ "$ip : ACCEPT;
327
328        done
329
330        echo "   | |";
331        echo "   |" + IPv6 - Addrs Unique Locale Area - On Site : [OK]
332
333}
334
335#####
336# FORWARDING between cards (vmbr0 ←> vmbr1)
337#####
338
339function ipv6_forwarding()
340{
341        # Allow forwarding
342#        $IP6TABLE -A FORWARD -m state --state NEW -i $VM1_IF -o $WAN_IF -s $SUBNETPREFIX -j ACCEPT
343#        $IP6TABLE -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
344
345        $IP6TABLE -A FORWARD -i $WAN_IF$VM1_IF -o $VM1_IF -j ACCEPT
346        $IP6TABLE -A FORWARD -o $WAN_IF -i $VM1_IF -j ACCEPT
347
348        echo "   "+ IPv6 - FORWARDING : [OK]
349}
350
351#####
352# IPV6 NAT : Allow IPv6 ULAs to use the IPv6 GUA address for browsing (hides IPv6 ULAs)
353#####
354
355function ipv6_nat()
356{
357        # NET FOR LXC EXCEPT TO THE ULA NETWORK# NET FOR LXC EXCEPT TO THE ULA NETWORK
358        $IP6TABLE -t nat -A POSTROUTING -o $WAN_IF -s $CT_WEB ! -d fc00::/7 -j MASQUERADE
359
360        echo "   | |";
361	echo "   |" + NAT V6 : [OK]
362}
363
364#####
365# Set rules for your secure IPv6 addresses (SLA)
366#####
367
368function ipv6_slan()
369{
370        echo "   |";
371        echo "   + IPv6 - Addrs Unique Locale Area - On Secure Sites -----------------------";
372
373        # Allow Link-Local addresses
374        # network range : fe80:0000:0000:0000:0000:0000:0000:0000-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
375
376        echo "   |\";
377        for ip in $SLAN_IPs ;
378        do
379
380        $IP6TABLE -A INPUT -s $ip -j ACCEPT
381        $IP6TABLE -A FORWARD -s $ip -d fc00::/7 -j ACCEPT
382        $IP6TABLE -A FORWARD -d $ip -s fc00::/7 -j ACCEPT
383
384        $IP6TABLE -A FORWARD -s $ip -d fec0::/10 -j ACCEPT
385        $IP6TABLE -A FORWARD -d $ip -s fec0::/10 -j ACCEPT
386
387        $IP6TABLE -A OUTPUT -d $ip -j ACCEPT
388
389        echo "   | +--→ "$ip : ACCEPT;
390
391        done
392
393        echo "   | |";
394        echo "   |" + IPv6 - Addrs Unique Locale Area - On Secure Sites : [OK]
395
396}
397
398
399#####
400# Global Unicast IPv6 addresses are accepted; they can be audited.
401#####
402
403function ipv6_addrs()
404{
405        echo "   |";
406        echo "   + IPv6 - Addrs WAN ----------------------------------------------------";
407        echo "   |\";
408
409        for ip in ${WAN_ADDR};
410        do
411                # Allow established, related packets back in
412#                $IP6TABLE -A INPUT  -d $ip -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
413                $IP6TABLE -A INPUT  -d $ip -j ACCEPT
414                # Allow anything out on the internet
415                $IP6TABLE -A OUTPUT -s $ip -j ACCEPT
416
417                echo "   | +-→ "${ip} : ACCEPT;
418        done
419        echo "   | |";
420        echo "   | "+ IPv6 - Addrs WAN : [OK]
421        echo "   |";
422}
423
424
425####
426# Stéphane Bortzmeyer's rule: DROP ICMP LIMIT 1/sec per IPv6 /128
427# To be inserted after the aICMPv6 chain (so it takes precedence via -I)
428####
429
430function icmpv6_limit()
431{
432
433        $IP6TABLE -I INPUT -p icmpv6 --icmpv6-type echo-request 
434                -m hashlimit --hashlimit-name ICMP 
435                --hashlimit-above 1/second --hashlimit-burst 1 
436                --hashlimit-mode srcip 
437                --hashlimit-srcmask 128 -j DROP
438
439        echo "   "+ ICMPV6 - LIMIT 1/second DROP : [OK]
440}
441
442#####
443# Script to capture ICMPv6 packets by type, by Stephane Huc
444#####
445
446function icmpv6_huc()
447{
448        # Allow dedicated  ICMPv6 packettypes, do this in an extra chain because we need it everywhere
449        $IP6TABLE -N aICMPs
450        # Destination unreachable
451        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 1 -j ACCEPT # destination-unreachable; Must Not Be Dropped
452        # Packet too big
453        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 2/0 -j ACCEPT # packet too big; Must Not Be Dropped
454        # Time exceeded
455        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/0 -j ACCEPT # time exceeded
456        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/1 -j ACCEPT # time exceeded
457        # Parameter problem
458        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/0 -j ACCEPT # parameter pb: Erroneous header field encountered
459        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/1 -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered
460        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/2 -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered
461
462        # Echo Request (protect against flood)
463#       $IP6TABLE -I aICMPs -p icmpv6 --icmpv6-type 128/0 -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 128 -j DROP
464        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT
465#        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT # ping tool: echo request message
466        # Echo Reply
467#        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 129/0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT # ping tool: echo reply message
468        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 129/0 -j ACCEPT
469        echo "   "+ ICMPV6 - DEFAULT : [OK]
470
471        # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
472        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 130/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
473        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 131/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
474        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 132/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
475        echo "   "+ ICMPV6 - LINK-LOCAL : [OK]
476
477        # address configuration and routeur selection mssg (received with hop limit = 255)
478        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 133/0 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation
479        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 134/0 -s fe80::/64 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement
480        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 135/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation
481        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 136/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement
482
483        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 137/0 -j DROP # Redirect Message
484        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 138/0 -j DROP # Router Renumbering (Rechargement du routeur)
485
486        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 139/0 -j DROP # ICMP Node Information Query
487        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 140/0 -j DROP # ICMP Node Information Response
488
489        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Solicitation Message
490        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Advertisement Message
491        echo "   "+ ICMPV6 - ADD CONF '&' ROUTEUR SELECTION : [OK]
492
493        # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
494        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 143 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
495        # needed for mobylity
496        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 144/0 -j DROP
497        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 145/0 -j DROP
498        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 146/0 -j DROP
499        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 147 -j DROP
500        # SEND certificate path notification mssg (received with hop limit = 255)
501        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT # Certification Path Solicitation Message
502        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT # Certification Path Advertisement Message
503        # multicast routeur discovery mssg (need link-local src address and hop limit = 1)
504        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 151 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
505        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 152 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
506        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 153 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
507        echo "   "+ ICMPV6 - MULTICAST ROUTEUR DISCOVERY : [OK]
508        #
509        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation
510        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation
511        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 255 -j DROP # expansion error messages ICMPv6
512        echo "   "+ ICMPV6 - EXPERIMENTATION : [OK]
513
514        #
515        # Only the ROUTEUR is allowed to ping us (read FAQ this is a requirement)
516
517#        $IP6TABLE -A INPUT -p icmpv6 -m limit --limit 5/s --limit-burst 4 -j aICMPs
518#        $IP6TABLE -A OUTPUT -m state ! --state INVALID -j aICMPs
519#       $IP6TABLE -A FORWARD -p icmpv6 -j ACCEPT
520
521
522        $IP6TABLE -I INPUT -p icmpv6 -j aICMPs
523        $IP6TABLE -I FORWARD -p icmpv6 -j aICMPs
524        $IP6TABLE -I OUTPUT -p icmpv6 -j aICMPs
525
526        echo "   "+ ICMPV6 - INLIMIT + OUTPUT : [OK]
527}
528
529#####
530# Enable SSH access for specific IPs + limit access to 3 hits per minute/IP
531#####
532
533function ssh_ok()
534{
535        for host in $SSH_OK
536        do
537                $IP6TABLE -A INPUT -s $host -p tcp --dport $port_ssh -j ACCEPT
538                $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_ssh -j ACCEPT
539        done
540
541        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m state --state NEW -m recent --set --name SSH
542        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP
543        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -j ACCEPT
544
545        echo "   "+ SSH : [OK]
546}
547
548#####
549# Enabling RSYNC access for specific IPs
550#####
551
552function rsync_ok()
553{
554        for host in $RSYNC_OK
555        do
556        $IP6TABLE -A INPUT -s $host -p tcp --dport 873 -j ACCEPT
557        $IP6TABLE -A INPUT -s $host -p udp --dport 873 -j ACCEPT
558        $IP6TABLE -A OUTPUT -d $host -p tcp --sport 873 -j ACCEPT
559        $IP6TABLE -A OUTPUT -d $host -p udp --sport 873 -j ACCEPT
560        done
561
562        echo "   "+ RSYNC : [OK]
563}
564
565#####
566# Opening TCP and UDP ports
567#####
568
569function tcp_ok()
570{
571        for port in $TCP_OK
572        do
573        $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
574        $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
575        done
576
577        echo "   "+ TCP : [OK]
578}
579
580function udp_ok()
581{
582        for port in $UDP_OK
583        do
584        $IP6TABLE -A INPUT -p udp --dport $port -j ACCEPT
585        $IP6TABLE -A OUTPUT -p udp --sport $port -j ACCEPT
586        done
587
588        echo "   "+ UDP : [OK]
589}
590
591
592#####
593# Open HTTP(S) access to the LAN & NET interface
594#####
595
596function server_http()
597{
598#       CT_WEB="fc01::10:10:0:10"
599
600        HTTP_PORTS="80 443"
601        for port in $HTTP_PORTS
602        do
603                # service Web local and/or another machine
604#               $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
605                $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT
606                $IP6TABLE -A INPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --dport $port -j ACCEPT
607
608                $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT
609#               $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
610                # Web service is on another machine, a container or a local machine
611#               $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p tcp --dport $port -j DNAT --to-destination [$CT_WEB]:$port
612        done
613        echo "   "+ APACHE : [OK]
614}
615
616#####
617# Open DNS(S) access to the NET interface
618#####
619
620function server_dns()
621{
622        DNS_PORTS_TCP="53"
623        
624	for port in $DNS_PORTS_TCP
625        do
626                # service Bind9 local and/or another machine
627                $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT
628#               $IP6TABLE -A INPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --dport $port -j ACCEPT
629                $IP6TABLE -A INPUT -i $WAN_IF -p tcp --dport $port -m hashlimit --hashlimit-name NAMED --hashlimit-above 20/second --hashlimit-mode srcip --hashlimit-burst 20 --hashlimit-srcmask 128 -j DROP
630                $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT
631                $IP6TABLE -A OUTPUT -p tcp --sport $port -j LOG  --log-prefix "OUTPUT-T-NAMED:"
632        done
633
634        DNS_PORTS_UDP="53"
635
636        for port in $DNS_PORTS_UDP
637        do
638                # service Bind9 local and/or another machine
639                $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m state --state NEW -m recent --set --name NAMED
640#               $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m state --state ESTABLISHED,RELATED -m recent --set --name NAMED
641                $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m recent --update --seconds 60 --hitcount 10 --rttl --name NAMED -j DROP
642                $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m udp -p udp --sport $port -j ACCEPT
643                $IP6TABLE -A OUTPUT -p udp --sport $port -j LOG  --log-prefix "OUTPUT-U-NAMED:"
644        done
645
646        echo "   "+ DNS : [OK]
647}
648
649#####
650# DROP PORTs
651#####
652
653function ports_drop()
654{
655        network="::0/0"
656
657        PORTS_DROP=$1
658
659        for port in $PORTS_DROP
660        do
661        $IP6TABLE -A INPUT -s $network -p tcp --dport $port -j DROP
662        $IP6TABLE -A INPUT -s $network -p udp --dport $port -j DROP
663        $IP6TABLE -A OUTPUT -d $network -p tcp --sport $port -j DROP
664        $IP6TABLE -A OUTPUT -d $network -p udp --sport $port -j DROP
665        done
666        echo "   "+ DROP PROTOCOL UDP/TCP : $PORTS_DROP [OK]
667}
668
669function ports_blacklist()
670{
671#        $IP6TABLE -X black
672        $IP6TABLE -N BLACK
673        $IP6TABLE -A BLACK   -m recent --set --name BLACKLIST -j DROP
674
675        # UDP/TCP (port/47)
676#        $IP6TABLE -X CHECK_GRE
677        $IP6TABLE -N CHECK_GRE
678        $IP6TABLE -I CHECK_GRE 1   -m recent --update --name BLACKLIST --reap --seconds 86400 -j DROP
679
680        $IP6TABLE -I CHECK_GRE 2   -m recent --update --name TIMER --reap --seconds 60 --hitcount 3 -j BLACK
681        $IP6TABLE -I CHECK_GRE 3   -m recent --set --name TIMER -j ACCEPT
682
683        # UDP/TCP (port/47)
684        $IP6TABLE -A INPUT -p TCP --dport 47 -m state --state NEW -j CHECK_GRE
685        $IP6TABLE -A INPUT -p UDP --dport 47 -m state --state NEW -j CHECK_GRE
686
687        echo "   "+ BLACKLIST PROTOCOL : [OK]
688}
689
690
691#####
692# Checking protocol for UPDATE
693#####
694
695function blacklist_chain()
696{
697
698#        $IP6TABLE -X BLACK
699        $IP6TABLE -N BLACK
700        $IP6TABLE -A BLACK   -m recent --set --name BLACKLIST -j DROP
701
702        echo "   "+ BLACK CHAIN : [OK]
703}
704
705function proto_check()
706{
707        CHAIN=$1
708
709        # UDP/TCP (port/47)
710#        $IP6TABLE -X CHECK_GRE
711        $IP6TABLE -N $CHAIN
712        $IP6TABLE -I $CHAIN 1   -m recent --update --name BLACKLIST --reap --seconds 86400 -j DROP
713
714        $IP6TABLE -I $CHAIN 2   -m recent --update --name TIMER --reap --seconds 60 --hitcount 3 -j BLACK
715        $IP6TABLE -I $CHAIN 3   -m recent --set --name TIMER -j ACCEPT
716
717        echo "   "+ PROTOCOL VERFIF : $CHAIN [OK]
718}
719
720function checking_gre()
721{
722        network="::0/0"
723
724        # UDP/TCP (port/47)
725        $IP6TABLE -A INPUT -p TCP --dport 47 -m state --state NEW -j CHECK_GRE
726        $IP6TABLE -A INPUT -p UDP --dport 47 -m state --state NEW -j CHECK_GRE
727
728        $IP6TABLE -A OUTPUT -p TCP --sport 47 -m state --state NEW -j CHECK_GRE
729        $IP6TABLE -A OUTPUT -p UDP --sport 47 -m state --state NEW -j CHECK_GRE
730
731        echo "   "+ BLACKLIST PROTOCOL GRE : [OK]
732}
733
734#####-------------------------- FONCTIONS ----------------------------######
735
736
737
738
739
740#####-------------------------- START / STOP ----------------------------######
741
742case "$1" in
743
744start|restart)
745$0 stop
746echo "$0 Starting"
747        kernel
748        loopback
749
750        policy_rt DROP
751
752        synflood
753
754        blacklist_chain
755        proto_check CHECK_GRE
756        checking_gre
757
758        ports_drop 81
759
760        icmpv6_huc
761        icmpv6_limit
762
763        ipv6_multicast
764
765        ssh_ok
766        rsync_ok
767        tcp_ok
768        udp_ok
769
770        server_http
771        vserver_dns
772
773        ipv6_lan
774        ipv6_slan
775
776#        ipv6_forwarding
777#        ipv6_nat
778
779        ipv6_strongswan DROP
780        ipv6_ula DROP
781
782        ipv6_addrs
783
784        generique
785
786        logging
787
788        policy DROP
789;;
790
791stop)
792        echo "$0 Stop"
793        $IP6TABLE -F
794        $IP6TABLE -t nat -F
795        $IP6TABLE -Z
796        $IP6TABLE -X
797        policy ACCEPT
798        ;;
799status)
800        echo "$0 Status"
801        $IP6TABLE -L -vn
802        $IP6TABLE -L -vn -t nat
803        ;;
804
805*)
806echo "usage : $0 (status|start|stop|restart)"
807;;
808
809esac
810
811#####-------------------------- START / STOP ----------------------------######

Pour le rendre executable pour l'utilisateur : chmod u+x firewall-ipv6.sh :

Pour executer le script : sh firewall-ipv6.sh (status|start|stop|restart)

Activer le firewall au démarage et à l'arrêt de la machine : Runlevels de l'init(ialisation) # Default-Start : 2 3 4 5 # Default-Stop : 0 1 6.

Script avec 2 lignes

001ln -s /root/firewall-ipv6.sh /etc/init.d/firewall-ipv6
002update-rc.d firewall-ipv6 defaults

Puis aprés vous pouvez lancer le script en executant /etc/init.d/firewall-ipv6 (status|start|stop|restart)

Sauvegarder/restaurer votre configuration firewall.

J'ajoute 2 commandes qui peuvent être utile :) et qui peuvent servir pour NuFW.

Sauvegarder votre configuration firewall actuelle :

Script avec 1 ligne

001ip6tables-save > /etc/firewall-ipv6.conf
Restaurer votre configuration firewall :

Script avec 1 ligne

001ip6tables-restore < /etc/firewall-ipv6.conf
Visualiser votre firewall INPUT (entrée), FORWARD (transfert entre vos cartes réseaux), OUTPUT (sortie) et celle dédiée aux paquets ICMPs que nous avons créé :

Chain INPUT, FORWARD, OUTPUT, aICMPs.

Script avec 5 lignes

001ip6tables -L -vn
002ip6tables -L INPUT -vn
003ip6tables -L FORWARD -vn
004ip6tables -L OUTPUT -vn
005ip6tables -L aICMPs -vn

La table NAT (Network Translation Address) - çà existe ;) ^^ :

Script avec 1 ligne

001ip6tables -L -vn -t nat

Voilà un exemple de My Firewall IPv6 ICMPv6 - ULA / MULTICAST / SWAN ; Si cela peut vous aider de mieux comprendre la syntaxe ip6tables et à être un "minimum" sécurisé.

Cordialement,
Romain



<< Comment-faire un réseau IPv6 - part2

Virtual Private Network (VPN) >>


Outils IPv6 :

Liens WikipediA : The Free Encyclopedia

Liens InterNetworks :

Liens Firewall IPv6 : Internet Protocol V6

A lire sur le blog de Stéphane Bortzmeyer :

Liens ZW3B.IPv6 : Internet Protocol V6

Liens qui peuvent aussi vous intéresser :



Keywords :

IP❤6 جدار الحماية IPv6 جدار حماية ICMPv6 Cortafuegos ICMPv6 جدار الحماية ICMPv6 linux لينكس Брандмауер ICMPv6 брандмауер IPv6 брандмауер ICMPv6 ファイアウォール IPv6 ファイアウォール ファイアウォール ICMPv6 防火牆 IPv6 防火牆 Linux 防火牆 blacklist stateful


Autor.a de la página

O.Romain.Jaillet-ramey

O.Romain.Jaillet-ramey

  • Primer nombre : Olivier Romain Luc
  • Apellido : : Jaillet-ramey
  • Llegó a la tuesday 19 october 1976 (1976/10/19 00:00)
    49 years actividad !

ZW3B's LAB3W The Web radios 🎶

Date : 2026/06/15 12:04:36 to 2026/06/19 12:04:36

Traducir esta página con Google







Load page: 3,1170008182526