Lier des services à une IP sur un serveur Linux multi-IP | INTROSERV
EUR
european

EUR

usa

USD

French Fr
Ex. VAT Ex. VAT 0%

Comment lier des services à une IP sur un serveur multi-IP

Niveau : Intermédiaire
Durée estimée : ~25 minutes
Objectif : Configurer SSH, Nginx, Apache et MySQL/MariaDB pour qu'ils écoutent uniquement sur une adresse IP précise au lieu de toutes les interfaces d'un serveur disposant de plusieurs adresses IP.

Introduction

Lorsqu'un serveur possède plusieurs adresses IP, chaque service écoute par défaut sur toutes. C'est rarement souhaitable : une base de données ne doit pas être accessible sur une adresse IP publique, et le serveur web d'un client ne doit pas répondre sur l'adresse d'un autre client. Une configuration correcte d'un serveur multi-IP garantit que chaque interface réseau traite le bon trafic. La liaison à une adresse IP (IP binding) offre un contrôle d'accès plus strict, aide à gérer l'acheminement du trafic entrant et réduit la surface d'attaque. Dans ce tutoriel, nous expliquons comment lier un service à une adresse IP (bind service to IP address) pour plusieurs services courants — SSH, Nginx, Apache, MySQL/MariaDB — et comment optimiser la configuration de l'adresse d'écoute afin que le service n'écoute que sur l'adresse IP choisie.

Prérequis

Avant de commencer, assurez-vous que les conditions suivantes sont remplies :

  • Système d'exploitation : Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 ou CentOS/RHEL 8/9 (si vous devez configurer la liaison de services sous Ubuntu, les étapes sont presque identiques d'une version à l'autre)
  • Accès : accès sudo ou root au serveur
  • Réseau : au moins deux adresses IP configurées sur le serveur (à vérifier à l'étape 1)
  • Connaissances requises : maîtrise de la ligne de commande Linux et de l'édition de texte de base

Étape 1 : Identifier vos adresses IP

Vérifiez quelles adresses IP sont attribuées au serveur :

ip -4 addr show

Sortie attendue (exemple) :

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... inet 203.0.113.10/24 brd 203.0.113.255 scope global eth0 inet 198.51.100.5/24 brd 198.51.100.255 scope global eth0:1

Dans ce tutoriel, nous utilisons 203.0.113.10 comme adresse IP publique et 198.51.100.5 comme adresse IP secondaire. Remplacez-les par vos adresses réelles.

Info

Si vous ne voyez qu'une seule adresse, votre serveur n'a pas encore plusieurs adresses IP configurées. Contactez votre fournisseur ou ajoutez une adresse manuellement avant de continuer.

Étape 2 : Lier SSH à une adresse IP précise

Par défaut, SSH écoute sur 0.0.0.0 (toutes les interfaces). Pour le limiter à une seule adresse IP et réaliser la liaison du service sous Linux :

Sauvegardez la configuration :

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

Ouvrez le fichier de configuration SSH :

sudo nano /etc/ssh/sshd_config

Repérez la directive ListenAddress et définissez l'adresse d'écoute afin de configurer l'adresse IP sur laquelle le service écoute :

ListenAddress 203.0.113.10

Si ListenAddress est commentée ou absente, ajoutez la ligne à n'importe quel endroit du fichier.

Validez la configuration :

sudo sshd -t

Si aucune sortie n'est renvoyée, la configuration est valide.

Warning

Avant de redémarrer SSH, assurez-vous que l'adresse IP indiquée est correcte et joignable. Si vous liez SSH à une mauvaise adresse IP, vous perdrez l'accès au serveur. Gardez une seconde session SSH ouverte par précaution, ou utilisez l'accès console de votre fournisseur.

Redémarrez le service :

sudo systemctl restart sshd

Info

Sur certains systèmes, le service peut s'appeler ssh au lieu de sshd.

Vérifiez que SSH n'écoute désormais que sur l'adresse IP indiquée :

ss -tlnp | grep sshd

Sortie attendue :

LISTEN 0 128 203.0.113.10:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))

Si vous voyez 0.0.0.0:22, la modification n'a pas pris effet. Recherchez dans la configuration d'éventuelles fautes de frappe ou des lignes ListenAddress contradictoires.

Étape 3 : Lier Nginx à une adresse IP précise

La directive listen détermine l'adresse IP et le port utilisés par Nginx. Pour lier l'application à une adresse IP, vous devez configurer la directive listen de NGINX.

Sauvegardez la configuration :

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup

Ouvrez la configuration de votre site :

sudo nano /etc/nginx/sites-available/default

Info

Sous CentOS/RHEL, le chemin de la configuration par défaut est /etc/nginx/conf.d/default.conf. La syntaxe est la même.

Remplacez la directive d'écoute (listen) :

listen 80; listen [::]:80;

par :

listen 203.0.113.10:80;

Si vous utilisez également HTTPS :

listen 203.0.113.10:443 ssl;

Testez la configuration et rechargez-la :

sudo nginx -t sudo systemctl reload nginx

Vérification :

ss -tlnp | grep nginx

Sortie attendue :

LISTEN 0 511 203.0.113.10:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))

Étape 4 : Lier Apache à une adresse IP précise

Apache utilise la directive Listen dans sa configuration principale.

Debian/Ubuntu :

sudo cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup sudo nano /etc/apache2/ports.conf

CentOS/RHEL :

sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup sudo nano /etc/httpd/conf/httpd.conf

Remplacez :

Listen 80

par :

Listen 203.0.113.10:80

Pour HTTPS :

Listen 203.0.113.10:443

Mettez également à jour tous les blocs <VirtualHost *:80> pour qu'ils utilisent l'adresse IP :

<VirtualHost 203.0.113.10:80>

Testez et rechargez :

Debian/Ubuntu :

sudo apachectl configtest sudo systemctl reload apache2

CentOS/RHEL :

sudo apachectl configtest sudo systemctl reload httpd

Vérification :

ss -tlnp | grep -E 'apache|httpd'

Étape 5 : Lier MySQL/MariaDB à une adresse IP précise

Par défaut, MySQL/MariaDB écoute sur 127.0.0.1 (localhost uniquement). Si vous devez le rendre accessible sur une adresse IP interne précise, modifiez bind-address afin de lier l'application à une adresse IP locale.

Debian/Ubuntu (MySQL 8.x / MariaDB 10.x) :

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

CentOS/RHEL (MariaDB) :

sudo cp /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.backup sudo nano /etc/my.cnf.d/mariadb-server.cnf

Info

Le chemin exact du fichier de configuration varie. Si le fichier ci-dessus n'existe pas, recherchez la section [mysqld] dans /etc/my.cnf ou /etc/mysql/my.cnf.

Repérez la ligne bind-address et modifiez-la :

bind-address = 198.51.100.5

Redémarrez le service :

sudo systemctl restart mysql # ou mysqld / mariadb

Vérification :

ss -tlnp | grep 3306

Sortie attendue :

LISTEN 0 80 198.51.100.5:3306 0.0.0.0:* users:(("mysqld",pid=9012,fd=22))

Warning

Si vous faites passer bind-address de 127.0.0.1 à une adresse IP routable, assurez-vous de disposer d'une règle de pare-feu n'autorisant les connexions que depuis des sources de confiance. N'exposez jamais le port d'une base de données à l'Internet public sans protection.

Vérification

Après avoir configuré tous les services, effectuez un contrôle récapitulatif :

ss -tlnp

Vérifiez que chaque service affiche l'adresse IP prévue, et non 0.0.0.0 ou *.

Vous pouvez également tester depuis une autre machine :

ssh [email protected] # doit fonctionner ssh [email protected] # doit être refusée si SSH est lié à l'autre adresse IP

Retour arrière

Pour annuler une modification, restaurez la configuration sauvegardée et redémarrez le service.

Pour SSH :

sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config sudo systemctl restart sshd

Pour tout autre service, annulez la modification de listen / bind-address dans le fichier de configuration correspondant et redémarrez. La valeur d'origine est presque toujours 0.0.0.0, * ou 127.0.0.1.

Conclusion

C'est tout. Chaque service peut être restreint en modifiant une seule directive, en redémarrant puis en vérifiant avec ss -tlnp.

Version du document : 1.0
Dernière mise à jour : avril 2026
Responsable : Équipe de documentation technique

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA