# Le système d'exploitation GNU-Linux/Protection avec iptables

* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
[ Modifier le sommaire ]
Iptables est un outil permettant de paramétrer Netfilter le filtre de paquet intégré à Linux.

## Principe des tables

Netfilter utilise une liste de règles inscrites dans trois tables : INPUT, OUTPUT, FORWARD.
Le paquet arrivant est voué à:
* soit être filtré suivant les règle de la table INPUT pour être utilisé par un processus de la machine
* soit être transféré à une autre machine en respectant les règle de la table FORWARD
* soit quitter la machine dans les condition de la table OUTPUT
Le but est donc de modifier les tables en ajoutant et supprimant des règles dans les différentes tables. pour cela nous utilisons la commande iptables.

## Les actions sur les tables
### Le principe

Par défaut, iptables est composé de 3 catégories appelées "chaînes" (chain) :
* INPUT : Chaîne où l'on règle le trafic entrant.
* FORWARD : Chaîne où l'on règle le trafic qui sera redirigé.
* OUTPUT : Chaîne où l'on règle le trafic sortant.
À chaque chaîne est attribuée une "politique" (policy), les deux principales sont :
* ACCEPT : Politique d'acceptation. Par défaut, tout ce qui n'est pas dans la chaîne est accepté.
* DROP : Politique de refus. Par défaut, tout ce qui n'est pas dans la chaîne sera rejeté. (utile pour filtrer les connections entrantes)
Un exemple concret. Par défaut, si vous n'avez jamais touché à votre iptables, voici ce que vous devez avoir :
On constate ici que rien n'est sécurisé : tout entre (Chain INPUT, policy ACCEPT), tout sort (Chain OUTPUT, policy ACCEPT).

### Réglage simple

Tout d'abord, si votre iptables ne ressemble pas à l'exemple ci-dessus, ou tout simplement si vous souhaitez réinitialiser vos réglages, tapez ces commandes :
Les commandes de base :
Les règles sont lues dans un ordre précis. De la première vers la dernière. De cette manière, dans l'hypothèse où la première règle interdit une connexion alors que la suivante l'autorise, la connexion sera interdite.
* APPEND : Ajouter une règle dans une chaîne. La règle ainsi créée s'ajoute après la dernière règle.
* INSERT : Insère une règle dans une chaîne. La règle ainsi créée s'ajoute avant la première règle.
* LIST : Liste les règles existant dans toutes les chaînes.
* DELETE : Supprime une règle d'une chaîne.
* POLICY : Configure la politique d'une chaîne.
Créer une configuration de base :
Nous allons autoriser une connexion déjà établie (ESTABLISHED) à recevoir du trafic.
Autorisons maintenant le trafic sur deux ports utilisés par des services très répandus / utilisés. Bien évidemment à vous de faire le tri en fonction de ce que vous utilisez ou non.
* Trafic SSH :
* Trafic Web :
* Requêtes Ping :
* Trafic Local :
Voici ce que vous devriez avoir pour l'instant si vous listez les filtres (l'option -v permet de voir sur quelle interface la règle est appliquée) :
Comme vous pouvez le constater, la politique est une politique d'acceptation (policy ACCEPT). Donc tous les paquets entrent sans restriction. En résumé, jusque là, nos modifications n'ont servies à rien. Nous allons donc devoir modifier la politique en politique de refus (policy DROP).
La modification est effective immédiatement. À partir de maintenant, seuls les paquets TCP entrants sur les ports 80, 22 ainsi que les requêtes ICMP sont acceptés.
Ces modifications ne seront pas prises en compte au redémarrage. Il faut pour cela créer un fichier script contenant toutes les commandes précédentes.
Créez ce fichier dans le répertoire /etc/init.d/ et n'oubliez pas de le rendre exécutable (chmod 700 nom_du_fichier). Enfin, utilisez la commande update-rc.d afin que ce script soit exécuté au démarrage.

## Logs

Par défaut, les journaux d'iptables ne renseignent pas les actions effectuées par le par-feu. Pour les obtenir, il faut définir un niveau de log, par exemple :
Ensuite les opérations sont visibles dans le syslog.

## Conditions
### Adresses IP et ports en destination et en source

Pour sécuriser un serveur FTP, en n'autorisant que son adresse IP et interdisant toutes les autres à se connecter à Linux sur le port 21 :

### Limites

Pour se prémunir des attaques DDoS on peut limiter le trafic à un certain nombre de connexions par minute sur un port :

### Suivi

conntrack

## Références

* ↑ http://www.inetdoc.net/guides/iptables-tutorial/logtarget.html