c0r3war at gmail dot com - 2013
Rappels réseau
UDP, TCP, ICMP, ARP
Upper Datagram Protocol
Transmission Control Protocol
Internet Message Control Protocol
Address Resolution Protocol (layer 2)
C quoi un firewall?
Definition
...software or hardware-based network security
system that controls the incoming and outgoing
network traffic by analyzing the data packets and
determining whether they should be allowed
through or not, based on a rule set.
C quoi un firewall?
Positionnement
C quoi un firewall?
Fonctionnalités
(Routage)
Filtrage
Nat
Gateway VPN
Proxy
Fonctionnalités de protection avancées
C quoi un firewall?
Concepts de base
Stateful vs Stateless
Drop vs Reject
DNAT, SNAT, PAT, RFC 1918
Policy / Rulebase
Ordonancement
Tout ce qui n'est pas autorisé est interdit!
1 Stealth Rule
2 Autoriser TCP port 80 vers Webserver
3 Autoriser TCP port 25 vers Serveur SMTP
4 Autoriser TCP ports 80, 443 vers Any sauf réseau interne
...
N Cleanup Rule
Policy / Rulebase
Règle
@ IP
Source
Protocole
& port
@ IP
Destination
Action
Policy / Rulebase
Règles de base
● Drop plutôt que Reject
● Toujours masquer le Firewall
● Contrôler strictement les flux ICMP
● Contrôler strictement les protocoles non captifs (RDP,
SSH...)
● Activer les fonction de protection contre les attaques
connues (antispoofing, Syn defender, conformité des
paquets...)
● Documenter et revoir régulièrement les règles du
firewall
Netfilter
Firewalling sous Linux
{ip, ip6}tables + netfilter = Stateful firewall Linux
Kernel > 2.4
Cerifié par l'ANSSI (CSPN, avis 2009/04)
Netfilter
Fonctionnalités
Filtrage stateful & stateless (TCP, UDP, ICMP)
Filtrage couche 7 pour FTP, IPSec
NAT (DNAT, SNAT, PAT, Masquerading)
Protection DoS
Netfilter
Tables et chaînes
TABLE
CHAINE
input
CHAINE
output
CHAINE
forward
Règle
Règle
Règle
Règle
Règle
Règle
Netfilter
Tables et chaînes
Table Chaîne Fonction
FILTER input filtre les paquets à destination de la machine
ouput filtre les paquets qui quittent la machine
forward filtre les paquets qui traversent la machine
NAT prerouting NAT avant routage (DNAT, PAT)
postrouting NAT après routage (SNAT)
output NAT des paquets émis par la machine
MANGLE prerouting modification des paquets avant routage
postrouting modification des paquets après routage
output modification des paquets émis par la machine
input modification des paquets à destination de la machine
forward modification des paquets qui traversent la machine
Netfilter
Traitement des paquets
mangle
prerouting
nat
prerouting
ROUTAGEmangle
input
dest=
FW?
mangle
forward
filter
forward
mangle
postrouting
nat
postrouting
filter
input
TRAITEMENTROUTAGE
mangle
output
nat
output
filter
output
Yes No
Network
Netfilter
iptables/ip6tables
iptables [-t table]commande [correspondance]
[cible/saut]
-t table Indique dans quelle table on travaille (par défaut, FILTER)
commande Action à effectuer sur la table (ajout, suppression, insertion
de règle dans une chaine, nettoyage de la chaine...)
correspondance Critères de selection d'un paquet ou d'un flux (adresse
source ou destination, protocole, état...)
-cible/saut Action à effectuer si il y a correspondance, peut être une
cible prédéfinie ou une liste utilisateur, peut prendre
plusieurs arguments
Netfilter
Commandes les plus courantes
-A chaine, -I
chaine [pos]
Ajoute un règle à la fin de la chaine (-A) ou insère (-I) une règle à
la position indiquée par pos dans la chaine (si pos absent,
insère au début)
-D chaine
[num|match]
Supprime une règle dans la chaine chaine (soit la règle numéro
num, soit celle dont la definition correspond à match, match étant
la correspondance +la cible)
-F [chaine] Supprime toutes les règles de la chaine chaine, ou toutes les
chaines de la table
-L [chaine] Liste toutes les règles de la chaine chaine, ou toutes les chaines
de la table, ou toutes les chaines de toutes les tables
-P chaine
cible
Permet de definir la politique par défaut (paramètre cible) pour
la chaine chaine.
-N chaine, -X
chaine
Permet de créer ou de supprimer une chaine utilisateur
Netfilter
Correspondances les plus courantes
--protocol Permet de définir le protocole sur lequel
porte la règle (TCP, UDP, ICMP, ALL)
-s, --src, --source, --
src-range (-m iprange)
Permet de selectionner le paquet sur adresse
source
-d, --dst, --destination,
--dst-range (-m iprange)
Permet de selectionner le paquet sur
l'adresse destination
--sport, --source-port Permet de selectionner le paquet sur port
source
--dport, --destination-
port
Permet de selectionner le paquet sur port
destination
--state Permet de selectionner le paquet en fonction
de son état (stateful: NEW, RELATED,
ESTABLISHED, INVALID)
Netfilter
Cibles prédéfinies les plus courantes
ACCEPT Le paquet est accépté, son traitement continue (routage,
nat...)
REJECT Le paquet est rejeté, la machine source est notifié (ICMP)
DROP Le paquet est détruit (silencieux)
DNAT Translation d'adresse pour l'adresse destination (peut
s'appliquer aussi sur le port pour faire du PAT)
SNAT Translation d'adresse pour l'adresse source
MASQUERADE Translation d'adresse de type SNAT, spécifique aux
interfaces ayant une adresse IP dynaique
LOG Logue des informations sur le paquet/traitement
Netfilter
Exemple
Netfilter
Mise en place du DNAT serveur web
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j
DNAT --to 192.168.1.2:80
Netfilter
Accepter les flux http vers le serveur web
iptables -t filter -A FORWARD -p tcp --dst 192.168.10.2 --
dport 80 -j ACCEPT
Netfilter
Accepter les flux http(s) vers l'exterieur
iptables -t filter -A FORWARD -p tcp -i eth2 --src
192.168.0.0/24 -m multiport --dport 80,443 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth2 --src
192.168.0.0/24 --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth2 --src
192.168.0.0/24 --dport 443-j ACCEPT
Netfilter
Accepter les reponses pour les flux
autorisés
iptables -t filter -I FORWARD -m state --state
ESTABLISHED,RELATED -j ACCEPT
Netfilter
Comment Netfilter suit les sessions?
/proc/net/ip_conntrack
Netfilter
Mini script final
# Accepte les connections établies
iptables -t filter -A FORWARD -m state --state
ESTABLISHED,RELATED -j ACCEPT
# DNAT + Accept flux vers le serveur Web
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j
DNAT --to 192.168.1.2:80
iptables -t filter -A FORWARD -p tcp --dst 192.168.10.2 --
dport 80 -j ACCEPT
# Autoriser les flux http(s) sortant
iptables -t filter -A FORWARD -p tcp -i eth2 --src
192.168.0.0/24 --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth2 --src
192.168.0.0/24 --dport 443 -j ACCEPT
# Cleanup (deny all)
iptables -t filter -A FORWARD -j DROP
ATTENTION!
pas de stealth rule!
Netfilter
Mini script final (mieux!)
# Accepte les connections établies
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED
-j ACCEPT
# DNAT + Accept flux vers le serveur Web
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --
to 192.168.1.2:80
iptables -t filter -A FORWARD -p tcp --dst 192.168.10.2 --dport 80
-j ACCEPT
# Autoriser les flux http(s) sortant
iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24
--dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24
--dport 443 -j ACCEPT
# Policy par defaut
iptables -t filter -P FORWARD DROP
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
Netfilter
Logs
Loguer se fait en utilisant la cible LOG (-j LOG)
Par défaut, les logs sont dans /var/log/messages
--log-level Indique à syslog le niveau de log à utiliser
--log-prefix Permet de définir un préfixe pour chaque entréé de log
(ex: "netfilter:")
--log-tcp-
sequence
Logue les numéros de séquence TCP
--log-tcp-
options
Logue les option TCP (en-têtes TCP)
--log-ip-options Logue les options IP (en-tête IP)
Netfilter
Log & Drop
iptables -N logdrop
iptables -A logdrop -m limit --limit 5/m --
limit-burst 10 -j LOG --log-prefix "Nefilter
dropped: "
iptables -A logdrop -j DROP
Ajouter une cible pour logger ET dropped des paquets:
Utilisation dans une règle:
iptables -A FORWARD -p tcp -j logdrop
Netfilter
Protection DoS
La protection contre les DoS se fait grâce à la correspondance
limit (-m limit).
--limit Nombre de correspondance par unité de temps EN
MOYENNE (/second, /minute, /hour, /day)
Exemple: -m limit --limit 3/minute
--limit-burst Nombre maximum de fois ou il doit y avoir correspondance
avant de déclencher la règle
Netfilter
Routage
Par défaut, la plupart des distributions Linux ne permettent pas
le routage de paquets IP entre deux interfaces! Pour activer le
routage au niveau du kernel:
sysctl -w net.ipv4.ip_forward=1
Pour rendre la modification permanente, il faut modifier le
fichier /etc/sysctl.conf:
net.ipv4.ip_forward = 0
sysctl -p /etc/sysctl.conf
Netfilter
Sauvegarde /restauration
La sauvegarde et la restauration de stables peut se faire avec les
commandes iptables-save et iptables-restore:
iptables-save [-c] [-t table]
iptables-restore [-c] [-n]
Exemples:
iptables-save > ruleset-save
iptables-restore < ruleset-save
Netfilter
Référence
Tutorial en français:
http://www.inetdoc.net/guides/iptables-tutorial/
Topologies
Single layer
Topologies
Dual layer
Topologies
Web browsing
Topologies
Security zones
Evolution
UTM
Evolution
Nextgen Firewall

Firewalls

  • 1.
    c0r3war at gmaildot com - 2013
  • 3.
    Rappels réseau UDP, TCP,ICMP, ARP Upper Datagram Protocol Transmission Control Protocol Internet Message Control Protocol Address Resolution Protocol (layer 2)
  • 4.
    C quoi unfirewall? Definition ...software or hardware-based network security system that controls the incoming and outgoing network traffic by analyzing the data packets and determining whether they should be allowed through or not, based on a rule set.
  • 5.
    C quoi unfirewall? Positionnement
  • 6.
    C quoi unfirewall? Fonctionnalités (Routage) Filtrage Nat Gateway VPN Proxy Fonctionnalités de protection avancées
  • 7.
    C quoi unfirewall? Concepts de base Stateful vs Stateless Drop vs Reject DNAT, SNAT, PAT, RFC 1918
  • 8.
    Policy / Rulebase Ordonancement Toutce qui n'est pas autorisé est interdit! 1 Stealth Rule 2 Autoriser TCP port 80 vers Webserver 3 Autoriser TCP port 25 vers Serveur SMTP 4 Autoriser TCP ports 80, 443 vers Any sauf réseau interne ... N Cleanup Rule
  • 9.
    Policy / Rulebase Règle @IP Source Protocole & port @ IP Destination Action
  • 10.
    Policy / Rulebase Règlesde base ● Drop plutôt que Reject ● Toujours masquer le Firewall ● Contrôler strictement les flux ICMP ● Contrôler strictement les protocoles non captifs (RDP, SSH...) ● Activer les fonction de protection contre les attaques connues (antispoofing, Syn defender, conformité des paquets...) ● Documenter et revoir régulièrement les règles du firewall
  • 12.
    Netfilter Firewalling sous Linux {ip,ip6}tables + netfilter = Stateful firewall Linux Kernel > 2.4 Cerifié par l'ANSSI (CSPN, avis 2009/04)
  • 13.
    Netfilter Fonctionnalités Filtrage stateful &stateless (TCP, UDP, ICMP) Filtrage couche 7 pour FTP, IPSec NAT (DNAT, SNAT, PAT, Masquerading) Protection DoS
  • 14.
  • 15.
    Netfilter Tables et chaînes TableChaîne Fonction FILTER input filtre les paquets à destination de la machine ouput filtre les paquets qui quittent la machine forward filtre les paquets qui traversent la machine NAT prerouting NAT avant routage (DNAT, PAT) postrouting NAT après routage (SNAT) output NAT des paquets émis par la machine MANGLE prerouting modification des paquets avant routage postrouting modification des paquets après routage output modification des paquets émis par la machine input modification des paquets à destination de la machine forward modification des paquets qui traversent la machine
  • 16.
  • 17.
    Netfilter iptables/ip6tables iptables [-t table]commande[correspondance] [cible/saut] -t table Indique dans quelle table on travaille (par défaut, FILTER) commande Action à effectuer sur la table (ajout, suppression, insertion de règle dans une chaine, nettoyage de la chaine...) correspondance Critères de selection d'un paquet ou d'un flux (adresse source ou destination, protocole, état...) -cible/saut Action à effectuer si il y a correspondance, peut être une cible prédéfinie ou une liste utilisateur, peut prendre plusieurs arguments
  • 18.
    Netfilter Commandes les pluscourantes -A chaine, -I chaine [pos] Ajoute un règle à la fin de la chaine (-A) ou insère (-I) une règle à la position indiquée par pos dans la chaine (si pos absent, insère au début) -D chaine [num|match] Supprime une règle dans la chaine chaine (soit la règle numéro num, soit celle dont la definition correspond à match, match étant la correspondance +la cible) -F [chaine] Supprime toutes les règles de la chaine chaine, ou toutes les chaines de la table -L [chaine] Liste toutes les règles de la chaine chaine, ou toutes les chaines de la table, ou toutes les chaines de toutes les tables -P chaine cible Permet de definir la politique par défaut (paramètre cible) pour la chaine chaine. -N chaine, -X chaine Permet de créer ou de supprimer une chaine utilisateur
  • 19.
    Netfilter Correspondances les pluscourantes --protocol Permet de définir le protocole sur lequel porte la règle (TCP, UDP, ICMP, ALL) -s, --src, --source, -- src-range (-m iprange) Permet de selectionner le paquet sur adresse source -d, --dst, --destination, --dst-range (-m iprange) Permet de selectionner le paquet sur l'adresse destination --sport, --source-port Permet de selectionner le paquet sur port source --dport, --destination- port Permet de selectionner le paquet sur port destination --state Permet de selectionner le paquet en fonction de son état (stateful: NEW, RELATED, ESTABLISHED, INVALID)
  • 20.
    Netfilter Cibles prédéfinies lesplus courantes ACCEPT Le paquet est accépté, son traitement continue (routage, nat...) REJECT Le paquet est rejeté, la machine source est notifié (ICMP) DROP Le paquet est détruit (silencieux) DNAT Translation d'adresse pour l'adresse destination (peut s'appliquer aussi sur le port pour faire du PAT) SNAT Translation d'adresse pour l'adresse source MASQUERADE Translation d'adresse de type SNAT, spécifique aux interfaces ayant une adresse IP dynaique LOG Logue des informations sur le paquet/traitement
  • 21.
  • 22.
    Netfilter Mise en placedu DNAT serveur web iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
  • 23.
    Netfilter Accepter les fluxhttp vers le serveur web iptables -t filter -A FORWARD -p tcp --dst 192.168.10.2 -- dport 80 -j ACCEPT
  • 24.
    Netfilter Accepter les fluxhttp(s) vers l'exterieur iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 -m multiport --dport 80,443 -j ACCEPT iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 --dport 80 -j ACCEPT iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 --dport 443-j ACCEPT
  • 25.
    Netfilter Accepter les reponsespour les flux autorisés iptables -t filter -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 26.
    Netfilter Comment Netfilter suitles sessions? /proc/net/ip_conntrack
  • 27.
    Netfilter Mini script final #Accepte les connections établies iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # DNAT + Accept flux vers le serveur Web iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80 iptables -t filter -A FORWARD -p tcp --dst 192.168.10.2 -- dport 80 -j ACCEPT # Autoriser les flux http(s) sortant iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 --dport 80 -j ACCEPT iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 --dport 443 -j ACCEPT # Cleanup (deny all) iptables -t filter -A FORWARD -j DROP ATTENTION! pas de stealth rule!
  • 28.
    Netfilter Mini script final(mieux!) # Accepte les connections établies iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # DNAT + Accept flux vers le serveur Web iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT -- to 192.168.1.2:80 iptables -t filter -A FORWARD -p tcp --dst 192.168.10.2 --dport 80 -j ACCEPT # Autoriser les flux http(s) sortant iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 --dport 80 -j ACCEPT iptables -t filter -A FORWARD -p tcp -i eth2 --src 192.168.0.0/24 --dport 443 -j ACCEPT # Policy par defaut iptables -t filter -P FORWARD DROP iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT DROP
  • 29.
    Netfilter Logs Loguer se faiten utilisant la cible LOG (-j LOG) Par défaut, les logs sont dans /var/log/messages --log-level Indique à syslog le niveau de log à utiliser --log-prefix Permet de définir un préfixe pour chaque entréé de log (ex: "netfilter:") --log-tcp- sequence Logue les numéros de séquence TCP --log-tcp- options Logue les option TCP (en-têtes TCP) --log-ip-options Logue les options IP (en-tête IP)
  • 30.
    Netfilter Log & Drop iptables-N logdrop iptables -A logdrop -m limit --limit 5/m -- limit-burst 10 -j LOG --log-prefix "Nefilter dropped: " iptables -A logdrop -j DROP Ajouter une cible pour logger ET dropped des paquets: Utilisation dans une règle: iptables -A FORWARD -p tcp -j logdrop
  • 31.
    Netfilter Protection DoS La protectioncontre les DoS se fait grâce à la correspondance limit (-m limit). --limit Nombre de correspondance par unité de temps EN MOYENNE (/second, /minute, /hour, /day) Exemple: -m limit --limit 3/minute --limit-burst Nombre maximum de fois ou il doit y avoir correspondance avant de déclencher la règle
  • 32.
    Netfilter Routage Par défaut, laplupart des distributions Linux ne permettent pas le routage de paquets IP entre deux interfaces! Pour activer le routage au niveau du kernel: sysctl -w net.ipv4.ip_forward=1 Pour rendre la modification permanente, il faut modifier le fichier /etc/sysctl.conf: net.ipv4.ip_forward = 0 sysctl -p /etc/sysctl.conf
  • 33.
    Netfilter Sauvegarde /restauration La sauvegardeet la restauration de stables peut se faire avec les commandes iptables-save et iptables-restore: iptables-save [-c] [-t table] iptables-restore [-c] [-n] Exemples: iptables-save > ruleset-save iptables-restore < ruleset-save
  • 34.
  • 36.
  • 37.
  • 38.
  • 39.
  • 41.
  • 42.