Çok IP’li sunucuda hizmetler IP’ye nasıl bağlanır
Seviye: Orta
Tahmini süre: ~25 dakika
Amaç: SSH, Nginx, Apache ve MySQL/MariaDB'yi, birden fazla IP adresine sahip bir sunucuda tüm arayüzler yerine yalnızca belirli bir IP adresinde dinleyecek şekilde yapılandırmak.
Giriş
Bir sunucunun birden fazla IP adresi olduğunda, her hizmet varsayılan olarak bunların hepsinde dinler. Bu nadiren istenen bir durumdur: bir veritabanına genel bir IP adresinden erişilememeli, bir müşterinin web sunucusu da başka bir müşterinin adresinde yanıt vermemelidir. Doğru bir çoklu IP sunucu yapılandırması, her ağ arayüzünün doğru trafiği işlemesini sağlar. IP bağlama (IP binding), erişim üzerinde daha sıkı denetim sağlar, gelen trafiğin yönlendirilmesini yönetmeye yardımcı olur ve saldırı yüzeyini azaltır. Bu eğitimde, yaygın kullanılan birkaç hizmet — SSH, Nginx, Apache, MySQL/MariaDB — için hizmeti bir IP adresine bağlamayı (bind service to IP address) ve dinleme adresi yapılandırmasını yalnızca seçilen IP adresinde dinleyecek şekilde optimize etmeyi açıklayacağız.
Ön koşullar
Başlamadan önce aşağıdaki koşulların karşılandığından emin olun:
- İşletim sistemi: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 veya CentOS/RHEL 8/9 (Ubuntu'da hizmet bağlamayı yapılandırmanız gerekiyorsa, adımlar tüm sürümlerde neredeyse aynıdır)
- Erişim: sunucuya sudo veya root erişimi
- Ağ: sunucuda yapılandırılmış en az iki IP adresi (1. Adımda doğrulayın)
- Gerekli bilgi: Linux komut satırını rahatça kullanabilme ve temel metin düzenleme
Adım 1: IP adreslerinizi belirleyin
Sunucuya hangi IP adreslerinin atandığını kontrol edin:
ip -4 addr show
Beklenen çıktı (örnek):
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
Bu eğitim boyunca genel IP olarak 203.0.113.10, ikincil IP olarak 198.51.100.5 adresini kullanacağız. Bunları kendi gerçek adreslerinizle değiştirin.
Yalnızca tek bir adres görüyorsanız, sunucunuzda henüz birden fazla IP yapılandırılmamıştır. Devam etmeden önce hizmet sağlayıcınızla iletişime geçin veya bir adresi elle ekleyin.
Adım 2: SSH'yi belirli bir IP'ye bağlayın
SSH varsayılan olarak 0.0.0.0 adresinde (tüm arayüzler) dinler. Onu tek bir IP ile sınırlandırmak ve Linux'ta hizmet bağlamayı gerçekleştirmek için:
Yapılandırmanın yedeğini alın:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
SSH yapılandırma dosyasını açın:
sudo nano /etc/ssh/sshd_config
ListenAddress yönergesini bulun ve dinleme IP adresini yapılandırmak için Listen Address değerini ayarlayın:
ListenAddress 203.0.113.10
ListenAddress yorum satırı durumundaysa veya hiç yoksa, satırı dosyanın herhangi bir yerine ekleyin.
Yapılandırmayı doğrulayın:
sudo sshd -t
Hiçbir çıktı dönmezse yapılandırma geçerlidir.
SSH'yi yeniden başlatmadan önce belirttiğiniz IP'nin doğru ve erişilebilir olduğundan emin olun. SSH'yi yanlış bir IP'ye bağlarsanız sunucuya erişiminizi kaybedersiniz. Güvenlik önlemi olarak ikinci bir SSH oturumunu açık tutun veya hizmet sağlayıcınızın konsol erişimini kullanın.
Hizmeti yeniden başlatın:
sudo systemctl restart sshd
Bazı sistemlerde hizmetin adı sshd yerine ssh olabilir.
SSH'nin artık yalnızca belirtilen IP'de dinlediğini doğrulayın:
ss -tlnp | grep sshd
Beklenen çıktı:
LISTEN 0 128 203.0.113.10:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
0.0.0.0:22 görüyorsanız değişiklik etkili olmamıştır. Yapılandırmada yazım hatalarını veya çakışan ListenAddress satırlarını kontrol edin.
Adım 3: Nginx'i belirli bir IP'ye bağlayın
listen yönergesi, Nginx'in hangi IP ve bağlantı noktasını kullanacağını belirler. Uygulamayı bir IP'ye bağlamak için NGINX listen yönergesini yapılandırmanız gerekir.
Yapılandırmanın yedeğini alın:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup
Site yapılandırmanızı açın:
sudo nano /etc/nginx/sites-available/default
CentOS/RHEL'de varsayılan yapılandırma yolu /etc/nginx/conf.d/default.conf şeklindedir. Sözdizimi aynıdır.
Dinleme yönergesini (listen) şundan:
listen 80; listen [::]:80;
şuna değiştirin:
listen 203.0.113.10:80;
HTTPS de kullanıyorsanız:
listen 203.0.113.10:443 ssl;
Yapılandırmayı test edin ve yeniden yükleyin:
sudo nginx -t sudo systemctl reload nginx
Doğrulama:
ss -tlnp | grep nginx
Beklenen çıktı:
LISTEN 0 511 203.0.113.10:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
Adım 4: Apache'yi belirli bir IP'ye bağlayın
Apache, ana yapılandırmasında Listen yönergesini kullanır.
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
Şunu:
Listen 80
şuna değiştirin:
Listen 203.0.113.10:80
HTTPS için:
Listen 203.0.113.10:443
Ayrıca tüm <VirtualHost *:80> bloklarını IP'yi kullanacak şekilde güncelleyin:
<VirtualHost 203.0.113.10:80>
Test edin ve yeniden yükleyin:
Debian/Ubuntu:
sudo apachectl configtest sudo systemctl reload apache2
CentOS/RHEL:
sudo apachectl configtest sudo systemctl reload httpd
Doğrulama:
ss -tlnp | grep -E 'apache|httpd'
Adım 5: MySQL/MariaDB'yi belirli bir IP'ye bağlayın
MySQL/MariaDB varsayılan olarak 127.0.0.1 adresinde (yalnızca localhost) dinler. Belirli bir dahili IP üzerinden erişilebilir olmasını istiyorsanız, uygulamayı yerel bir IP'ye bağlamak için bind-address değerini değiştirin.
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
Yapılandırma dosyasının tam yolu değişiklik gösterir. Yukarıdaki dosya yoksa, /etc/my.cnf veya /etc/mysql/my.cnf içinde [mysqld] bölümünü arayın.
bind-address satırını bulun ve değiştirin:
bind-address = 198.51.100.5
Hizmeti yeniden başlatın:
sudo systemctl restart mysql # veya mysqld / mariadb
Doğrulama:
ss -tlnp | grep 3306
Beklenen çıktı:
LISTEN 0 80 198.51.100.5:3306 0.0.0.0:* users:(("mysqld",pid=9012,fd=22))
bind-address değerini 127.0.0.1 adresinden yönlendirilebilir bir IP'ye değiştirirseniz, yalnızca güvenilir kaynaklardan gelen bağlantılara izin veren bir güvenlik duvarı kuralınız olduğundan emin olun. Bir veritabanı bağlantı noktasını koruma olmadan asla genel internete açmayın.
Doğrulama
Tüm hizmetleri yapılandırdıktan sonra özet bir kontrol yapın:
ss -tlnp
Her hizmetin 0.0.0.0 veya * değil, amaçladığınız IP'yi gösterdiğini doğrulayın.
ssh [email protected] # çalışmalı ssh [email protected] # SSH diğer IP'ye bağlıysa reddedilmeli
Geri alma
Herhangi bir değişikliği geri almak için yedeklenen yapılandırmayı geri yükleyin ve hizmeti yeniden başlatın.
SSH için:
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config sudo systemctl restart sshd
Diğer tüm hizmetler için ilgili yapılandırma dosyasındaki listen / bind-address değişikliğini geri alın ve hizmeti yeniden başlatın. Özgün değer neredeyse her zaman 0.0.0.0, * veya 127.0.0.1 olur.
Sonuç
Hepsi bu kadar. Her hizmet, tek bir yönergeyi değiştirerek, yeniden başlatarak ve ss -tlnp ile doğrulayarak sınırlandırılabilir.
Belge sürümü: 1.0
Son güncelleme: Nisan 2026
Sahibi: Teknik Dokümantasyon Ekibi