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

 Charge moyenne sur 1mn : 0.17 Charge moyenne sur 5mn : 0.34 Charge moyenne sur 15mn : 0.44


Comment faire pour créer des réseaux ; router une adresse, un réseau ; écouter, tracer les paquets sur un réseau.





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 :
  
  

Configurer un poste Linux pour naviguer sur InterNet

2 tutos en 1 + le firewall : Configurer un ordinateur sous Linux soit en mode routeur (2 cartes réseaux) soit en mode type poste de travail connecté derrière un routeur.

Informations

Dates
  • Publication : Lundi 22 decembre 2003
  • Modification : Dimanche 19 juillet 2020

Introduction

Je vais vous expliquer comment configurer notre poste pour pouvoir naviguer sur internet. Détailler ainsi les fichiers de configurations et voir les régles firewall de bases pour se protéger des attaques. Nous utilisons pour cette documentation un Linux Debian. Certains fichers de configuration pouraient changer d'emplacement sur d'autres distributions (Mandrake).

Nous commençons par voir la configuration d'un poste client (derrère un routeur) puis celle d'un poste utilisé comme routeur/firewall.

Plages d'adresses IPv4 :

Pour information il existe 3 "grandes" classes d'IPv4 pour notre réseau privé qui sont :

  • Classe A : 10.0.0.0/8 (plage IPv4 : 10.0.0.0 - 10.255.255.255) qui représente à 16 777 216 adresses IPv4
  • Classe B : 172.16.0.0/12 (plage IPv4 : 172.16.0.0 - 172.31.255.255) qui représente à 1 048 576 adresses IPv4
  • Classe C : 192.168.0.0/16 (plage IPv4 : 192.168.0.0 - 192.168.255.255) qui représente à 65 536 adresses IPv4

Plus la Classe D que l'on se sert pour le multicast 224.0.0.0 - Par exemple nos fournisseurs Internet s'en servent pour diffuser nos chaines télévisions.
Plus la Classe E réservée par IANA à un usage non déterminé.

Déclarons nos DNS

Les DNS servent à faire la relation entre une IP et un Nom. C'est à dire que si nos DNS ne sont pas déclarer nous pourons accéder à un serveur sur internet mais seulement en tappant son adresse IP (et non son Nom de domaine). ex : http://158.69.126.137 Une fois que nous aurons définis nos DNS nous pourons accéder à un serveur grâce à son nom de domaine (ex: http://zw3b.net) Donc déclarons nos DNS :

vi /etc/resolv.conf

et ajoutons plusieurs DNS (au moins 1):

nameserver 1Z7.0.0.1
nameserver 62.210.205.199
nameserver 158.69.126.137
  • DNS PUBLIC LAB3W/ZW3B : 62.210.205.199 - 158.69.126.137
  • DNS chez Free : 212.27.32.176 - 212.27.32.2 - 212.27.32.175
  • DNS chez Nérim : 62.4.16.70 - 62.4.16.80
  • DNS chez Wanadoo : 193.252.19.3 - 193.252.19.4
  • DNS chez Aol : 205.188.146.146 - 202.67.95.0
  • DNS chez Alice et Tiscali : 212.216.172.62
  • DNS chez Cegetel : 194.6.128.3 - 194.6.128.4
  • DNS chez Club-Internet : 194.117.200.10 - 194.117.200.15
  • DNS chez Neuf Telecom : 212.30.96.108 - 213.203.124.146
  • DNS chez Numéricable : 81.220.255.4 - 80.236.0.68
  • DNS chez Télé2 : 130.244.127.161 - 130.244.127.162
  • DNS chez Liberty Surf : 194.149.160.9 - 194.149.160.9
  • DNS chez Magic Online : 194.149.160.9 - 194.149.160.1

DNS publics (accessible depuis n'importe quel accès Internet) : 194.2.0.20 - 194.2.0.50 - 195.132.0.132 - 195.132.0.193

J'ajoute comment-faire un DNS sous Linux > serveurs > Configuration BIND9 Masters et Slaves

Naviguer depuis un poste derrière un routeur

La commande pour savoir qu'elles sont nos interfaces ethernet configurées est ifconfig.

Si vous n'avez pas cette commande je vous suggère d'installer ces paquets grâce à la commande apt install iputils-ping dnsutils net-tools whois ipv6toolkit ipv6pref qui sont logiciels/commandes réseaux.

ifconfig

Nous devons actuellement trouver 1 interface : L'interface lo (boucle locale : interne à la machine) :

lo        Lien encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:11650 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:5509007 (5.2 MiB)  TX bytes:5509007 (5.2 MiB)

Pour assigner temporairement* une adresse IP à notre carte nous utilisons ifconfig ou la commande ip :

ifconfig eth0 192.168.0.2

ou

ip -4 address add 192.168.0.2/24 dev eth0

Maintenant en tapant ifconfig nous devions voir notre carte que nous venons de configurer. On doit trouver 2 interfaces. Notre carte ethernet et l'interface loop (local) :

eth0      Lien encap:Ethernet  HWaddr 00:E0:18:DC:94:3E
          inet adr:192.168.0.2  Bcast:192.168.92.255  Masque:255.255.255.0
          adr inet6: fe80::2e0:18ff:fedc:943e/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1323496476 (1.2 GiB)  TX bytes:3286670833 (3.0 GiB)
          Interruption:177 Adresse de base:0x2000

lo        Lien encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:11650 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:5509007 (5.2 MiB)  TX bytes:5509007 (5.2 MiB)

Pour définir une passerelle (gw) nous devons définir la route et l'adresse IPv4 de la passerelle que prendra les packets pour accéder à internet.

route add -net default gw 192.168.0.1

où ici l'adresse IP de la passerelle est 192.168.0.1

  • temporairement parce qu'au prochain reboot votre carte ne sera plus configurée.

Nous pouvons aussi utiliser la commande ip de cette manière :

ip -4 route add default via 192.168.0.1


Pour que notre carte ethernet soit prise en compte au boot/démarage de la machine nous devons éditer le fichier de configuration des interfaces réseau.

vi /etc/network/interfaces

et y ajouter :

auto eth0
iface eth0 inet static
        address 192.168.0.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1


Nous pouvons (ou pas de suite) relancer la configuration du fichier réseau /etc/network/interfaces de cette manière :

/etc/init.d/networking restart

Naviguer depuis un poste connecté directement à Internet

Donc la commande pour savoir qu'elles sont les interfaces ethernet configurées est ifconfig

ifconfig

Actuellement voilà ce que nous voyons (l'interface local (lo)) :

lo        Lien encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:11650 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:5509007 (5.2 MiB)  TX bytes:5509007 (5.2 MiB)

Déclarons une IP à notre carte : Vérifions si notre FAI à un serveur DHCP nous permettant de déclarer l'IP de notre carte relié au modem :

dhclient eth0

dhclient se connecte de l'interface eth0 sur le serveur DHCP pour qu'il lui assigne une IP (par rapport à sa mac adresse ou à la classe d'IP). Voilà nous avons maintenant notre carte eth0 configurée. Nous devons voir l'interface loop (lo) avec comme IP : 127.0.0.1 et notre carte ethernet (eth0) avec comme IP : 1.2.3.4 reliée au modem :

eth0      Lien encap:Ethernet  HWaddr 52:54:05:F5:95:BE
          inet adr:1.2.3.4  Bcast:1.2.3.255  Masque:255.255.255.0
          adr inet6: fe80::5054:5ff:fef5:95bc/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1323496476 (1.2 GiB)  TX bytes:3286670833 (3.0 GiB)
          Interruption:177 Adresse de base:0x2000

lo        Lien encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:11650 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:5509007 (5.2 MiB)  TX bytes:5509007 (5.2 MiB)

Pour que notre carte ethernet soit prise en compte au boot (démarage) de la machine nous devons éditer le fichier de config des interfaces réseau.

vi /etc/network/interfaces

et y ajouter :

auto eth0
iface eth0 inet dhcp

Faire de notre machine un routeur

Si nous souhaitons faire de cette machine une passerelle/routeur, nous devons avoir une carte supplémentaire qui sera connecté au switch du réseau ou directement à un autre pc grâce à un cable RJ45 croisé. Occupons nous de notre réseau privé :

ifconfig eth1 192.168.0.1

Nos 2 cartes sont configurées, en tappant ifconfig vous devez voir quelque chose approchant cela :

eth0      Lien encap:Ethernet  HWaddr 52:54:05:F5:95:BE
          inet adr:1.2.3.4  Bcast:1.2.3.255  Masque:255.255.255.0
          adr inet6: fe80::5054:5ff:fef5:95bc/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1323496476 (1.2 GiB)  TX bytes:3286670833 (3.0 GiB)
          Interruption:177 Adresse de base:0x2000

eth1      Lien encap:Ethernet  HWaddr 00:10:A7:1A:50:65
          inet adr:192.168.0.1  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: fe80::2e0:18ff:fedc:943e/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1323496476 (1.2 GiB)  TX bytes:3286670833 (3.0 GiB)
          Interruption:177 Adresse de base:0x2000
 

lo        Lien encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:11650 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
           RX bytes:5509007 (5.2 MiB)  TX bytes:5509007 (5.2 MiB)

Ajoutons au fichier de conf des interfaces réseau notre carte eth1.

vi /etc/network/interfaces

et y ajouter :

auto eth1
iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255

Et faire le routage grâce à iptables qui permettra aux autres machines du réseau de pouvoir naviguer sur Internet. Iptables permet de configurer des règles de pare-feu ainsi que d'activer le Masquerading. Le masquerading permet de "cacher" toutes les adresses de notre réseau local. Les paquets partent sur Internet avec comme adresse source l'adresse de la passerelle. Notre réseau local est invisible sur internet (rappelez-vous que nous n'avons qu'une adresse IP attribuée par notre FAI et qu'il faut la partager).

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

ou

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT -o eth1 --to-source 1.2.3.4

sans oublier d'activer dans le noyeau le forward. à la volé :

echo 1 > /proc/sys/net/ipv4/ip_forward

en permanant :

vi /etc/network/options 

et remplacer ip_forward=no par ip_forward=yes

Explications pour configurer le pare-feu de notre machine routeur

On commence par configuer les "accés" à notre machine locale (la passerelle) : on va tout fermer :

# Fermer les portes
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

on accepte les réponses des requêtes qui sortent de notre firewall :

# On accepte tous ce qui vient d'ici
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

on va autoriser l'accés à notre machine routeur/firewall sur le port 22 (SSH) du réseau local :

# Autoriser a se connecter sur la passerelle du réseau local
iptables -A INPUT -i eth1 -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT

On continue en nous attaquant au réseau local (LAN) : on souhaite laisser passer toutes les requêtes vers et venant notre réseau local pour profiter entièrement de notre accès à Internet.

# Acces complet au net pour le LAN sur eth1
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT

Voilà notre firewall est configuré. Imaginez maintenant que vous avez un serveur (logiciel) sur un poste de votre réseau local, il faudra alors router le port en question vers la machine serveur (toujours pour faire croire au réseau InterNet que votre machine passerelle (avec l'ip de votre FAI) héberge le serveur logiciel en question). Par exemple pour un serveur Web sur la machine 192.168.0.5 du réseau local et que votre IP Internet est 1.2.3.4

# WEB Serveur
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.5:80
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 443 -j DNAT --to-destination 192.168.0.5:443

ou tiens, un client p2p comme eMule :

iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 4657 -j DNAT --to-destination 192.168.0.8:4657

En espèrant que cela poura vous aider. Bien sûr cet article ne se veut pas exhaustif mais peut vous aider à comprendre le fonctionnement d'une configuration pour naviguer sur InterNet d'un Linux. Les configurations pouvent changer en fonction de ce que vous voulez faire et de votre raccordement InterNet.


NdMoi-même 2020/04/09 : Je vous met ici un firewall IPv4 que je vous concoctais (ajouter vos règles selon les services que vous proposez) pour vivre en toutes sécurités ;)

On édite vim /root/firewall.sh :

#!/bin/bash
### BEGIN INIT INFO
# Provides:          firewall
# 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 commandes
IPTABLE="/sbin/iptables"
MODPROBE="/sbin/modprobe"

# interfaces reseaux
LOOP_IF="lo"
NET_IF="eth0"
VLAN_IF="eth1"

# IPv4 du serveur
NET_IP="1.2.3.4"
VLAN_IP="10.106.42.254"

# IPv4 des Containers
CT_WWW="10.106.42.1"

###########
IPS="$NET_IP $VLAN_IP $CT_WWW"
###########

# port du service ssh
PORT_SSH="22"

# ports tcp et udp a ouvrir
TCP_OK="514" # SYSLOG 
UDP_OK="69 123 161 514 546 547" # TFTP NTP SNMP SYSLOG DHCP

# ip qui ont acces en ssh au serveur
SSH_IP_OK="62.210.205.199 158.69.126.137" #

LOOPBACK="127.0.0.0/8"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"

MODULES="iptable_filter iptable_nat iptable_mangle 
         ip_tables ip_conntrack ip_conntrack_ftp 
         ipt_state ipt_limit ipt_multiport ip_nat_ftp"

#####-------------------------- VARIABLES ----------------------------######

#####-------------------------- FONCTIONS ----------------------------######

#####
# diverses optimisations et protection du noyau
#####

function kernel()
{
        for a in $MODULES  #load Modules
        do
                $MODPROBE $a
        done

        # Enable 8192 Connections to track
        #/bin/echo "32768" > /proc/sys/net/ipv4/ip_conntrack_max

        # Disable response to ping.
        /bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all

        # Disable response to broadcasts.
        /bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

        # Don't accept source routed packets.
        /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

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

        # Enable bad error message protection.
        /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

        # No spoof
        for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
           /bin/echo "1" > ${interface}
        done

        /bin/echo "1" > /proc/sys/net/ipv4/tcp_syncookies
        /bin/echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
        #/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


        # Log spoofed packets, source routed packets, redirect packets.
        /bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

        # Make sure that IP forwarding is turned on.
#       /bin/echo "1" > /proc/sys/net/ipv4/ip_forward
        
        echo "   "+ Options du kernel : [OK]
}

function synflood()
{
        ## SYN-FLOODING PROTECTION
        $IPTABLE -N syn-flood
        $IPTABLE -A INPUT -i $NET_IF -p tcp --syn -j syn-flood
        $IPTABLE -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
        $IPTABLE -A syn-flood -j DROP
        ## Make sure NEW tcp connections are SYN packets
        $IPTABLE -A INPUT -i $NET_IF -p tcp ! --syn -m state --state NEW -j DROP

        echo "   "+ Synflood Attack : [OK]
}

function spoofing()
{
        ## SPOOFING
        $IPTABLE -A INPUT -i $NET_IF -s $CLASS_A -j DROP
        $IPTABLE -A INPUT -i $NET_IF -s $CLASS_B -j DROP
        $IPTABLE -A INPUT -i $NET_IF -s $CLASS_C -j DROP
        $IPTABLE -A INPUT -i $NET_IF -s $CLASS_D_MULTICAST -j DROP
        $IPTABLE -A INPUT -i $NET_IF -s $CLASS_E_RESERVED_NET -j DROP
        $IPTABLE -A INPUT -i $NET_IF -s $LOOPBACK -j DROP
        echo "   "+ Spoofing Attack : [OK]
}

function logging()
{
        ## LOGGING
        # Any udp not already allowed is logged and then dropped.
        $IPTABLE -A INPUT  -i $NET_IF -p udp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES UDP-IN: "
#        $IPTABLE -A INPUT  -i $NET_IF -p udp -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A INPUT  -i $NET_IF -p udp -j DROP

        $IPTABLE -A OUTPUT -o $NET_IF -p udp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES UDP-OUT: "
#        $IPTABLE -A OUTPUT -o $NET_IF -p udp -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A OUTPUT -o $NET_IF -p udp -j DROP

        # Any icmp not already allowed is logged and then dropped.
        $IPTABLE -A INPUT  -i $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES ICMP-IN: "
#        $IPTABLE -A INPUT  -i $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A INPUT  -i $NET_IF -p icmp -j DROP

        $IPTABLE -A OUTPUT -o $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES ICMP-OUT: "
#        $IPTABLE -A OUTPUT -o $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A OUTPUT -o $NET_IF -p icmp -j DROP

        # Any tcp not already allowed is logged and then dropped.
        $IPTABLE -A INPUT  -i $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES TCP-IN: "
#        $IPTABLE -A INPUT  -i $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A INPUT  -i $NET_IF -p tcp -j DROP

        $IPTABLE -A OUTPUT -o $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES TCP-OUT: "
#        $IPTABLE -A OUTPUT -o $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A OUTPUT -o $NET_IF -p tcp -j DROP

        # Anything else not already allowed is logged and then dropped.
        # It will be dropped by the default policy anyway ........ but let's be paranoid.
        $IPTABLE -A INPUT  -i $NET_IF -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES PROTOCOL-X-IN: "
#        $IPTABLE -A INPUT  -i $NET_IF -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A INPUT  -i $NET_IF -j DROP

        $IPTABLE -A OUTPUT -o $NET_IF -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES PROTOCOL-X-OUT: "
#        $IPTABLE -A OUTPUT -o $NET_IF -m limit --limit 6/h --limit-burst 5
        $IPTABLE -A OUTPUT -o $NET_IF -j DROP

        echo "   "+ LOG BURST 5 : [OK]
}

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

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

        echo "   "+ On accepte la loop : [OK]
}

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

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

        echo "   "+ On fixe les portes : $1
}

#####
# on accepte tout ce qui sort et on fait du tracking
#####

function generique()
{
        for ip in $IPS
        do
            # Permettre à une connexion ouverte de recevoir du trafic en entrée.
            $IPTABLE -A INPUT -d $ip -m state --state ESTABLISHED,RELATED -j ACCEPT
            # Accepter le ping
            $IPTABLE -A INPUT -d $ip -p icmp -m limit --limit 5/s --limit-burst 4 -j ACCEPT

            $IPTABLE -A OUTPUT -s $ip -m state ! --state INVALID -j ACCEPT

        done
        
        # Limiter un ping par seconde par adresse IPv4
        $IPTABLE -I INPUT -p icmp -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 32 -j DROP
        
        echo "   "+ Retour REQ : [OK]
        echo "   "+ Ping Limit 5/s Burst 4 : [OK]
}

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

function ssh_ok()
{
        # On autorise les IPv4 à accéder au SSH
        for host in $SSH_IP_OK
        do
        	$IPTABLE -A INPUT -i $NET_IF -s $host -p tcp --dport $PORT_SSH -j ACCEPT
        done

        # On autorise les autres à accéder au SSH avec une limite de 3 connexions / minute
        $IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m state --state NEW -m recent --set --name SSH
        $IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP
        $IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -j ACCEPT
        
	echo "   "+ SSH : [OK]
}

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

function tcp_ok()
{
        for port in $TCP_OK
        do
        	$IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT
        	$IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT
        done
        
        echo "   "+ TCP : [OK]
}

function udp_ok()
{
        for port in $UDP_OK
        do
        	$IPTABLE -A INPUT -p udp --dport $port -j ACCEPT
        	$IPTABLE -A OUTPUT -p udp --sport $port -j ACCEPT
        done
        
        echo "   "+ UDP : [OK]
}

#####
# ouverture des acces HTTP(S)
#####

function server_http()
{
        HTTPX_PORTS="80 443"

        for port in $HTTPX_PORTS
        do
                # SOIT le service est sur LHOTE SOIT dans un VServer
                $IPTABLE -A INPUT -p tcp --dport $port -m tcp -m state --state NEW -m recent --set --name WEB_$port -j ACCEPT
#               $IPTABLE -A INPUT -p tcp --dport $port -m recent --update --seconds 60 --hitcount 1000 --rttl --name WEB_$port -j DROP
                $IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT

                $IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT

                # SOIT le service est dans un VServer ou AUTRE Machine
                $IPTABLE -t nat -A PREROUTING -d $NET_IP -p tcp --dport $port -j DNAT --to-destination $CT_WWW:$port

        done

        echo "   "+ HTTP(S) : [OK]
}

#####
# on route vers&pour les vservers (a peaufinner)
#####

function vservers_nat()
{
        # On active le forward du noyeau
        /bin/echo "1" > /proc/sys/net/ipv4/ip_forward

        # On active le forward entre les cartes réseaux
        for interface in /proc/sys/net/ipv4/conf/*/forwarding; do
           /bin/echo "1" > ${interface}
        done
        
        # Acces complet au NET pour le VLAN
        $IPTABLE -A FORWARD -i $NET_IF -o $VLAN_IF -j ACCEPT
        $IPTABLE -A FORWARD -o $NET_IF -i $VLAN_IF -j ACCEPT
	
        # On route le CT_WWW à sortir sur Internet avec l'IP publique
        $IPTABLE -t nat -A POSTROUTING -o $NET_IF -s $CT_WWW   -j MASQUERADE

        echo "   "+ VSERVERS NAT : [OK]
}

#####-------------------------- FONCTIONS ----------------------------######

#####-------------------------- START / STOP ----------------------------######

case "$1" in

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

        ssh_ok

        tcp_ok
        udp_ok

        vservers_nat

        server_http
        
        logging
        
        policy DROP
;;


stop)
        echo "$0 Stop"
        $IPTABLE -F
        $IPTABLE -t nat -F
        $IPTABLE -Z
        $IPTABLE -X
        policy ACCEPT
        ;;

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

esac

#####-------------------------- START / STOP ----------------------------######

Mettre le script en execution pour root chmod u+x /root/firewall.sh puis lancer /root/firewall.sh (start|stop|restart).

Une fois que tout est Okay :

  • Créer un lien symbolique dans initd comme cela ln -s /root/firewall.sh /etc/init.d/firewall
  • Puis ajouter le script au démarage de la machine en lancant la commande update-rc.d firewall defaults

J'ajoute un lien qui explique bien le Routage avancé avec marquage de paquet et rp_filter (DLFP) pour celles et ceux que çà intéresseraient.



Cordialement,
Romain


<< Howto Proxmox VE : OpenVZ, KVM

C'est l'heure de l'IPv6 ! >>



Liens ZW3B.IPv6 : Internet Protocol V6

ZW3B.Links :

  1. How to - Anonymat sur InterNet
  2. How to - Virtual Private Network (VPN)

  3. How to - GNU/Linux > Environnement > Howto Proxmox VE : OpenVZ, KVM

  4. How to - GNU/Linux > Sécurité > Howto VPN serveur : IPSec + XL2TP
  5. How to - GNU/Linux > Sécurité > Howto VPN client : IPSec + XL2TP
  6. How to - Windows > Sécurité > Configurer un VPN client : IPSec + XL2TP
  7. How to - GNU/Linux > Shells > VPN IPSec + XL2TP : Routage des sous réseaux clients

  8. How to - GNU/Linux > Réseaux > OLSR - Optimized Link State Routing protocol

  9. How to - GNU/Linux > Serveurs > Configuration BIND9 Masters et Slaves



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