pub YouXOR

SSH, OpenSSL, Iptables, RSYNC, RAID, VPN

 Charge moyenne sur 1mn : 0.29 Charge moyenne sur 5mn : 0.69 Charge moyenne sur 15mn : 0.89



How to protect a network, transmission, data?

Use a firewall, an anti-virus, back up your system regularly, use a secure disk system for your data. Use secure protocols such as HTTPs, FTPs, IMAPs, POPs, SMTPs





Site user blocks : Account info / user rights / summary

Comment-faire un réseau IPv6 ? Firewall ICMPv6

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

Informations :

Dates
  • Publish : : Friday 07 february 2020
  • Modification : Thursday 22 may 2025

  • 5484 views

Share :

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 539 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#####-------------------------- VARIABLES ----------------------------######
012
013# iptables command path
014IP6TABLE="/sbin/ip6tables"
015
016# network interface
017LOOP_IF="lo"
018
019WAN_IF="vmbr0"
020VM1_IF="vmbr1"
021
022# Network and IPs
023#SUBNETPREFIX="2607:5300:0060:9389::/64"
024
025#WAN_IP="2607:5300:60:9389::1"
026
027#CT_DNS="fc01::10:10:0:1"
028#CT_WEB="fc01::10:10:0:10"
029
030# port du service ssh
031port_ssh="22"
032
033# rsync service port
034port_rsync="873"
035
036# tcp and udp ports to open
037TCP_OK="514 4949" # SYSLOG MUNIN
038UDP_OK="123 161 514 547" # NTP SNMP SYSLOG DHCP
039
040# IP addresses that have ssh access to the server
041SSH_OK="2001:0bc8:25bb:ff00::/56 fc00::/7 fec0::/10"
042
043# ip accessing the server in rsync
044RSYNC_OK="2001:0bc8:25bb:ff00::/56 fc00::/7 fec0::/10"
045
046#####
047# Set the sysctl
048#####
049function kernel()
050{
051        # Don't accept source routed packets.
052        /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_source_route
053
054         # Disable ICMP redirect acceptance.
055        /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
056
057        # Enable the following lines only if a router!
058        # Enabling IPv6 forwarding disables route-advertisement reception - accept_ra=0|2
059        # A static gateway will need to be assigned.
060        #
061        echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
062        #
063       #End router forwarding rules
064
065        echo "   "+ KERNEL : [OK]
066}
067
068#####
069# Accept everything from and to the local "lo"
070#####
071
072function loopback()
073{
074        $IP6TABLE -A INPUT  -i lo -j ACCEPT
075        $IP6TABLE -A FORWARD  -i lo -j ACCEPT
076        $IP6TABLE -A FORWARD  -o lo -j ACCEPT
077        $IP6TABLE -A OUTPUT -o lo -j ACCEPT
078
079        echo "   "+ LOOPBACK : [OK]
080}
081
082#####
083# Setting the general rules (DROP||ACCEPT)
084#####
085
086function policy()
087{
088        $IP6TABLE -P INPUT $1
089        $IP6TABLE -P FORWARD $1
090        $IP6TABLE -P OUTPUT $1
091
092        echo "   "+ POLICY $1 : [OK]
093}
094
095#####
096# ACCEPT THE ESTABLISHED, RELATED REQUESTS
097#####
098
099function generique()
100{
101        # Allow anything out on the internet
102        $IP6TABLE -A OUTPUT -o $WAN_IF -j ACCEPT
103        # Allow established, related packets back in
104        $IP6TABLE -A INPUT  -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
105
106        echo "   "+ GENERIQUE : [OK]
107}
108
109#####
110# We set the rules for local IPv6 addresses (ULA) - here it's open
111#####
112
113function ipv6_ula()
114{
115        echo "   |";
116        echo "   + IPv6 - Addrs Unique Locale Area -----------------------";
117
118        # Allow Link-Local addresses
119        # network range : fc00:0000:0000:0000:0000:0000:0000:0000-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
120
121        echo "   |";
122        $IP6TABLE -A INPUT -s fc00::/7 -j ACCEPT
123        $IP6TABLE -A FORWARD -s fc00::/7 -d fc00::/7 -j ACCEPT
124        $IP6TABLE -A OUTPUT -d fc00::/7 -j ACCEPT
125        echo "   | +-→ "fc00::/7 : ACCEPT;
126        echo "   | |";
127        echo "   |" + IPv6 - Addrs Unique Locale Area : [OK]
128
129}
130
131#####
132# We set the rules for multicast IPv6 addresses - here it's open
133#####
134function ipv6_multicast()
135{
136        echo "   |";
137        echo "   + IPv6 - Addrs Multicast -----------------------";
138
139        # Allow multicast
140        # network range : ff00:0000:0000:0000:0000:0000:0000:0000-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
141
142        echo "   |";
143        $IP6TABLE -A INPUT -d ff00::/8 -j ACCEPT
144        $IP6TABLE -A FORWARD -s ff00::/8 -d ff00::/8 -j ACCEPT
145        $IP6TABLE -A OUTPUT -d ff00::/8 -j ACCEPT
146        echo "   | +-→ "ff00::/8 : ACCEPT;
147        echo "   | |";
148        echo "   |" + IPv6 - Addrs Multicast : [OK]
149}
150
151#####
152# We set the rules for link-local IPv6 addresses (LLA) - here it's open
153#####
154function ipv6_link_local()
155{
156        echo "   |";
157        echo "   + IPv6 - Addrs Link-Local Unicast -----------------------";
158
159        # Allow Link-Local addresses
160        # network range : fe80:0000:0000:0000:0000:0000:0000:0000-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
161
162        echo "   |";
163        $IP6TABLE -A INPUT -s fe80::/10 -j ACCEPT
164        $IP6TABLE -A FORWARD -s fe80::/10 -d fe80::/10 -j ACCEPT
165        $IP6TABLE -A OUTPUT -d fe80::/10 -j ACCEPT
166        echo "   | +-→ "fe80::/10 : ACCEPT;
167        echo "   | |";
168        echo "   | "+ IPv6 - Addrs Link-Local : [OK]
169
170}
171
172#####
173# We set the rules for secure local IPv6 addresses (VPN/strongSwan) (SLA) - here it's open for inter-site networks
174#####
175
176function ipv6_strongswan()
177{
178        # Default ------------------
179        echo "   |";
180        echo "   + IPv6 - Addrs Site-Local Secure Area Network -------------------------";
181
182        # Allow  Secure Area Network addresses
183        # network range : fec0:0000:0000:0000:0000:0000:0000:0000-feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
184
185        echo "   |";
186        $IP6TABLE -A INPUT -s fec0::/10 -j ACCEPT
187        $IP6TABLE -A FORWARD -s fec0::/10 -d fec0::/10 -j ACCEPT
188        $IP6TABLE -A OUTPUT -d fec0::/10 -j ACCEPT
189        echo "   | +-→ "fec0::/10 : ACCEPT;
190        echo "   | |";
191        echo "   | "+ IPv6 - Addrs Secure Area Network : [OK]
192
193        # Add ------------------
194
195        echo "   |";
196        # Allow  Forwarding SLAN (fec0::/10) <> ULA (fc00::/7)
197        # network range : fc00:0000:0000:0000:0000:0000:0000:0000-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
198
199        echo "   + IPv6 - Forwarding Addrs SWAN 2 ULA Networks -------------------------";
200        echo "   |";
201        $IP6TABLE -A FORWARD -s fec0::/10 -d fc00::/7 -j ACCEPT
202        $IP6TABLE -A FORWARD -d fec0::/10 -s fc00::/7 -j ACCEPT
203        echo "   | +-→ fec0::/10 <?> fc00::/7 : ACCEPT";
204        echo "   | |";
205        echo "   | "+ IPv6 - Forwarding Addrs SWAN 2 ULA Networks : [OK]
206        echo "   |";
207
208}
209
210#####
211# We allow ICMPv6 requests to pass
212#####
213
214function icmpv6_generique()
215{
216        $IP6TABLE -I INPUT -p icmpv6 -j ACCEPT
217        $IP6TABLE -I FORWARD -p icmpv6 -j ACCEPT
218        $IP6TABLE -I OUTPUT -p icmpv6 -j ACCEPT
219
220        echo "   "+ ICMPV6 - ACCEPT : [OK]
221}
222
223####
224# Stephane Bortzmeyer's rule: DROP ICMP LIMIT 1/sec per IPv6::/128
225# Send after the aICMPv6 chain (so that it is above -I)
226####
227
228function icmpv6_limit()
229{
230        # Au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion PING d'une seule source IPv6 (masque 128)
231        $IP6TABLE -I INPUT -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
232
233        echo "   "+ ICMPV6 - LIMIT 1/second DROP : [OK]
234}
235
236
237#####
238# Adaptation of Stephane Huc's script for ICMPv6
239#####
240
241function icmpv6_huc()
242{
243        # Allow dedicated  ICMPv6 packettypes, do this in an extra chain because we need it everywhere
244        $IP6TABLE -N aICMPs
245        
246        # Destination unreachable
247        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 1 -j ACCEPT # destination-unreachable; Must Not Be Dropped
248        
249        # Packet too big
250        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 2/0 -j ACCEPT # packet too big; Must Not Be Dropped
251        
252        # Time exceeded
253        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/0 -j ACCEPT # time exceeded
254        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/1 -j ACCEPT # time exceeded
255        
256        # Parameter problem
257        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/0 -j ACCEPT # parameter pb: Erroneous header field encountered
258        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/1 -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered
259        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/2 -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered
260
261        # Echo Request (protect against flood)
262        # Commenter cette ligne
263#        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT # ping tool: echo request message
264        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT
265        
266        # Echo Reply
267        # Commenter cette ligne
268#        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 129/0 -m limit --limit 5/sec --limit-burst 10 -j ACCEPT # ping tool: echo reply message
269        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT
270
271        echo "   "+ ICMPV6 - DEFAULT : [OK]
272
273        # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
274        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 130/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
275        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 131/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
276        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 132/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
277        echo "   "+ ICMPV6 - LINK-LOCAL : [OK]
278
279        # address configuration and routeur selection mssg (received with hop limit = 255)
280        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 133/0 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation
281        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 134/0 -s fe80::/64 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement
282        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 135/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation
283        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 136/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement
284    
285        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 137/0 -j DROP # Redirect Message
286        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 138/0 -j DROP # Router Renumbering (Rechargement du routeur)
287    
288        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 139/0 -j DROP # ICMP Node Information Query
289        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 140/0 -j DROP # ICMP Node Information Response
290    
291        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Solicitation Message
292        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Advertisement Message
293        echo "   "+ ICMPV6 - ADD CONF '&' ROUT€ SELECTION : [OK]
294
295        # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
296        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 143 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
297        
298        # needed for mobylity
299        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 144/0 -j DROP
300        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 145/0 -j DROP
301        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 146/0 -j DROP
302        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 147 -j DROP
303        
304        # SEND certificate path notification mssg (received with hop limit = 255)
305        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT # Certification Path Solicitation Message
306        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT # Certification Path Advertisement Message
307        
308        # multicast routeur discovery mssg (need link-local src address and hop limit = 1)
309        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 151 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
310        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 152 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
311        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 153 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
312        echo "   "+ ICMPV6 - MULTICAST ROUT€ DISCOVERY : [OK]
313        
314        #
315        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation
316        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation
317        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 255 -j DROP # expansion error messages ICMPv6
318        echo "   "+ ICMPV6 - EXPERIMENTATION : [OK]
319
320        # Only the ROUT€ is allowed to ping us (read FAQ this is a requirement)
321       #$IP6TABLE -A INPUT -p icmpv6 -m limit --limit 5/s --limit-burst 4 -j aICMPs
322       #$IP6TABLE -A OUTPUT -m state ! --state INVALID -j aICMPs
323
324        $IP6TABLE -I INPUT -p icmpv6 -j aICMPs
325        $IP6TABLE -I FORWARD -p icmpv6 -j aICMPs
326        $IP6TABLE -I OUTPUT -p icmpv6 -j aICMPs
327        
328        echo "   "+ ICMPV6 - INLIMIT + OUTPUT : [OK]
329}
330
331#####
332# FORWARDING between cards (vmbr0 ←> vmbr1)
333#####
334
335function ipv6_forwarding()
336{
337        # Allow forwarding
338#        $IP6TABLE -A FORWARD -m state --state NEW -i $VM1_IF -o $WAN_IF -s $SUBNETPREFIX -j ACCEPT
339#        $IP6TABLE -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
340
341        $IP6TABLE -A FORWARD -i $VM1_IF -o $WAN_IF -j ACCEPT
342        $IP6TABLE -A FORWARD -o $VM1_IF -i $WAN_IF -j ACCEPT
343
344        echo "   "+ IPv6 - FORWARDING : [OK]
345}
346
347#####
348# NAT V6
349#####
350function nat_v6()
351{
352        # NET FOR LXC EXCEPT TO THE ULA NETWORK# NET FOR LXC EXCEPT TO THE ULA NETWORK
353        $IP6TABLE -t nat -A POSTROUTING -o $WAN_IF -s $CT_WEB ! -d fc00::/7 -j MASQUERADE
354
355        echo "   "+ NAT : [OK]
356}
357
358#####
359# Opening SSH access to certain IPs
360# Opening SSH access to everyone for 3 requests per minute
361#####
362
363function ssh_ok()
364{
365        for host in $SSH_OK
366        do
367                $IP6TABLE -A INPUT -s $host -p tcp --dport $port_ssh -j ACCEPT
368                $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_ssh -j ACCEPT
369        done
370
371        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m state --state NEW -m recent --set --name SSH
372        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP
373        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -j ACCEPT
374
375        echo "   "+ SSH : [OK]
376}
377
378#####
379# Opening RSYNC access to certain IP addresses
380#####
381
382function rsync_ok()
383{
384        for host in $RSYNC_OK
385        do
386        $IP6TABLE -A INPUT -s $host -p tcp --dport $port_rsync -j ACCEPT
387        $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_rsync -j ACCEPT
388        done
389
390        echo "   "+ RSYNC : [OK]
391}
392
393#####
394# Opening TCP and UPD ports
395#####
396
397function tcp_ok()
398{
399        for port in $TCP_OK
400        do
401        $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
402        $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
403        done
404
405        echo "   "+ TCP : [OK]
406}
407
408function udp_ok()
409{
410        for port in $UDP_OK
411        do
412        $IP6TABLE -A INPUT -p udp --dport $port -j ACCEPT
413        $IP6TABLE -A OUTPUT -p udp --sport $port -j ACCEPT
414        done
415
416        echo "   "+ UDP : [OK]
417}
418
419#####
420# Open HTTP(S) access to the LAN & NET interface
421#####
422
423function server_http()
424{
425        # on a 1 seule IPv6::/128 GLOBAL UNICAST ADDRESS (VPS) -→ on a donc fait un network ULA (Unique Local Addresses) for les containers
426#       CT_WEB="fc01::10:10:0:10"
427
428        HTTP_PORTS="80 443"
429        for port in $HTTP_PORTS
430        do
431                # service Web local and/or another machine
432                $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT
433                $IP6TABLE -A INPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --dport $port -j ACCEPT
434#               $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
435#               $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
436                $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT
437                # Web service is on another machine, a container or a local machine
438#               $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p tcp --dport $port -j DNAT --to-destination [$CT_WEB]:$port
439        done
440        echo "   "+ APACHE : [OK]
441}
442
443#####
444# Open DNS(S) access to the NET interface
445#####
446
447function server_dns()
448{
449        # on a 1 seule IPv6::/128 GLOBAL UNICAST ADDRESS (VPS) -→ on a donc fait un network ULA (Unique Local Addresses) for les containers
450#       CT_DNS="fc01::10:10:0:1"
451	
452        DNS_PORTS_TCP="53"
453        for port in $DNS_PORTS_TCP
454        do
455                # service Bind9 local and/or another machine
456                $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT
457#               $IP6TABLE -A INPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --dport $port -j ACCEPT
458                $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
459                $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT
460                $IP6TABLE -A OUTPUT -p tcp --sport $port -j LOG  --log-prefix "OUTPUT-T-NAMED:"
461                # Bind9 service is on another machine, a container or a local machine
462#               $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p tcp --dport $port -j DNAT --to-destination [$CT_DNS]:$port
463        done
464
465        DNS_PORTS_UDP="53"
466        for port in $DNS_PORTS_UDP
467        do
468                # service Bind9 local and/or another machine
469                $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m state --state NEW -m recent --set --name NAMED
470#               $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m state --state ESTABLISHED,RELATED -m recent --set --name NAMED
471                $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m recent --update --seconds 60 --hitcount 10 --rttl --name NAMED -j DROP
472                $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m udp -p udp --sport $port -j ACCEPT
473                $IP6TABLE -A OUTPUT -p udp --sport $port -j LOG  --log-prefix "OUTPUT-U-NAMED:"
474                # Bind9 service is on another machine, a container or a local machine
475#               $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p udp --dport $port -j DNAT --to-destination [$CT_DNS]:$port
476        done
477
478        echo "   "+ DNS : [OK]
479}
480
481
482
483#####-------------------------- START / STOP ----------------------------######
484case "$1" in
485
486start|restart)
487$0 stop
488echo "$0 Starting"
489        kernel
490        loopback
491
492        # old function     
493#       icmpv6_generique
494        # new function with --icmpv6-type
495        icmpv6_huc
496        icmpv6_limit
497        
498#       nat_v6
499        
500        ssh_ok
501        rsync_ok
502        tcp_ok
503        udp_ok
504
505        server_http
506        server_dns
507        
508        ipv6_ula
509        ipv6_multicast
510        ipv6_link_local
511        ipv6_strongswan
512        ipv6_forwarding
513
514        generique
515
516        policy DROP
517;;
518
519stop)
520        echo "$0 Stop"
521        $IP6TABLE -F
522        $IP6TABLE -t nat -F
523        $IP6TABLE -Z
524        $IP6TABLE -X
525        policy ACCEPT
526        ;;
527status)
528        echo "$0 Status"
529        $IP6TABLE -L -vn
530        $IP6TABLE -L -vn -t nat
531        ;;
532
533*)
534echo "usage : $0 (status|start|stop|restart)"
535;;
536
537esac
538
539#####-------------------------- 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

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


Author of the page

O.Romain.Jaillet-ramey

O.Romain.Jaillet-ramey

  • Firstname : Olivier Romain Luc
  • Lastname : : Jaillet-ramey
  • Arrived on tuesday 19 october 1976 (1976/10/19 00:00)
    48 years activity !

Translate this page with Google






Load page: 1,6429059505463