Informations :
Dates
- Publish : : Friday 07 february 2020
- Modification : Wednesday 02 october 2024
- 4069 views
Share :
NdM : 2024/10/02 - Ajout de la fonction ipv6_ula() et nat_v6() et autres petites modifications
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.
Si vous n'avez pas installé les paquets d'admin IPv6. Je vous suggère d'installer ces paquets grâce à la commande apt install iputils-ping dnsutils net-tools whois ipv6toolkit thc-ipv6 ipv6pref
qui sont logiciels/commandes réseaux IPv6.
Stephane 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 là ) :) 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#
061echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
062#
063#End router forwarding rules
064 065echo " "+ 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 079echo " "+ 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 092echo " "+ 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 106echo " "+ 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 120echo " "+ GENERIQUE : [OK]
121}
122 123#####
124# on fixe les regles des adresses IPv6 locales
125#####
126 127function ipv6_ula()
128{
129echo " |";
130echo " + 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 135echo " |\\";
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
139echo " | +-→ "fc00::/7 : ACCEPT;
140echo " | |";
141echo " |" + IPv6 - Addrs Unique Locale Area : [OK]
142 143}
144 145function ipv6_multicast()
146{
147echo " |";
148echo " + 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 153echo " |\\";
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
157echo " | +-→ "ff00::/8 : ACCEPT;
158echo " | |";
159echo " |" + IPv6 - Addrs Multicast : [OK]
160}
161 162function ipv6_link_local()
163{
164echo " |";
165echo " + 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 170echo " |\\";
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
174echo " | +-→ "fe80::/10 : ACCEPT;
175echo " | |";
176echo " | "+ 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 ------------------
187echo " |";
188echo " + 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 193echo " |\\";
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
197echo " | +-→ "fec0::/10 : ACCEPT;
198echo " | |";
199echo " | "+ IPv6 - Addrs Secure Area Network : [OK]
200 201# Add ------------------
202 203echo " |";
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 207echo " + IPv6 - Forwarding Addrs SWAN 2 ULA Networks -------------------------";
208echo " |\\";
209$IP6TABLE -A FORWARD -s fec0::/10 -d fc00::/7 -j ACCEPT
210$IP6TABLE -A FORWARD -d fec0::/10 -s fc00::/7 -j ACCEPT
211echo " | +-→ fec0::/10 <?> fc00::/7 : ACCEPT";
212echo " | |";
213echo " | "+ IPv6 - Forwarding Addrs SWAN 2 ULA Networks : [OK]
214echo " |";
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 228echo " "+ 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 241echo " "+ 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
253254
# Destination unreachable
255$IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 1 -j ACCEPT # destination-unreachable; Must Not Be Dropped
256257
# Packet too big
258$IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 2/0 -j ACCEPT # packet too big; Must Not Be Dropped
259260
# 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
263264
# 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
273274
# 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 279echo " "+ 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
285echo " "+ 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
292293
$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)
295296
$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
298299
$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
301echo " "+ 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
305306
# 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
311312
# 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
315316
# 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
320echo " "+ ICMPV6 - MULTICAST ROUT€ DISCOVERY : [OK]
321322
#
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
326echo " "+ 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
335336
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 352echo " "+ 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 363echo " "+ NAT : [OK]
364}
365 366#####
367# ouverture des acces SSH a certaines IP
368#####
369 370function ssh_ok()
371{
372for host in $SSH_OK
373do
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
376done
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 382echo " "+ SSH : [OK]
383}
384 385#####
386# ouverture des acces RSYNC a certaines IP
387#####
388 389function rsync_ok()
390{
391for host in $RSYNC_OK
392do
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
395done
396 397echo " "+ RSYNC : [OK]
398}
399 400#####
401# ouverture des ports tcp et upd
402#####
403 404function tcp_ok()
405{
406for port in $TCP_OK
407do
408$IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
409$IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
410done
411 412echo " "+ TCP : [OK]
413}
414 415function udp_ok()
416{
417for port in $UDP_OK
418do
419$IP6TABLE -A INPUT -p udp --dport $port -j ACCEPT
420$IP6TABLE -A OUTPUT -p udp --sport $port -j ACCEPT
421done
422 423echo " "+ 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 435HTTP_PORTS="80 443"
436for port in $HTTP_PORTS
437do
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
445done
446echo " "+ 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"
457458
DNS_PORTS_TCP="53"
459for port in $DNS_PORTS_TCP
460do
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
468done
469 470DNS_PORTS_UDP="53"
471for port in $DNS_PORTS_UDP
472do
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
480done
481 482echo " "+ DNS : [OK]
483}
484 485 486 487#####-------------------------- START / STOP ----------------------------######
488case "$1" in
489 490start|restart)
491$0 stop
492echo "$0 Starting"
493kernel
494loopback
495 496generique
497 498# old function
499# icmpv6_generique
500# new function with --icmpv6-type
501icmpv6_huc
502icmpv6_limit
503504
ipv6_ula
505ipv6_multicast
506ipv6_link_local
507ipv6_strongswan
508ipv6_forwarding
509510
# nat_v6
511512
ssh_ok
513rsync_ok
514tcp_ok
515udp_ok
516 517server_http
518server_dns
519520
policy DROP
521;;
522 523stop)
524echo "$0 Stop"
525$IP6TABLE -F
526$IP6TABLE -t nat -F
527$IP6TABLE -Z
528$IP6TABLE -X
529policy ACCEPT
530;;
531status)
532echo "$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 ----------------------------######
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
001Puis aprés vous pouvez lancer le script en executantln -s /root/firewall-ipv6.sh /etc/init.d/firewall-ipv6
002update-rc.d firewall-ipv6 defaults
/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