İçeriğe geç

AğGüvenlik duvarları

Sunucuda portlar ve port yönlendirme

Bir servisi erişilebilir yapın: neyin nerede dinlediğine bakın, portu açın, dışarıdan test edin, SSH tüneli kullanın ve nftables ile port yönlendirin.

  • Orta
  • 15 dk okuma
  • Güncellendi

Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13, Windows Server 2022, Windows 11

Bu sayfada
  1. Başlamadan önce
  2. 1. adım: Neyin dinlediğini görün
  3. 2. adım: Güvenlik duvarında porta izin verin
  4. 3. adım: Dışarıdan test edin
  5. 4. adım: Özel servislere SSH tüneliyle ulaşın
  6. 5. adım: Sunucuda port yönlendirin (DNAT)
  7. Sorun giderme
  8. Sonraki adımlar

Bir ağ servisine internetten iki koşul sağlandığında ulaşılır: dış dünyanın ulaşabileceği bir adreste dinler ve güvenlik duvarı portuna izin verir. Bu rehber ikisini de kontrol eder, dışarıdan test eder ve iki tür yönlendirmeyi gösterir: özel servislere güvenle ulaşmak için SSH tünelleri ve sanal makineler veya container'lar için sunucu tarafında port yönlendirme (DNAT). 203.0.113.10 yerine sunucunuzun adresini yazın.

Başlamadan önce

  • HyperDC sunucunuzun kendi genel IPv4 adresi vardır; bir servisi erişilebilir yapmak için yönlendirici tarzı port yönlendirmeye ihtiyacınız yoktur.
  • Servisinizin kullandığı portu belgelerinden veya yapılandırmasından öğrenin.

1. adım: Neyin dinlediğini görün

Linux

Bash
sudo ss -tulpn

Her satır protokolü, yerel adresi ve portu ve süreci gösterir. Adrese bakın:

  • 0.0.0.0:8080 veya [::]:8080: tüm adreslerde dinler; güvenlik duvarı izin verirse dışarıdan erişilebilir.
  • 127.0.0.1:8080 veya [::1]:8080: yalnızca sunucuda dinler; dışarıdan erişilemez.

Windows

PowerShell
Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object LocalAddress, LocalPort, OwningProcess

0.0.0.0 ve :: tüm adresler, 127.0.0.1 yalnızca sunucu demektir.

Servis 127.0.0.1 üzerinde dinliyor ama herkese açık olması gerekiyorsa yapılandırmasındaki bind veya listen adresini değiştirin. Özel kalması gerekiyorsa öyle bırakın ve bir tünel kullanın (4. adım).

2. adım: Güvenlik duvarında porta izin verin

Yalnızca herkese açık olması gerekenleri açın. Yönetim portlarını kendi IP adresinizle sınırlayın.

3. adım: Dışarıdan test edin

Sunucudan değil, kendi bilgisayarınızdan test edin:

Linux ve macOS

Bash
nc -vz 203.0.113.10 8080

Windows

PowerShell
Test-NetConnection 203.0.113.10 -Port 8080

Doğrulama: test portu açık olarak bildirir (succeeded veya TcpTestSucceeded : True). UDP servisleri bu şekilde güvenilir biçimde test edilemez; bunun yerine servisin kendi istemcisini kullanın.

4. adım: Özel servislere SSH tüneliyle ulaşın

Yerel yönlendirme (local forward), sunucunun 127.0.0.1 adresinde dinleyen bir servisi şifreli SSH bağlantısı üzerinden bilgisayarınızda kullanılabilir yapar. Örneğin sunucunun 8080 portundaki bir veritabanı yönetim aracı:

Bash
ssh -N -L 8080:127.0.0.1:8080 alex@203.0.113.10

Komutu çalışır halde bırakın ve bilgisayarınızda http://localhost:8080 adresini açın. -N uzak komut çalıştırmadan yalnızca tünel demektir. Bir veritabanına ulaşmak için:

Bash
ssh -N -L 5433:127.0.0.1:5432 alex@203.0.113.10

Veritabanı istemciniz bu durumda localhost:5433 adresine bağlanır.

Uzak yönlendirme (remote forward) tersini yapar: bilgisayarınızdaki bir portu sunucudan erişilebilir kılar; örneğin bir webhook testi için:

Bash
ssh -N -R 9000:127.0.0.1:3000 alex@203.0.113.10

Sunucuda 127.0.0.1:9000 artık bilgisayarınızdaki 3000 portuna ulaşır.

5. adım: Sunucuda port yönlendirin (DNAT)

Bir VDS veya dedicated sunucuda sanal makineler ya da sunucunun arkasındaki özel bir ağda servisler çalıştırdığınızda sunucu, genel bir portu iç bir adrese yönlendirebilir. Önce IPv4 yönlendirmeyi açın:

Bash
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-forwarding.conf
sudo sysctl --system

Ardından /etc/nftables.conf dosyasına bir NAT tablosu ekleyin. Bu örnek, genel 8080 portunu 10.0.0.2 adresindeki iç makinenin 80 portuna yönlendirir ve giden trafiğini maskeler:

Text
table ip nat {
    chain prerouting {
        type nat hook prerouting priority dstnat; policy accept;
        iifname "eth0" tcp dport 8080 dnat to 10.0.0.2:80
    }
    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;
        oifname "eth0" masquerade
    }
}

eth0 yerine genel arayüzünüzü yazın (ip -brief link). Filtre tablonuz yönlendirilen trafiği düşürüyorsa (nftables rehberimizdeki gibi) forward zincirinde izin verin:

Text
ct state established,related accept
iifname "eth0" ip daddr 10.0.0.2 tcp dport 80 accept

sudo nft -c -f /etc/nftables.conf ve sudo nft -f /etc/nftables.conf ile kontrol edip yükleyin, ardından 3. adımdaki gibi dışarıdan test edin.

Sorun giderme

Connection refused. O portta dinleyen bir şey yok ya da yalnızca 127.0.0.1 üzerinde dinliyor (1. adım).

Connection timed out. Güvenlik duvarı trafiği düşürüyor ya da kendi ağınız o porta giden bağlantıları engelliyor (2. adım, ardından başka bir ağ deneyin).

25 numaralı porta giden bağlantılar zaman aşımına uğruyor. HyperDC VPS'lerde giden 25 numaralı port varsayılan olarak kapalıdır. 3 ay veya daha uzun süreyle satın alınan hizmetlerde bir destek bildirimi açtığınızda talep üzerine açılır. O zamana kadar postayı 587 portu üzerinden bir aktarıcıyla (relay) gönderin.

SSH tüneli "Address already in use" diyor. Bilgisayarınızdaki yerel port kullanımda. Başka bir yerel port seçin; örneğin -L 18080:127.0.0.1:8080.

DNAT dışarıdan çalışıyor ama sunucunun kendisinden çalışmıyor. Sunucuda üretilen paketler prerouting zincirinden geçmez. Başka bir makineden test edin.

Sonraki adımlar

Sık sorulan sorular

HyperDC sunucumda port yönlendirmeye ihtiyacım var mı?

Genellikle hayır. Sunucunuzun kendi genel IPv4 adresi vardır; bu adreste dinleyen ve güvenlik duvarının izin verdiği bir servise doğrudan ulaşılır. Ev yönlendiricisindeki port yönlendirme, sunucunun yaşamadığı bir sorunu çözer.

0.0.0.0 ile 127.0.0.1 arasındaki fark nedir?

127.0.0.1 üzerinde dinleyen bir servis yalnızca sunucunun kendisinden gelen bağlantıları kabul eder. 0.0.0.0 (IPv6 için ::) tüm adresler demektir; güvenlik duvarı izin verirse dışarıdan erişilebilir.

Bir veritabanına veya yönetim paneline portunu açmadan nasıl ulaşırım?

Bir SSH tüneli kullanın: ssh -L, bilgisayarınızdaki bir portu şifreli SSH bağlantısı üzerinden sunucudaki servise yönlendirir. İnternete fazladan hiçbir şey açılmaz.

Açık portları hangi araç gösterir?

Linux'ta ss -tulpn, dinleyen TCP ve UDP soketlerini süreçle birlikte listeler. Windows'ta Get-NetTCPConnection -State Listen aynısını TCP için yapar.

Sunucudan bağlanabiliyorum ama dışarıdan bağlanamıyorum. Neden?

Servis yalnızca 127.0.0.1 üzerinde dinliyor ya da güvenlik duvarı portu engelliyor. Önce bağlanma adresini, sonra güvenlik duvarı kurallarını kontrol edin.

Kaynaklar

Şifre Oluştur

Lütfen onaylayın