S´ecurit´e/Firewall avec Netfilter et GNU/Linux

Transcription

S´ecurit´e/Firewall avec Netfilter et GNU/Linux
1/53
Sécurité/Firewall
avec
Netfilter et GNU/Linux
JJ
II
J
I
Retour
Fermer
2/53
c 2002 Vincent Deffontaines, Hervé Eychenne,
Copyright Jean-Pierre Messager, Alcôve.
Ce document peut être reproduit, distribué et/ou modifié selon
les termes de la Licence GNU de Documentation Libre GNU Free Documentation Licence) dans sa version 1.1 ou ultérieure telle que publiée, en anglais, par la Free Software Foundation ; sans partie invariante, avec comme première de couverture (front cover texts) les deux
premières pages, et sans partie considérée comme quatrième de couverture
Une copie de la licence peut être consultée à l’URL :
http://www.gnu.org/copyleft/fdl.html
Centre Paris Pleyel
Tél. : + 33 1 49 22 68 00
153 bd Anatole France
Fax : + 33 1 49 22 68 01
93200 Saint-Denis, France
E-mail : [email protected], Toile : www.fr.alcove.com
JJ
II
J
I
Retour
Fermer
3/53
Table des matières
1
2
Rappels réseau TCP/IP
1.1 Notion de paquet . . . .
1.2 Adresses IP et réseau . .
1.3 Adresses IP spéciales . .
1.4 Routage . . . . . . . . .
1.5 Protocoles . . . . . . . .
1.6 Ports . . . . . . . . . . .
1.7 Exemple d’applications .
1.8 Points à retenir . . . . .
Bases de Netfilter
2.1 Qu’est-ce que Netfilter ?
2.2 Principe de Netfilter . .
2.3 Le trajet d’un paquet . .
2.4 Chaı̂nes prédéfinies . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
8
9
9
10
10
10
11
.
.
.
.
12
12
13
14
15
JJ
II
J
I
Retour
Fermer
2.5
2.6
2.7
2.8
2.9
2.10
2.11
3
Exemples élémentaires . . . . . . . . .
Un exemple plus complexe . . . . . . .
Détails sur les états et les cibles . . . .
Principaux critères de correspondance
Syntaxe des règles de correspondance .
Créer d’autres chaı̂nes . . . . . . . . .
Quelques autres options utiles . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Un exemple pratique
3.1 L’architecture illustrée . . . . . . . . . . . . . . . . .
3.2 Les protections spécifiques du noyau . . . . . . . . .
3.3 Ignorer les redirections ICMP . . . . . . . . . . . . .
3.4 Ignorer les diffusions ICMP . . . . . . . . . . . . . .
3.5 Protection anti spoofing et traçage des martiens (paquets
dont la source n’est pas routable) . . . . . . . . . . .
3.6 Ignorer le routage par la source . . . . . . . . . . . .
3.7 Résistance au SYN flood . . . . . . . . . . . . . . . . .
3.8 Configuration générale du firewall . . . . . . . . . .
3.9 Variables de réseaux, d’interfaces et de machines . .
.
.
.
.
.
.
.
16
17
18
19
20
21
22
.
.
.
.
23
24
25
26
26
.
.
.
.
.
27
28
28
29
30
4/53
JJ
II
J
I
Retour
Fermer
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.21
3.22
3.23
3.24
3.25
3.26
Les chaı̂nes créées . . . . . . . . . . . . . . . . . .
Règles d’autorisation des connexions déjà établies
Les règles de saut . . . . . . . . . . . . . . . . . .
La chaı̂ne des paquets ICMP . . . . . . . . . . . .
Du réseau privé à la DMZ . . . . . . . . . . . . .
De l’extérieur vers la DMZ . . . . . . . . . . . . .
Comment dire non ? . . . . . . . . . . . . . . . .
Du réseau privé vers l’Internet . . . . . . . . . . .
Principe du NAT . . . . . . . . . . . . . . . . . .
De la DMZ vers le réseau privé . . . . . . . . . .
De l’Internet vers le réseau privé . . . . . . . . .
Protection du firewall lui-même . . . . . . . . . .
L’interface vers l’extérieur . . . . . . . . . . . . .
L’interface vers la DMZ . . . . . . . . . . . . . .
L’interface vers le réseau privé . . . . . . . . . . .
Règles pour les paquets émis du firewall . . . . .
Références et liens . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
32
33
35
36
37
39
40
41
43
44
45
46
47
48
49
50
5/53
JJ
II
J
I
Retour
Fermer
4
La détection d’intrusion
51
4.1 Snort . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2 Tripwire . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6/53
JJ
II
J
I
Retour
Fermer
7/53
Rappels réseau TCP/IP
Notion de paquet
Les datagrammes IP sont transmis sous forme de paquets
– Une adresse IP source
– Une adresse IP destination
Plusieurs protocoles sont supportés, principalement :
– ICMP
– UDP
– TCP
JJ
II
J
I
Retour
Fermer
8/53
Adresses IP et réseau
Une adresse IP (v4) est de la forme A.B.C.D
– Quadruplet d’entiers sur 8 bits (0–255)
– Identifie une machine unique
Décrit le réseau et distingue une machine dans un réseau
– Partie réseau/partie machine
– Le plus souvent réseau au début, machine ensuite
– Notion de masque, ex :
10.16.123.21/255.255.0.0 signifie
– Interface d’IP 10.16.123.21
– Appartient au réseau 10.16.*.* (classe B)
– Notation abrégée : 10.16.0.0/16
JJ
II
J
I
Retour
Fermer
9/53
Adresses IP spéciales
– Partie machine à 0 (ex : 10.16.0.0) : adresse de réseau
– Partie machine à 1 (ex : 10.16.255.255) : adresse de diffusion
Routage
Adresses de réseau et masque permettent le routage sur le réseau
local
Les autres adresses sont aiguillées sur des passerelles
– Route explicite pour un réseau (ex : pour 10.15.0.0/16 passer
par 10.16.123.1)
– Route par défaut
Un firewall IP est avant toute chose une passerelle
JJ
II
J
I
Retour
Fermer
Protocoles
10/53
ICMP : informations de connectivité (ex : ping)
UDP : Transmission de données non fiable
TCP : Transmission de données fiable (mode connecté)
Ports
Les paquets UDP et TCP impliquent la notion de port
Entier entre 1 et 65535 (16 bits)
Chaque paquet a un port source et un port destination
Permettent de différencier les connexions
Exemple d’applications
Quelques protocoles applicatifs avec les ports de destination :
UDP : tftp (port 69), DNS (en partie, port 53)
TCP : ftp (ports 20 et 21), http (port 80)
JJ
II
J
I
Retour
Fermer
11/53
Points à retenir
Un paquet IP se caractérise par :
Un protocole (ICPM, TCP, UDP, ...)
Un type dans le protocole (ICMP) ou pour UDP et TCP :
– Un numéro de port source
– Un numéro de port destination
Une adresse IP source
Une adresse IP destination
On peut connaı̂tre de plus :
– L’interface source
– L’interface de destination (après décision de routage)
JJ
II
J
I
Retour
Fermer
12/53
Bases de Netfilter
Qu’est-ce que Netfilter ?
Composant du noyau Linux (2.4.x)
– Intervient au plus tôt
– Performant
– Sûr
Peut nécessiter une reconfiguration/recompilation
Paramètrable par l’outil iptables
JJ
II
J
I
Retour
Fermer
13/53
Principe de Netfilter
Notion de règles et de cibles
– Règle : quels paquets ?
– Cible : que faire ?
Les règles sont dans des chaı̂nes
– Chaı̂nes prédéfinies (point d’entrée dans la pile IP)
– Chaı̂nes définies par l’utilisateur (structuration)
Pour le filtrage la première règle applicable est terminale
Si aucune règle ne s’applique : politique par défaut
JJ
II
J
I
Retour
Fermer
14/53
Le trajet d’un paquet
Paquet entrant
PREROUTING
(D-NAT)
Décision
de
routage
FORWARD
INPUT
POSTROUTING
(S-NAT)
Paquet sortant
OUTPUT
Processus
local
JJ
II
J
I
Retour
Fermer
15/53
Chaı̂nes prédéfinies
PREROUTING (avant la décision de routage)
– Permet de modifier l’adresse destination
POSTROUTING (en fin de parcours)
– Permet de modifier l’adresse source (ex : masquerading)
INPUT : destination locale
OUTPUT : source locale
FORWARD : vient d’ailleurs, va ailleurs
– La machine est configurée comme passerelle
– Chaı̂ne la plus importante pour un firewall
JJ
II
J
I
Retour
Fermer
16/53
Exemples élémentaires
iptables -L : montrer les chaı̂nes de filtrage
Politique par défaut :
iptables -P <CHAÎNE> <CIBLE>
ex : iptables -P INPUT DROP (interdit toute entrée)
(essayez ping localhost !)
Ajouter une règle :
iptables -A <CHAÎNE> <MATCH> <CIBLE>
ex : iptables -A INPUT -p icmp -j ACCEPT (autorise uniquement icmp)
(réessayez ping localhost)
Revenez à la normale :
iptables -P INPUT ACCEPT ; iptables -F
JJ
II
J
I
Retour
Fermer
17/53
Un exemple plus complexe
Interdire les entrées par défaut :
iptables -P INPUT DROP
Autoriser les réponses à des requêtes :
iptables -A INPUT -m state
--state ESTABLISHED,RELATED -j ACCEPT
Autoriser tout ce qui vient de l’intérieur :
iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT
Garder une trace du reste :
iptables -A INPUT -j LOG
--log-prefix="DROP OUTPOUT :"
Essayez de “pinguer” localhost, l’IP d’une interface, l’extérieur,
à partir de l’extérieur...
Le DNS fonctionne-t-il ? Pourquoi ?
Quel est l’intérêt d’une configuration de ce type ?
JJ
II
J
I
Retour
Fermer
18/53
Détails sur les états et les cibles
Les cibles :
– ACCEPT : autorise le passage du paquet
– DROP : supprime le paquet comme s’il n’avait jamais été reçu
– REJECT : supprime le paquet et génère une réponse ICMP vers
la source pour lui dire que la destination n’est pas accessible
– LOG : insère une ligne dans le journal noyau (règle non terminale)
Filtrage par état :
– NEW : nouveau paquet pour une connexion
– ESTABLISHED : partie d’une connexion déjà existante
– RELATED : nouveau mais lié à une connexion existante
(exemple : ftp-data, erreur ICMP)
JJ
II
J
I
Retour
Fermer
19/53
Principaux critères de correspondance
Les critères de sélection des paquets comprennent :
– Les entêtes IP
IP source (machine ou réseau) : -s
IP destination (machine ou réseau) : -d
Type de protocole (ICMP, TCP, UDP) : -p
Type dans le protocole, pour ICMP : --icmp-type
Numéro(s) de port, pour TCP et UDP (source ou destination) :
--dport et --sport
– La provenance physique
L’interface : d’entrée ou de sortie : -i et -o
Z -i n’a pas de sens dans OUTPUT et POSTROUTING
Z -o n’a pas de sens dans INPUT et PREROUTING
JJ
II
J
I
Retour
Fermer
20/53
Syntaxe des règles de correspondance
Valeur exacte d’un critère :
-{i|o} <if>
-{d|s} <ip>[/masque]
--{dport|sport} <port>
--icmp-type <type>
Toute valeur sauf une : ! <val>
Intervalle : port1:port2
JJ
II
J
I
Retour
Fermer
21/53
Créer d’autres chaı̂nes
En plus des chaı̂nes prédéfinies (points d’entrée dans la pile IP),
on peut créer ses propres chaı̂nes.
Une règle peut donner comme cible le nom d’une chaı̂ne
Équivalent d’un goto ou jump en programmation
Permet de structurer les règles
Commandes de création/suppression de chaı̂nes :
Créer une chaı̂ne : iptables -N <CHAÎNE>
Supprimer une chaı̂ne : iptables -X <CHAÎNE> (doit être
vide)
JJ
II
J
I
Retour
Fermer
22/53
Quelques autres options utiles
iptables -L -v -n
Montre les chaı̂nes et les règles, avec statistiques (-v)
et sans résolution de nom (-n)
iptables -Z
Remet les statistiques à zéro
iptables -D <CHAÎNE> <DESCRIPTION>
ou
iptables -D <CHAÎNE> N
Efface la règle décrite, ou la Ne règle
iptable -F <CHAÎNE>
Supprime toutes les règles d’une chaı̂ne
JJ
II
J
I
Retour
Fermer
23/53
Un exemple pratique
Un routeur/firewall connecte trois réseaux :
– Un réseau privé
– Une “zone démilitarisée” (DMZ) incluant les serveurs publics
– La connection vers un routeur Internet (RNIS, PPP, ADSL,
Cable, ...)
Nous allons configurer ce firewall ”à trois pattes”
JJ
II
J
I
Retour
Fermer
24/53
L’architecture illustrée
JJ
II
J
I
Retour
Fermer
25/53
Les protections spécifiques du noyau
Des paramètres réseau peuvent être fixé par /proc
On peut passer par sysctl (cf. /etc/sysctl.conf)
Certains sont indispensables :
echo 1 > /proc/sys/net/ipv4/ip forward
Z l’acheminement IP (routeur !)
echo 1 > /proc/sys/net/ipv4/ip dynaddr
Z IP dynamique (PPP, DHCP)
D’autres améliorent la sécurité
JJ
II
J
I
Retour
Fermer
26/53
Ignorer les redirections ICMP
echo 0 > /proc/sys/net/ipv4/conf/all/
accept redirects
echo 0 > /proc/sys/net/ipv6/conf/all/
accept redirects
echo 0 > /proc/sys/net/ipv4/conf/all/
send redirects
echo 0 > /proc/sys/net/ipv6/conf/all/
send redirects
Ignorer les diffusions ICMP
echo 1 > /proc/sys/net/ipv4/
icmp echo ignore broadcasts
JJ
II
J
I
Retour
Fermer
27/53
Protection anti spoofing et traçage des martiens (paquets dont
la source n’est pas routable)
echo 1 > /proc/sys/net/ipv4/conf/all/
rp filter
echo 1 > /proc/sys/net/ipv4/conf/all/
log martians
JJ
II
J
I
Retour
Fermer
28/53
Ignorer le routage par la source
echo 0 > /proc/sys/net/ipv4/conf/all/
accept source route
echo 0 > /proc/sys/net/ipv4/conf/all/
forwarding
echo 0 > /proc/sys/net/ipv4/conf/all/
mc forwarding
Résistance au SYN flood
echo 1280 > /proc/sys/net/ipv4/
tcp max syn backlog
echo 1 > /proc/sys/net/ipv4/tcp syn cookies
JJ
II
J
I
Retour
Fermer
29/53
Configuration générale du firewall
Installer le moins de choses possibles sur le firewall
Pas de services réseau (web, ftp, etc.)
Sauf éventuellement ssh (Secure Shell) accessible de l’intérieur
JJ
II
J
I
Retour
Variables de réseaux, d’interfaces et de machines
Script lancé au démarrage (/etc/init.d/)
Conventions de nommage : DMZ, GOOD, BAD pour DMZ,
30/53
privé, Internet
Utilisation de variables pour la lisibilité
DMZ NET=192.84.219.0/24
GOOD NET=172.16.0.0/16
IF BAD=192.84.218.1
IF DMZ=192.84.219.250
IF GOOD=172.16.0.250
BAD INT=eth0
DMZ INT=eth2
GOOD INT=eth1
DMZ SMTP=192.84.219.2
DMZ DNS=192.84.219.3
DMZ WWW=192.84.219.4
JJ
II
J
I
Retour
Fermer
31/53
Les chaı̂nes créées
Nommée sur le modèle source-destination :
iptables -N good-dmz
iptables -N bad-dmz
iptables -N good-bad
iptables -N dmz-good
iptables -N dmz-bad
iptables -N bad-good
Chaı̂ne spéciale pour les paquets d’erreur ICMP :
iptables -N icmp-acc
JJ
II
J
I
Retour
Fermer
32/53
Règles d’autorisation des connexions déjà établies
Pour TCP en général :
iptables -A INPUT -p TCP -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -p TCP -m state --state ESTABLISHED -j ACCEPT
Pour les protocoles spéciaux et le masquage :
iptables -A FORWARD -p TCP -m state --state RELATED -j ACCEPT
Z Pour ftp penser à insérer le module ip nat ftp
JJ
II
J
I
Retour
Les règles de saut
On insère ensuite les règles qui dirigent les paquet vers les chaı̂nes
33/53
que nous avons créées :
# iptables -A FORWARD -s $GOOD NET -d $DMZ NET
-i $GOOD INT -o $DMZ INT -j good-dmz
# iptables -A FORWARD -s $GOOD NET -i $GOOD INT
-o $BAD INT -j good-bad
# iptables -A FORWARD -s $DMZ NET -i $DMZ INT
-o $BAD INT -j dmz-bad
# iptables -A FORWARD -s $DMZ NET -d $GOOD NET
-i $DMZ INT -o $GOOD INT -j dmz-good
# iptables -A FORWARD -d $DMZ NET -i $BAD INT
-o $DMZ INT -j bad-dmz
# iptables -A FORWARD -d $GOOD NET -i $BAD INT
-o $GOOD INT -j bad-good
JJ
II
J
I
Retour
Fermer
34/53
On garde une trace et on rejette le reste :
(équivalent à une politique par défaut de refus)
iptables -A FORWARD -j LOG
iptables -A FORWARD -j DROP
JJ
II
J
I
Retour
Fermer
35/53
La chaı̂ne des paquets ICMP
On insère les règles d’acceptation de certaines erreurs ICMP
# iptables -A icmp-acc -p icmp --icmp-type
destination-unreachable -j ACCEPT
# iptables -A icmp-acc -p icmp --icmp-type
source-quench -j ACCEPT
# iptables -A icmp-acc -p icmp --icmp-type
time-exceeded -j ACCEPT
# iptables -A icmp-acc -p icmp --icmp-type
parameter-problem -j ACCEPT
Cette chaı̂ne sera appelée à partir des chaı̂nes source-destination
JJ
II
J
I
Retour
Fermer
36/53
Du réseau privé à la DMZ
Connexions issues de notre réseau privé vers les serveurs
(WWW, DNS, ...) de notre DMZ
On peut nommer les port par nom de service
(cf. /etc/services)
exemple, autoriser SMTP :
# iptables -A good-dmz -p tcp -d $DMZ SMTP
-m state --state NEW --dport smtp -j ACCEPT
De même pour WWW, FTP, etc...
Attention aux services plus complexes, comme le DNS :
# iptables -A good-dmz -p udp -d $DMZ DNS
--dport domain -j ACCEPT
# iptables -A good-dmz -p tcp -d $DMZ DNS
-m state --state NEW --dport domain -j ACCEPT
Z Utilise UDP et TCP !
JJ
II
J
I
Retour
Fermer
37/53
De l’extérieur vers la DMZ
Nous avons déjà une règle qui permet au trafic de réponse vers
l’extérieur de passer
Pour le courrier électronique :
– Accepter SMTP venant de l’extérieur
– Éventuellement accepter POP3 ou IMAP de l’extérieur
Pour le serveur de nom :
– Accepter les requètes DNS venant de l’extérieur
Pour le serveur WWW :
– Accepter les requètes venant de l’extérieur
JJ
II
J
I
Retour
Fermer
Ce qui se traduit par les règles suivantes (à compléter) :
SMTP :
38/53
# iptables -A bad-dmz -p tcp -d $DMZ SMTP
-m state --state NEW --dport smtp -j ACCEPT
DNS (Attention : UDP et TCP !)
...
WWW
...
Règles finales :
# iptables -A bad-dmz -p icmp -j icmp-acc
# iptables -A bad-dmz -j LOG
# iptables -A bad-dmz -j DROP
JJ
II
J
I
Retour
Fermer
39/53
Comment dire non ?
DROP détruit le paquet sans autre forme de procès
REJECT envoie une notification (ICMP) à la source
REJECT est de rigueur si la source est de confiance (réseau privé)
DROP découragera un assaillant (mais pourra indiquer la présence
d’un filtre)
DROP ne découragera pas un programme tentant des requètes
par erreur !
JJ
II
J
I
Retour
Fermer
40/53
Du réseau privé vers l’Internet
Nous souhaitons autoriser le Web, FTP et PING vers l’extérieur
Nous pourrions mettre en place un mandataire (proxy) tel SQUID
(une seule machine à autoriser) pour FTP et le Web
Il faut réécrire les adresses IP source au passage (les IPs de la
zone privée ne sont pas routables sur l’Internet)
JJ
II
J
I
Retour
Fermer
41/53
Principe du NAT
La traduction d’adresses réseau permet à un routeur de modifier les IPs à la volée
On peut modifier la source (SNAT) ou la destination (DNAT)
– Le masquerading est une forme de SNAT
– Le port forwarding est une forme de DNAT
– Le SNAT a lieu dans POSTROUTING
– Le DNAT dans PREROUTING
Il faut garder la mémoire des connexions en cours pour traduire
correctement les paquets dans l’autre sens
Z visible dans /proc/net/ip conntrack
JJ
II
J
I
Retour
Fermer
La règle de réécriture :
42/53
# iptables -t nat -A POSTROUTING -o $BAD INT -s $GOOD NET
-j SNAT --to $IF BAD
Z Dans le cas d’une IP dynamique utilisez MASQUERADE au
lieu de SNAT et ne précisez pas l’IP
Les règles de filtrages :
# iptables -A good-bad
--state NEW -j ACCEPT
# iptables -A good-bad
--state NEW -j ACCEPT
# iptables -A good-bad
# iptables -A good-bad
# iptables -A good-bad
-p tcp --dport www -m state
-p tcp --dport ftp -m state
-p icmp --icmp-type ping -j ACCEPT
-j LOG
-j REJECT
Les règles pour le reste :
# iptables -A good-bad -j LOG
# iptables -A good-bad -j REJECT
JJ
II
J
I
Retour
Fermer
43/53
De la DMZ vers le réseau privé
La plupart des protocoles TCP sont utilisés avec le client dans
le réseau privé et le serveur dans la DMZ (mail, Web, ...)
Z L’autorisation des connexions établies dans la chaı̂ne FORWARD les prend déjà en compte
Reste la partie UDP du DNS et ICMP :
# iptables -A dmz-good -p udp -s $DMZ DNS
--sport domain -j ACCEPT
# iptables -A dmz-good -p icmp -j icmp-acc
Et les règles finales :
# iptables -A dmz-good -j LOG
# iptables -A dmz-good -j REJECT
JJ
II
J
I
Retour
Fermer
44/53
De l’Internet vers le réseau privé
À part les retours de connexions déjà établies (déjà autorisés)
ne rien laisser passer :
# iptables -A bad-good -j LOG
# iptables -A bad-good -j DROP
Nous avons paramètré l’ensemble des connexions inter-réseaux
JJ
II
J
I
Retour
Fermer
45/53
Protection du firewall lui-même
La chaı̂ne INPUT nous permet de protéger le firewall lui-même
Nous créons trois chaı̂nes : une par interface :
# iptables -N bad-if
# iptables -N dmz-if
# iptables -N good-if
Nous insérons les trois règles de saut correspondantes :
# iptables -A INPUT -d $IF BAD -j bad-if
# iptables -A INPUT -d $IF DMZ -j dmz-if
# iptables -A INPUT -d $IF GOOD -j good-if
JJ
II
J
I
Retour
Fermer
46/53
L’interface vers l’extérieur
Protection contre l’IP spoofing :
# iptables -A bad-if -i ! $BAD INT -j LOG
# iptables -A bad-if -i ! $BAD INT -j DROP
Z L’IP correspond à l’extérieur mais vient d’une autre interface !
Accepter les réponses aux ping que nous pourrions faire :
# iptables -A bad-if -p icmp --icmp-type pong -j ACCEPT
Règles habituelles pour ICMP, sinon rejet :
# iptables -A bad-if -p icmp -j icmp-acc
# iptables -A bad-if -j LOG
# iptables -A bad-if -j DROP
JJ
II
J
I
Retour
Fermer
47/53
L’interface vers la DMZ
Protection contre l’IP spoofing (à compléter) :
...
Laisser passer les réponses DNS en UDP provenant du serveur
DNS :
# iptables -A dmz-if -p udp -s $DMZ DNS domain -j ACCEPT
Accepter les réponses aux pings, politique ICMP habituelle, et
noter et interdire le reste (à compléter) :
...
JJ
II
J
I
Retour
Fermer
48/53
L’interface vers le réseau privé
Protection contre l’IP spoofing (à compléter) :
...
Accepter les pings et les réponses aux pings :
...
Noter et interdire le reste :
...
JJ
II
J
I
Retour
Fermer
49/53
Règles pour les paquets émis du firewall
Autoriser ping vers tout réseau
...
Autoriser les requètes DNS vers tous les réseaux sauf privé
(TCP et UDP)
...
JJ
II
J
I
Retour
Fermer
50/53
Références et liens
Notre firewall est maintenant opérationnel. Voici des références
documentaires sur le sujet :
La page de manuel d’iptables : man iptables !
Le site principal de netfilter : http://netfilter.samba.org/
Des ressources sur netfilter : http://www.linuxguruz.org/iptables/
La page sécurité de Linux Weekly News, cf. http://lwn.net/
JJ
II
J
I
Retour
Fermer
51/53
La détection d’intrusion
Des outils permettent d’être averti en cas d’intrusion potentielle.
Par analyse en temps réel du trafic réseau entrant, comme snort
Par détection de changements suspects dans le système de fichier, comme tripwire
JJ
II
J
I
Retour
Fermer
52/53
Snort
Détecte les scans de ports TCP et UDP
Règles pour détecter des tentatives d’intrusion :
Par exemple : tentative de connexion FTP en tant que root :
alert tcp any any -> 192.168.1.0/24 21 \
(content : "USER root" ; nocase ; \
msg : "FTP root user access attempt" ;)
Snort est fourni avec des règles de surveillance pour beaucoup
de services réseau SMTP, Telnet, Netbios, DNS, Web, X11, RPC,
etc.
L’outil snort-stat génère un rapport envoyé par mail à l’administrateur (une fois par jour typiquement).
http://www.snort.org/
JJ
II
J
I
Retour
Fermer
53/53
Tripwire
Tripwire analyse le système de fichier pour détecter une éventuelle
intrusion réussie.
Détecte les changements suspects dans les droits d’accès (en
particulier le bit suid)
Détecte les modifications douteuses de contenus de fichiers
À lancer périodiquement en période de faible charge (gros consommateur de ressource)
Version libre : http://www.tripwire.org/, version commerciale : http:
//www.tripwire.com/
JJ
II
J
I
Retour
Fermer