Administration réseau sous Linux/TP Licence - Résumé des cours

Un livre de Wikilivres.
Aller à : navigation, rechercher

Sections

Configuration réseau[modifier | modifier le wikitexte]

Installation de la carte réseau[modifier | modifier le wikitexte]

Les cartes réseau sont souvent détectées au démarrage. Si ce n'est pas le cas il faudra charger les modules correspondants.

Pour obtenir la liste des interfaces réseau qui ont été détectées, on peut utiliser la commande

ifconfig -a

Les sections qui commencent par ethX correspondent aux cartes ethernet, où X est le numéro de la carte.

Si la carte n'est pas détectée, il faudra charger le module avec la commande

modprobe <nom du module>

Parmi les modules courants on peut noter : ne2k-pci pour les cartes NE2000, via-rhine, rtl8139...

Les modules disponibles pour votre noyau se trouvent dans /lib/modules/<nom du noyau>/kernel/drivers/net/. La commande suivante affiche les modules réseau disponibles pour le noyau en cours d'utilisation :

ls /lib/modules/`uname -r`/kernel/drivers/net/

Pour connaître le nom du module en fonction du nom commercial d'une carte, une recherche sur internet est souvent la meilleure solution.

Le noyau donne parfois des informations utiles sur les cartes réseau. On peut rechercher les messages contenant "eth0" pour avoir plus d'informations sur la première carte réseau détectée :

dmesg | grep eth0

La commande suivante permet d'afficher les cartes réseaux reliées au bus PCI :

lspci | grep Ethernet

Configuration de la carte réseau[modifier | modifier le wikitexte]

Une fois votre carte reconnue par le noyau, vous devez au moins préciser l'adresse IP et le masque de sous-réseau de la carte. Dans le cas d'un réseau local connecté à Internet, vous devez aussi ajouter l'adresse IP de la passerelle et l'adresse IP d'un ou plusieurs serveurs DNS.

Adresse IP[modifier | modifier le wikitexte]

Pour attribuer une adresse IP à une interface réseau, on peut utiliser la commande ifconfig :

ifconfig <interface> <adresse ip>

Par exemple :

ifconfig eth0 192.168.1.12

Le masque de sous-réseau est déterminé automatiquement en fonction de la classe de l'adresse IP. S'il est différent on peut le spécifier avec l'option netmask :

ifconfig eth0 192.168.1.12 netmask 255.255.255.128

Pour voir si la carte réseau est bien configurée, on peut utiliser la commande :

ifconfig eth0

Passerelle et routage[modifier | modifier le wikitexte]

Pour ajouter une passerelle, on peut utiliser la commande route :

route add default gw <adresse ip>

Pour afficher les routes vers les différents réseaux :

route -n

Tester le réseau[modifier | modifier le wikitexte]

Pour tester si la carte réseau fonctionne, on peut essayer de communiquer avec une autre machine avec la commande

ping <adresse ip>

La commande ping envoi un paquet à l'adresse IP puis attend que la machine réponde. Elle affiche ensuite le temps qu'a pris toute l'opération, en millisecondes.

Informations sur les interfaces[modifier | modifier le wikitexte]

Pour vérifier le statuts de toutes les interfaces on peut utiliser la commande

netstat -i

Nom d'hôte (hostname)[modifier | modifier le wikitexte]

Le fichier /etc/hostname contient le nom de la machine. Il suffit de l'éditer pour changer le nom d'hôte de la machine. Cette modification n'est pas prise en compte immédiatement par le système. Elle le sera au prochaine démarrage de la machine ou après avoir lancé :

/etc/init.d/hostname.sh

On peut également changer le nom d'hôte avec la commande suivante, mais il ne sera pas conservé au prochain démarrage :

hostname <nom d'hôte>

Configuration automatique au démarrage[modifier | modifier le wikitexte]

Le fichier /etc/network/interfaces permet de configurer les cartes réseau de manière permanente.

Par exemple :

auto eth0
iface eth0 inet static
  address 192.168.1.2
  netmask 255.255.255.0
  gateway 192.168.1.1

Et si l'interface eth0 doit être configurée automatique grâce à un serveur DHCP :

auto eth0
iface eth0 inet dhcp

Pour que les modifications de ce fichier soient prises en compte, il faut redémarrer ou utiliser les commandes ifup et ifdown. Par exemple :

ifup eth0

Résolution de noms[modifier | modifier le wikitexte]

Le fichier /etc/host.conf indique comment les noms doivent être résolus (c'est à dire comment passer d'une adresse IP à un nom, et inversement). Par exemple :

# D'abord traduire avec les serveurs DNS et ensuite avec /etc/hosts.
order bind,hosts

# Il existe des machines avec plusieurs adresses
multi on

# Vérifie l'usurpation d'adresse IP
nospoof on

Serveurs DNS[modifier | modifier le wikitexte]

Le fichier /etc/resolv.conf contient les adresses IP des serveurs DNS. Par exemple :

nameserver 208.164.186.1
nameserver 208.164.186.2
search foo

La commande search indique que si un nom de domaine n'est pas trouvé, il faudra essayer en lui ajoutant .foo.

Fichier hosts[modifier | modifier le wikitexte]

Le fichier /etc/hosts contient une liste de résolutions de noms (adresses IP et noms de machine). Par exemple:

192.168.105.2 sasa

Ce fichier indique que sasa correspond à l'adresse IP 192.168.105.2, qui sera accessible par cet alias.

DHCP[modifier | modifier le wikitexte]

Le protocole DHCP (pour Dynamic Host Configuration Protocol) est un protocole réseau dont le rôle est d'assurer la configuration automatique des paramètres réseau d'une station, notamment en lui assignant automatiquement une adresse IP et un masque de sous-réseau.

Le protocole DHCP est très souvent mis en œuvre par les administrateurs de parc de stations car il offre l'énorme avantage de centraliser la configuration des stations sur une unique machine : le serveur DHCP. Le principal danger de DHCP est qu'en cas de panne du serveur DHCP, plus aucune station n'accède au réseau.

Il y a deux utilisations principales d'un serveur DHCP :

  • attribuer une configuration fixe à certains postes (on les reconnaît grâce à leur adresse MAC)
  • et attribuer une configuration dynamique aux postes inconnus.

On peut par exemple donner une adresse IP fixe à certains serveurs, et attribuer des adresses variables aux autres postes. Le protocole est prévu pour qu'un poste qui revient sur le réseau récupère la même adresse qu'il avait la première fois. Elle lui est réservée un certain temps (le lease time).

Configuration[modifier | modifier le wikitexte]

Le fichier de configuration principal est /etc/dhcp3/dhcpd.conf. Sa syntaxe est décrite dans man dhcpd.conf.

Il possède des options globales, généralement placées au début, et des sections pour chaque hôte ou réseau à configurer.

Après chaque modification de la configuration, il faut relancer le serveur :

/etc/init.d/dhcp3-server restart

S'il ne se relance pas, le détail de l'erreur se trouve généralement dans /var/log/syslog

Interfaces[modifier | modifier le wikitexte]

Par défaut, le serveur DHCP(Dynamic host configuration protocol) est lancé sur toutes les interfaces. Dans ce cas il est impératif de configurer un réseau par interface dans dhcpd.conf.

Pour choisir les interfaces sur lesquels le serveur est lancé, il faut modifier /etc/default/dhcp3-server en indiquant par exemple

INTERFACES="eth1 eth2"

Il est obligatoire d'avoir une section "subnet" (voir ci-dessous) pour le réseau de chaque interface.

Adresse dynamique[modifier | modifier le wikitexte]

Pour configurer une plage d'adresses à attribuer dynamiquement aux adresses MAC inconnues, on utilise une section subnet dans dhcpd.conf. La section suivante attribuera par exemple des adresses comprises entre 192.168.1.101 et 192.168.1.199 :

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.101 192.168.1.199;
}

Adresse fixe[modifier | modifier le wikitexte]

Pour donne une adresse fixe à un poste, il faut connaître son adresse MAC et écrire une section host. Par exemple la section suivante attribue l'adresse 192.168.0.47 au poste cobalt dont l'adresse MAC est 00:13:d4:bd:b7:9a :

host cobalt {
   hardware ethernet 00:13:d4:bd:b7:9a;
   fixed-address 192.168.0.47;
}

Options[modifier | modifier le wikitexte]

Le serveur DHCP peut fournir d'autres informations que l'adresse IP. Ces options peuvent être définies de manière globale en les plaçant en dehors de toute section. Elles s'appliqueront alors à toutes les sections qui ne les redéfinissent pas. Si elles sont placées dans une section particulière, elles ne s'appliquent qu'à celle-ci.

L'option domain-name-servers permet par exemple d'indiquer au poste les adresses des serveurs DNS. L'option routers indique la passerelle.

Toutes les options sont décrites dans la page de man. On peut également consulter cette documentation sur internet[1].


Samba[modifier | modifier le wikitexte]

Samba est un service permettant de partager des répertoires et imprimantes entre des stations Linux et des stations Windows.

Configuration du service Samba[modifier | modifier le wikitexte]

Pour la configuration de ce service le principal fichier à modifier est smb.conf qui se trouve généralement dans /etc ou /etc/samba selon la distribution.

Il existe également des interfaces graphiques pour configurer Samba.

La section [global] contient les options communes à tous les répertoires partagés.

Voici quelques options utilisables :

workgroup 
Le nom du groupe de travail. Les ordinateurs du même groupe de travail se retrouvent côte à côte dans le voisinnage réseau de Windows.
server string 
La description du serveur, qui apparaitra à coté de son nom dans l'explorateur Windows. Si la description contient le terme %h, il sera remplacé par le nom d'hôte de la machine.
encrypt passwords 
Détermine si les mots de passe doivent être cryptés avant d'être transmis. C'est fortement recommandé et tous les systèmes Windows à partir de 98 et NT4 SP3 utilisent cette fonctionnalité par défaut.
log file 
Le nom du fichier qui contiendra le journal des activités du serveur. On peut avoir un journal par machine client en utilisant %m dans le nom du fichier. Le %m sera remplacé par le nom de la machine client.
max log size 
Taille maximale du fichier journal, en Kio.
socket options 
Indique les options à mettre sur les sockets comme par exemple TCP_NODELAY pour que le système envoi immédiatement les petits paquets sans attendre d'en avoir plusieurs.

De nombreuses autres options sont disponibles. Elles sont détaillées dans la page de man de smb.conf

Exemple[modifier | modifier le wikitexte]

[global]
workgroup = maison
server string = Serveur Samba sur %h
encrypt passwords = true
log file = /var/log/samba/log.%m
max log size = 1000
socket options = TCP_NODELAY

Configuration du partage des répertoires[modifier | modifier le wikitexte]

Les partages Samba sont décrits dans des sections ayant la forme suivante :

[<nom du partage>]
<option> = <valeur>
...


Les paramètres principaux sont les suivantes :

comment 
La description du répertoire partagé.
path 
Le chemin du répertoire partagé. C'est le contenu du répertoire indiqué qui sera partagé.
read only 
Détermine si les clients pourront écrire ou non dans le répertoire partagé.
public 
Autoriser ou non les connexions sans mot de passe.
valid users 
Liste des seuls utilisateurs autorisés à se connecter séparés par des espaces. Si on veut autoriser tous les utilisateurs il ne faut pas mettre cette option.
browseable 
Détermine si le partage apparaitra dans la liste des partages du serveur.

La section [homes] est un partage particulier. Elle définit le partage des répertoires utilisateur des comptes unix de la machine.

De nombreuses autres options sont disponibles. Elles sont détaillées dans la page de man de smb.conf

Exemples[modifier | modifier le wikitexte]

[cdrom]
comment = Samba server's CD-ROM
read only = yes
locking = no
path = /cdrom
guest ok = yes
[partage]
path = /media/d/partage
available = yes
browsable = yes
public = yes
writable = yes
[zelinux]
comment = Site web
path = /myrep/zelinux
read only = no

Protéger les répertoires partagés[modifier | modifier le wikitexte]

Il est possible de rendre privé un répertoire et d'autoriser ou non des utilisateurs à y accéder.

Pour cela, pour chaque répertoire partagé ajoutez les options:

public = no
valid users = <nom des utilisateurs autorisés à accéder aux répertoires>

Pour chaque nom que vous avez rentré, il faut ajouter l'utilisateur samba avec

smbpasswd -a <nom de l'utilisateur>

Un compte unix du même nom doit exister. Si ce n'est pas le cas, il faut le créer avec la commande adduser.

Lancement du service[modifier | modifier le wikitexte]

Lancement :

/etc/init.d/samba start

Pour le stopper :

/etc/init.d/samba stop  

Pour le relancer :

/etc/init.d/samba restart

Les modifications du fichier smb.conf sont prises en compte pour chaque nouvelle connexion. Pour les rendre effectives sur les connexions déjà établies, il faut relancer Samba.

Accès aux répertoires[modifier | modifier le wikitexte]

Pour accéder aux partage sous Windows, il suffit d'ouvrir le voisinage réseaux d'une station Windows et de vérifier si la machine y est.

Pour se connecter en ligne de commande à un partage à partir de Linux, on peut utiliser la commande

smbclient //<nom du serveur>/<nom du partage> -U <utilisateur>

Il est également possible de monter un partage Samba avec

smbmount //<nom du serveur>/<nom du partage> <répertoire local>

Différentes options sont disponibles. On peut les consulter dans man smbclient et man smbmount.


Apache[modifier | modifier le wikitexte]

Apache est un serveur HTTP libre. Un serveur HTTP permet d'héberger des sites web qui seront accessibles avec un navigateur tel que Mozilla Firefox.

Un site web peut fournir tout type de contenu (des fichiers textes, HTML, Flash, zip…). Ce contenu peut être statique (le serveur transmet un fichier au navigateur) ou dynamique (le contenu est généré par un programme exécuté par le serveur). Les sites web contiennent généralement plusieurs types de documents, certains étant statiques et d'autres dynamiques.

Nous traiterons ici d'Apache 2.2 sur un système Debian (et ses dérivés, comme Ubuntu).

Fichiers log[modifier | modifier le wikitexte]

Par défaut sous Debian, Apache enregistre les erreurs dans le fichier /var/log/apache2/error.log. Quand quelque chose ne fonctionne pas, ce fichier fournit souvent des pistes pour trouver la solution.

Il enregistre également toutes les requêtes dans /var/log/apache2/access.log.

Configuration de base[modifier | modifier le wikitexte]

Sous Debian, Apache se lance automatiquement lorsqu'on l'installe et à chaque démarrage du système. Lorsqu'on modifie sa configuration, il faut lui faire prendre connaissance des changements avec la commande

/etc/init.d/apache2 reload

Pour l'arrêter, le lancer ou le relancer on utilisera la même commande avec stop, start ou restart.

Pour d'autres systèmes il faudra consulter la documentation du système ou celle d'Apache.

Configuration du serveur[modifier | modifier le wikitexte]

La configuration du serveur se trouve dans /etc/apache2/apache2.conf. Ce fichier contient des instructions Include qui permettent de déplacer certaines parties de la configuration dans d'autres fichiers. Debian utilise cette fonctionnalité pour les modules (comme PHP) et la gestion des serveurs virtuels :

Configuration des modules[modifier | modifier le wikitexte]

Le répertoire /etc/apache2/mods-available contient les modules installés. Le répertoire /etc/apache2/mods-enabled contient les modules activés. Les modules activés sont des liens symboliques vers les modules installés.

Pour activer ou désactiver un module, on peut manipuler directement les liens ou utiliser les commandes a2enmod et a2dismod (voir les pages de man).

Configuration des sites[modifier | modifier le wikitexte]

De la même manière, le répertoire /etc/apache2/sites-available contient les sites web disponibles et /etc/apache2/sites-enabled les sites activés. Il en existe un préinstallé : le site default.

Les sites peuvent s'activer ou se désactiver en manipulant les liens dans sites-enabled ou en utilisant a2ensite et a2dissite.

Quelques directives classiques[modifier | modifier le wikitexte]

La syntaxe d'Apache est assez simple. On trouve des blocs (ou contextes) comme par exemple :

<VirtualHost ...> # début de bloc VirtualHost
  ...
  <Directory ...> # début de bloc Directory
     ...
  </Directory>    # fin de bloc Directory
  ...
</VirtualHost>    # fin de bloc VirtualHost

et des directives comme par exemple

Include /etc/apache2/sites-enabled/

Les directives qui permettent de configurer le serveur lui-même sont généralement placées dans apache2.conf. Celles qui ne concernent qu'un site web sont déportées dans le fichier de configuration du site (sites-available/mon-site-web).

La directive DocumentRoot fixe la racine du serveur Web, c'est-à-dire le répertoire de base où se trouvent les documents. Par exemple avec la directive DocumentRoot /var/www/html, si le navigateur demande la page http://serveur/repertoire/fichier.txt, le serveur cherchera le fichier /var/www/html/repertoire/fichier.txt.

UserDir permet d'indiquer le répertoire personnel des utilisateurs du système. La directive UserDir public_html signifie qu'un utilisateur peut publier ses pages web personnelles dans un sous-répertoire public_html de son répertoire personnel. Pour l'utilisateur toto, c'est généralement /home/toto/public_html. Sa page d'accueil sera alors accessible par l'URL spéciale http://serveur/~toto.

DirectoryIndex indique la liste des fichiers qu'Apache cherchera à afficher si l'URL n'en précise pas. Par exemple si la configuration contient DirectoryIndex index.html index.php et qu'on demande l'URL http://serveur/repertoire/, Apache va chercher dans le répertoire un fichier index.html ou index.php. Si un de ces fichiers existe, il sera affiché. Sinon, Apache affichera soit la liste des fichiers, soit une erreur (suivant la présence de Indexes dans la directive Options).

AccessFileName définit le nom du fichier qu'on peut placer dans un répertoire pour en modifier sa configuration. Cela permet, par exemple, d'interdire localement l'affichage de la liste des fichiers, ou de protéger par mot de passe un répertoire et ses sous répertoires.

Listen indique à Apache sur quel port TCP il doit écouter. Le port par défaut du protocole HTTP est 80.

ServerName indique à Apache son nom de domaine et éventuellement son port. Il s'en sert lorsqu'il doit communiquer son adresse au client (le navigateur). C'est le cas par exemple lorsqu'on demande l'adresse http://serveur/repertoire sans slash (/) à la fin. Comme ce n'est pas une URL valide (l'URL d'un répertoire doit se terminer par un slash), Apache utilise la directive ServerName pour reconstruire une adresse avec un slash et la renvoi au client.

Paramétrage des répertoires[modifier | modifier le wikitexte]

Chaque répertoire auquel Apache accède peut être configuré indépendamment (et ses sous-répertoires en héritent).

Le paramétrage d'un répertoire se met dans un "conteneur" délimité par <Directory chemin_du_répertoire> et </Directory>. La configuration s'applique au répertoire et à tous ses sous répertoires. Si un sous-répertoire possède également sa propre configuration, elle vient s'ajouter à celle du parent.

Voici quelques exemples de contrôle d'accès. Plus de détails sont donnés dans la section "Un exemple de configuration".

# Configuration du répertoire racine du système
<Directory />
  # On n'autorise aucune option particulière
  Options None

  # Aucune modification n'est autorisé dans les fichiers .htaccess
  AllowOverride None
</Directory>

# Pour la racine du serveur:
<Directory /var/www/html>
  # Quelques options
  Options Indexes Includes FollowSymLinks

  # Les options peuvent être changées dans un .htaccess
  AllowOverride All

  # Permet à tout le monde d'accéder aux documents
  Allow from All

  # Spécifie comment appliquer la règle précédente
  Order allow,deny
</Directory>

# Le répertoire contenant des exécutables CGI
<Directory /usr/lib/cgi-bin>
  AllowOverride None
  Options ExecCGI
</Directory>

Les paramètres possibles de la directive Options sont : "None", "All", "Indexes", "Includes", "FollowSymLinks", "ExecCGI", ou "MultiViews".

Gérer les pages Web personnelles[modifier | modifier le wikitexte]

Il est possible de permettre aux utilisateurs du système de diffuser des pages personnelles sans avoir à créer un site par utilisateur. Il faut pour cela utiliser le module userdir.

Le répertoire contenant le site web doit être créé dans le home de l'utilisateur et doit être accessible en lecture pour tous. Le nom du répertoire est défini par la directive UserDir. Par défaut il s'agit du répertoire public_html.

L'adresse pour accéder à ces sites personnels est le nom de l'utilisateur précédé d'un tilde (~).

Par exemple un utilisateur toto sur le serveur www.iut.clermont.fr peut créer les pages de son site dans le répertoire /home/toto/public_html, et on pourra y accéder avec l'adresse : http://www.iut.clermont.fr/~toto/.

Il est possible de n'autoriser que certains utilisateurs à bénéficier du UserDir. Par exemple pour n'autoriser que sasa et toto à avoir un site personnel :

UserDir disabled
UserDir enabled sasa toto

Pour définir les options de ces répertoires, on peut utiliser une clause Directory pour le répertoire /home/*/public_html :

<Directory /home/*/public_html>
  Order allow,deny
  Allow from all
</Directory>

La clause UserDir public_html ne fonctionne que pour des utilisateurs ayant un compte sur le système. L'URL http://www.iut.clermont.fr/~toto ne fonctionne que si toto est un véritable utilisateur (auquel cas l'expression Unix ~toto a un sens), pas seulement si le répertoire /home/toto/public_html existe.

On peut utiliser une autre forme de UserDir pour autoriser les répertoires sans forcément qu'il y ait un compte unix associé :

UserDir /home/*/public_html

Le module PHP[modifier | modifier le wikitexte]

PHP a normalement été intégré au serveur Apache sous forme d'un module chargeable situé comme tous les autres modules d'Apache dans /usr/lib/apache2/modules.

Les fichiers /etc/apache2/mods-availiable/php.load et /etc/apache2/mods-availiable/php.conf contiennent les directives LoadModule et AddType qui permettent à Apache d'exécuter du PHP quand on demande un fichier se terminant par .php. Ils doivent être liés dans /etc/apache2/mods-enabled pour activer PHP. On peut utiliser pour cela la commande a2enmod.

En marge de Apache, PHP possède lui aussi son fichier de configuration, souvent /etc/php.ini. Il n'est pas particulièrement conseillé d'y intervenir sauf si on sait ce que l'on fait. On peut néanmoins y observer que PHP prend bien en compte le module d'extension MySQL, contenant les fonctions d'accès au "moteur" de base de données MySQL (qui a dû être installé à part), par la présence de extension=mysql.so.

En cas de modification d'un fichier de configuration, comme PHP fonctionne comme module d'Apache, il faut redémarrer Apache pour qu'il réinitialise PHP par la lecture de php.ini.

/etc/init.d/apache2 restart


Apache
La plume, symbole d'Apache
Plan
  1. Installer Apache
  2. Gérer plusieurs sites sur une même machine
  3. Serveurs virtuels
  4. Permettre la connexion sécurisée au serveur (https)
  5. Ajouter le support de PHP
  6. Ajouter le support d'une base de données
  7. Configurer les répertoires utilisateurs (public_html)
  8. Permettre la ré-écriture d'URL
  9. Fichier .htaccess
  10. Common Gateway Interface
Modifier ce modèle

Principe[modifier | modifier le wikitexte]

Pour protéger un répertoire en particulier (et ses sous-répertoires), il suffit de placer un fichier nommé .htaccess dedans. Apache appliquera instantanément ensuite les règles qu'il contient, uniquement dans cette arborescence.

Dialog-warning.svg
Attention !

L'explorer de Windows ne permet pas de rebaptiser des fichiers commençant par des points, il faut donc passer par un éditeur de texte.

Par exemple, pour interdire de visualiser les fichiers d'un répertoire qui n'a pas d'index (ex : .html, .php), ajouter le code : Options -Indexes.

Protection par provenance[modifier | modifier le wikitexte]

De nombreux robots tentent quotidiennement de pirater des bases de données (par exemple via PhpMyAdmin). Pour s'en prémunir on peut n'autoriser que deux IP à lire ce répertoire :

deny from all
allow from 127.0.0.1
allow from 127.0.0.2

Si les plages d'autorisation chevauchent celles d'interdiction, il est possible de préciser leur précédence (l'ordre des lignes dans le fichier ne change rien) :

order allow, deny 
commence par les autorisation puis démarre les interdictions au risque d'interdire ce qui était autorisé.
order deny, allow 
le contraire est moins restrictif.

Protection par mot de passe[modifier | modifier le wikitexte]

Configuration de l'authentification[modifier | modifier le wikitexte]

Il est impératif que la modification des paramètres d'authentification soit autorisée dans la configuration d'Apache.

Il faut que la directive AllowOverride d'un répertoire parent contienne l'option AuthConfig.

Les directives à placer dans le .htaccess sont les suivantes :

AuthType basic 
type d'authentification communément adopté mais peu sécurisé
AuthName "Mon message" 
affichera le texte comme invite dans la boîte de dialogue
AuthUserFile /etc/apache2/my_passwd 
indique où vont se trouver les mots de passe
Require valid-user 
précise qu'il faut un compte dans le fichier de mots de passe pour accéder au répertoire

On peut aussi utiliser Require user toto sasa pour n'autoriser que les comptes toto et sasa.

Le type d'authentification basic fait circuler les mots de passe en clair. Il existe d'autres types plus sécurisés comme digest, qu'il est recommandé de combiner à HTTPS. Voir l'article sur wikipédia pour plus de détails sur le fonctionnement.

La première requête adressée à ce répertoire protégé provoquera l'affichage d'une boîte de dialogue par laquelle l'utilisateur devra s'identifier (nom et mot de passe) :

  • Si le mot de passe saisi est invalide, la boite de dialogue s'affichera de nouveau.
  • S'il est valide, le navigateur l'enregistre et ne le demandera plus.

Il faudra relancer le navigateur pour qu'il le demande de nouveau.

Fichier de mots de passe[modifier | modifier le wikitexte]

Pour créer un fichier stockant les mots de passe permettant de lire un site, nommé /etc/apache2/default-passwd avec comme 1er utilisateur toto, on utilisera la commande

htpasswd -c /home/user/www/.htpasswd toto

Pour ajouter ou modifier un utilisateur à un fichier de mots de passe existant :

htpasswd /home/user/www/.htpasswd sasa

Pour que le .htaccess active le .htpasswd, y ajouter les directives :

AuthName "Page protégée"
AuthType Basic
AuthUserFile "/home/user/www/.htpasswd"
Require valid-user

Redirections[modifier | modifier le wikitexte]

La syntaxe est la même que dans le fichier de configuration générale d'Apache, sauf que cela n'affectera que le répertoire du fichier .htaccess.

Serveurs virtuels (virtual hosts)[modifier | modifier le wikitexte]

Apache peut gérer plusieurs sites web simultanément. Ils seront tous accessibles à partir de la même adresse IP et du même port. Pour les différencer, Apache se sert de l'adresse demandée par le navigateur.

Par exemple si site1.com et site2.com pointent sur la même adresse IP, les URL http://site1.com/ et http://site2.com/ aboutiront sur le même serveur. Mais au moment de la requète, le navigateur précise qu'il a demandé l'adresse http://site1.com/ ou http://site2.com/. Apache se sert de cette information pour savoir quel site afficher. On parle de serveur virtuel ou virtual host.

Pour indiquer à Apache quel site correspond à un nom de domaine, on utilise une section <VirtualHost *>. Sous Debian, il y a généralement un fichier par section VirtualHost dans le répertoire /etc/apache2/sites-availiable.

La section devra contenir une directive ServerName qui indiquera le nom associé à ce serveur virtuel. Elle pourra également contenir une directive ServerAlias si on veut que d'autres noms aboutissent à ce site.

Par exemple :

<VirtualHost *>
  ServerAdmin admin@site1.com
  DocumentRoot /home/site1/racine
  ServerName site1.com
  ServerAlias www.site1.com
  AccessLog /home/site1/access.log
  ErrorLog /home/site1/error.log
  <Directory /home/site1/racine>
    AllowOverride All
  </Directory>
</VirtualHost>

La documentation d'Apache sur les serveurs virtuels contient des informations détaillées sur le sujet.

Pour que ce serveur virtuel fonctionne, il est impératif que les noms site1.com et www.site1.com soient connus par la machine qui tente d'y accéder (celle qui lance le navigateur). Pour cela il y a plusieurs méthodes :

  • acheter le nom de domaine en question et le configurer pour qu'il pointe sur la bonne adresse IP
  • utiliser un serveur DNS qui renverra la bonne IP pour ce domaine
  • modifier le fichier hosts sur la machine cliente pour faire correspondre ce domaine à la bonne adresse IP (voir la partie Installation et configuration d'une carte réseau)

Firewall[modifier | modifier le wikitexte]

Netfilter est un module qui permet de filtrer et de manipuler les paquets réseau qui passent dans le système.

Il fournit à Linux :

  • des fonctions de pare-feu et notamment le contrôle des machines qui peuvent se connecter, sur quels ports, de l’extérieur vers l’intérieur, ou de l’intérieur vers l’extérieur du réseau ;
  • de traduction d'adresse (NAT) pour partager une connexion internet (masquerading), masquer des machines du réseau local, ou rediriger des connexions ;
  • et d'historisation du trafic réseau.

iptables est la commande qui permet de configurer Netfilter.

Fonctionnement[modifier | modifier le wikitexte]

Netfilter intercepte les paquets réseau à différents endroits du système (à la réception, avant de les transmettre aux processus, avant des les envoyer à la carte réseau, etc.). Les paquets interceptés passent à travers des chaînes qui vont déterminer ce que le système doit faire avec le paquet. En modifiant ces chaines on va pouvoir bloquer certains paquets et en laisser passer d'autres.

Filtrage[modifier | modifier le wikitexte]

Principal cheminement des paquets à travers Netfilter

Dans son fonctionnement le plus simple, Netfilter permet de jeter ou de laisser passer les paquets qui entrent et qui sortent.

Il fournit pour cela trois chaînes principales :

  • une chaîne INPUT pour filtrer les paquets à destination du système,
  • une chaîne OUTPUT pour filtrer les paquets émis par les processus du système,
  • et une chaîne FORWARD pour filtrer les paquets que le système doit transmettre.

En ajoutant des règles dans ces chaînes on pourra laisser passer ou jeter les paquets suivant certains critères.

Chaînes[modifier | modifier le wikitexte]

Une chaîne est un ensemble de règles qui indiquent ce qu'il faut faire des paquets qui la traversent.

Lorsqu'un paquet arrive dans une chaîne :

  • Netfilter regarde la 1ère règle de la chaîne,
  • puis regarde si les critères de la règle correspondent au paquet.
  • Si le paquet correspond, la cible est exécutée (jeter le paquet, le laisser passer, etc.).
  • Sinon, Netfilter prend la règle suivante et la compare de nouveau au paquet. Et ainsi de suite jusqu'à la dernière règle.
  • Si aucune règle n'a interrompu le parcours de la chaîne, la politique par défaut est appliquée.

Règles[modifier | modifier le wikitexte]

Une règles est une combinaison de critères et une cible. Lorsque tous les critères correspondent au paquet, le paquet est envoyé vers la cible.

Les critères disponibles et les actions possibles dépendent de la chaîne manipulée.

Syntaxe[modifier | modifier le wikitexte]

La syntaxe d'iptables et toutes les options sont décrites dans la page de man.

Pour chaque paramètre il existe généralement une forme longue avec deux tirets (par exemple --append) et une forme courte avec un seul tiret (par exemple -A). Utiliser l'une ou l'autre n'a pas d'importance, elles sont équivalentes. Les deux possibilités sont souvent représentées dans la documentation sous la forme --append|-A.

Les paramètres indiqués entre crochets (par exemple [-t <table>]) sont facultatifs.

Ce qui se trouve entre inférieur et supérieur (par exemple <table>) doit être remplacé par une valeur.

La forme générale pour utiliser iptables est la suivante :

iptables [-t <table>] <commande> <options>

La table par défaut est la table filter.

Commandes[modifier | modifier le wikitexte]

Les commandes principales sont les suivantes :

--list|-L [<chaîne>]

Affiche les règles contenues dans les chaînes ou seulement dans la chaîne sélectionnée.

Si le paramètre -v est placé avant cette commande, le nombre de paquets ayant traversé chaque règle sera également affiché.

--append|-A <chaîne> <critères> -j <cible>

Ajoute une règle à la fin de la chaîne <chaine>. Si tous les critères correspondent au paquet, il est envoyé à la cible. Voir plus bas pour une description des critères et des cibles possibles.

--insert|-I <chaîne> <critères> -j <cible>

Comme --append mais ajoute la règle au début de la chaîne.

--delete|-D <chaîne> <critères> -j <cible>

Supprime la règle correspondante de la chaîne.

--flush|-F [<chaîne>]

Efface toutes les règles de la chaîne. Si aucune chaîne n'est indiquée, toutes les chaînes de la table seront vidées.

--policy|-P <chaîne> <cible>

Détermine la cible lorsque qu'aucune règle n'a interrompu le parcours et que le paquet arrive en fin de chaîne.

Critères[modifier | modifier le wikitexte]

Les critères possibles sont nombreux. En voici quelques uns :

--protocol|-p [!] <protocole>

Le protocole est <protocole>. Les protocoles possibles sont tcp, udp, icmp, all ou une valeur numérique. Les valeurs de /etc/protocols sont aussi utilisables. Si un point d'exclamation se trouve avant le protocole, le critère correspondra au paquet seulement s'il n'est pas du protocole spécifié.

--source|-s [!] <adresse>[/<masque>]

L'adresse source est <adresse>. Si un masque est précisé, seules les parties actives du masque seront comparées. Par exemple lorsqu'on écrit -s 192.168.5.0/255.255.255.0, toutes les adresses entre 192.168.5.0 et 192.168.5.255 correspondront. On peut aussi écrire le masque sous la forme d'un nombre de bits (/8 correspond à 255.0.0.0, /24 à 255.255.255.0, etc.) Le masque par défaut est /32 (/255.255.255.255), soit l'intégralité de l'adresse.

Un point d'exclamation ne fera correspondre le paquet que s'il n'a pas cette adresse source.

--destination|-d [!] <adresse>[/<masque>]

Comme --source mais pour l'adresse destination.

--dport [!] <port>

Le port destination est <port>. Il est obligatoire de préciser le protocole (-p tcp ou -p udp), car dans les autres protocoles il n'y a pas de notion de port.

--sport [!] <port>

Comme --dport mais pour le port source.

-i <interface>

L'interface réseau d'où provient le paquet. N'est utilisable que dans la chaîne INPUT.

-o <interface>

L'interface réseau de laquelle va partir le paquet. N'est utilisable que dans les chaînes OUTPUT et FORWARD.

Cibles[modifier | modifier le wikitexte]

Les cibles principales sont les suivantes :

-j ACCEPT

Autorise le paquet à passer et interrompt son parcours de la chaîne.

-j DROP

Jette le paquet sans prévenir l'émetteur. Le parcours de la chaîne est interrompu.

-j REJECT

Comme DROP mais prévient l'émetteur que le paquet est rejeté. La réponse envoyée à l'émetteur est également un paquet qui devra satisfaire les règles de sortie pour pouvoir passer.

-j LOG [--log-level <level>] [--log-prefix <prefix>]

Enregistre le paquet dans les logs systèmes. Au <level> par défaut, le paquet est affiché sur la console principale du système.

Cette cible est utile pour voir certains paquets qui passent (pour débugger ou pour alerter).

Utilisation simple[modifier | modifier le wikitexte]

Le principe est assez simple à comprendre. Un paquet IP arrive sur votre machine, vous devez alors choisir ce que vous en faites. Vous pouvez l’accepter (ACCEPT), le rejeter (REJECT) ou le denier (DROP). La différence entre les deux derniers modes, est de prévenir ou non l’envoyeur, que son paquet a été refusé (avec REJECT on prévient, mais pas avec DROP).

Trois types de paquets peuvent passer par le firewall. Les paquets sortants (OUTPUT), entrant (INPUT) ou « passant », c’est-à-dire qui ne font que rebondir sur le routeur qui doit les rediriger FORWARD).

Pour organiser les règles d’acceptation/rejet, on procède de la façon suivante : – INPUT, OUTPUT, FORWARD, sont appelés des chaînes – une règle est un ensemble d’attributs auxquels correspond (ou non) un paquet : IP source, IP destination, port source, port destination, protocole . . . – quand un paquet passe par le firewall, il est aiguillé vers la chaîne correspondante – ensuite, les règles de la chaîne sont testées une par une, dans l’ordre, sur le paquet. Dès que le paquet correspond à une règle, on s’arrête. Si la règle stipule ACCEPT, le paquet est accepté. Si elle stipule DROP, il est ignoré. Si elle stipule REJECT, il est refusé avec acquittement. Les règles suivantes ne sont pas testées. – si aucune règle ne correspond au paquet, la politique par défaut est appliquée. Elle peut être positionnée à ACCEPT, DROP ou REJECT.

Il est plus sécurisant (mais plus long à mettre en place) d’utiliser une politique par défaut DROP et de créer des règles ACCEPT.

La syntaxe d’iptables est la suivante :

iptables -A|I chaîne -i (ou -o) interface -p protocole
--sport [port_début[:port_fin][,autre_port...]]
--dport [port_début[:port_fin][,autre_port]]
-s adresse_source -d adresse_dest -j politique

Il y a bien sûr de nombreuses autres options.

Créer et appliquer des règles[modifier | modifier le wikitexte]

Toutes les commandes iptables sont tapées directement sur la ligne de commande du terminal. Il est plus pratique de les inscrire dans un fichier script et de rendre ce script exécutable (chmod +x). Ne donnez que les droits minimum à ce fichier pour qu’il ne puisse pas être lu et modifié par tout le monde. Exemple de fichier :

#!/bin/sh
# Effacer toutes les règles avant toute chose, afin de partir d’une base
# propre et de savoir exactement ce que vous faites
iptables -F
 
# Définir une politique par défaut : le plus normal est de tout interdire par
# défaut et de n’autoriser que certains paquets.
# "DROP" ignore les paquets, "REJECT" les refuse avec acquittement pour l’envoyeur
# on met souvent "DROP" pour l’INPUT (on ne donne pas d’informations à un
# éventuel pirate) et "REJECT" pour l’OUTPUT et le FORWARD (on peut ainsi
# récupérer des infos pour soi) mais iptables n’autorise pas REJECT
# comme politique par défaut
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
 
# Autoriser le trafic sur l’interface loopback :
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
 
# Ensuite, c’est à vous d’ajouter les règles permettant de faire fonctionner
# les services que vous souhaitez utilisez sur votre machine.

Quelques exemples[modifier | modifier le wikitexte]

Pour vider la chaine INPUT de la table filter (la table par défaut) :

iptables --flush INPUT

La politique par défaut est d'accepter tous les paquets, ce qui est généralement un mauvais choix pour la sécurité. Pour changer cette règle sur la chaine FORWARD de la table filter :

iptables -P FORWARD DROP

Pour laisser passer les paquets sur le port telnet qui viennent d'un réseau local (forme longue) :

iptables --append INPUT --protocol tcp --destination-port telnet --source 192.168.13.0/24 --jump ACCEPT

Pour ignorer les autres paquets entrants sur le Port (logiciel)|port telnet (forme courte) :

iptables -A INPUT -p tcp --dport telnet -j DROP

Pour rejeter les paquets entrants sur le port 3128, souvent utilisé par les proxies :

iptables -A INPUT -p tcp --dport 3128 -j REJECT

Pour autoriser telnet vers votre machine (serveur telnet) :

iptables -A INPUT -p tcp --dport telnet -j ACCEPT
iptables -A OUTPUT -p tcp --sport telnet -j ACCEPT

Pour autoriser telnet depuis votre machine (client telnet) :

iptables -A OUTPUT -p tcp --dport telnet -j ACCEPT
iptables -A INPUT -p tcp --sport telnet -j ACCEPT

Destination NAT :

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.1

Le cas FTP[modifier | modifier le wikitexte]

Le protocole FTP est difficile à gérer avec un firewall car il utilise plusieurs connexions. Lorsqu'on se connecte par FTP sur un serveur, on créé une connexion dite de contrôle qui permet d'envoyer les commandes au serveur. Ensuite pour chaque transfert de fichier et chaque listage de répertoire, une nouvelle connexion de données sera créée.

Le firewall peut très bien gérer la connexion de contrôle, mais pas celles de transfert car elles sont faites sur des ports indéterminés. Sur certains serveurs FTP il est possible de fixer une plage de ports à utiliser, et dans ce cas on peut faire du NAT simple.

Il est également possible d'utiliser le "conntrack ftp". C'est un module pour Netfilter qui inspecte les connexions FTP de contrôle pour détecter les connexions de données. Il indique alors au noyau que ces connexions sont liées à une autre connexion (RELATED). Pour autoriser ces connexions avec iptables on utilise le module state.

Pour cela il faut charger le module ip_conntrack_ftp :

modprobe ip_conntrack_ftp

Et autoriser les connexions RELATED en entrée et en sortie :

iptables -A INPUT -m state --state RELATED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED -j ACCEPT

Routage[modifier | modifier le wikitexte]

Adresses IP et MAC[modifier | modifier le wikitexte]

Chaque interface de chaque ordinateur sera identifié par

  • Son adresse IP : une adresse IP (version 4, protocole IP V 4) permet d’identifier un hôte et un sous-réseau. L’adresse IP est codée sur 4 octets. (les adresses IP V 6, ou IP next generation seront codées sur 6 octets).
  • L’adresse mac de sa carte réseau (carte ethernet ou carte wifi) ;

Une adresse IP permet d’identifier un hôte. Une passerelle est un ordinateur qui possède plusieurs interfaces et qui transmet les paquets d’une interface à l’autre. La passerelle peut ainsi faire communiquer différents réseaux. Chaque carte réseau possède une adresse MAC unique garantie par le constructeur. Lorsqu’un ordinateur a plusieurs plusieurs interfaces, chacune possède sa propre adresse MAC et son adresse IP. On peut voir sa configuration réseau par ifconfig :

$ ifconfig eth0
eth0        Link encap:Ethernet HWaddr 00:B2:3A:24:F3:C4
            inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
            inet6 addr: fe80::2c0:9fff:fef9:95b0/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
            RX packets:6 errors:0 dropped:0 overruns:0 frame:0
            TX packets:16 errors:0 dropped:0 overruns:0 carrier:5
            collisions:0 txqueuelen:1000
            RX bytes:1520 (1.4 KiB) TX bytes:2024 (1.9 KiB)
            Interrupt:10

On voit l’adresse MAC 00:B2:3A:24:F3:C4 et l’adresse IP 192.168.0.2. Cela signifie que le premier octet de l’adresse IP est égal à 192, le deuxième 168, le troisième octet est nul, et le quatrième vaut 2.

Sous-réseaux[modifier | modifier le wikitexte]

Classes de sous-réseaux[modifier | modifier le wikitexte]

Les adresses IPV4 sont organisées en sous-réseaux. Chaque sous-réseau possède une adresse, qui est une partie de l’adresse IP des machines de ce sous-réseau.

Par exemple, l’adresse IP 192.168.4.35 appartient au sous-réseau 192.168.4, parfois aussi noté 192.168.4.0.

Les sous-réseaux sont organisés en classes. Chaque classe de sous-réseaux correspond à des réseaux pouvant contenir un certain nombre de machines.

  • Classe A : les adresses de de 1.0.0.0 à 127.0.0.0. L’identifiant du réseau est alors sur 8 bits et les identifiants de machine sont sur 24 bits (plusieurs millions de machines par sous-réseau ;
  • Classe B : les adresses de de 128.0.0.0 à 191.255.0.0. L’identifiant du réseau est alors sur 16 bits et les identifiants de machine sont sur 16 bits (plus de 65 000 machines par sous-réseau) ;
  • Classe C : les adresses de de 192.0.0.0 à 223.255.255.0. L’identifiant du réseau est alors sur 24 bits et les identifiants de machine sont sur 8 bits (au plus 254 machines par sous-réseau, numérotées de 1 à 254) ;

Masque de sous-réseau[modifier | modifier le wikitexte]

Un masque de sous-réseau est une donnée sur 4 octets qui, avec l’adresse du sous-réseau, caractérise les IP du sous-réseau.

Un bit du masque de sous-réseau est à 1 si pour toutes les adresses IP du sous-réseau, ce même bit est le même pour l’adresse IP et le sous-réseau.

Par exemple, pour le réseau de classe A 37.0.0.0 avec le masque de sous-réseau 255.0.0.0, les 8 premiers bits de toutes les adresses IP du sous-réseau valent 37.

Autre exemple : pour le sous-réseau de classe C 193.56.49.0 et le masque de sous-réseau 255.255.255.0, les 24 premiers bits de toutes les IP du sous-réseau sont 193.56.49.

On peut désigner un sous-réseau par son adresse et son masque, mais on peut aussi désigner le sous-réseau en donnant seulement le nombre de bits du masque. On parle alors, pour reprendre les deux exemples précédents, du sous-réseau 37.0.0.0/8 ou du sous-réseau 193.56.49.0/24.

Routage[modifier | modifier le wikitexte]

Le routage permet de faire communiquer plusieurs sous-réseaux. Une passerelle (en anglais gateway) est en communication avec différents sous-réseaux sur différentes interfaces, et assure la communication entre les différents sous-réseaux (voir figure 8.1).

Routes[modifier | modifier le wikitexte]

Une route définie sur une station est un chemin que doivent prendre les paquets à destination d’un certain sous-réseau. Prenons l’exemple (voir figure 8.1) d’une station, appelée station 1, d’adresse IP 121.65.77.8 sur un réseau 112.0.0.0/8.

(Fig. 8.1: Exemple de passerelle faisant communiquer deux réseaux)


Elle est connectée à une passerelle qui a pour IP dans ce réseau 112.65.123.3 sur son interface eth0. La passerelle est aussi connectée au réseau 192.168.0.0/24 via son interface eth1 qui a pour IP 192.168.0.1. Si la station 1 veut communiquer directement avec la station, appelée station 6, d’adresse IP 192.168.0.2 sur le réseau 192.168.0.0/24, trois condition doivent être réunies ;

  • Une route doit être définie sur la station 1 indiquant que les paquets à destination du réseau 192.168.0.0/24 doivent passer par la passerelle 112.65.123.3. Pour cela, on peut utiliser la commande route :
route add -net 192.168.0.0/24 gw 112.65.123.3
  • Une route doit être définie sur la station 6 indiquant que les paquets à destination du réseau 112.0.0.0/8 doivent passer par la passerelle 192.168.0.1 ; Pour cela, on peut utiliser la commande route :
route add -net 112.0.0.0/8 gw 192.168.0.1
  • La passerelle doit être configurée pour transmettre (ou forwarder) les paquets IP d’un réseau à l’autre, ce qui se fait par la commande :
echo 1 >/proc/sys/net/ipv4/ip_forward

Remarque : Il faut refaire ces commandes après un redémarrage. Pour éviter de relancer ces commandes manuellement, on peut les mettre dans des scripts d’initialisation au démarrage avec la commande update-rc.d (sous debian)). Pour ajouter une script my_ script à l’initialisation :

mv my_script /etc/init.d
update-rc.d my_script defaults

On peut voir l’état des routes avec la commande route -n. Par exemple, sur la station 1 :

route -n
Destination           Gateway                         Genmask               Flags Metric Ref     Use Iface
192.168.0.0           112.65.123.3                    255.255.255.0         U     0       0        0 eth2
etc...

Sur la station 6

route -n
Destination           Gateway                         Genmask               Flags Metric Ref     Use Iface
112.0.0.0             192.168.0.1                     255.0.0.0             U     0       0        0 wlan0
etc...

Pour supprimer une route, par exemple vers le réseau 193.86.46.0/24 via une passerelle 196.24.52.1, on fait :

route del -net 193.86.46.0/24 gw 196.24.52.1

Route par défaut (gateway)[modifier | modifier le wikitexte]

Quand on a défini un certain nombre de routes sur une station, on peut définir une route spéciale pour les paquets IP à destination des réseaux non prévus dans les autres routes. On appelle une telle route une route par défaut. En général, c’est la route qu’il faut employer pour aller sur internet. On emploie le réseau 0.0.0.0 (masque 255.255.255.255). Pour définir une route par défaut on peu employer route. Par exemple, pour définir la route par défaut via la passerelle 194.56.87.1 :

route add default gw 194.56.87.1

Pour supprimer cette même route :

route del default gw 194.56.87.1

NAT et masquerading[modifier | modifier le wikitexte]

Lorsqu'un hôte ayant une adresse IP sur un réseau local cherche à se connecter sur un réseau plus vaste, par exemple sur internet, via une passerelle, cet hôte a besoin d’une adresse IP sur le réseau vaste. Pour cela, soit on demande à ce que les adresses du réseau local soient routées sur le réseau global, mais il faut alors demander à réserver un plage d’adresses sur le réseau global, soit l’administrateur de la passerelle a la possibilité de prêter l’IP de la passerelle aux machines du réseau local. Pour cela, on utilise iptables avec NAT. Par exemple, si la passerelle se connecte à internet via son interface eth0, il suffit d’exécuter la commande suivante sur la passerelle :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Toute machine du réseau local (par exemple 192.168.0.0/24) qui se connecte à internet via cette passerelle aura alors l’adresse IP de la passerelle sur internet. On peut aussi donner aux machines du réseau local une autre adresse IP que l’on spécifie avec –to :

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 193.56.17.9

Nous aurons un aperçu plus complet des possibilités d’iptables dans la documentation sur Netfilter.

Redirection[modifier | modifier le wikitexte]

Il est également possible de modifier la destination d'un paquet. C'est utile lorsqu'on veut cacher une machine derrière une autre : le client se connecte à un serveur, qui va transmettre tous les paquets à un autre. Pour le client c'est transparent, c'est comme si c'était le premier serveur qui répondait. On appelle cela du Destination NAT (DNAT).

Exemple pour rediriger toutes les connexions du port 22 vers le serveur 192.168.1.12 :

iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to 192.168.1.12