SSH, OpenSSL, Iptables, RSYNC, RAID, VPN

 Charge moyenne sur 1mn : 1.02 Charge moyenne sur 5mn : 0.93 Charge moyenne sur 15mn : 0.87


How to protect a network, transmission, data?

Use a firewall, an anti-virus, back up your system regularly, use a secure disk system for your data. Use secure protocols such as HTTPs, FTPs, IMAPs, POPs, SMTPs





Site user blocks : Account info / user rights / summary

Comment-faire un réseau IPv6 ? Firewall ICMPv6

  • Comment-faire un réseau IPv6 ? Firewall ICMPv6
Firewall ICMPv6 - IPv6 : Pare-feu GNU/Linux

Informations :

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

  • 2646 views

Share :

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 avait envoyé un tutoriel sur comment filtrer les paquets ICMPv6 depuis IPtables pour les requetes des routeurs.


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

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


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

A lire sur le blog de Stéphane Bortzmeyer :

Liens ZW3B.IPv6 : Internet Protocol V6

Liens qui peuvent aussi vous intéresser :


Keywords :

جدار الحماية IPv6 جدار حماية ICMPv6 Cortafuegos ICMPv6 جدار الحماية ICMPv6 linux لينكس


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

Translate this page with Google

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