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