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
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
sudo ss -tulpnHer satır protokolü, yerel adresi ve portu ve süreci gösterir. Adrese bakın:
0.0.0.0:8080veya[::]:8080: tüm adreslerde dinler; güvenlik duvarı izin verirse dışarıdan erişilebilir.127.0.0.1:8080veya[::1]:8080: yalnızca sunucuda dinler; dışarıdan erişilemez.
Windows
Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object LocalAddress, LocalPort, OwningProcess0.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
- UFW:
sudo ufw allow 8080/tcp; bkz. UFW güvenlik duvarı. - nftables: input zincirine
tcp dport 8080 acceptekleyin; bkz. nftables güvenlik duvarı. - Windows:
New-NetFirewallRule -DisplayName "Allow 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow; bkz. Windows Defender Güvenlik Duvarı kuralları.
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
nc -vz 203.0.113.10 8080Windows
Test-NetConnection 203.0.113.10 -Port 8080Doğ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ı:
ssh -N -L 8080:127.0.0.1:8080 alex@203.0.113.10Komutu ç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:
ssh -N -L 5433:127.0.0.1:5432 alex@203.0.113.10Veritabanı 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:
ssh -N -R 9000:127.0.0.1:3000 alex@203.0.113.10Sunucuda 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:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-forwarding.conf
sudo sysctl --systemArdı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:
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:
ct state established,related accept
iifname "eth0" ip daddr 10.0.0.2 tcp dport 80 acceptsudo 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
- Güvenlik duvarı temelleri: UFW güvenlik duvarı ve nftables güvenlik duvarı.
- Kendi sanal makinelerinizi çalıştırın: VDS ve iç içe sanallaştırma.
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
- man7.org/linux/man-pages/man8/ss.8.html
- man.openbsd.org/ssh
- wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Addres…
- docs.kernel.org/networking/ip-sysctl.html
- learn.microsoft.com/en-us/powershell/module/nettcpip/get-nettcpconn…
- learn.microsoft.com/en-us/powershell/module/nettcpip/test-netconnec…