Associare servizi a un IP su un server Linux multi-IP | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Come associare i servizi a un IP su un server multi-IP

Livello: Intermedio
Tempo stimato: ~25 minuti
Obiettivo: Configurare SSH, Nginx, Apache e MySQL/MariaDB in modo che restino in ascolto solo su uno specifico indirizzo IP anziché su tutte le interfacce di un server con più IP.

Introduzione

Quando un server ha più indirizzi IP, per impostazione predefinita ogni servizio è in ascolto su tutti. Raramente è il comportamento desiderato: un database non dovrebbe essere raggiungibile da un IP pubblico e un server web di un cliente non dovrebbe rispondere sull'indirizzo di un altro cliente. Una corretta configurazione di un server con più IP garantisce che ogni interfaccia di rete gestisca il traffico appropriato. L'IP binding offre un controllo più preciso degli accessi, aiuta a gestire l'instradamento del traffico in ingresso e riduce la superficie di attacco. In questa guida spieghiamo come associare un servizio a un indirizzo IP (bind service to IP address) per diversi servizi comuni (SSH, Nginx, Apache, MySQL/MariaDB) e come ottimizzare la configurazione dell'indirizzo di ascolto in modo che venga utilizzato solo l'IP scelto.

Prerequisiti

Prima di iniziare, verificare che siano soddisfatte le seguenti condizioni:

  • Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 o CentOS/RHEL 8/9 (se è necessario configurare il binding dei servizi su Ubuntu, i passaggi sono quasi identici in tutte le versioni)
  • Accesso: accesso sudo o root al server
  • Rete: almeno due indirizzi IP configurati sul server (verifica al passaggio 1)
  • Conoscenze richieste: buona familiarità con la riga di comando di Linux e con la modifica di base dei file di testo

Passaggio 1: individuare gli indirizzi IP

Controllare quali indirizzi IP sono assegnati al server:

ip -4 addr show

Output previsto (esempio):

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

In questa guida useremo 203.0.113.10 come IP pubblico e 198.51.100.5 come IP secondario. Sostituirli con i propri indirizzi effettivi.

Info

Se viene visualizzato un solo indirizzo, sul server non sono ancora configurati più IP. Contattare il provider o aggiungere manualmente un indirizzo prima di procedere.

Passaggio 2: associare SSH a uno specifico IP

Per impostazione predefinita, SSH è in ascolto su 0.0.0.0 (tutte le interfacce). Per limitarlo a un solo IP e ottenere il binding del servizio su Linux:

Eseguire il backup della configurazione:

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

Aprire il file di configurazione di SSH:

sudo nano /etc/ssh/sshd_config

Individuare la direttiva ListenAddress e impostare l'indirizzo di ascolto per configurare l'indirizzo IP su cui restare in ascolto:

ListenAddress 203.0.113.10

Se ListenAddress è commentata o assente, aggiungere la riga in un punto qualsiasi del file.

Convalidare la configurazione:

sudo sshd -t

Se non viene restituito alcun output, la configurazione è valida.

Warning

Prima di riavviare SSH, assicurarsi che l'IP specificato sia corretto e raggiungibile. Se SSH viene associato a un IP errato, si perde l'accesso al server. Tenere aperta una seconda sessione SSH come rete di sicurezza oppure usare l'accesso console del provider.

Riavviare il servizio:

sudo systemctl restart sshd

Info

Su alcuni sistemi il servizio può chiamarsi ssh invece di sshd.

Verificare che SSH sia ora in ascolto solo sull'IP specificato:

ss -tlnp | grep sshd

Output previsto:

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

Se compare 0.0.0.0:22, la modifica non è stata applicata. Controllare la configurazione per eventuali errori di battitura o righe ListenAddress in conflitto.

Passaggio 3: associare Nginx a uno specifico IP

La direttiva listen controlla quale IP e quale porta utilizza Nginx. Per associare l'applicazione a un IP, è necessario configurare la direttiva listen di NGINX.

Eseguire il backup della configurazione:

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

Aprire la configurazione del sito:

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

Info

Su CentOS/RHEL il percorso della configurazione predefinita è /etc/nginx/conf.d/default.conf. La sintassi è la stessa.

Modificare la direttiva di ascolto (listen) da:

listen 80; listen [::]:80;

a:

listen 203.0.113.10:80;

Se si utilizza anche HTTPS:

listen 203.0.113.10:443 ssl;

Testare la configurazione e ricaricarla:

sudo nginx -t sudo systemctl reload nginx

Verifica:

ss -tlnp | grep nginx

Output previsto:

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

Passaggio 4: associare Apache a uno specifico IP

Apache utilizza la direttiva Listen nella configurazione 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

Modificare:

Listen 80

in:

Listen 203.0.113.10:80

Per HTTPS:

Listen 203.0.113.10:443

Aggiornare anche eventuali blocchi <VirtualHost *:80> in modo che usino l'IP:

<VirtualHost 203.0.113.10:80>

Testare e ricaricare:

Debian/Ubuntu:

sudo apachectl configtest sudo systemctl reload apache2

CentOS/RHEL:

sudo apachectl configtest sudo systemctl reload httpd

Verifica:

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

Passaggio 5: associare MySQL/MariaDB a uno specifico IP

Per impostazione predefinita, MySQL/MariaDB è in ascolto su 127.0.0.1 (solo localhost). Se è necessario renderlo raggiungibile su uno specifico IP interno, modificare bind-address per associare l'applicazione a un 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

Il percorso esatto del file di configurazione varia. Se il file indicato sopra non esiste, cercare la sezione [mysqld] in /etc/my.cnf o /etc/mysql/my.cnf.

Individuare la riga bind-address e modificarla:

bind-address = 198.51.100.5

Riavviare il servizio:

sudo systemctl restart mysql # oppure mysqld / mariadb

Verifica:

ss -tlnp | grep 3306

Output previsto:

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

Warning

Se si modifica bind-address da 127.0.0.1 a un IP instradabile, assicurarsi di avere una regola del firewall che consenta le connessioni solo da origini attendibili. Non esporre mai la porta di un database a Internet senza protezione.

Verifica

Dopo aver configurato tutti i servizi, eseguire un controllo riepilogativo:

ss -tlnp

Verificare che ogni servizio mostri l'IP previsto, non 0.0.0.0 o *.

È possibile eseguire un test anche da un'altra macchina:

ssh [email protected] # dovrebbe funzionare ssh [email protected] # dovrebbe essere rifiutata se SSH è associato all'altro IP

Ripristino

Per annullare una modifica, ripristinare la configurazione dal backup e riavviare il servizio.

Per SSH:

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

Per qualsiasi altro servizio, annullare la modifica di listen / bind-address nel rispettivo file di configurazione e riavviare. Il valore originale è quasi sempre 0.0.0.0, * o 127.0.0.1.

Conclusione

Ecco fatto. Ogni servizio può essere limitato modificando una sola direttiva, riavviando e verificando con ss -tlnp.

Versione del documento: 1.0
Ultimo aggiornamento: aprile 2026
Responsabile: Team di documentazione tecnica

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