Ceci est une ancienne révision du document !


Titre_page

Retour à la liste des tutoriels

Présentation rapide.
Prérequis
  • Aucun prérequis pour ce tutoriel.


grand1

lorem ipsum


Liens

++But : Configurer un [firewall|tag:firewall] : [iptables|tag:iptables]++

!!!! I) Préambule Maintenant que nous avons un minimum sécurisé la configuration de nos logiciels, il appartient également d'effectuer un filtrage au niveau des connexions réseau : la meilleure manière de se protéger contre une attaque est qu'elle n'atteigne tout simplement pas la machine ! %Plus d'une personne conseille d'analyser les logs en temps réel de la machine (avec un logiciel spécialisé) afin de bannir les machines tentant de pirater notre serveur. %Cette idée est mauvaise : en plus d'utiliser des ressources en permanence afin d'analyser les logs, elle ne fait que post-traiter l'attaque. %Une bonne sécurisation est dans la prévention de l'attaq-ue. %Pour ce faire, je vais utiliser iptables, un logiciel de parefeu extrêmement puissant, intégré par défaut à Ubuntu ! %Attention toutefois : une mauvaise configuration d'iptables peut rendre votre serveur totalement in-opérationnel ! %Important à savoir : si vous plantez votre configuration, et rendez votre serveur in-opérationnel, redémarrez le : iptables ne conserve pas sa configuration !

!!!! II) Iptables

!!! 1) Programmes à autoriser Réfléchissons : quels sont les programmes dont nous avons toujours besoin ? * Apache pour le serveur web, donc le port 80 * Ssh pour gérer à distance notre serveur, donc le port 22 * Ping pour pouvoir vérifier que notre serveur est bien en ligne * Toutes les connexions internes au système d'exploitation (lancées automatiquement au démarrage)

!!! 2) Gestion des droits Je vais utiliser une gestion des droits dite par liste blanche : * Interdiction de toutes les connexions * Autorisation au cas par cas. Cette manière est la plus sécurisée de gérer les droits d'accès :-)

!!! 3) Notions théoriques

3 types de flux réseaux sont gérés par iptables : ceux qui rentrent : INPUT (du visiteur vers le serveur), ceux qui sortent : OUTPUT (du serveur vers le visiteur) et ceux qui ne font que passer : FORWARD (d'un visiteur, vers un autre serveur / visiteur / …). %Je ne vais m'intéresser qu'aux flux sortant pour le moment. %[Schéma explicatif|http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html|en]

!! A) Afficher les règles actuellement appliquées /[bash] iptables -L / Version “verbose” (plus d'informations) /[bash] iptables -L -v /

!! B) Ajouter une policy globale sur un des 3 types de flux /[bash] iptables -P [INPUT/OUTPUT/FORWARD/…] [ACCEPT/DROP] /

!! C) Ajouter une règle

/[bash] iptables -A [INPUT/OUTPUT/FORWARD/…] -p [tcp/udp/…] –dport [www/ssl/80/…] -j [ACCEPT/DROP] / * -A précise le type de flux * -p précise le type de protocole (le plus souvent TCP) * –dport précise le numéro du port concerné, ou son nom * -j définit la politique du pare-feu

!! D) Supprimer une règle /[bash] iptables -L –line-numbers / Relever le n° et le type de la règle que l'on souhaite supprimer /[bash] iptables -D [INPUT/OUTPUT/FORWARD/…] [1/2/…] / * -D précise la suppression * puis on donne le type de flux concerné * et l'id de la règle

!!!! IV) Configuration Pour faire simple, voici l'état de mes recherches pour faire un script iptables correct : (l'option -i sert à préciser l'interface réseau : eth0 ↔ 1ère carte réseau, lo ↔ 127.0.0.1) /[bash] # vider les tables de filtrage existantes iptables -t filter -F iptables -t filter -X # autoriser le trafic entrant d'une connexion déjà active iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT # autoriser le trafic entrant SSH iptables -A INPUT -p tcp -i eth0 –dport ssh -j ACCEPT # autoriser le trafic entrant web iptables -A INPUT -p tcp -i eth0 –dport 80 -j ACCEPT # autoriser le ping iptables -A INPUT -p icmp -j ACCEPT # autoriser toutes les connexions en loopback (connexion locale) iptables -I INPUT 2 -i lo -j ACCEPT # restriction de tout le trafic entrant iptables -P INPUT DROP / Bien entendu ceci est adapté dans mon cas, et est à réfléchir avant de l'appliquer sur un autre serveur :) %Toutefois si aucune config spécifique n'a été mise en place il devrait faire l'affaire :-) %Les deux première règles servent à supprimer toutes les règles pouvant préalablement exister. %Si vous possédez un serveur BIND (DNS) pensez à ajouter également : ///[bash] iptables -A INPUT -p udp -i eth0 --dport 53 -j ACCEPT /// !!!! V) Pérenniser !!! 1) Explication Avoir mis en place une config personnalisée d'iptables c'est bien, la rendre pérenne c'est mieux ! %J'ai lu des tutos recommandant de sauvegarder (automatiquement) la configuration à l'extinction du serveur, et de la réinsérer au redémarrage. %Je désapprouve cette idée : en cas de configuration erronée, le seul moyen de récupérer le serveur sera de le réinstaller ! (à nouveau : un reboot réinitialise la configuration d'iptables !) %Je propose donc de tester vos modifications, et une fois celle ci convenables les réunir dans un fichier nommé iptables

!!! 2) Création du script /[bash] nano /etc/init.d/iptables / On le place directement dans le répertoire init.d qui contient les scripts lancés automatiquement. %Voila le contenu de mon fichier : ///[bash] #!/bin/bash # vider les tables de filtrage existantes iptables -t filter -F iptables -t filter -X # autoriser le trafic entrant d'une connexion déjà active iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # autoriser le trafic entrant SSH iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT # autoriser le trafic entrant web iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT # autoriser le ping iptables -A INPUT -p icmp -j ACCEPT # autoriser toutes les connexions en loopback (connexion locale) iptables -I INPUT 2 -i lo -j ACCEPT # restriction de tout le trafic entrant iptables -P INPUT DROP /// {{#!/bin/bash}} sert à indiquer le type de script utilisé à l'os ;-) !!! 3) Statut exécutable Nous allons maintenant rendre notre script exécutable par l'OS : ///[bash] chmod +x /etc/init.d/iptables /// !!! 4) Automatiser le lancement ///[bash] cd /etc/init.d/ update-rc.d iptables defaults /// Un warning s'affiche parlant du LSB du fichier... ce sera pour une autre fois ;) %Cela n'empêche en rien sa bonne exécution ! %[Infos sur LSB|http://wiki.debian.org/LSBInitScripts|en] %[Doc. Ubuntu|http://doc.ubuntu-fr.org/iptables|fr] %%%[Doc. Ubuntu - en|https://help.ubuntu.com/community/IptablesHowTo|en]

http://blog.zioup.org//2008/iptables_recent/