Comment faire : Nmap, Wireshark, TCPdump, IPTraf, IPerf, Nast, Ettercap...
 Charge moyenne sur 1mn : 0.28 Charge moyenne sur 5mn : 0.18 Charge moyenne sur 15mn : 0.11




Comment-faire un réseau IPv6 ? Firewall ICMPv6

Firewall ICMPv6 - IPv6

Informations

Dates
  • Création : Vendredi 07 février 2020
  • Publication : Vendredi 07 février 2020
  • Modification : Mercredi 22 avril 2020

Partager

Traduire la page

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

Il nous avait envoyé un tutoriel sur comment filtrer les paquets ICMPv6 depuis IPtables pour les requetes des routeurs.

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

J'ai ajouté une protection à 1 ping/seconde par adresse IPv6::/128 (function icmpv6_limit (ligne 150)) (--icmpv6-type 128/0) de Stéphane Bortzmeyer :) qui fait qu'au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion de PING, d'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 ;)

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
014 IP6TABLE="/sbin/ip6tables"
015 
016 # interface reseau
017 LOOP_IF="lo"
018 
019 WAN_IF="vmbr0"
020 VM1_IF="vmbr1"
021 
022 # Network and IPs
023 SUBNETPREFIX="2607:5300:0060:9389::/64"
024 
025 # port du service ssh
026 port_ssh="22"
027 
028 # port du service rsync
029 port_rsync="873"
030 
031 # ports tcp et udp a ouvrir
032 TCP_OK="514 4949" # SYSLOG MUNIN
033 UDP_OK="123 161 514 547" # NTP SNMP SYSLOG DHCP
034 
035 # ip qui ont acces en ssh au serveur
036 SSH_OK="2001:0bc8:25bb:ff00::/56"
037 
038 # ip accedant au serveur en rsync
039 RSYNC_OK="2001:0bc8:25bb:ff00::/56"
040 
041 #####
042 # on fixe les sysctl
043 #####
044 function kernel()
045 {
046         # Don't accept source routed packets.
047         /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_source_route
048 
049          # Disable ICMP redirect acceptance.
050         /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects
051 
052         # Enable the following lines only if a router!
053         # Enabling IPv6 forwarding disables route-advertisement reception - accept_ra=0|2
054         # A static gateway will need to be assigned.
055         #
056         echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
057         #
058         #End router forwarding rules
059 
060         echo "   "+ KERNEL : [OK]
061 }
062 
063 #####
064 # on accepte tout de et pour "lo" local
065 #####
066 
067 function loopback()
068 {
069         $IP6TABLE -A INPUT  -i lo -j ACCEPT
070         $IP6TABLE -A FORWARD  -i lo -j ACCEPT
071         $IP6TABLE -A FORWARD  -o lo -j ACCEPT
072         $IP6TABLE -A OUTPUT -o lo -j ACCEPT
073 
074         echo "   "+ LOOPBACK : [OK]
075 }
076 
077 #####
078 # on fixe les regles general (DROP||ACCEPT)
079 #####
080 
081 function policy()
082 {
083         $IP6TABLE -P INPUT $1
084         $IP6TABLE -P FORWARD $1
085         $IP6TABLE -P OUTPUT $1
086 
087         echo "   "+ POLICY $1 : [OK]
088 }
089 
090 #####
091 #  ACCEPT LES REQUETES DEMANDEES
092 #####
093 
094 function generique()
095 {
096         # Allow anything out on the internet
097         $IP6TABLE -A OUTPUT -o $WAN_IF -j ACCEPT
098         # Allow established, related packets back in
099         $IP6TABLE -A INPUT  -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
100 
101         echo "   "+ GENERIQUE : [OK]
102 }
103 
104 #####
105 # on fixe les regles des adresses IPv6
106 #####
107 
108 function ipv6_link_multicast()
109 {
110         echo "   |";
111         echo "   + IPv6 - Addrs Link-Local/Multicast -----------------------";
112 
113         # Allow Link-Local addresses
114         echo "   |";
115         $IP6TABLE -A INPUT -s fe80::/10 -j ACCEPT
116         $IP6TABLE -A FORWARD -s fe80::/10 -d fe80::/10 -j ACCEPT
117         $IP6TABLE -A OUTPUT -s fe80::/10 -j ACCEPT
118         echo "   +---> "fe80::/10 : ACCEPT;
119         echo "   |";
120         echo "   "+ IPv6 - Addrs Link-Local : [OK]
121 
122         # Allow multicast
123         echo "   |";
124         $IP6TABLE -A INPUT -d ff00::/8 -j ACCEPT
125         $IP6TABLE -A FORWARD -s ff00::/8 -d ff00::/8 -j ACCEPT
126         $IP6TABLE -A OUTPUT -d ff00::/8 -j ACCEPT
127         echo "   +---> "ff00::/8 : ACCEPT;
128         echo "   |";
129         echo "   "+ IPv6 - Addrs Multicast : [OK]
130 }
131 
132 #####
133 # On laisse passer les requetes ICMPv6
134 #####
135 
136 function icmpv6_generique()
137 {
138         $IP6TABLE -I INPUT -p icmpv6 -j ACCEPT
139         $IP6TABLE -I FORWARD -p icmpv6 -j ACCEPT
140         $IP6TABLE -I OUTPUT -p icmpv6 -j ACCEPT
141 
142         echo "   "+ ICMPV6 - ACCEPT : [OK]
143 }
144 
145 ####
146 # La regle de Stephane Bortzmeyer DROP ICMP LIMIT 1/sec par IPv6::/128
147 # A envoyer apres la chaine aICMPv6 (pour qu'elle soit au dessus -I)
148 ####
149 
150 function icmpv6_limit()
151 {
152         # Au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion PING d'une seule source IPv6 (masque 128)
153         $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
154 
155         echo "   "+ ICMPV6 - LIMIT 1/second DROP : [OK]
156 }
157 
158 
159 #####
160 # Le script de Stephane Huc
161 #####
162 
163 function icmpv6_huc()
164 {
165         # Allow dedicated  ICMPv6 packettypes, do this in an extra chain because we need it everywhere
166         $IP6TABLE -N aICMPs
167         
168         # Destination unreachable
169         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 1 -j ACCEPT # destination-unreachable; Must Not Be Dropped
170         
171         # Packet too big
172         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 2/0 -j ACCEPT # packet too big; Must Not Be Dropped
173         
174         # Time exceeded
175         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/0 -j ACCEPT # time exceeded
176         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/1 -j ACCEPT # time exceeded
177         
178         # Parameter problem
179         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/0 -j ACCEPT # parameter pb: Erroneous header field encountered
180         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/1 -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered
181         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/2 -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered
182 
183         # Echo Request (protect against flood)
184         # Commenter cette ligne
185 #        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT # ping tool: echo request message
186         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT
187         
188         # Echo Reply
189         # Commenter cette ligne
190 #        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 129/0 -m limit --limit 5/sec --limit-burst 10 -j ACCEPT # ping tool: echo reply message
191         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT
192 
193         echo "   "+ ICMPV6 - DEFAULT : [OK]
194 
195         # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
196         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 130/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
197         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 131/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
198         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 132/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
199         echo "   "+ ICMPV6 - LINK-LOCAL : [OK]
200 
201         # address configuration and routeur selection mssg (received with hop limit = 255)
202         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 133/0 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation
203         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 134/0 -s fe80::/64 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement
204         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 135/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation
205         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 136/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement
206     
207         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 137/0 -j DROP # Redirect Message
208         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 138/0 -j DROP # Router Renumbering (Rechargement du routeur)
209     
210         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 139/0 -j DROP # ICMP Node Information Query
211         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 140/0 -j DROP # ICMP Node Information Response
212     
213         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Solicitation Message
214         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Advertisement Message
215         echo "   "+ ICMPV6 - ADD CONF '&' ROUTEUR SELECTION : [OK]
216 
217         # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
218         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 143 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
219         
220         # needed for mobylity
221         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 144/0 -j DROP
222         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 145/0 -j DROP
223         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 146/0 -j DROP
224         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 147 -j DROP
225         
226         # SEND certificate path notification mssg (received with hop limit = 255)
227         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT # Certification Path Solicitation Message
228         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT # Certification Path Advertisement Message
229         
230         # multicast routeur discovery mssg (need link-local src address and hop limit = 1)
231         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 151 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
232         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 152 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
233         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 153 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
234         echo "   "+ ICMPV6 - MULTICAST ROUTEUR DISCOVERY : [OK]
235         
236         #
237         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation
238         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation
239         $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 255 -j DROP # expansion error messages ICMPv6
240         echo "   "+ ICMPV6 - EXPERIMENTATION : [OK]
241 
242         # Only the ROUTEUR is allowed to ping us (read FAQ this is a requirement)
243         #$IP6TABLE -A INPUT -p icmpv6 -m limit --limit 5/s --limit-burst 4 -j aICMPs
244         #$IP6TABLE -A OUTPUT -m state ! --state INVALID -j aICMPs
245 
246         $IP6TABLE -I INPUT -p icmpv6 -j aICMPs
247         $IP6TABLE -I FORWARD -p icmpv6 -j aICMPs
248         $IP6TABLE -I OUTPUT -p icmpv6 -j aICMPs
249         
250         echo "   "+ ICMPV6 - INLIMIT + OUTPUT : [OK]
251 }
252 
253 #####
254 # FORWARDING entre les cartes (vmbr0 <-> vmbr1)
255 #####
256 
257 function ipv6_forwarding()
258 {
259         # Allow forwarding
260         $IP6TABLE -A FORWARD -m state --state NEW -i $VM1_IF -o $WAN_IF -s $SUBNETPREFIX -j ACCEPT
261         $IP6TABLE -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
262 
263 #        $IP6TABLE -A FORWARD -i $VM1_IF -o $WAN_IF -j ACCEPT
264 #        $IP6TABLE -A FORWARD -o $VM1_IF -i $WAN_IF -j ACCEPT
265 
266         echo "   "+ IPv6 - FORWARDING : [OK]
267 }
268 
269 #####
270 # ouverture des acces SSH a certaines IP
271 #####
272 
273 function ssh_ok()
274 {
275         for host in $SSH_OK
276         do
277                 $IP6TABLE -A INPUT -s $host -p tcp --dport $port_ssh -j ACCEPT
278                 $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_ssh -j ACCEPT
279         done
280 
281         $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m state --state NEW -m recent --set --name SSH
282         $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP
283         $IP6TABLE -A INPUT -p tcp --dport $port_ssh -j ACCEPT
284 
285         echo "   "+ SSH : [OK]
286 }
287 
288 #####
289 # ouverture des acces RSYNC a certaines IP
290 #####
291 
292 function rsync_ok()
293 {
294         for host in $RSYNC_OK
295         do
296         $IP6TABLE -A INPUT -s $host -p tcp --dport $port_rsync -j ACCEPT
297         $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_rsync -j ACCEPT
298         done
299 
300         echo "   "+ RSYNC : [OK]
301 }
302 
303 #####
304 # ouverture des ports tcp et upd
305 #####
306 
307 function tcp_ok()
308 {
309         for port in $TCP_OK
310         do
311         $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
312         $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
313         done
314 
315         echo "   "+ TCP : [OK]
316 }
317 
318 function udp_ok()
319 {
320         for port in $UDP_OK
321         do
322         $IP6TABLE -A INPUT -p udp --dport $port -j ACCEPT
323         $IP6TABLE -A OUTPUT -p udp --sport $port -j ACCEPT
324         done
325 
326         echo "   "+ UDP : [OK]
327 }
328 
329 #####
330 # ouverture des acces HTTP(S) a linterface LAN & NET
331 #####
332 
333 function server_http()
334 {
335         HTTP_PORTS="80 443"
336         for port in $HTTP_PORTS
337         do
338                 # SOIT le service est sur LHOTE SOIT dans un VServer
339                 $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT
340 #               $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
341                 $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
342 #               $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT
343         done
344         echo "   "+ APACHE : [OK]
345 }
346 
347 #####-------------------------- START / STOP ----------------------------######
348 case "$1" in
349 
350 start|restart)
351 $0 stop
352 echo "$0 Starting"
353         kernel
354         loopback
355 
356         generique
357         
358 #       icmpv6_generique
359         icmpv6_huc
360         icmpv6_limit
361     
362         ipv6_link_multicast
363         ipv6_forwarding
364         
365         ssh_ok
366         rsync_ok
367         tcp_ok
368         udp_ok
369 
370         server_http
371         
372         policy DROP
373 ;;
374 
375 stop)
376         echo "$0 Stop"
377         $IP6TABLE -F
378         $IPTABLE -t nat -F
379         $IP6TABLE -Z
380         $IP6TABLE -X
381         policy ACCEPT
382         ;;
383 status)
384         echo "$0 Status"
385         $IP6TABLE -L -vn
386         ;;
387 
388 *)
389 echo "usage : $0 (status|start|stop|restart)"
390 ;;
391 
392 esac
393 
394 #####-------------------------- 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.

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

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

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

Liens ZW3B.IPv6 : Internet Protocol V6

Liens qui peuvent aussi vous intéresser :


AUTEUR : LAB3W.ORJ Alias de O.Romain Jaillet-ramey (NOTIF LVL 7 - 43 ans) LAB3W.ORJ
CONTACT
- Web - STEAM - Monster - LinkedIn - Viadeo - DailyMotion - FACEBOOK - GOOGLE - Twitter
DROITS SITES : ZW3B.Admin
INSCRIPTION : Le samedi 06 janvier 1 (2001/01/06 15:31)
CONNEXION : il y a un peu plus 1 mois (2020/04/25 22:48)
DERNIERE VISITE : il y a un peu plus 1 mois (2020/04/28 00:00)

les réactions des ZW3B.Nautes (0 note)

Ajouter un commentaire

Avatar par default
Pseudo :
Email :
 
Ajouter la chaine de caractères (le code) ci-dessous dans le champ du dessous.
Captcha
Code :





Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready