ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Sécurité, Comment-faire un réseau IPv6 ? Firewall ICMPv6

Firewall ICMPv6 - IPv6 : Pare-feu GNU/Linux

Author : O.Romain.Jaillet-ramey

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.

Script avec 1 ligne

001apt install iputils-ping dnsutils net-tools whois ipv6toolkit thc-ipv6 ipv6pref
Retirer les numéros de lignes

Stéphane Huc a changé son nom de domaine - Le nouveau est : http://doc.huc.fr.eu.org

Il nous a créé une fonction pour filtrer les paquets ICMPv6 depuis IPtables pour les requetes des routeurs : c'est la fonction icmpv6_huc().


Je vous ai concocté un script firewall-ipv6.sh ici avec quelques lignes supplémentaires comme le forward entre les cartes et autres :

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).
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 ;)

Il faut autoriser les echo-request et echo-reply en -j ACCEPT dans la chaine aICMPs de Stéphane Huc sinon on est limité(e) à un ping par seconde pour tout le monde qui pourait pinguer l'IPv6 (la même adresse IPv6).

Puis c'est OKay çà PING et çà DROP comme on veut - De la machine elle-même et de l'extérieur ;)

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

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes
Restaurer votre configuration firewall :

Script avec 1 ligne

001ip6tables-restore < /etc/firewall-ipv6.conf
Retirer les numéros de lignes
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
Retirer les numéros de lignes

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

Script avec 1 ligne

001ip6tables -L -vn -t nat
Retirer les numéros de lignes

Cordialement,
Romain