Kako vezati usluge na IP adresu na poslužitelju s više IP-a
Razina: Srednja
Procijenjeno vrijeme: ~25 minuta
Cilj: Konfigurirati SSH, Nginx, Apache i MySQL/MariaDB tako da slušaju samo na određenoj IP adresi umjesto na svim sučeljima poslužitelja s više IP adresa.
Uvod
Kada poslužitelj ima više IP adresa, svaka usluga prema zadanim postavkama sluša na svima njima. To se rijetko želi: baza podataka ne smije biti dostupna na javnoj IP adresi, a web poslužitelj jednog klijenta ne smije odgovarati na adresi drugog klijenta. Ispravna konfiguracija poslužitelja s više IP adresa osigurava da svako mrežno sučelje obrađuje odgovarajući promet. Vezanje na IP adresu (IP binding) omogućuje strožu kontrolu pristupa, pomaže u upravljanju usmjeravanjem dolaznog prometa i smanjuje površinu napada. U ovom ćemo vodiču objasniti kako vezati uslugu na IP adresu (bind service to IP address) za nekoliko uobičajenih usluga – SSH, Nginx, Apache, MySQL/MariaDB – i kako optimizirati konfiguraciju adrese slušanja tako da usluga sluša samo na odabranoj IP adresi.
Preduvjeti
Prije nego što počnete, provjerite jesu li ispunjeni sljedeći uvjeti:
- Operacijski sustav: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 ili CentOS/RHEL 8/9 (ako trebate konfigurirati vezanje usluga na Ubuntuu, koraci su u svim verzijama gotovo identični)
- Pristup: sudo ili root pristup poslužitelju
- Mreža: na poslužitelju su konfigurirane najmanje dvije IP adrese (provjerite u 1. koraku)
- Potrebno znanje: sigurno služenje naredbenim retkom sustava Linux i osnovno uređivanje teksta
1. korak: Utvrdite svoje IP adrese
Provjerite koje su IP adrese dodijeljene poslužitelju:
ip -4 addr show
Očekivani izlaz (primjer):
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
U ovom vodiču koristimo 203.0.113.10 kao javnu IP adresu i 198.51.100.5 kao sekundarnu IP adresu. Zamijenite ih svojim stvarnim adresama.
Ako vidite samo jednu adresu, na poslužitelju još nije konfigurirano više IP adresa. Prije nastavka obratite se pružatelju usluge ili ručno dodajte adresu.
2. korak: Vežite SSH na određenu IP adresu
SSH prema zadanim postavkama sluša na 0.0.0.0 (sva sučelja). Da biste ga ograničili na jednu IP adresu i ostvarili vezanje usluge u sustavu Linux:
Napravite sigurnosnu kopiju konfiguracije:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Otvorite konfiguracijsku datoteku SSH-a:
sudo nano /etc/ssh/sshd_config
Pronađite direktivu ListenAddress i postavite adresu slušanja kako biste konfigurirali IP adresu na kojoj usluga sluša:
ListenAddress 203.0.113.10
Ako je ListenAddress zakomentirana ili ne postoji, dodajte redak bilo gdje u datoteci.
Provjerite valjanost konfiguracije:
sudo sshd -t
Ako naredba ne ispiše ništa, konfiguracija je valjana.
Prije ponovnog pokretanja SSH-a provjerite je li navedena IP adresa ispravna i dostupna. Ako SSH vežete na pogrešnu IP adresu, izgubit ćete pristup poslužitelju. Kao sigurnosnu mjeru ostavite otvorenu drugu SSH sesiju ili koristite pristup konzoli koji nudi pružatelj usluge.
Ponovno pokrenite uslugu:
sudo systemctl restart sshd
Na nekim se sustavima usluga može zvati ssh umjesto sshd.
Provjerite sluša li SSH sada samo na navedenoj IP adresi:
ss -tlnp | grep sshd
Očekivani izlaz:
LISTEN 0 128 203.0.113.10:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
Ako vidite 0.0.0.0:22, promjena nije stupila na snagu. Provjerite ima li u konfiguraciji tipfelera ili proturječnih redaka ListenAddress.
3. korak: Vežite Nginx na određenu IP adresu
Direktiva listen određuje koju IP adresu i koja vrata koristi Nginx. Da biste aplikaciju vezali na IP adresu, morate konfigurirati direktivu listen u NGINX-u.
Napravite sigurnosnu kopiju konfiguracije:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup
Otvorite konfiguraciju svojeg web mjesta:
sudo nano /etc/nginx/sites-available/default
Na CentOS/RHEL-u zadana je putanja konfiguracije /etc/nginx/conf.d/default.conf. Sintaksa je ista.
Direktivu slušanja (listen) promijenite iz:
listen 80; listen [::]:80;
u:
listen 203.0.113.10:80;
Ako koristite i HTTPS:
listen 203.0.113.10:443 ssl;
Testirajte konfiguraciju i ponovno je učitajte:
sudo nginx -t sudo systemctl reload nginx
Provjera:
ss -tlnp | grep nginx
Očekivani izlaz:
LISTEN 0 511 203.0.113.10:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
4. korak: Vežite Apache na određenu IP adresu
Apache u glavnoj konfiguraciji koristi direktivu Listen.
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
Promijenite:
Listen 80
u:
Listen 203.0.113.10:80
Za HTTPS:
Listen 203.0.113.10:443
Ažurirajte i sve blokove <VirtualHost *:80> kako bi koristili IP adresu:
<VirtualHost 203.0.113.10:80>
Testirajte i ponovno učitajte:
Debian/Ubuntu:
sudo apachectl configtest sudo systemctl reload apache2
CentOS/RHEL:
sudo apachectl configtest sudo systemctl reload httpd
Provjera:
ss -tlnp | grep -E 'apache|httpd'
5. korak: Vežite MySQL/MariaDB na određenu IP adresu
MySQL/MariaDB prema zadanim postavkama sluša na 127.0.0.1 (samo localhost). Ako ga trebate učiniti dostupnim na određenoj internoj IP adresi, promijenite bind-address kako biste aplikaciju vezali na lokalnu IP adresu.
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
Točna putanja konfiguracijske datoteke varira. Ako gornja datoteka ne postoji, potražite odjeljak [mysqld] u /etc/my.cnf ili /etc/mysql/my.cnf.
Pronađite redak bind-address i promijenite ga:
bind-address = 198.51.100.5
Ponovno pokrenite uslugu:
sudo systemctl restart mysql # ili mysqld / mariadb
Provjera:
ss -tlnp | grep 3306
Očekivani izlaz:
LISTEN 0 80 198.51.100.5:3306 0.0.0.0:* users:(("mysqld",pid=9012,fd=22))
Ako bind-address mijenjate s 127.0.0.1 na IP adresu koja se može usmjeravati, provjerite imate li pravilo vatrozida koje dopušta veze samo iz pouzdanih izvora. Nikada ne izlažite vrata baze podataka javnom internetu bez zaštite.
Provjera
Nakon konfiguriranja svih usluga obavite zbirnu provjeru:
ss -tlnp
Provjerite prikazuje li svaka usluga predviđenu IP adresu, a ne 0.0.0.0 ili *.
ssh [email protected] # treba raditi ssh [email protected] # treba biti odbijeno ako je SSH vezan na drugu IP adresu
Poništavanje promjena
Da biste poništili bilo koju promjenu, vratite konfiguraciju iz sigurnosne kopije i ponovno pokrenite uslugu.
Za SSH:
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config sudo systemctl restart sshd
Za sve ostale usluge poništite promjenu listen / bind-address u odgovarajućoj konfiguracijskoj datoteci i ponovno pokrenite uslugu. Izvorna je vrijednost gotovo uvijek 0.0.0.0, * ili 127.0.0.1.
Zaključak
To je sve. Svaku je uslugu moguće ograničiti promjenom jedne direktive, ponovnim pokretanjem i provjerom naredbom ss -tlnp.
Verzija dokumenta: 1.0
Posljednje ažuriranje: travanj 2026.
Vlasnik: Tim za tehničku dokumentaciju