Çoklu IP'li Linux Sunucuda Servisleri Belirli IP'ye Bağlama | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

Ç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.

Info

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.

Warning

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

Info

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

Info

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

Info

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))

Warning

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.

Başka bir makineden de test edebilirsiniz:

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

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