Cet article est un tutoriel sur le firewall linux iptables.
prérequis
accès du serveur à un répertoire de l'hôte
Nous aurons besoin de récupérer sur l'hôte les résultats obtenus sur le serveur. Ce dernier étant en ligne de commande, nous ne pourrons pas utiliser le copier-coller. Nous utiliserons donc une copie de fichiers vers l'hôte.rappel: pour que cette opération soit possible, les VMWareTools doivent avoir été installés sur l'OS virtualisé.
sur l'hôte:
VM → settings → options → shared folders → enabled until next power off or suspend, add → choisir le répertoire du TPsur le serveur:
serveur$ cd ~
serveur$ tar -xvzf /mnt/hgfs/TP3*/regles-filtrage.gz
serveur$ cd firewall
serveur$ sudo chmod 700 ./*
quelques scripts iptables
Nous décommenterons les lignes utiles au fur et à mesure que nous avancerons dans le tutoriel.
#script de configuration iptables
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#permettre a une connexion deja ouverte de recevoir du trafic
#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#2 interdire le protocole ICMP depuis localhost
#iptables -A INPUT -p icmp -j DROP
#iptables -A OUTPUT -p icmp -j DROP
#1 interdire le paquet s il ne provient pas de localhost
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
#3 interdire tout paquet en direction de ftp
#iptables -A INPUT -m state --state NEW -p tcp --dport 20:21 -j DROP
#4 interdire tout paquet sortant par eth0 dont le port est inf a 1024
#iptables -A OUTPUT -o eth0 -p tcp --dport 1:1024 -j DROP
#iptables -A OUTPUT -o eth0 -p udp --dport 1:1024 -j DROP
#5 interdire toute initialisation de connexion TCP sur eth0
#iptables -A INPUT -m state --state NEW -p tcp -i eth0 -j DROP
#iptables -A OUTPUT -m state --state NEW -p tcp -o eth0 -j DROP
#6 interdire toute reponse a ping
#iptables -A INPUT -p icmp -j DROP
#7 interdire toute connexion sur eth0 dont mac differente de celle machine
#iptables -A INPUT -i eth0 -m mac ! --mac-source 00:0c:29:35:6a:41 -j DROP
#8 interdire tout paquet provenant du reseau local sauf ceux en
# provenance du poste de travail
#iptables -A INPUT -i eth0 -s 192.168.0.2 -j ACCEPT
#iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP
#9 autoriser 5 tentatives de connexion TCP
# avec frequence 2 par minute
#iptables -A INPUT -m state --state NEW -m recent --set
#iptables -A INPUT -m state --state NEW -m recent --update --hitcount 6 -j DROP
#iptables -A INPUT -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
#10 journalise tout paquet entrant
#iptables -A INPUT -j LOG --log-prefix '[FIREWALL-DROP]'
0 test règles par défaut
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#permettre a une connexion deja ouverte de recevoir du trafic
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
serveur$ sudo bash ./monscripttestons la sortie:
serveur$ sudo iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
1 interdire le paquet s'il ne provient pas de localhost
#script de configuration iptables TP3
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#1 interdire le paquet s il ne provient pas de localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
serveur$ sudo bash ./monscript
2 interdire le protocole ICMP depuis localhost
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#2 interdire le protocole ICMP depuis localhost
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp -j DROP
#1 interdire le paquet s il ne provient pas de localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Nous voyons que le ping vers l'extérieur, vers localhost sont bloqués. Par contre, le protocole ftp sur localhost est accepté.
3 interdire tout paquet en direction de ftp
#script de configuration iptables TP3
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#3 interdire tout paquet en direction de ftp
iptables -A INPUT -m state --state NEW -p tcp --dport 20:21 -j DROP
4 interdire tout paquet sortant par eth0 dont le port est inf a 1024
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#4 interdire tout paquet sortant par eth0 dont le port est inf a 1024
iptables -A OUTPUT -o eth0 -p tcp --dport 1:1024 -j DROP
iptables -A OUTPUT -o eth0 -p udp --dport 1:1024 -j DROP
5 interdire toute initialisation de connexion TCP sur eth0
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#5 interdire toute initialisation de connexion TCP sur eth0
iptables -A INPUT -m state --state NEW -p tcp -i eth0 -j DROP
iptables -A OUTPUT -m state --state NEW -p tcp -o eth0 -j DROP
6 interdire toute reponse a ping
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#permettre a une connexion deja ouverte de recevoir du trafic
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#6 interdire toute reponse a ping
iptables -A INPUT -p icmp -j DROP
le ping sortant fonctionne. Le ping vers le serveur est bloqué.
7 interdire toute connexion sur eth0 dont mac differente de celle machine
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#7 interdire toute connexion sur eth0 dont mac differente de celle machine
iptables -A INPUT -i eth0 -m mac ! --mac-source 00:0c:29:35:6a:41 -j DROP
8 interdire tout paquet provenant du reseau local sauf ceux en provenance du poste de travail
#remise a zeroDepuis le serveur:
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#8 interdire tout paquet provenant du reseau local sauf ceux en
# provenance du poste de travail
iptables -A INPUT -i eth0 -s 192.168.0.2 -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP
Depuis l'intrus:
9 autoriser 5 tentatives de connexion TCP avec fréquence 2 par mn
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#9 autoriser 5 tentatives de connexion TCP
# avec frequence 2 par minute
iptables -A INPUT -m state --state NEW -m recent --set
iptables -A INPUT -m state --state NEW -m recent --update --hitcount 6 -j DROP
iptables -A INPUT -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
10 journalise tout paquet entrant
#remise a zero
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
#regles par defaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#10 journalise tout paquet entrant
iptables -A INPUT -j LOG --log-prefix '[FIREWALL-DROP]'
serveur$ cat /var/log/messages
(...)
Mar 16 11:08:43 serveurlinux kernel: [95470.709194] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:ef:ff:86:08:00 SRC=88.191.250.131 DST=192.168.0.2 LEN=1500 TOS=0x00 PREC=0x00 TTL=128 ID=325 PROTO=TCP SPT=80 DPT=49410 WINDOW=64240 RES=0x00 ACK PSH URGP=0
Mar 16 11:08:43 serveurlinux kernel: [95470.711124] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:ef:ff:86:08:00 SRC=88.191.250.131 DST=192.168.0.2 LEN=1500 TOS=0x00 PREC=0x00 TTL=128 ID=326 PROTO=TCP SPT=80 DPT=49410 WINDOW=64240 RES=0x00 ACK PSH URGP=0
Mar 16 11:08:43 serveurlinux kernel: [95470.713118] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:ef:ff:86:08:00 SRC=88.191.250.131 DST=192.168.0.2 LEN=1500 TOS=0x00 PREC=0x00 TTL=128 ID=327 PROTO=TCP SPT=80 DPT=49410 WINDOW=64240 RES=0x00 ACK PSH URGP=0
Mar 16 11:08:44 serveurlinux kernel: [95470.721431] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:ef:ff:86:08:00 SRC=88.191.250.131 DST=192.168.0.2 LEN=1412 TOS=0x00 PREC=0x00 TTL=128 ID=328 PROTO=TCP SPT=80 DPT=49410 WINDOW=64240 RES=0x00 ACK PSH URGP=0
Mar 16 11:08:44 serveurlinux kernel: [95470.724678] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:ef:ff:86:08:00 SRC=88.191.250.131 DST=192.168.0.2 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=329 PROTO=TCP SPT=80 DPT=49410 WINDOW=64239 RES=0x00 ACK URGP=0
Mar 16 11:08:44 serveurlinux kernel: [95470.767378] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:ef:ff:86:08:00 SRC=88.191.250.131 DST=192.168.0.2 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=330 PROTO=TCP SPT=80 DPT=49410 WINDOW=64239 RES=0x00 ACK PSH FIN URGP=0
Mar 16 11:08:55 serveurlinux kernel: [95482.264739] [FIREWALL-DROP]IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:56:c0:00:08:08:00 SRC=192.168.0.1 DST=255.255.255.255 LEN=44 TOS=0x00 PREC=0x00 TTL=128 ID=3807 PROTO=UDP SPT=56339 DPT=8612 LEN=24
Mar 16 11:08:55 serveurlinux kernel: [95482.264785] [FIREWALL-DROP]IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:56:c0:00:08:08:00 SRC=192.168.0.1 DST=255.255.255.255 LEN=44 TOS=0x00 PREC=0x00 TTL=128 ID=3808 PROTO=UDP SPT=56339 DPT=8612 LEN=24
Mar 16 11:08:57 serveurlinux kernel: [95484.282991] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:c0:00:08:08:00 SRC=192.168.0.1 DST=192.168.0.2 LEN=44 TOS=0x00 PREC=0x00 TTL=128 ID=3811 PROTO=UDP SPT=56341 DPT=8612 LEN=24
Mar 16 11:09:26 serveurlinux kernel: [95513.290985] [FIREWALL-DROP]IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:56:c0:00:08:08:00 SRC=192.168.0.1 DST=255.255.255.255 LEN=44 TOS=0x00 PREC=0x00 TTL=128 ID=3823 PROTO=UDP SPT=56344 DPT=8612 LEN=24
Mar 16 11:09:26 serveurlinux kernel: [95513.291070] [FIREWALL-DROP]IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:56:c0:00:08:08:00 SRC=192.168.0.1 DST=255.255.255.255 LEN=44 TOS=0x00 PREC=0x00 TTL=128 ID=3824 PROTO=UDP SPT=56344 DPT=8612 LEN=24
Mar 16 11:09:28 serveurlinux kernel: [95515.305100] [FIREWALL-DROP]IN=eth0 OUT= MAC=00:0c:29:35:6a:41:00:50:56:c0:00:08:08:00 SRC=192.168.0.1 DST=192.168.0.2 LEN=44 TOS=0x00 PREC=0x00 TTL=128 ID=3827 PROTO=UDP SPT=56346 DPT=8612 LEN=24
Aucun commentaire:
Enregistrer un commentaire