Powiązanie usług z adresem IP na serwerze Linux multi-IP | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

Jak powiązać usługi z adresem IP na serwerze multi-IP

Poziom: Średniozaawansowany
Szacowany czas: ok. 25 minut
Cel: Skonfigurowanie SSH, Nginx, Apache i MySQL/MariaDB tak, aby nasłuchiwały wyłącznie na wybranym adresie IP zamiast na wszystkich interfejsach serwera z wieloma adresami IP.

Wprowadzenie

Gdy serwer ma wiele adresów IP, domyślnie każda usługa nasłuchuje na wszystkich z nich. Rzadko jest to pożądane: baza danych nie powinna być dostępna pod publicznym adresem IP, a serwer WWW jednego klienta nie powinien odpowiadać pod adresem innego klienta. Prawidłowa konfiguracja serwera z wieloma adresami IP zapewnia, że każdy interfejs sieciowy obsługuje właściwy ruch. Powiązanie z adresem IP (IP binding) daje dokładniejszą kontrolę dostępu, ułatwia zarządzanie routingiem ruchu przychodzącego i zmniejsza powierzchnię ataku. W tym poradniku wyjaśniamy, jak powiązać usługę z adresem IP (bind service to IP address) dla kilku popularnych usług — SSH, Nginx, Apache, MySQL/MariaDB — oraz jak zoptymalizować konfigurację adresu nasłuchiwania, aby usługa nasłuchiwała wyłącznie na wybranym adresie IP.

Wymagania wstępne

Zanim zaczniesz, upewnij się, że spełnione są następujące warunki:

  • System operacyjny: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 lub CentOS/RHEL 8/9 (jeśli chcesz skonfigurować powiązanie usług w Ubuntu, kroki są niemal identyczne we wszystkich wersjach)
  • Dostęp: dostęp sudo lub root do serwera
  • Sieć: co najmniej dwa adresy IP skonfigurowane na serwerze (sprawdź w kroku 1)
  • Wymagana wiedza: swobodna obsługa wiersza poleceń Linuksa i podstawowa edycja tekstu

Krok 1: Ustalenie adresów IP

Sprawdź, jakie adresy IP są przypisane do serwera:

ip -4 addr show

Oczekiwany wynik (przykład):

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

W tym poradniku używamy adresu 203.0.113.10 jako publicznego IP oraz 198.51.100.5 jako dodatkowego IP. Zastąp je własnymi adresami.

Info

Jeśli widzisz tylko jeden adres, na serwerze nie skonfigurowano jeszcze wielu adresów IP. Skontaktuj się z dostawcą lub dodaj adres ręcznie, zanim przejdziesz dalej.

Krok 2: Powiązanie SSH z wybranym adresem IP

Domyślnie SSH nasłuchuje na 0.0.0.0 (wszystkie interfejsy). Aby ograniczyć go do jednego adresu IP i uzyskać powiązanie usługi w systemie Linux:

Wykonaj kopię zapasową konfiguracji:

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

Otwórz plik konfiguracyjny SSH:

sudo nano /etc/ssh/sshd_config

Znajdź dyrektywę ListenAddress i ustaw adres nasłuchiwania, aby skonfigurować adres IP, na którym usługa ma nasłuchiwać:

ListenAddress 203.0.113.10

Jeśli ListenAddress jest zakomentowana lub jej brakuje, dodaj ten wiersz w dowolnym miejscu pliku.

Sprawdź poprawność konfiguracji:

sudo sshd -t

Jeśli polecenie nie zwraca żadnych danych, konfiguracja jest poprawna.

Warning

Przed ponownym uruchomieniem SSH upewnij się, że podany adres IP jest poprawny i osiągalny. Jeśli powiążesz SSH z błędnym adresem IP, utracisz dostęp do serwera. Pozostaw otwartą drugą sesję SSH jako zabezpieczenie lub skorzystaj z dostępu do konsoli udostępnianego przez dostawcę.

Uruchom usługę ponownie:

sudo systemctl restart sshd

Info

W niektórych systemach usługa może nazywać się ssh zamiast sshd.

Sprawdź, czy SSH nasłuchuje teraz wyłącznie na podanym adresie IP:

ss -tlnp | grep sshd

Oczekiwany wynik:

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

Jeśli widzisz 0.0.0.0:22, zmiana nie zadziałała. Sprawdź konfigurację pod kątem literówek lub sprzecznych wierszy ListenAddress.

Krok 3: Powiązanie Nginx z wybranym adresem IP

Dyrektywa listen określa, jakiego adresu IP i portu używa Nginx. Aby powiązać aplikację z adresem IP, należy skonfigurować dyrektywę listen w NGINX.

Wykonaj kopię zapasową konfiguracji:

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

Otwórz konfigurację witryny:

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

Info

W CentOS/RHEL domyślna ścieżka konfiguracji to /etc/nginx/conf.d/default.conf. Składnia jest taka sama.

Zmień dyrektywę nasłuchiwania (listen) z:

listen 80; listen [::]:80;

na:

listen 203.0.113.10:80;

Jeśli używasz również HTTPS:

listen 203.0.113.10:443 ssl;

Przetestuj konfigurację i załaduj ją ponownie:

sudo nginx -t sudo systemctl reload nginx

Weryfikacja:

ss -tlnp | grep nginx

Oczekiwany wynik:

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

Krok 4: Powiązanie Apache z wybranym adresem IP

Apache używa dyrektywy Listen w głównym pliku konfiguracyjnym.

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

Zmień:

Listen 80

na:

Listen 203.0.113.10:80

Dla HTTPS:

Listen 203.0.113.10:443

Zaktualizuj również wszystkie bloki <VirtualHost *:80>, aby korzystały z adresu IP:

<VirtualHost 203.0.113.10:80>

Przetestuj i załaduj ponownie:

Debian/Ubuntu:

sudo apachectl configtest sudo systemctl reload apache2

CentOS/RHEL:

sudo apachectl configtest sudo systemctl reload httpd

Weryfikacja:

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

Krok 5: Powiązanie MySQL/MariaDB z wybranym adresem IP

Domyślnie MySQL/MariaDB nasłuchuje na 127.0.0.1 (tylko localhost). Jeśli usługa ma być dostępna pod wybranym wewnętrznym adresem IP, zmień bind-address, aby powiązać aplikację z lokalnym adresem IP.

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

Dokładna ścieżka pliku konfiguracyjnego jest różna. Jeśli powyższy plik nie istnieje, poszukaj sekcji [mysqld] w /etc/my.cnf lub /etc/mysql/my.cnf.

Znajdź wiersz bind-address i zmień go:

bind-address = 198.51.100.5

Uruchom usługę ponownie:

sudo systemctl restart mysql # lub mysqld / mariadb

Weryfikacja:

ss -tlnp | grep 3306

Oczekiwany wynik:

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

Warning

Jeśli zmieniasz bind-address z 127.0.0.1 na routowalny adres IP, upewnij się, że masz regułę zapory sieciowej zezwalającą na połączenia wyłącznie z zaufanych źródeł. Nigdy nie udostępniaj portu bazy danych w publicznym internecie bez zabezpieczeń.

Weryfikacja

Po skonfigurowaniu wszystkich usług wykonaj kontrolę podsumowującą:

ss -tlnp

Upewnij się, że każda usługa wyświetla zamierzony adres IP, a nie 0.0.0.0 ani *.

Możesz też wykonać test z innego komputera:

ssh [email protected] # powinno działać ssh [email protected] # powinno zostać odrzucone, jeśli SSH jest powiązane z drugim adresem IP

Wycofanie zmian

Aby cofnąć dowolną zmianę, przywróć konfigurację z kopii zapasowej i uruchom usługę ponownie.

Dla SSH:

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

W przypadku pozostałych usług cofnij zmianę listen / bind-address w odpowiednim pliku konfiguracyjnym i uruchom usługę ponownie. Pierwotną wartością jest prawie zawsze 0.0.0.0, * lub 127.0.0.1.

Podsumowanie

To wszystko. Każdą usługę można ograniczyć, zmieniając jedną dyrektywę, uruchamiając usługę ponownie i weryfikując wynik poleceniem ss -tlnp.

Wersja dokumentu: 1.0
Ostatnia aktualizacja: kwiecień 2026
Właściciel: Zespół dokumentacji technicznej

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