Nmap, Wireshark, TCPdump, IPTraf, IPerf, Nast, Ettercap

 Charge moyenne sur 1mn : 0.31 Charge moyenne sur 5mn : 0.73 Charge moyenne sur 15mn : 0.85




Site user blocks : Account info / user rights / summary

Identify yourself

Authenticate with your ZW3B account and take advantage of member services.

Username :
Password :
  
  

Comment-faire un réseau IPv6 ? Firewall ICMPv6

Firewall ICMPv6 - IPv6

Informations :

Dates
  • Publish : : Friday 07 february 2020
  • Modification : Monday 13 april 2020

  • 1059 views

Share :

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

Script avec 394 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
019WAN_IF="vmbr0"
020VM1_IF="vmbr1"
021
022# Network and IPs
023SUBNETPREFIX="2607:5300:0060:9389::/64"
024
025# port du service ssh
026port_ssh="22"
027
028# port du service rsync
029port_rsync="873"
030
031# ports tcp et udp a ouvrir
032TCP_OK="514 4949" # SYSLOG MUNIN
033UDP_OK="123 161 514 547" # NTP SNMP SYSLOG DHCP
034
035# ip qui ont acces en ssh au serveur
036SSH_OK="2001:0bc8:25bb:ff00::/56"
037
038# ip accedant au serveur en rsync
039RSYNC_OK="2001:0bc8:25bb:ff00::/56"
040
041#####
042# on fixe les sysctl
043#####
044function 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
067function 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
081function 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
094function 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
108function 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
136function 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
150function 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
163function 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 '&' ROUT€ 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 ROUT€ 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 ROUT€ 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
257function 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
273function 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
292function 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
307function 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
318function 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
333function 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 ----------------------------######
348case "$1" in
349
350start|restart)
351$0 stop
352echo "$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
375stop)
376        echo "$0 Stop"
377        $IP6TABLE -F
378        $IPTABLE -t nat -F
379        $IP6TABLE -Z
380        $IP6TABLE -X
381        policy ACCEPT
382        ;;
383status)
384        echo "$0 Status"
385        $IP6TABLE -L -vn
386        ;;
387
388*)
389echo "usage : $0 (status|start|stop|restart)"
390;;
391
392esac
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.

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)

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 :




Translate this page with Google

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)
    44 years activity !

Firefox Nighlty

Our friends from Framasoft are interested in Mozilla and asked them questions about Nightly: Firefox Night-club, free entry !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready