Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révisionLes deux révisions suivantes | |||
securite:firewall_iptables [2011/12/16 21:44] – créée Anael MOBILIA | securite:firewall_iptables [2011/12/17 02:05] – maj présentation de la page Anael MOBILIA | ||
---|---|---|---|
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' |
< | < | ||
* 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' | ||
+ | |||
+ | Cette idée n'est pas optimale : en plus d' | ||
+ | |||
+ | Une bonne sécurisation est dans la prévention de l' | ||
+ | |||
+ | <note important> | ||
\\ | \\ | ||
- | ===== Liens ===== | + | Important à savoir |
- | * [[.:|Retour | + | </ |
- | * [[:|Retour à la liste des tutoriels]] | + | |
- | ++__But : Configurer un [firewall|tag: | ||
- | !!!! I) Préambule | + | ===== Iptables ===== |
- | 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' | + | |
- | %%%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 | + | ==== 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' | ||
- | !!! 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' | + | |
- | + | ||
- | !!! 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 | + | |
- | * Autorisation au cas par cas. | + | * Autorisation au cas par cas. |
- | Cette manière | + | Cette manière |
+ | |||
+ | |||
+ | ==== 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:// |
- | %%%Je ne vais m' | + | |
- | %%%[Schéma explicatif|http:// | + | |
- | !! A) Afficher les règles actuellement appliquées | ||
- | ///[bash] | ||
- | iptables -L | ||
- | /// | ||
- | Version " | ||
- | ///[bash] | ||
- | iptables -L -v | ||
- | /// | ||
- | !! B) Ajouter | + | ==== Commandes d' |
- | ///[bash] | + | <note tip>Une liste de valeurs données entre crochets (**[]**) signifie qu'une des valeurs est à choisir. |
- | iptables -P [INPUT/ | + | |
- | /// | + | Je met plusieurs possibilités afin de vous donner un aperçu des commandes possibles.< |
+ | === Afficher les règles actuellement appliquées === | ||
+ | <code bash>iptables -L</code> | ||
+ | Version " | ||
+ | <code bash> | ||
- | !! C) Ajouter une règle | + | === Ajouter une règle |
+ | Il est possible de définir une règle globale sur un des trois types de flux : | ||
+ | <code bash> | ||
- | ///[bash] | + | === Ajouter une règle === |
- | iptables -A [INPUT/ | + | < |
- | /// | + | * -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 | + | < |
- | /// | + | |
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 pour faire un script | + | Voici les règles que je vais appliquer |
- | '' | + | * Supprimer les configurations d' |
- | ///[bash] | + | <code bash> |
- | # vider les tables de filtrage existantes | + | iptables -t filter -X</ |
- | iptables -t filter | + | * 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> | ||
+ | * Autoriser le trafic entrant web | ||
+ | <code bash> | ||
+ | * Autoriser le ping | ||
+ | < | ||
+ | * Autoriser toutes | ||
+ | <code bash>iptables -I INPUT 2 -i lo -j ACCEPT</ | ||
+ | * Restriction de tout le reste du trafic entrant | ||
+ | <code bash>iptables -P INPUT DROP</ | ||
- | # autoriser le trafic entrant d'une connexion déjà active | + | < |
- | iptables -A INPUT -m state --state ESTABLISHED, | + | <code bash>iptables -A INPUT -p udp -i eth0 --dport |
- | # autoriser le trafic entrant SSH | + | |
- | iptables -A INPUT -p tcp -i eth0 --dport | + | Bien entendu ceci est adapté dans mon cas, et est à réfléchir avant de l' |
- | # autoriser le trafic entrant web | + | |
- | iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT | + | Je vous laisse trouver |
- | # autoriser le ping | + | |
- | iptables -A INPUT -p icmp -j ACCEPT | + | |
- | # autoriser toutes | + | |
- | 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' | ||
- | %%%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 | + | ==== Pérenniser |
- | !!! 1) Explication | + | === Explication |
- | Avoir mis en place une config personnalisée d' | + | Je vais vous expliquer comment créer un script qui sera exécuté |
- | %%%J' | + | |
- | %%%Je désapprouve cette idée : en cas de configuration erronée, le seul moyen de récupérer le serveur | + | |
- | %%%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 (automatiquement) la configuration d' |
- | ///[bash] | + | |
- | nano / | + | |
- | /// | + | === 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 | + | <code bash>nano / |
- | ///[bash] | + | |
+ | Voici le contenu de mon fichier : | ||
+ | < | ||
#!/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> |
- | {{# | + | |
- | !!! 3) Statut exécutable | + | === Statut exécutable |
- | Nous allons maintenant | + | Pour rendre |
- | ///[bash] | + | < |
- | chmod +x / | + | |
- | /// | + | |
- | !!! 4) Automatiser le lancement | + | === Automatiser le lancement |
- | ///[bash] | + | < |
- | cd / | + | update-rc.d iptables defaults</code> |
- | update-rc.d iptables defaults | + | |
- | /// | + | |
- | Un warning s' | + | |
- | %%%Cela n' | + | |
- | %%%[Infos sur LSB|http:// | + | |
- | %%%[Doc. Ubuntu|http:// | + | <note important> |
- | %%%[Doc. Ubuntu - en|https:// | + | \\ |
+ | [[http:// | ||
+ | |||
+ | \\ | ||
+ | ===== Liens ===== | ||
+ | * [[.:|Retour à la liste des tutoriels Sécurité]] | ||
+ | * [[:|Retour à la liste des tutoriels]] | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
- | http:// |