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

 Charge moyenne sur 1mn : 0.12 Charge moyenne sur 5mn : 0.07 Charge moyenne sur 15mn : 0.07


Blocs utilisateurs du site : Infos du compte / droits utilisateurs / récapitulatif

Identifiez-vous

Authentifiez-vous avec votre compte ZW3B et profitez des services membres.

Identifiant :
Mot de passe :
  
  

Comment-faire un réseau IPv6 ? Firewall ICMPv6

Firewall ICMPv6 - IPv6

Informations

Dates
  • Publication : Vendredi 07 février 2020
  • Modification : Lundi 13 avril 2020

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

#!/bin/bash
### BEGIN INIT INFO
# Provides:          firewall-ipv6
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
#####-------------------------- VARIABLES ----------------------------######

# chemin commande iptables
IP6TABLE="/sbin/ip6tables"

# interface reseau
LOOP_IF="lo"

WAN_IF="vmbr0"
VM1_IF="vmbr1"

# Network and IPs
SUBNETPREFIX="2607:5300:0060:9389::/64"

# port du service ssh
port_ssh="22"

# port du service rsync
port_rsync="873"

# ports tcp et udp a ouvrir
TCP_OK="514 4949" # SYSLOG MUNIN
UDP_OK="123 161 514 547" # NTP SNMP SYSLOG DHCP

# ip qui ont acces en ssh au serveur
SSH_OK="2001:0bc8:25bb:ff00::/56"

# ip accedant au serveur en rsync
RSYNC_OK="2001:0bc8:25bb:ff00::/56"

#####
# on fixe les sysctl
#####
function kernel()
{
        # Don't accept source routed packets.
        /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_source_route

         # Disable ICMP redirect acceptance.
        /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects

        # Enable the following lines only if a router!
        # Enabling IPv6 forwarding disables route-advertisement reception - accept_ra=0|2
        # A static gateway will need to be assigned.
        #
        echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
        #
        #End router forwarding rules

        echo "   "+ KERNEL : [OK]
}

#####
# on accepte tout de et pour "lo" local
#####

function loopback()
{
        $IP6TABLE -A INPUT  -i lo -j ACCEPT
        $IP6TABLE -A FORWARD  -i lo -j ACCEPT
        $IP6TABLE -A FORWARD  -o lo -j ACCEPT
        $IP6TABLE -A OUTPUT -o lo -j ACCEPT

        echo "   "+ LOOPBACK : [OK]
}

#####
# on fixe les regles general (DROP||ACCEPT)
#####

function policy()
{
        $IP6TABLE -P INPUT $1
        $IP6TABLE -P FORWARD $1
        $IP6TABLE -P OUTPUT $1

        echo "   "+ POLICY $1 : [OK]
}

#####
#  ACCEPT LES REQUETES DEMANDEES
#####

function generique()
{
        # Allow anything out on the internet
        $IP6TABLE -A OUTPUT -o $WAN_IF -j ACCEPT
        # Allow established, related packets back in
        $IP6TABLE -A INPUT  -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

        echo "   "+ GENERIQUE : [OK]
}

#####
# on fixe les regles des adresses IPv6
#####

function ipv6_link_multicast()
{
        echo "   |";
        echo "   + IPv6 - Addrs Link-Local/Multicast -----------------------";

        # Allow Link-Local addresses
        echo "   |";
        $IP6TABLE -A INPUT -s fe80::/10 -j ACCEPT
        $IP6TABLE -A FORWARD -s fe80::/10 -d fe80::/10 -j ACCEPT
        $IP6TABLE -A OUTPUT -s fe80::/10 -j ACCEPT
        echo "   +---> "fe80::/10 : ACCEPT;
        echo "   |";
        echo "   "+ IPv6 - Addrs Link-Local : [OK]

        # Allow multicast
        echo "   |";
        $IP6TABLE -A INPUT -d ff00::/8 -j ACCEPT
        $IP6TABLE -A FORWARD -s ff00::/8 -d ff00::/8 -j ACCEPT
        $IP6TABLE -A OUTPUT -d ff00::/8 -j ACCEPT
        echo "   +---> "ff00::/8 : ACCEPT;
        echo "   |";
        echo "   "+ IPv6 - Addrs Multicast : [OK]
}

#####
# On laisse passer les requetes ICMPv6
#####

function icmpv6_generique()
{
        $IP6TABLE -I INPUT -p icmpv6 -j ACCEPT
        $IP6TABLE -I FORWARD -p icmpv6 -j ACCEPT
        $IP6TABLE -I OUTPUT -p icmpv6 -j ACCEPT

        echo "   "+ ICMPV6 - ACCEPT : [OK]
}

####
# La regle de Stephane Bortzmeyer DROP ICMP LIMIT 1/sec par IPv6::/128
# A envoyer apres la chaine aICMPv6 (pour qu'elle soit au dessus -I)
####

function icmpv6_limit()
{
        # Au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion PING d'une seule source IPv6 (masque 128)
        $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

        echo "   "+ ICMPV6 - LIMIT 1/second DROP : [OK]
}


#####
# Le script de Stephane Huc
#####

function icmpv6_huc()
{
        # Allow dedicated  ICMPv6 packettypes, do this in an extra chain because we need it everywhere
        $IP6TABLE -N aICMPs
        
        # Destination unreachable
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 1 -j ACCEPT # destination-unreachable; Must Not Be Dropped
        
        # Packet too big
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 2/0 -j ACCEPT # packet too big; Must Not Be Dropped
        
        # Time exceeded
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/0 -j ACCEPT # time exceeded
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/1 -j ACCEPT # time exceeded
        
        # Parameter problem
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/0 -j ACCEPT # parameter pb: Erroneous header field encountered
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/1 -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/2 -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered

        # Echo Request (protect against flood)
        # Commenter cette ligne
#        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT # ping tool: echo request message
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT
        
        # Echo Reply
        # Commenter cette ligne
#        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 129/0 -m limit --limit 5/sec --limit-burst 10 -j ACCEPT # ping tool: echo reply message
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT

        echo "   "+ ICMPV6 - DEFAULT : [OK]

        # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 130/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 131/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 132/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        echo "   "+ ICMPV6 - LINK-LOCAL : [OK]

        # address configuration and routeur selection mssg (received with hop limit = 255)
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 133/0 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 134/0 -s fe80::/64 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 135/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 136/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement
    
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 137/0 -j DROP # Redirect Message
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 138/0 -j DROP # Router Renumbering (Rechargement du routeur)
    
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 139/0 -j DROP # ICMP Node Information Query
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 140/0 -j DROP # ICMP Node Information Response
    
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Solicitation Message
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Advertisement Message
        echo "   "+ ICMPV6 - ADD CONF '&' ROUT€ SELECTION : [OK]

        # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 143 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        
        # needed for mobylity
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 144/0 -j DROP
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 145/0 -j DROP
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 146/0 -j DROP
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 147 -j DROP
        
        # SEND certificate path notification mssg (received with hop limit = 255)
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT # Certification Path Solicitation Message
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT # Certification Path Advertisement Message
        
        # multicast routeur discovery mssg (need link-local src address and hop limit = 1)
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 151 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 152 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 153 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT
        echo "   "+ ICMPV6 - MULTICAST ROUT€ DISCOVERY : [OK]
        
        #
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation
        $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 255 -j DROP # expansion error messages ICMPv6
        echo "   "+ ICMPV6 - EXPERIMENTATION : [OK]

        # Only the ROUT€ is allowed to ping us (read FAQ this is a requirement)
        #$IP6TABLE -A INPUT -p icmpv6 -m limit --limit 5/s --limit-burst 4 -j aICMPs
        #$IP6TABLE -A OUTPUT -m state ! --state INVALID -j aICMPs

        $IP6TABLE -I INPUT -p icmpv6 -j aICMPs
        $IP6TABLE -I FORWARD -p icmpv6 -j aICMPs
        $IP6TABLE -I OUTPUT -p icmpv6 -j aICMPs
        
        echo "   "+ ICMPV6 - INLIMIT + OUTPUT : [OK]
}

#####
# FORWARDING entre les cartes (vmbr0 <-> vmbr1)
#####

function ipv6_forwarding()
{
        # Allow forwarding
        $IP6TABLE -A FORWARD -m state --state NEW -i $VM1_IF -o $WAN_IF -s $SUBNETPREFIX -j ACCEPT
        $IP6TABLE -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#        $IP6TABLE -A FORWARD -i $VM1_IF -o $WAN_IF -j ACCEPT
#        $IP6TABLE -A FORWARD -o $VM1_IF -i $WAN_IF -j ACCEPT

        echo "   "+ IPv6 - FORWARDING : [OK]
}

#####
# ouverture des acces SSH a certaines IP
#####

function ssh_ok()
{
        for host in $SSH_OK
        do
                $IP6TABLE -A INPUT -s $host -p tcp --dport $port_ssh -j ACCEPT
                $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_ssh -j ACCEPT
        done

        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m state --state NEW -m recent --set --name SSH
        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP
        $IP6TABLE -A INPUT -p tcp --dport $port_ssh -j ACCEPT

        echo "   "+ SSH : [OK]
}

#####
# ouverture des acces RSYNC a certaines IP
#####

function rsync_ok()
{
        for host in $RSYNC_OK
        do
        $IP6TABLE -A INPUT -s $host -p tcp --dport $port_rsync -j ACCEPT
        $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_rsync -j ACCEPT
        done

        echo "   "+ RSYNC : [OK]
}

#####
# ouverture des ports tcp et upd
#####

function tcp_ok()
{
        for port in $TCP_OK
        do
        $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
        $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
        done

        echo "   "+ TCP : [OK]
}

function udp_ok()
{
        for port in $UDP_OK
        do
        $IP6TABLE -A INPUT -p udp --dport $port -j ACCEPT
        $IP6TABLE -A OUTPUT -p udp --sport $port -j ACCEPT
        done

        echo "   "+ UDP : [OK]
}

#####
# ouverture des acces HTTP(S) a linterface LAN & NET
#####

function server_http()
{
        HTTP_PORTS="80 443"
        for port in $HTTP_PORTS
        do
                # SOIT le service est sur LHOTE SOIT dans un VServer
                $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT
#               $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT
                $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
#               $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT
        done
        echo "   "+ APACHE : [OK]
}

#####-------------------------- START / STOP ----------------------------######
case "$1" in

start|restart)
$0 stop
echo "$0 Starting"
        kernel
        loopback

        generique
        
#       icmpv6_generique
        icmpv6_huc
        icmpv6_limit
	
        ipv6_link_multicast
        ipv6_forwarding
        
        ssh_ok
        rsync_ok
        tcp_ok
        udp_ok

        server_http
        
        policy DROP
;;

stop)
        echo "$0 Stop"
        $IP6TABLE -F
        $IPTABLE -t nat -F
        $IP6TABLE -Z
        $IP6TABLE -X
        policy ACCEPT
        ;;
status)
        echo "$0 Status"
        $IP6TABLE -L -vn
        ;;

*)
echo "usage : $0 (status|start|stop|restart)"
;;

esac

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

ln -s /root/firewall-ipv6.sh /etc/init.d/firewall-ipv6
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 :




Autheur de la page

LAB3W.ORJ

LAB3W.ORJ

  • Prénom : Olivier Romain Luc
  • Nom : Jaillet-ramey
  • Arrivé le mardi 19 octobre 1976 (1976/10/19 00:00)
    43 ans d'activité !

Firefox Nighlty

Nos amis de Framasoft s'intéressent à Mozilla et leur ont posé des questions à propos de Nightly : Firefox Night-club, entrée libre !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready