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:// | + |