Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révisionLes deux révisions suivantes
securite:firewall_iptables [2011/12/16 21:44] – créée Anael MOBILIAsecurite:firewall_iptables [2011/12/17 02:05] – maj présentation de la page Anael MOBILIA
Ligne 1: Ligne 1:
-<style float-right>{{tag>XXX}}</style>+<style float-right>{{tag>iptables firewall pare-feu}}</style>
  
-<style float-left>{{:icones:page_web.png?nolink&70}}</style> +<style float-left>{{:icones:kgpg.png?nolink&70}}</style> 
-====== Titre_page ======+====== Configurer des règles de filtrage réseaux ======
  
 //[[:|Retour à la liste des tutoriels]]// //[[:|Retour à la liste des tutoriels]]//
  
-<note tip>Présentation rapide.</note>+<note tip>Explication des fonctionnalités principales d'iptables et création d'un script de configuration.</note>
 <note>**Prérequis** <note>**Prérequis**
   * Aucun prérequis pour ce tutoriel.   * Aucun prérequis pour ce tutoriel.
 </note> </note>
 \\ \\
-===== grand1 ===== +===== Préambule ===== 
-lorem ipsum+Afin de sécuriser un serveur, il faut 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 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 n'est pas optimale : 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'attaque.
 +
 +<note important>Une mauvaise configuration d'iptables peut rendre votre serveur totalement in-opérationnel !
 \\ \\
-===== Liens ===== +Important à savoir si vous rendez votre serveur in-opérationnel à cause d'une erreur de configuration, redémarrez le : iptables ne conserve pas sa configuration ! 
-  * [[.:|Retour à la liste des tutoriels XXX]] +</note>
-  * [[:|Retour à la liste des tutoriels]]+
  
-++__But : Configurer un [firewall|tag:firewall] : [iptables|tag:iptables]__++ 
  
-!!!! I) Préambule +===== Iptables =====
-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 !+
  
-!!!! IIIptables+==== Programmes à autoriser ==== 
 +Quels sont les services 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)
  
-!!! 1) Programmes à autoriser +==== Gestion des droits ====
-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 : Je vais utiliser une gestion des droits dite par liste blanche :
-* Interdiction de toutes les connexions +  * Interdiction de toutes les connexions 
-* Autorisation au cas par cas. +  * Autorisation au cas par cas. 
-Cette manière est la plus sécurisée de gérer les droits d'accès :-)+Cette manière me semble être la plus adaptée à notre besoin de sécurité. 
 + 
 + 
 +==== Notions théoriques ==== 
 +3 types de flux réseaux sont gérés par iptables :  
 + * ceux qui entrent : **INPUT** (du visiteur vers le serveur), 
 + * ceux qui sortent : **OUTPUT** (du serveur vers le visiteur), 
 + * ceux qui ne font que passer : **FORWARD** (d'un visiteur, vers un autre serveur / visiteur / ...).
  
-!!! 3) Notions théoriques+Je vais travailler uniquement sur les flux entrants.
  
-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 / ...). +[[http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html|Schéma explicatif]]
-%%%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 
-/// 
  
-!! BAjouter une policy globale sur un des 3 types de flux +==== Commandes d'iptables ==== 
-///[bash] +<note tip>Une liste de valeurs données entre crochets (**[]**signifie qu'une des valeurs est à choisir. 
-iptables -P [INPUT/OUTPUT/FORWARD/...] [ACCEPT/DROP] + 
-///+Je met plusieurs possibilités afin de vous donner un aperçu des commandes possibles.</note> 
 +=== Afficher les règles actuellement appliquées === 
 +<code bash>iptables -L</code> 
 +Version "verbose" (plus d'informations) 
 +<code bash>iptables -L -v</code>
  
-!! C) Ajouter une règle+=== Ajouter une règle globale === 
 +Il est possible de définir une règle globale sur un des trois types de flux : 
 +<code bash>iptables -P [INPUT/OUTPUT/FORWARD/...] [ACCEPT/DROP]</code>
  
-///[bash+=== Ajouter une règle === 
-iptables -A [INPUT/OUTPUT/FORWARD/...] -p [tcp/udp/...] --dport [www/ssl/80/...] -j [ACCEPT/DROP] +<code bash>iptables -A [INPUT/OUTPUT/FORWARD/...] -p [tcp/udp/...] --dport [www/ssl/80/...] -j [ACCEPT/DROP]</code> 
-//+  * -A précise le type de flux 
-* -A précise le type de flux +  * -p précise le type de protocole (le plus souvent TCP) 
-* -p précise le type de protocole (le plus souvent TCP) +  * --dport précise le numéro du port concerné, ou son nom 
-* --dport précise le numéro du port concerné, ou son nom +  * -j définit la politique du pare-feu
-* -j définit la politique du pare-feu+
  
-!! D) Supprimer une règle +=== Supprimer une règle === 
-///[bash+Afficher les règles en vigueur : 
-iptables -L --line-numbers +<code bash>iptables -L --line-numbers</code>
-///+
 Relever le n° et le type de la règle que l'on souhaite supprimer Relever le n° et le type de la règle que l'on souhaite supprimer
-///[bash+<code bash>iptables -D [INPUT/OUTPUT/FORWARD/...] [1/2/...]</code> 
-iptables -D [INPUT/OUTPUT/FORWARD/...] [1/2/...] +  * -D précise la suppression 
-//+  * puis on donne le type de flux concerné 
-* -D précise la suppression +  * et l'id de la règle
-* puis on donne le type de flux concerné +
-* et l'id de la règle+
  
-!!!! IV) Configuration +==== Règles de configuration ==== 
-Pour faire simple, voici l'état de mes recherches pour faire un script iptables correct : +Voici les règles que je vais appliquer 
-''(l'option -i sert à préciser l'interface réseau : eth0 <-1ère carte réseaulo <-> 127.0.0.1)'' + * Supprimer les configurations d'iptables pouvant exister 
-///[bash] +<code bash>iptables -t filter -F 
-# vider les tables de filtrage existantes +iptables -t filter -X</code> 
-iptables -t filter -F +  * Autoriser le trafic entrant d'une connexion déjà active 
-iptables -t filter -X+<code bash>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT</code> 
 +  * Autoriser le trafic entrant SSH 
 +<code bash>iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT</code
 +  * Autoriser le trafic entrant web 
 +<code bash>iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT</code> 
 +  * Autoriser le ping 
 +<code bash>iptables -A INPUT -p icmp -j ACCEPT</code> 
 +  * Autoriser toutes les connexions en loopback (connexion locale) 
 +<code bash>iptables -I INPUT 2 -i lo -j ACCEPT</code> 
 +  * Restriction de tout le reste du trafic entrant 
 +<code bash>iptables -P INPUT DROP</code>
  
-# autoriser le trafic entrant d'une connexion déjà active +<note>Si vous possédez un serveur BIND (DNS) pensez à ajouter également : 
-iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT +<code bash>iptables -A INPUT -p udp -i eth0 --dport 53 -j ACCEPT</code></note> 
-# autoriser le trafic entrant SSH + 
-iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT +Bien entendu ceci est adapté dans mon cas, et est à réfléchir avant de l'appliquer sur un autre serveur ! 
-# autoriser le trafic entrant web + 
-iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT +Je vous laisse trouver les configurations optimales pour votre serveur !
-# 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 +==== Pérenniser ==== 
-!!! 1) Explication +=== Explication === 
-Avoir mis en place une config personnalisée d'iptables c'est bien, la rendre pérenne c'est mieux ! +Je vais vous expliquer comment créer un script qui sera exécuté automatiquement au lancement de votre serveur, et configurera donc iptables.
-%%%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 +J'ai lu des tutoriels recommandant de sauvegarder (automatiquementla configuration d'iptables à 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 ! 
-///[bash] + 
-nano /etc/init.d/iptables + 
-//+=== Création du script === 
-On le place directement dans le répertoire init.d qui contient les scripts lancés automatiquement. +Les scripts associés aux services sont stockés dans **/etc/init.d**. 
-%%%Voila le contenu de mon fichier : +<code bash>nano /etc/init.d/iptables</code> 
-///[bash]+ 
 +Voici le contenu de mon fichier : 
 +<file bash iptables>
 #!/bin/bash #!/bin/bash
 # vider les tables de filtrage existantes # vider les tables de filtrage existantes
Ligne 149: Ligne 139:
 # restriction de tout le trafic entrant # restriction de tout le trafic entrant
 iptables -P INPUT DROP iptables -P INPUT DROP
-/// +</file>
-{{#!/bin/bash}} sert à indiquer le type de script utilisé à l'os ;-)+
  
-!!! 3) Statut exécutable +=== Statut exécutable === 
-Nous allons maintenant rendre notre script exécutable par l'OS +Pour rendre le script exécutable, il faut faire 
-///[bash+<code bash>chmod +x /etc/init.d/iptables</code>
-chmod +x /etc/init.d/iptables +
-///+
  
-!!! 4) Automatiser le lancement +=== Automatiser le lancement === 
-///[bash+<code bash>cd /etc/init.d/ 
-cd /etc/init.d/ +update-rc.d iptables defaults</code>
-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]+
  
-%%%[DocUbuntu|http://doc.ubuntu-fr.org/iptables|fr] +<note important>FIXME Un warning s'affiche parlant du LSB du fichier... Ceci n'empêche en rien sa bonne exécution ! 
-%%%[Doc. Ubuntu - en|https://help.ubuntu.com/community/IptablesHowTo|en]+\\ 
 +[[http://wiki.debian.org/LSBInitScripts|Infos sur LSB]]</note> 
 + 
 +\\ 
 +===== Liens ===== 
 +  * [[.:|Retour à la liste des tutoriels Sécurité]] 
 +  * [[:|Retour à la liste des tutoriels]] 
 +  * [[http://doc.ubuntu-fr.org/iptables|Doc. Ubuntu-fr]] 
 +  * [[https://help.ubuntu.com/community/IptablesHowTo|Doc. Ubuntu]]
  
-http://blog.zioup.org//2008/iptables_recent/