OldGentooWiki:Utilisation de Iptables pour un seul ordinateur
De Gentoo-Quebec.
Indes des trucs et astuces avancés
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
Configuration du noyau pour Iptables
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
#!/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
À 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 :
# 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
