FILTRAGE de PAQUETS NetFilter

Transcription

FILTRAGE de PAQUETS NetFilter
TP RESEAUX MMI Semestre 3 FILTRAGE de PAQUETS NetFilter OBJECTIF : Introduction à Netfilter. Configuration d'un firewall. MATERIELS : (Machines Virtuelles) 1 Serveur Debian avec apache d'installé, 1 Poste sous Windows XP. 1 Machine Debian faisant office de Routeur/Pare-­‐feu SCHEMA DU RESEAU : RESEAU SALLE
Serveur WEB
192.168.N.2
Serveur FTP
172.16.100.1
192.168.N.0
Poste XP
172.16.N.2
192.168.N.3
172.16.0.0
192.168.N.254
Serveur DNS
172.16.0.1
Routeur
VOTRE RESEAU
172.16.X.2
192.168.X.254
192.168.X.0
Serveur WEB
192.168.X.2
Poste XP
AUTRE RESEAU
192.168.X.3
PARTIE 1 : CREATION et CONFIGURATION DES MACHINES (Voir TP4a) Avant de continuer, vérifiez que vous communiquer bien avec l’ensemble de la Salle !! PARTIE 2 : PREMIER PAS AVEC NETFILTER LES TABLES : filter, nat, mangle LES CHAINES : PREROUTING, INPUT, OUTPUT, FORWARD, POSTROUTING LES CIBLES : ACCEPT, DROP, REJECT, LOG, MASQUERADE, SNAT, DNAT, RETURN OPTIONS DE LA COMMANDE IPTABLES : OPTION RÔLE -­‐L chaine Affiche toutes les règles de la chaine spécifiée -­‐ nL pour afficher les valeurs en numérique. -­‐F chaine Supprime toutes les règles de la chaine spécifiée Si aucune chaine n'est précisée, toutes les chaines de la table sont vidées -­‐N Nom chaine Crée une nouvelle chaine utilisateur -­‐X Nom chaine Supprime la chaine utilisateur. Si aucun nom n'est précisé, toutes les chaines utilisateurs sont supprimées -­‐P chaine cible Modifie la cible par défaut de la chaine -­‐A chaine règle Ajoute une règle à la fin de la chaine -­‐I chaine N°Place règle Insère une règle avant celle indiquée. La place de cette règle est indiquée par un n°. Si aucun n° de place n'est précisé, la nouvelle règle est insérée au début de la chaine. -­‐D chaine N°Place [ou règle] Supprime une règle de la chaine. On peut préciser le n° de place de la règle dans la chaine, soit sa définition (tests de concordance et cible) -­‐ R chaine N° Place règle Remplace une règle de la place précisée par une autre LISTE abrégée DES TESTS DE CONCORDANCE : La négation peut être précisée par le point d'exclamation ! mis avant l'argument. Test Option Complète Option Abrégé Valeurs Adresse IP Source -­‐-­‐source @IP -­‐s @IP @IP = IP en Décimal Adresse IP Destination -­‐-­‐destination @IP -­‐d @IP @IP = IP en Décimal Interface d'entrée -­‐-­‐in-­‐interface Interface -­‐i Interface Interface = eth0, ppp0, … Interface de sortie -­‐-­‐out-­‐interface Interface -­‐o Interface Interface = eth0, ppp0, … Protocole -­‐-­‐protocol Proto -­‐p Proto Proto = udp, tcp, icmp ou all Port source -­‐-­‐source-­‐port Port -­‐-­‐sport Port Port = N° de port ou Nom du service associé 25:110 teste tous les ports de 25 à 110 -­‐m muliport -­‐sport 53,80 teste les ports 53 et 80 Port destination -­‐-­‐destination-­‐port Port -­‐-­‐dport Port Port = N° de port ou Nom du service associé 25:110 teste tous les ports de 25 à 110 -­‐m muliport -­‐sport 53,80 teste les ports 53 et 80 Etat du paquet -­‐-­‐state Etat Etat = NEW, ETABLISHED, RELATED ou INVALID QUELQUES PARAMETRES DE CIBLE : Les cibles sont précisées en fin de commande par l'option : -­‐-­‐jump (ou –j) Paramètre Cible Description -­‐-­‐log-­‐prefix ChaineCaractères LOG Préfixe de la ligne dans le journal (log). La chaine doit faire moins de 30 caractères et sera ajoutée devant chaque ligne insérées dans les fichiers de logs. -­‐-­‐reject-­‐with TypeMessage REJECT Indique quel type de message est envoyé vers la machine dont le paquet est rejeté. Exemples : icmp-­‐net-­‐unreachable (Réseau inaccessible) icmp-­‐host-­‐unreachable (Machine inacessible) icmp-­‐port-­‐unreachable (Port inacessible) icmp-­‐proto-­‐unreachable (Protocole inacessible) icmp-­‐net-­‐prohibited (Réseau Interdit) icmp-­‐host-­‐prohibited (Machine Interdite) tcp-­‐reset (Envoie d'un paquet avec le flag RST pour fermer la connexion) EXEMPLE 1 : BLOCAGE DU PING sur l'interface de bouclage du PAREFEU : •
Vérifiez que votre interface de bouclage fonctionne correctement (0% de paquets perdus) : ping –c 1 127.0.0.1 Créez une nouvelle chaîne utilisateur nommée LOG_DROP pour rejeter les paquets et enregistrer dans le fichier journal (/var/log/messages) les paquets rejetés. •
iptables –N LOG_DROP
iptables –A LOG_DROP –j LOG –-log-prefix "PING "
iptables –A LOG_DROP –j DROP
# Création d'une nouvelle chaine LOG_DROP # Ajout d'une règle LOG dans la chaine LOG_DROP # Ajout d'une règle DROP dans la chaine LOG_DROP
•
Appliquez un filtre sur la chaine d'entrée INPUT iptables –t filter –A INPUT –p icmp –d 127.0.0.1 –j LOG_DROP
#Filtre les ping sur l'adresse de loopback #La cible est la chaine LOG_DROP •
Vérifiez la prise en compte des modifications iptables –nL INPUT
# Affiche les chaines de la table filter (par défaut) Effectuez un nouveau ping vers l'interface de routage (100% d'échec) Consultez le fichier /var/log/messages et vérifiez que le trafic icmp a bien été enregistré avec le préfixe PING •
# ping –c 2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. --- 127.0.0.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1008ms # less /var/log/messages | grep PING Mar 28 02:03:01 FIREWALL Kernel: [ 229.123452] PING IN=lo OUT= MAC:00:00:00:00:00:00:00:00:00:00:00:00:0
0:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=84 TOX=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0
ID=1237 SEQ=1 … •
Supprimez la règle de la chaine INPUT iptables –D INPUT 1
iptables –nL INPUT
# Supprime la règle 1 de la chaine INPUT # Affiche les chaines de la table filter (par défaut) EXERCICE : Créez une règle pour interdire complètement le ping vers votre parefeu depuis n'importe quelle machine du réseau de la Salle. •
•
Testez votre nouvelle règle. Vérifiez dans le fichier de log. Sauvegardez vos règles : iptables-save > /etc/network/iptables-filter.conf Modifiez le fichier /etc/network/interfaces pour que ses règles soient reprises en compte au démarrage de la machine. Ajoutez la ligne suivante à la fin du fichier. •
#Ligne à ajouter à la fin du fichier /etc/network/interfaces pre-up iptables-restore < /etc/network/iptables-filter.conf •
Rebootez et vérifier que votre règle est toujours active. EXEMPLE 2 : LIMITER L'ACCES AU SERVICE WEB SUR LE SERVEUR DEBIAN: A FAIRE SUR LE SERVEUR DEBIAN (PAS LE FIREWALL !!!) APACHE ET PROFTPD SONT INSTALLES SUR CE SERVEUR A l'aide du navigateur, vérifiez que le poste Windows accède bien au service Web (Apache) et au service FTP (ProFtpd). Si nécessaire, créez un utilisateur pour l'accès au FTP. •
•
Vérifiez quels sont les services réseaux actifs sur votre serveur Debian : #netstat –ltp
#netstat –lup
#montre les services utilisant TCP #montre les services utilisant UDP Créez de nouvelles règles dans la chaîne INPUT de la table filter pour tester et accepter les accès au service http Rejetez tous les autres services (FTP,DNS, SMTP,..) venant du réseau . •
iptables –t filter –A INPUT –p tcp –-dport 80 –j ACCEPT
iptables –t filter –A INPUT –i eth0 –p udp –j REJECT
iptables –t filter –A INPUT –i eth0 -p tcp –j DROP
#Accepte les paquets à destination de www #Refuse tous les paquets UDP arrivant d'eth0 #Refuse tous les paquets TCP sans notification Créez de nouvelles règles dans la chaîne OUTPUT de la table filter pour autoriser le service http à répondre aux requêtes du réseau et loguer les réponses. •
iptables –t filter –A OUTPUT –p tcp –-sport 80 –j LOG –-log-prefix "WEB " iptables –t filter –A OUTPUT –p tcp –-sport 80 –j ACCEPT
#Accepte les paquets venant du service web Vérifiez la table filter (iptables –nL) et testez vos règles en interrogeant le serveur à partir du poste XP. Vérifiez les logs .Sauvegardez vos règles et modifiez votre configuration pour les prendre en compte au démarrage. •
•
QUESTION : Votre serveur peut-­‐il dialoguer avec un autre serveur WEB ? Pourquoi ? PARTIE 3 : CONFIGURER VOTRE FIREWALL A FAIRE SUR LE FIREWALL Configurez votre parefeu à l'aide de règles iptables pour répondre aux conditions suivantes : 1. Votre poste XP doit pouvoir interroger les serveurs WEB des autres tables en utilisant leurs noms (www.domN.net). 2. Les postes XP des autres tables doivent pouvoir interroger votre serveur WEB. 3. Votre poste XP ne doit pas pouvoir communiquer avec le serveur FTP de la Salle (172.16.100.1). 4. Votre serveur WEB et votre FIREWALL doivent pouvoir communiquer avec le serveur FTP de la Salle (172.16.100.1). 5. Les postes DEBIAN des autres tables ne doivent pas pouvoir accéder à votre serveur FTP. 6. Vous devez "loguer" les paquets des postes DEBIAN rejetés par votre firewall avec le préfixe : DEBFTP . 7. Vérifiez vos règles et testez-­‐les. 8. Sauvegardez vos règles et modifiez votre configuration pour les prendre en compte au démarrage. CORRECTION de l’exercice 3 (Notez que ce n’est pas la seule solution) : 1. iptables -­‐A INPUT -­‐s 192.168.N.3 -­‐p udp -­‐-­‐dport 53 -­‐j ACCEPT iptables -­‐A FORWARD -­‐s 192.168.N.3 -­‐p tcp -­‐-­‐dport 80 -­‐j ACCEPT iptables -­‐A FROWARD -­‐d 192.168.N.3 -­‐p tcp -­‐-­‐sport 80 -­‐j ACCEPT (Le parefeu fait office de serveur DNS) (pour les réponses des serveurs WEB) 2. iptables -­‐A FORWARD -­‐d 192.168.N.2 -­‐p tcp -­‐-­‐dport 80-­‐j ACCEPT 3.
4.
5.
6.
7.
8.
iptables -­‐A FORWARD -­‐s 192.168.N.2 -­‐p tcp -­‐-­‐sport 80 -­‐j ACCEPT (Pour les réponses du serveur) iptables -­‐A FORWARD -­‐s 192.168.N.3 -­‐d 172.16.100.1 -­‐j DROP (aucune communication entre les 2) iptables -­‐A FORWARD -­‐d 172.16.100.1 -­‐p tcp -­‐-­‐dport 21 -­‐j ACCEPT (pour le réseau, sauf XP bloqué avant) iptables -­‐A FORWARD -­‐s 172.16.100.1 -­‐p tcp -­‐-­‐sport 21 -­‐j ACCEPT (pour les réponses du serveur FTP) iptables -­‐A OUTPUT -­‐d 172.16.100.1 -­‐p tcp -­‐-­‐dport 21 -­‐j ACCEPT (pour le parefeu) iptables -­‐A INPUT -­‐s 172.16.100.1 -­‐p tcp -­‐-­‐sport 21 -­‐j ACCEPT (réponse du FTP au parefeu) iptables -­‐A FORWARD -­‐d 192.168.N.2 -­‐p tcp -­‐-­‐dport 21 -­‐j DROP (FTP depuis l'extérieur) iptables -­‐A FORWARD -­‐d 192.168.N.2 -­‐p tcp -­‐-­‐dport 21 -­‐j LOG -­‐-­‐log-­‐prefix "DEBFTP " (à mettre avant 5) ajoutez : iptables -­‐A FORWARD -­‐j DROP (rejette tout ce qui n'est pas accepté) iptables -­‐A OUTPUT -­‐p udp -­‐-­‐dport 53 -­‐j ACCEPT (Sortie DNS pour le parefeu) iptables -­‐A OUTPUT -­‐j DROP (rejette tout le reste en sortie du parefeu) Testez avec la commande ftp et le navigateur de XP iptables-­‐save > /etc/iptables.conf mettre dans /etc/network/interfaces : pre-­‐up iptables-­‐restore < /etc/iptables.conf