mardi 16 mars 2010

basics 6 - tutoriel firewall iptables


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 TP
sur 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 ./monscript
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
testons la sortie:


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 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

#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 le serveur:

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:

Publier un commentaire