Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| securite:firewall_iptables [2011/12/16 21:44] – créée Anael MOBILIA | securite:firewall_iptables [2014/05/27 03:32] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | <style float-right> | + | <style float-right> |
| - | <style float-left> | + | <style float-left> |
| - | ====== | + | ====== |
| // | // | ||
| - | <note tip>Présentation rapide.</ | + | <note tip>Explication des fonctionnalités principales d' |
| + | \\ | ||
| + | Utilisation d'IPv4 et IPv6</ | ||
| < | < | ||
| * Aucun prérequis pour ce tutoriel. | * Aucun prérequis pour ce tutoriel. | ||
| </ | </ | ||
| \\ | \\ | ||
| - | ===== 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' |
| - | \\ | + | Plus d'une personne conseille d' |
| - | ===== Liens ===== | + | |
| - | * [[.:|Retour à la liste des tutoriels XXX]] | + | |
| - | * [[:|Retour à la liste des tutoriels]] | + | |
| - | ++__But | + | Cette idée n'est pas optimale |
| - | !!!! I) Préambule | + | Une bonne sécurisation est dans la prévention de l'attaque. |
| - | Maintenant que nous avons un minimum sécurisé la configuration de nos logiciels, il appartient également d' | + | |
| - | %%%Plus d'une personne conseille d' | + | |
| - | %%%Cette idée est mauvaise : en plus d' | + | |
| - | %%%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' | + | |
| - | %%%Important à savoir : si vous plantez votre configuration, | + | |
| - | !!!! II) Iptables | + | <note important> |
| + | \\ | ||
| + | Important à savoir : si vous rendez votre serveur in-opérationnel à cause d'une erreur de configuration, | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Iptables | ||
| - | !!! 1) Programmes à autoriser | + | ==== Programmes à autoriser |
| - | Réfléchissons : quels sont les programmes | + | Quels sont les services |
| - | * Apache pour le serveur web, donc le port 80 | + | * Apache pour le serveur web, donc le port 80 |
| - | * Ssh pour gérer à distance notre serveur, donc le port 22 | + | * SSH pour gérer à distance notre serveur, donc le port 22 |
| - | * Ping pour pouvoir vérifier que notre serveur est bien en ligne | + | * Ping pour pouvoir vérifier que notre serveur est bien en ligne |
| - | * Toutes les connexions internes au système d' | + | * Toutes les connexions internes au système d' |
| - | !!! 2) Gestion des droits | + | ==== 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 | + | |
| - | * Autorisation au cas par cas. | + | * Autorisation au cas par cas. |
| - | Cette manière | + | Cette manière |
| - | !!! 3) Notions théoriques | ||
| - | 3 types de flux réseaux sont gérés par iptables : ceux qui rentrent | + | ==== Notions théoriques ==== |
| - | %%%Je ne vais m' | + | 3 types de flux réseaux sont gérés par iptables : |
| - | %%%[Schéma explicatif|http:// | + | |
| + | | ||
| + | | ||
| - | !! A) Afficher | + | Je vais travailler uniquement sur les flux entrants. |
| - | ///[bash] | + | |
| - | iptables -L | + | |
| - | /// | + | |
| - | Version " | + | |
| - | ///[bash] | + | |
| - | iptables -L -v | + | |
| - | /// | + | |
| - | !! B) Ajouter une policy globale sur un des 3 types de flux | + | [[http://www.netfilter.org/ |
| - | ///[bash] | + | |
| - | iptables -P [INPUT/OUTPUT/ | + | |
| - | /// | + | |
| - | !! C) Ajouter une règle | ||
| - | ///[bash] | + | ==== Commandes d' |
| - | iptables -A [INPUT/ | + | <note tip>Une liste de valeurs données entre crochets (**[]**) signifie qu'une des valeurs est à choisir. |
| - | /// | + | |
| - | * -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 | + | Je met plusieurs possibilités afin de vous donner un aperçu des commandes possibles.</ |
| - | ///[bash] | + | === Afficher les règles actuellement appliquées === |
| - | iptables -L --line-numbers | + | <code bash> |
| - | /// | + | Version " |
| + | <code bash> | ||
| + | |||
| + | === Ajouter | ||
| + | Il est possible de définir une règle globale sur un des trois types de flux : | ||
| + | <code bash> | ||
| + | |||
| + | === Ajouter une règle === | ||
| + | < | ||
| + | * -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 | ||
| + | |||
| + | === Supprimer une règle === | ||
| + | Afficher les règles en vigueur : | ||
| + | <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] | + | < |
| - | iptables -D [INPUT/ | + | * -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 | + | Voici les règles que je vais appliquer |
| - | ''(l'option -i sert à préciser | + | * Supprimer les configurations d' |
| - | ///[bash] | + | <code bash> |
| + | iptables -t filter -X</ | ||
| + | * Autoriser le trafic entrant d'une connexion déjà active | ||
| + | <code bash> | ||
| + | * Autoriser le trafic entrant SSH | ||
| + | <code bash> | ||
| + | * Autoriser le trafic entrant web | ||
| + | <code bash> | ||
| + | * Autoriser le ping | ||
| + | <code bash> | ||
| + | * Autoriser toutes les connexions en loopback (connexion locale) | ||
| + | <code bash> | ||
| + | * Restriction de tout le reste du trafic entrant | ||
| + | <code bash> | ||
| + | |||
| + | < | ||
| + | <code bash> | ||
| + | |||
| + | Bien entendu ceci est adapté dans mon cas, et est à réfléchir avant de l'appliquer sur un autre serveur ! | ||
| + | |||
| + | Je vous laisse trouver les configurations optimales | ||
| + | |||
| + | |||
| + | ==== Pérenniser ==== | ||
| + | === Explication === | ||
| + | Je vais vous expliquer comment créer | ||
| + | |||
| + | J'ai lu des tutoriels recommandant de sauvegarder | ||
| + | |||
| + | |||
| + | === Création du script === | ||
| + | Les scripts associés aux services sont stockés dans **/etc/init.d**. | ||
| + | <code bash> | ||
| + | |||
| + | Voici le contenu de mon fichier : | ||
| + | <file bash iptables> | ||
| + | #!/bin/bash | ||
| # vider les tables de filtrage existantes | # vider les tables de filtrage existantes | ||
| iptables -t filter -F | iptables -t filter -F | ||
| Ligne 108: | Ligne 141: | ||
| # restriction de tout le trafic entrant | # restriction de tout le trafic entrant | ||
| iptables -P INPUT DROP | iptables -P INPUT DROP | ||
| - | /// | + | </file> |
| - | Bien entendu ceci est adapté dans mon cas, et est à réfléchir avant de l' | + | |
| - | %%%Toutefois si aucune config spécifique n'a été mise en place il devrait faire l' | + | |
| - | %%%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 | + | === Statut exécutable === |
| - | !!! 1) Explication | + | Pour rendre le script exécutable, |
| - | Avoir mis en place une config personnalisée | + | <code bash> |
| - | %%%J'ai lu des tutos recommandant | + | |
| - | %%%Je désapprouve cette idée : en cas de configuration erronée, le seul moyen de récupérer le serveur | + | === Automatiser le lancement === |
| - | %%%Je propose donc de tester vos modifications, | + | <code bash>cd / |
| + | update-rc.d iptables defaults</ | ||
| + | |||
| + | <note important> | ||
| + | \\ | ||
| + | [[http:// | ||
| + | |||
| + | |||
| + | ===== Ip6tables IPv6 ===== | ||
| + | <note important> | ||
| + | |||
| + | Sinon cela reviendrait à mettre une porte blindée devant votre maison, mais laisser la porte de service grande ouverte... inutile !</ | ||
| + | |||
| + | ==== IPv6, suis-je concerné ? ==== | ||
| + | Pour déterminer si votre serveur possède une adresse IPv6 : | ||
| + | <code bash> | ||
| + | |||
| + | Que faut-il lire ? | ||
| + | < | ||
| + | inet adr: | ||
| + | adr inet6: 2a01: | ||
| + | adr inet6: fe80:: | ||
| + | UP BROADCAST RUNNING MULTICAST | ||
| + | RX packets: | ||
| + | TX packets: | ||
| + | collisions: | ||
| + | RX bytes: | ||
| + | Interruption: | ||
| + | La ligne nous intéressant est ''adr inet6'' | ||
| + | <note tip>Si une seule ligne est présente, et commence par fe80, votre serveur ne possède pas de connectivité internet IPv6. | ||
| + | |||
| + | Sinon, votre serveur | ||
| + | |||
| + | ==== ip6tables ==== | ||
| + | Le pare-feu est ip**6**tables. Je vais réutiliser les mêmes configurations que pour l' | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | Je rajoute | ||
| + | <file bash iptables> | ||
| + | |||
| + | # ----------------------------------- I P v 6 ----------------------------------------- | ||
| - | !!! 2) Création du script | ||
| - | ///[bash] | ||
| - | nano / | ||
| - | /// | ||
| - | 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 | # vider les tables de filtrage existantes | ||
| - | iptables | + | ip6tables |
| - | iptables | + | ip6tables |
| # autoriser le trafic entrant d'une connexion déjà active | # autoriser le trafic entrant d'une connexion déjà active | ||
| - | iptables | + | ip6tables |
| # autoriser le trafic entrant SSH | # autoriser le trafic entrant SSH | ||
| - | iptables | + | ip6tables |
| # autoriser le trafic entrant web | # autoriser le trafic entrant web | ||
| - | iptables | + | ip6tables |
| # autoriser le ping | # autoriser le ping | ||
| - | iptables | + | ip6tables |
| # autoriser toutes les connexions en loopback (connexion locale) | # autoriser toutes les connexions en loopback (connexion locale) | ||
| - | iptables | + | ip6tables |
| # restriction de tout le trafic entrant | # restriction de tout le trafic entrant | ||
| - | iptables | + | ip6tables |
| - | /// | + | </file> |
| - | {{# | + | |
| - | !!! 3) Statut exécutable | ||
| - | Nous allons maintenant rendre notre script exécutable par l'OS : | ||
| - | ///[bash] | ||
| - | chmod +x / | ||
| - | /// | ||
| - | !!! 4) Automatiser le lancement | + | \\ |
| - | ///[bash] | + | ===== Liens ===== |
| - | cd / | + | * [[.:|Retour à la liste des tutoriels Sécurité]] |
| - | update-rc.d iptables defaults | + | * [[:|Retour à la liste des tutoriels]] |
| - | /// | + | * [[http:// |
| - | Un warning s' | + | * [[https:// |
| - | %%%Cela n' | + | |
| - | %%%[Infos sur LSB|http:// | + | |
| - | + | ||
| - | %%%[Doc. Ubuntu|http:// | + | |
| - | %%%[Doc. Ubuntu - en|https:// | + | |
| - | + | ||
| - | http:// | + | |