Iptables 2021
Iptables 2021
Iptables 2021
Passerelle
iptables/firewalld
1
Passerelle Linux
2
Firewall
Double interface
Notre machine dispose de deux interfaces Ethernet
3
Firewall
Double interface
• Il faut bien comprendre qu'à priori, il peut entrer et sortir
des données de chaque interface.
4
Firewall
Double interface
• Notre objectif c’est de contrôler le trafic qui passe
par la passerelle, solutions :
– IPTables (Netfilter)
– Firewalld
5
Netfilter : Xtables
6
Firewall
• NF_IP_PRE_ROUTING
• NF_IP_LOCAL_IN
• NF_IP_FORWARD
• NF_IP_POSTROUTING
• NF_IP_LOCAL_OUT
7
Firewall
8
Firewall
9
Firewall
10
Firewall
La table "Filter"
• Cette table va contenir toutes les règles qui permettront de filtrer les
paquets. Cette table contient trois chaînes:
• La chaîne INPUT.
Cette chaîne décidera du sort des paquets entrant localement sur
l'hôte.
• La chaîne OUTPUT.
Ici, ce ne sont que les paquets émis par l'hôte local qui seront filtrés
• La chaîne FORWARD.
Enfin, les paquets qui traversent l'hôte, suivant les routes implantées,
seront filtrés ici.
11
Firewall
Les chaînes
• Les chaînes sont des ensembles de règles que nous allons écrire dans
chaque table. Ces chaînes vont permettre d'identifier des paquets qui
correspondent à certains critères.
• Les cibles Les cibles enfin sont des sortes d'aiguillage qui dirigeront les paquets
satisfaisant aux critères . Les cibles préconstruites sont :
• ACCEPT : Les paquets qui satisfont aux critères sont acceptés, ils
continuent leur chemin dans la pile,
• DROP : Les paquets qui satisfont aux critères sont rejetés, on les oublie, on
n'envoie même pas de message ICMP . Un trou noir, quoi.
• LOG : C'est une cible particulière qui permet de tracer au moyen de syslog
les paquets qui satisfont aux critères.
• CLUSTERIP: créer des clusters de noeuds répondant à la même adresse IP.
VIP n'importe quelle adresse IP définie sur tous les hôtes du cluster. les
connexions depuis la même IP source iront vers le même serveur
• ,,,,,
12
Firewall
La table NAT
• Cette table permet d'effectuer toutes les translations d'adresses
nécessaires.
• La chaîne PREROUTING
Permet de faire de la translation d'adresse de destination. Cette méthode
est intéressante si l'on veut faire croire au monde extérieur, par exemple,
qu'il y a un serveur WEB sur le port 80 de la passerelle, alors que celui-ci
est hébergé par un hôte du réseau privé, sur le port 8080.
• La chaîne POSTROUTING.
Elle permet de faire de la translation d'adresse de la source, comme du
masquage d'adresse, la méthode classique pour connecter un réseau
privé comme client de l'Internet, avec une seule adresse IP "officielle".
• La chaîne OUTPUT.
Celle-ci va permettre de modifier la destination de paquets générés
localement (par la passerelle elle-même).
13
Firewall
La table NAT
• NAT recalcule CRC: Le CRC TCP/UDP est le complément à 1 sur 16 bits de
la somme des octets d’un pseudo entête IP (IPsrc, TPdst, taille, type proto) , de l’entête
TCP et des données pris deux par deux (mots de 16 bits).
CRC
USHORT CheckSum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size)
cksum += *(UCHAR*)buffer;
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
~
return (USHORT)( cksum);
}
15
NAT
• Il existe deux types de NAT :
Fast-NAT : implémenté dans le code du routage IP
du noyau, plus rapide car pas de traçage de
connexion qui prends puissance processeur.
Netfilter-NAT : implémenter dans le noyau linux à
l’intérieur du code netfilter, permis traçage de
connexion.
Les cibles :
-DNAT :
-SNAT :
-MASQUERADE :
16
Firewall
La table MANGLE
• Cette table permet le marquage des paquets. Le marquage de paquets
va permettre un traitement spécifique des paquets marqués dans les
tables de routage avec IPROUTE 2. Les cibles :
• TOS :
• TTL : Contourner rejet FAI même TTL
• MARK : marquage pour la gestion B.P.
17
Firewall
Traçage de connexion
Utilisation du module conntrack.
18
fragmentation
19
Invalid = Tiny Fragments
Les filtres IP appliquent la même règle de filtrage à tous les fragments d’un
paquet. Le filtrage du premier fragment (Fragment Offset égal à 0)
déterminant cette règle elle s’applique donc aux autres (Fragment Offset
égal à 1) sans aucune autre forme de vérification.
20
21
Firewall
Traçage de connexion
La table de suivi de connexions est accessible dans la zone :/proc/net/ip_conntrack
Exemple :
Un client du LAN dispose de l'IP 192.168.0.10, la passerelle dispose de l'IP 192.168.0.253 sur le LAN, la passerelle dispose de l'IP
80.8.130.97 sur le Net et le client navigue sur le serveur HTTP d'IP 213.186.35.33
tcp 6 82 SYN_SENT
src=192.168.0.10 dst=213.186.35.33 sport=1105 dport=80 [UNREPLIED]
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1105
Traçage de connexion
Traçage de
connection
24
RAW : Nouvelle table
25
Commande iptables
26
Firewall
Traçage de connexion
28
Firewall
Exemples
29
Firewall
La table de filtrage
• Initialisation de Netfilter
– Tapez successivement les commandes suivantes pour initialiser
votre système:
– iptables -F
– iptables -X
– iptables -t nat -F
– iptables -t nat -X
– De cette manière, vous avez toutes vos chaînes vides, avec par
défaut la règle "ACCEPT"
30
Firewall
La table de filtrage
– iptables -L
– L'affichage va vous assurer que les trois chaînes INPUT,
FORWARD et OUTPUT sont vides et ont bien la règle par défaut
ACCEPT
– iptables -t nat -L
– L'affichage va vous assurer que les trois chaînes PREROUTING,
POSTROUTING et OUTPUT sont vides.
31
Firewall
La table de filtrage
• Mise en place de Masquerade
– Tapez maintenant les commandes suivantes::
– iptables -t nat -A POSTROUTING –s 192.168.1.0/24 -o eth1 -j
MASQUERADE
– Tout ce qui sort du routage (-A POSTROUTING) et qui doit
passer vers l'Internet (-o eth1) doit subir un masquage d'adresse (-j
MASQUERADE)
32
Firewall
La table de filtrage
• Voilà. La passerelle entre le réseau privé et l'Internet doit
être opérationnelle.
• Vérifiez que, depuis votre passerelle Linux, vous avez bien
accès au Net.
• Vérifiez que, depuis un poste de votre réseau privé, vous
avez bien accès au Net.
33
Firewall
test
• Pour bien montrer que les chaînes INPUT et OUTPUT
n'interviennent pas dans le routage, nous allons tout
simplement leur mettre DROP comme règle par défaut.
• Tapez les commandes suivantes:
– iptables -P INPUT DROP
– iptables -P OUTUT DROP
– iptables -L (pour vérifier que INPUT et OUTPUT "droppent" bien
tout ce qui passe).
• Vérifiez que, depuis votre passerelle Linux, vous n'avez plus accès au
Net (ni à votre réseau privé d'ailleurs). Vérifiez que, depuis un poste
de votre réseau privé, vous avez toujours l'accès au Net.
34
Firewall
DNAT
• La cible DNAT est utilisée pour la Traduction d'Adresse
Réseau de Destination, ce qui veut dire qu'elle sert à réécrire
l'adresse IP de Destination du paquet.
• Si un paquet est sélectionné, et qu'il est la cible de la règle,
ce paquet et tous les paquets suivants du même flux seront
traduits, et ensuite routés vers le matériel, l'hôte ou le réseau
appropriés.
• Cette cible peut être extrêmement utile, par exemple, quand
vous avez un hôte avec un serveur web dans un LAN, mais
pas d'IP réelle routable sur l'Internet.
35
Firewall
DNAT
• Vous pouvez alors indiquer au pare-feu de transférer tous
les paquets allant vers son propre port HTTP, vers le serveur
web réel dans le LAN. Vous pouvez aussi spécifier une
plage d'adresses IP de destination, et le mécanisme DNAT
choisira l'adresse IP de destination au hasard pour chaque
flux. Nous pourrons donc réaliser une sorte d'équilibrage de
charge.
36
Firewall
DNAT (Exemple)
DNAT (Exemple)
• Notez qu’un flux utilisera toujours le même hôte, et chaque
flux aura une adresse IP attribuée au hasard.
38
Firewall
DNAT (Exemple)
• Une règle peut alors ressembler à
--to-destination 192.168.1.1:88 ou
--to-destination 192.168.1.1:80-100
39
Firewall
DNAT (Exemple 2)
• Nous voulons publier notre site web via notre connexion
Internet. Nous ne possédons qu'une seule adresse IP, et le
serveur HTTP est situé dans notre réseau interne. Notre
pare-feu possède l'adresse IP externe $INET_IP et l'adresse
IP interne $LAN_IP, et notre serveur HTTP a l'adresse IP
$HTTP_IP. La première chose à faire est d'ajouter la
simple règle suivante à la chaîne PREROUTING dans la
table nat :
40
Firewall
DNAT (Exemple 2)
• Maintenant, tous les paquets provenant de l'Internet et allant
vers le port 80 sur notre pare-feu, sont redirigés (ou
DNATés) vers notre serveur HTTP interne.
41
Firewall
DNAT (Exemple 2)
• Le paquet quitte un client du net $EXT_BOX vers $INET_IP
• Le paquet atteint le pare-feu.
• Le pare-feu DNAT le paquet et envoie celui-ci à travers les différentes
chaînes, etc.
• Le paquet quitte la pare-feu pour aller vers le $HTTP_IP.
• Le paquet atteint le serveur HTTP, et la machine HTTP répond en
retour à travers le pare-feu, si c'est cette machine que la base de
routage a entré comme passerelle pour $EXT_BOX. Normalement, ça
devrait être la passerelle par défaut du serveur HTTP.
• Le pare-feu Un-DNAT le paquet de nouveau, ainsi le paquet semble
provenir du pare-feu lui-même.
• Le paquet en réponse transite vers le client $EXT_BOX.
42
Firewall
DNAT (Exemple 2)
• Maintenant, voyons ce qui se passe si le paquet est généré
par un client sur le même réseau que le serveur HTTP lui-
même :
– Le paquet quitte la $LAN_BOX vers $INET_IP.
– Le paquet atteint le pare-feu.
– Le paquet est DNATé, et toutes les autres actions requises sont prises,
– Le paquet quitte le pare-feu et atteint le serveur HTTP.
– Le serveur HTTP essaie de répondre au paquet, et voit dans les tables de routage
que le paquet provient d'une machine locale sur le même réseau, et donc tente
d'envoyer le paquet directement à l'adresse source IP d'origine (qui devient alors
l'adresse IP de destination).
– Le paquet atteint le client, et le client est dans la confusion car le paquet en
retour ne provient pas de l'hôte qui a envoyé la requête d'origine. Donc, le client
supprime le paquet, et attend une réponse "réelle".
43
Firewall
DNAT (Exemple 2)
• La solution la plus simple à ce problème est de SNATer
tous les paquets provenant du réseau local sur lequel nous
faisons du DNAT. Exemple, regardons la règle ci-dessus.
• Nous SNATons les paquets entrants dans notre pare-feu qui
sont destinés à $HTTP_IP port 80 et ainsi il est vu que des
paquets proviennent de $LAN_IP. Ceci force le serveur
HTTP à envoyer ces paquets vers notre pare-feu, lequel Un-
DNAT ceux-ci et les envoie au client. La règle ressemble à
ceci :
iptables -t nat -A POSTROUTING –s 10.10.11.0/24 –p
tcp --dport 80 -j SNAT --to-source $LAN_IP
44
Iptables et limit DDOS
-m limit --limit 5/second --limit-burst 10/second.
- Burst : (seau contient 10 jetons au début) . Chaque paquet qui établit une correspondance avec la
règle consomme un jeton.
- On reçoit alors des paquets 1-2-3-4-5-6-7-8-9-10 qui correspondent à la règle, tous arrivent dans un
intervalle de 1/100ème de seconde.
- Le seau de jetons se retrouve complètement vide. Et puisque le seau est vide, les paquets qui
rencontrent la règle ne peuvent plus correspondre et poursuivent leur route vers la règle suivante, ou
subissent par défaut
- Pour chaque tranche de 1/5ème de seconde sans qu'un paquet ne corresponde, le compteur de jetons
augmente de 1, jusqu'à un maximum de 10. Et 1 seconde après avoir reçu 10 paquets, on aura de
nouveau 5 jetons de moins.
45
Attaques TCP SYN Flooding
SYN x
LISTEN
SYNy, ACKx+1
SYN_RECVD
ACK y+1
CONNECTED
- Allocation des structures: ipcb, tcpcb
- Attente dans l ’état SYN_RECVD (75s)
- Nombre limité de connexions dans cet état 46
TCP SYN Flooding
47
SynProxy Anti-DDOS
SYNPROXY est un module : proxy de paquets TCP SYN. Il peut être utilisé pour protéger tout serveur TCP contre les
inondations SYN et les attaques DDos similaires.
48
En tête TCP (options)
49
TCP options (choisi par sunproxy)
(Maximum Segment Size (MSS), Window Scaling, Selective Acknowledgements (SACK), Timestamps)
--mss taille maximale de segment annoncée aux clients. Cela doit correspondre au backend.
--wscale: Échelle de fenêtre annoncée aux clients. Cela doit correspondre au backend.
50
TCP options (passé par sunproxy au backend)
51
Options iptables avancés
Multiport match
-m multiport --source-port 22,53,80,110
-m multiport --destination-port 22,53,80,110
-m multiport --port 22,53,80,110
TCP Flags
--tcp-flags accepte deux paramètres: Le premier est le masque, qui définit l'indicateur à
examiner dans le paquet. Le second se rapporte à l'indicateur qui doit être défini pour la
concordance.
Les indicateurs sont : ACK, FIN, PSH, RST, SYN, URG, ALL, NONE
-p tcp --tcp-flags ACK,FIN,SYN SYN
SYN défini, Les indicateurs ACK et FIN non-définis.
(!) après --tcp-flags inverse l'effet de l'option de concordance.
52
SynProxy conf
53
Firewall
54
Cluster
web1$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:50:56:a8:2f:95 inet
addr:10.0.88.181 Bcast:10.0.88.255 Mask:255.255.255.0
eth0:1 Link encap:Ethernet HWaddr 00:50:56:a8:2f:95 inet
addr:10.0.88.188 Bcast:10.0.88.255 Mask:255.255.255.0
web1
iptables -I INPUT 1 -d 10.0.88.188 -i eth0 -j CLUSTERIP --
new \ --hashmode sourceip --clustermac 01:23:45:67:89:AB
\ --total-nodes 2 --local-node 1
web2
iptables -I INPUT 1 -d 10.0.88.188 -i eth0 -j CLUSTERIP --
new \ --hashmode sourceip --clustermac 01:23:45:67:89:AB
\ --total-nodes 2 --local-node 2
56
Cluster
57
Exemple
58
DMZ
La politique de sécurité mise en œuvre sur la DMZ est généralement
la suivante :
• Trafic du réseau externe vers la DMZ autorisé ;
• Trafic du réseau externe vers le réseau interne interdit ;
• Trafic du réseau interne vers la DMZ autorisé ;
• Trafic du réseau interne vers le réseau externe autorisé ;
• Trafic de la DMZ vers le réseau interne interdit ;
• Les machines du RL utilise squid transparent,
Ici le DNS est à usage privé (seules les machines de l'intranet y font
appel). Donc il ne doit PAS être placé en DMZ.
59
• 1 - Ecrivez les règles pour purger les tables et pour définir les
politiques par défaut.
61
2
62
– iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
#activer la translation d'adresse vers l'exterieur
– iptables -A FORWARD -i $LAN -o $WAN -m state –state
NEW,ESTABLISHED,RELATED -j ACCEPT
– iptables -A FORWARD -i $WAN -o $LAN -m state --state
ESTABLISHED,RELATED -j ACCEPT
# accepter tout trac sortant du reseau interne. Seules les demandes de connexions (etat NEW)
dans le sens interne - externe sont validees
– iptables -A OUTPUT -o $WAN -m state –state NEW, ESTABLISHED,
RELATED -j ACCEPT
– iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j
ACCEPT
# accepter tout trac sortant du pare-feu vers le reseau externe. Seules les demandes de connexions
(etat NEW) dans le sens pare-feu externe sont validees
– iptables -A OUTPUT -o $LAN -m state –state NEW, ESTABLISHED,
RELATED -j ACCEPT
– iptables -A INPUT -i $LAN -m state –state ESTABLISHED,RELATED -j
ACCEPT
#accepter tout trac sortant du pare-feu vers le reseau local. Seules les demandes de connexions63
(etat NEW) dans le sens pare-feu local sont validees
4
• Trac Web
– iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT -- to-
destination $DMZServeurHTTP
# tout ce qui vient de l'exterieur a destination d'un port 80 est redirige vers le serveur HTTP de
la DMZ,.
64
– iptables -A FORWARD -o $WAN -p tcp --sport 80 -j ACCEPT
#acceptation du trafic HTTP provenant du serveur Web interne
65
• Trafic DNS
– iptables -t nat -A PREROUTING -j DNAT -i $WAN -p tcp --dport 53 -- to-
destination $LANServeurDNS
#redirection du trafic DNS vers le serveur du réseau local en TCP
67
• Trafic FTP
68
Trafic ICMP
– iptables -A FORWARD -i $DMZ -p icmp -j ACCEPT
#acceptation du trafic ICMP provenant de la DMZ
69
Fin
70