OldGentooWiki:Utilisation de Iptables pour un seul ordinateur

De Gentoo-Quebec.

Go-previous.png Indes des trucs et astuces avancés


Gentoo-quebec+Funtoo-quebec.png

Utilisation de Iptables pour un seul ordinateur


L'utilisation et la configuration d'un Firewall sous Linux est un sujet délicat, car il faut avoir de la patience et surtout les compétences pour bien configurer celui-ci, sinon nous pouvons être complètement exposé sur internet sans défense.

Voici le script qui va servir d'exemple tout au long de ce wiki.

C'est un petit firewall qui peut vous protéger quand vous aller dans des cafés internet par exemple.

Sommaire

Installation de Iptables

Gnome-dev-computer.png
# emerge -av iptables

Configuration du noyau pour Iptables

Configuration des options nécessaire section Networking

Network Support 
 --> Networking options 
     [*] Network packet filtering framework (Netfilter)  ---> 
        [*]   Advanced netfilter configuration (NEW)  
        Core Netfilter Configuration  --->   
             <M> Netfilter LOG over NFNETLINK interface
             <M> Netfilter connection tracking support         
             <M> Connection mark tracking support 
             [*] Connection tracking events  
             <M>   UDP-Lite protocol connection tracking support    
             <M>   FTP protocol support
             <M>   IRC protocol support
             <M>   Connection tracking netlink interface      
             <M> Netfilter Xtables support (required for ip_tables) 
             <M>   "CONNMARK" target support 
             <M>   "MARK" target support
             <M>   "connmark" connection mark match support
             <M>   "conntrack" connection tracking match support
             <M>   "iprange" address range match support
             <M>   "length" match support
             <M>   "limit" match support     
             <M>   "mark" match support
             <M>   "multiport" Multiple port match support               
             <M>   "pkttype" packet type match support 
             <M>   "recent" match support
             <M>   "state" match support     
             <M>   "string" match support
             <M>   "tcpmss" match support   
        IP: Netfilter Configuration  --->  
             <M> IPv4 connection tracking support (required for NAT)
             [*] proc/sysctl compatibility with old connection tracking (NEW)
             <M> IP tables support (required for filtering/masq/NAT)
                <M>   "addrtype" address type match support
                <M>   "ah" match support
                <M>   "ecn" match support
                <M>   "ttl" match support 
                <M>   Packet filtering
                <M>   REJECT target support 
                <M>   LOG target support 
                <M>   ULOG target support  
                <M>   Full NAT 
                <M>   MASQUERADE target support 
                <M>   NETMAP target support
                <M>   REDIRECT target support 
                <M>   Basic SNMP-ALG support
                <M>   Packet mangling 
                <M>   CLUSTERIP target support (EXPERIMENTAL) 
                <M>   ECN target support 
                <M>   "TTL" target support 
                <M>   raw table support (required for NOTRACK/TRACE) 
                <M>   ARP tables support                               
                <M>   ARP packet filtering 
                <M>   ARP payload mangling            


Configuration de Iptables

script iptables.sh

#!/bin/bash

# Constantes
IPT=/sbin/iptables

IPTS="/sbin/iptables-save"

IPTR="/sbin/iptables-restore"

# Interface qui est dans votre réseau
WAN_IFACE="eth0"

# Interface Loopback

LOOP_IFACE="lo"
LOOP_IP="127.0.0.1"

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT

# Les tables sont effacées.
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Le comportement par défaut est de bloquer le trafic.
$IPT -P INPUT   DROP
$IPT -P OUTPUT  DROP
$IPT -P FORWARD DROP

# Si un packet est invalide, on le drop pour ne pas causer d'erreur
$IPT -A INPUT -i $WAN_IFACE -m state --state INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A INPUT -i $WAN_IFACE -m state --state INVALID -j DROP

# Tout le trafic venant de l'interface Loopback est accepté.
$IPT -A INPUT  -p ALL -i $LOOP_IFACE -j ACCEPT

# On accepte le trafic en entrée si et seulement si il a été initié par notre ordinateur.

$IPT -A INPUT -i $WAN_IFACE -p ALL  -m state --state ESTABLISHED,RELATED -j ACCEPT

# On accepte seulement les packet ICMP à une fréquence de 1 par seconde
$IPT -A INPUT -i $WAN_IFACE -p ICMP -m limit --limit 1/s -j ACCEPT 

# On drop les packets de type broadcast
$IPT -A INPUT -i $WAN_IFACE -m pkttype --pkt-type broadcast -j DROP

# Si le packet vient d'internet et il y a un problème au niveau des flags, on le drop.
$IPT -A INPUT -i $WAN_IFACE -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A INPUT -i $WAN_IFACE -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A INPUT -i $WAN_IFACE -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A INPUT -i $WAN_IFACE -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A INPUT -i $WAN_IFACE -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A INPUT -i $WAN_IFACE -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

$IPT -A OUTPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A OUTPUT -m state --state INVALID -j DROP

# On permet le trafic en sortie

$IPT -A OUTPUT -p ALL -s $LOOP_IP    -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LOOP_IFACE -j ACCEPT
$IPT -A OUTPUT -p ALL -o $WAN_IFACE -j ACCEPT


Cheminement par défaut des packets

Cheminement

À l’arrivée d’un paquet (après décision de routage) :

1. Si le paquet est destiné à l’hôte local Alors
2.       il traverse la chaîne INPUT.
3.       Si il n’est pas rejeté Alors
4.            il est transmis au processus impliqué.
5. Sinon
6.       Si le paquet est destiné à un hôte d’un autre réseau Alors
7.                 il traverse la chaîne FORWARD
8.                 Si il n’est pas rejeté Alors
9.                        il poursuit alors sa route
10.                Si le packet a traversé la chaîne FORWARD lors d'un échange LAN --> WAN, celui-ci va passer par la chaîne OUTPUT pour sortir définitivement du firewall et s'en aller vers l'internet.


Enfin, la clause FORWARD est utilisée seulement par le firewall et si celui-ci gère des adresses IP sous lui. De plus, la clause FORWARD est utilisée pour faire transiger le trafic entre le LAN et le WAN.

Pour les autres périphériques, c'est la clause OUTPUT qui est utilisée.

Mise en place du Firewall

Vous devez enregistrer ce fichier dans le répertoire /root

Par la suite, vous devez lancer les commandes suivantes pour activer le firewall :

script iptables.sh

# cd /root
# chmod +x iptables.sh
# ./iptables.sh
# iptables -L -v
# iptables-save
# /etc/init.d/iptables save
# rc-update add iptables default
# /etc/init.d/iptables start



Outils personnels