AdminLinux Parefeu
AdminLinux Parefeu
AdminLinux Parefeu
Sommaire
Mise en situation 2
Pare-feu (firewall) 2
Filtrage de paquets (firewall stateless) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Filtrage de paquets avec état (firewall stateful) . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Proxy applicatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Autres possibilités des pare-feu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Politique de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Architecture réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Iptables 5
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Configuration par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Manipulations 9
Séquence 1 : règles basiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Séquence 2 : politique stricte (close config) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Séquence 3 : les chaînes utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Séquence 4 : les règles au démarrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Séquence 5 : UFW (Uncomplicated FireWall) . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1
PARE-FEU (FIREWALL)
Mise en situation
Vous devez disposer d’un PC possédant un système d’exploitation Linux ou Windows et du logiciel de
virtualisation VirtualBox. Le système invité sera une installation du serveur Ubuntu 12.10.
Pare-feu (firewall)
Un système pare-feu (firewall) est un dispositif conçu pour examiner et éventuellement bloquer les
échanges de données entre réseaux.
Le pare-feu joue le rôle de filtre et peut donc intervenir à plusieurs niveaux du modèle à couches.
Il existe trois types principaux de pare-feu :
– filtrage de paquets (firewall stateless)
– filtrage de paquets avec état (firewall stateful)
– proxy applicatif
– Faille interne au firewall : D’autre part, un tel système ne protège aucunement un serveur contre les
attaques s’appuyant sur des failles du logiciel utilisé pour fournir le service.
Néanmoins, le pare-feu de type stateful est considéré, par les administrateurs réseau, comme la technologie
minimum pour une sécurisation.
Proxy applicatif
Les firewalls de type proxy applicatif (ou passerelle applicative) ont pour ambition de répondre aux
problèmes soulevés par les firewall stateless et les firewall stateful.
Ces systèmes se substituent au serveur ou au client qu’ils ont pour mission de défendre pour :
– traiter les requêtes et réponses à la place du système à protéger,
– les transmettre, après d’éventuelles modifications
– ou les bloquer
Le pare-feu de ce type joue le rôle de canal et d’interpréteur en agissant aux niveaux des protocoles de la
couche Application. Cette approche permet, en principe, d’atteindre le plus haut niveau de sécurité.
De nombreux firewalls de ce type sont disponible sur le marché, comme Raptor de Axent, Gauntlet de
NAI, racheté par Secure Computing, Sidewinder de Secure Computing, et M-Wall de Matranet, pour ne
citer que les plus connus.
Cette technologie, bien que prometteuse, est cependant confrontée à certaines difficultés.
Les limites de cette technique :
– Adapatabilité : En premier lieu, tout protocole transitant par le pare-feu doit être connu de celui- ci,
pour pouvoir bénéficier de ses capacités de proxy, ce qui exclut l’usage d’applications et protocoles
“maison”, ou plus simplement peu répandus.
– Difficulté : En outre, la gamme de protocoles à examiner étant particulièrement vaste, il est extrêmement
délicat d’obtenir un système éliminant réellement toutes les attaques envisageables, les développeurs
de firewalls applicatifs ne pouvant que difficilement maîtriser tous ces protocoles.
– Failles du proxy : Un tel système a pour rôle, comme les clients et serveurs qu’il défend, d’inter-
préter, comprendre, et réécrire les requêtes et réponses qu’il reçoit. Or, c’est précisément ce type de
fonctionnalités qui est à l’origine d’une vaste majorité des failles applicatives.
– Performance : Enfin, le gain de sécurité obtenu à l’aide du proxy applicatif se paie en termes de
performances. Les tâches que ce système a pour rôle de réaliser étant nettement plus complexes que
celles du firewall stateful, une machine puissante est nécessaire pour faire tourner ce type de logiciel,
et il est rare que des débits réseau supérieurs au cinquième des débits gérés par un firewall stateful
puissent être traités.
Politique de sécurité
De manière générale, on distingue deux types de politique de sécurité :
– politique permissive (open config) : Cette politique repose sur le principe que par défaut on laisse tout
passer puis on va restreindre pas à pas les accès et les services mais la sécurité risque d’avoir des failles.
– politique stricte (close config) : Cette politique repose sur le principe inverse. On commence par tout
interdire, puis on décide de laisser seulement passer les services ou adresses désirés ou indispensables.
La sécurité sera meilleure mais le travail sera plus difficile et cela peut même bloquer plus longtemps
que prévu les utilisateurs. C’est évidemment la politique conseillée pour un pare-feu.
Architecture réseau
Il existe plusieurs zones de sécurité commune aux réseaux. Ces zones déterminent un niveau de sécurité
en fonction des accès réseaux et donnent les bases de l’architecture.
On considère en général trois zones ou réseaux :
– réseaux externes (extranet) : C’est le réseau généralement le plus ouvert (Internet par exemple).
L’entreprise n’a pas ou très peu de contrôle sur les informations, les systèmes et les équipements qui se
trouvent dans ce domaine.
– réseaux internes (intranet) : Les éléments de ce réseau doivent être sérieusement protégés. C’est souvent
dans cette zone que l’on trouve les mesures de sécurité les plus restrictives et c’est donc le réseau le
moins ouvert.
– réseaux intermédiaires (dmz) : Cette zone est un compromis entre les deux précédentes. Ce réseau est
composé de services fournis aux réseaux internes et externes. Les services publiquement accessibles
(serveurs de messagerie, Web, FTP et DNS le plus souvent) sont destinés aux utilisateurs internes et
aux utilisateurs par Internet. Cette zone, appelée réseau de services ou de zone démilitarisée DMZ
(De-Militarized Zone), est considérée comme la zone moins protégée de tout le réseau.
Iptables
Introduction
iptables est un logiciel libre de l’espace utilisateur Linux grâce auquel l’administrateur système peut
configurer les chaînes et règles dans le pare-feu en espace noyau (et qui est composé par des modules
Netfilter).
Différents programmes sont utilisés selon le protocole employé : iptables est utilisé pour le protocole
IPv4, ip6tables pour IPv6, arptables pour ARP (Address Resolution Protocol) ou encore ebtables,
spécifique aux trames Ethernet.
Site officiel : http ://netfilter.org/
Principe
Iptables/Netfilter fonctionne selon un système de tables :
– Les tables sont composées d’un nombre arbitraire et non limité de chaînes.
– Une chaîne est une suite linéaire de règles.
– Une règle est constituée d’un motif (pattern) destiné à reconnaître des paquets selon un nombre
indéterminé de critères (matches) et d’une décision, appelée cible (target), à prendre en cas de
reconnaissance du paquet.
Il existe à ce jour cinq tables dont les trois principales sont :
– La table FILTER : elle permet les opérations de filtrage IP. Les paquets y sont acceptés (ACCEPT),
refusés (DROP ou REJECT avec renvoi d’un paquet erreur), logués (LOG) ou encore mis en queue (QUEUE),
mais jamais modifiés. Cette table possède trois chaînes de base : INPUT, FORWARD et OUTPUT.
– La table NAT (Network Address Translation) : elle permet les opérations de traduction d’adresses. Cette
table contient les chaînes : PREROUTING, INPUT, OUTPUT et POSTROUTING. Cette table dispose de cibles
propres (SNAT, DNAT, MASQUERADE et REDIRECT) pour la mise en oeuvre de NAT.
– La table MANGLE : elle permet d’altérer les en-têtes des paquets. La table MANGLE modifie la structure
qui représente le paquet dans la couche réseau du noyau. Il est donc possible d’agir sur les en-têtes
mais aussi sur les champs des structures utilisées par le système. Cette table possède les cinq chaînes
de base : PREROUTING, INPUT, FORWARD, OUTPUT et POSTROUTING.
Installation
Il suffit d’installer le paquet iptables, mais normalement celui-ci est déjà installé :
# apt-get install iptables
...
// La table NAT
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
// La table MANGLE
# iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Tout paquet traité par la table FILTER traversera une et une seule de ces trois chaînes.
Tests
On interdit tout ce qui arrive sur l’interface lo (loopback) :
// Ajout d’une règle à la chaîne INPUT de la table FILTER
# iptables -A INPUT -i lo -j DROP
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- anywhere anywhere
// On teste :
# ping 127.0.0.1 -c 2
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
^C
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1008ms
// On supprime la règle
# iptables -D INPUT 1
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT 10 packets, 760 bytes)
num target prot opt in out source destination
// On teste :
# ping 127.0.0.1 -c 2
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
^C
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1006ms
// On supprime la règle
# iptables -D OUTPUT 1
Manipulations
Question 5. Effacer (flush) toutes les règles existantes pour les trois tables FILTER, NAT et MANGLE.
# iptables -F
# iptables -t nat -F
# iptables -t mangle -F
# iptables -X
# iptables -t nat -X
# iptables -t mangle -X
Question 7. Mettre en place les politiques close config par défaut pour la table FILTER.
# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
Question 8. Logger le trafic entrant vers votre serveur sur les interfaces lo et eth0.
# tail /var/log/syslog
Mar 31 16:49:21 server-tv kernel: [ 1511.032589] IN=eth0 OUT= MAC=08:00:27:4a:b6:18:00:4f:4e
:08:25:1a:08:00 SRC=192.168.52.2 DST=192.168.52.9 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=38250 DF
PROTO=TCP SPT=56594 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0
...
Question 9. Autoriser maintenant les connexions ssh vers ce serveur sur l’interface eth0.
# iptables -L --line-numbers -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 55 7706 LOG all -- lo any anywhere anywhere LOG level
warning
2 352 26028 LOG all -- eth0 any anywhere anywhere LOG level
warning
3 76 5392 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:ssh
4 6 360 DROP tcp -- any any anywhere anywhere tcp dpt:http
5 49 7346 ACCEPT all -- lo any anywhere anywhere
# iptables -t nat -A PREROUTING -j DNAT -i eth0 -p TCP --dport http --to-destination $HTTP_IP
Les politiques par défaut ne s’applique pas pour les chaînes utilisateurs. On peut par contre en émuler
une en plaçant une règle en fin de chaîne :
# iptables -A nom_chaîne -j DROP
// cf. rc.firewall.txt
# iptables -A INPUT -p tcp -j bad_tcp_packets
# iptables -A INPUT -p all -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
# iptables -A INPUT -p udp -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
# iptables -N bad_tcp_packets
# iptables -N allowed
# iptables -N tcp_packets
# iptables -N udp_packets
# iptables -N icmp_packets
Il prend les arguments : save pour sauvegarder les règles, flush pour vider toutes les règles et reload
pour les recharger depuis les fichiers précités.
Uncomplicated Firewall est pré-installé sous Ubuntu, mais si besoin il faudrait installer le paquet ufw.
// Désactiver UFW :
# ufw disable
Le pare-feu est arrêté et désactivé lors du démarrage du système
// Activer UFW :
# ufw enable
Le pare-feu est actif et lancé au démarrage du système
// Désactiver la journalisation :
# ufw logging off
Journalisation désactivée
L'ordre de déclaration des règles est très important, le système utilisant une politique premier arrivé,
premier servi . Prenez donc soin d'ajouter vos règles spéciques avant les règles générales lorsqu'elles
concernent des éléments communs.
Les exemples ci-dessous montrent l’utilisation de règles simples, par défaut les règles s’appliquent sur le
trafic entrant (incoming) :
// USAGE: ufw [insert NUM] allow|deny|reject|limit [in|out] [log|log-all] PORT[/protocol]
// Suppression de la règle 1
# ufw delete 1
Suppression de :
allow 22
Exécuter l’opération (o|n) ? o
La règle a été supprimée
...
UFW regarde dans la liste de services connus (/etc/services) pour appliquer les règles standards
associées à des services.
UFW applique des règles iptables par défaut lors de son lancement. Vous pouvez les consulter et les
modier directement dans le chier /etc/ufw/before.rules. Par exemple, cela peut s'avérer utile si
vous voulez interdire les requêtes de ping (ICMP Echo Request ).
Question 15. Mettre en place une politique close config par défaut.
Question 18. Supprimer la règle autorisant les connexions http vers ce serveur.