0%

Windows’ta Portu Başka Kapıya Taşımak: netsh portproxy ile Pratik Yönlendirme

Kapıyı çalıyorsunuz: 8080. İçeriden cevap geliyor — ama ses aslında koridordaki 80 numaralı odadan. Windows’ta buna portproxy deniyor. Ekstra program yok; netsh ile “bu porta gelenleri şuraya götür” diyorsunuz. Bu yazıda komutları ezberletmek yerine ofiste, demoda ve “şu an tek çözüm bu” anlarında işinize yarayacak senaryolarla anlatıyoruz. Bitince aklınızda şu kalsın: hangi kapıyı çalıyorum, aslında kim açıyor?

Önce resmi tanıyın: kapı, zil, koridor

Üç oyuncu var:

  • Dinlenen kapı (listen): Dışarıdan veya ağdan çalınan port. Örnek: 0.0.0.0:51433.
  • Hedef oda (connect): Trafiğin gerçekten gideceği yer. Örnek: 192.168.1.20:1433 veya 127.0.0.1:8080.
  • Trafik kelimesi: TCP. Web, RDP, SQL, Logo lisans portu… hepsi bu köprüden geçebilir; UDP için bu araç doğru seçim değildir.
SenaryoÇaldığınız kapıAçılan oda
SQL’i “farklı numaradan” göstermek51433Sunucunun 1433’ü
Sadece localhost’ta çalışan panel80 (ağdan)127.0.0.1:8080
Geçici RDP köprüsüBu makinenin 3389’uİçerdeki PC’nin 3389’u
Eski istemci, yeni portEski alışılmış portYeni servisin gerçek portu

Üç komut yeter (sonra hayal gücü)

Yönetici olarak CMD açın. İskelet şu:

CMD
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=127.0.0.1 connectport=80

Ne dedik? “Bu makinenin tüm ağ kartlarında 8080’i dinle; gelen her TCP’yi bu makinedeki 80’e ilet.”

CMD
netsh interface portproxy show all
CMD
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8080
  • v4tov4: IPv4’ten IPv4’e. (IPv6 köprüleri de var: v6tov4, v4tov6, v6tov6 — aynı mantık, farklı aile.)
  • 0.0.0.0: “Herkes çalabilir” (ağdan erişim). Sadece kendi makinenizden istiyorsanız 127.0.0.1.
  • Kalıcılık: Kurallar genelde yeniden açılışta durur; yine de kritik makinede show all ile kontrol edin.
CMD
sc query iphlpsvc
netsh advfirewall firewall add rule name="Portproxy 8080" dir=in action=allow protocol=TCP localport=8080

Senaryo 1: “SQL’i herkese 1433 diye bağlatmayayım”

İçeride SQL Server 1433’te. Dışarıya veya başka VLAN’a doğrudan 1433 açmak istemiyorsunuz. Köprü makinede (veya SQL’in kendi üzerinde) şöyle düşünün: dışarı 51433 çalınsın, içeride 1433 açılsın.

CMD
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=51433 connectaddress=192.168.1.20 connectport=1433

İstemci bağlantı dizesinde sunucu adresi + ,51433 (veya ilgili alan) kullanır. Asıl SQL hâlâ 1433’te; siz sadece “görünen kapıyı” değiştirdiniz. Logo ve rapor araçlarında “portu değiştirdik ama uygulama hâlâ 1433 arıyor” krizlerinde bu köprü geçici nefes aldırmıştır.

Senaryo 2: Uygulama inatla localhost’ta

Bir yönetim paneli, lisans servisi veya eski araç yalnızca 127.0.0.1:8080 dinliyor. Siz aynı ofisteki başka PC’den veya telefondan denemek istiyorsunuz. Servisi yeniden yazmadan:

CMD
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=127.0.0.1 connectport=8080

İlk bakışta “aynı port?” dersiniz. Mantık şu: ağdan gelen 8080’i alıp, bu makinenin kendi içindeki 8080’ine bırakıyorsunuz. Dışarıdan bakınca servis “açık”; içeride uygulama hâlâ “ben sadece kendime konuşurum” sanıyor.

Daha okunaklı bir varyasyon — dışarı 80, içeride 8080:

CMD
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=127.0.0.1 connectport=8080

Demo günü, müşteri ziyareti, “bir dakika şunu telefondan da görelim” anları için biçilmiş kaftan. Kalıcı internete açmak için değil; bilinçli, kısa süreli köprü için.

Senaryo 3: “Bu PC üzerinden şu PC’nin masaüstüne”

Elinizde bir Windows makine var (sıçrama taşı). İçerideki sunucunun RDP’sine (3389) doğrudan rota yok; ama sıçrama taşına ulaşıyorsunuz. Portproxy ile:

CMD
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3389 connectaddress=192.168.10.50 connectport=3389

Sıçrama taşının IP’sine RDP yaptığınızda aslında 192.168.10.50’nin masaüstü açılır. Zihin oyunu gibi; sahada “geçici erişim” için kullanılır.

Senaryo 4: Eski istemci, yeni port — arayı köprüyle kapatın

Servisi 8443’e taşıdınız. Yüzlerce istemci, makro, kısayol hâlâ 443’ü arıyor. Toplu güncelleme yarın; bugün iş aksamasın:

CMD
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=127.0.0.1 connectport=8443

Eski dünya 443’ü çalıyor; yeni dünya 8443’te cevap veriyor. Bu bir migrasyon bandı — kalıcı mimari değil. Bandı unutursanız bir yıl sonra “neden iki port birden?” bulmacası doğar. Yanına takvim notu koyun: köprüyü kaldır.

Senaryo 5: “Sadece şu IP’den gelsin” hayali

Portproxy kuralında “yalnızca 10.0.0.5 bağlansın” diye bir alan yoktur. Dinleme adresi ya makinenin bir IP’sidir ya da 0.0.0.0. Kaynak kısıtını güvenlik duvarı ile yaparsınız:

CMD
netsh advfirewall firewall add rule name="Portproxy 51433 sadece ofis" dir=in action=allow protocol=TCP localport=51433 remoteip=192.168.1.0/24

Köprüyü kurmak ile köprüyü kime açmak ayrı işler. İkisini birlikte düşünün; aksi halde “yaptım ama herkes girebiliyor” sürprizi yaşarsınız.

Çalışıyor mu? Üç hızlı kontrol

  1. Kural listede mi? netsh interface portproxy show all
  2. Kapı dinleniyor mu? netstat -ano | findstr :51433 (kendi listen portunuz)
  3. Karşı taraftan kapı açılıyor mu?
PowerShell
Test-NetConnection 192.168.1.10 -Port 51433

TcpTestSucceeded : True görüyorsanız köprü en azından TCP katmanında ayakta. Uygulama hâlâ bağlanmıyorsa mesele çoğu zaman kimlik doğrulama, SQL protokolü veya hedef servisin kapalı olmasıdır — köprü suçlu olmayabilir.

Temizlik: iz bırakmayın

CMD
netsh interface portproxy show all
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=51433
netsh advfirewall firewall delete rule name="Portproxy 51433 sadece ofis"

Demo bitti, migrasyon bitti, geçici RDP bitti → kuralı silin. “İleride lazım olur” diye unutulan portproxy, bir yıl sonra güvenlik taramasında “bu port da ne?” diye geri döner.

Portproxy ne değildir?

  • Tam özellikli reverse proxy değildir: Host adına göre site ayırmaz, SSL sonlandırmaz, URL yazmaz.
  • VPN değildir: Ağı güvenli tünellemez; sadece TCP’yi taşır.
  • Uygulama güvenlik duvarı değildir: Kim geldi, ne sordu diye uygulamalı filtrelemez.
  • UDP sihirbazı değildir: DNS, bazı oyun / keşif protokolleri bu masaya oturmaz.

Ne zaman seçersiniz? “TCP’yi A kapısından B odasına götür, az bileşenle, Windows içinde kalsın.” Ne zaman seçmezsiniz? “İnternete kalıcı yayın, yük dağıtım, uygulama katmanı güvenlik.”

Kısa özet — aklınızda kalsın

  • Mantık: Çaldığınız kapı ≠ her zaman açılan oda.
  • Üçlü: add / show all / delete — sonra IP Helper + güvenlik duvarı.
  • Güzel kullanımlar: alternatif SQL portu, localhost servisi ağa açma, kısa süreli migrasyon bandı, kontrollü sıçrama.
  • Kötü kullanım: İnternete açık unutulmuş RDP köprüsü.
  • Doğrulama: show all + netstat + Test-NetConnection.

Bir sonraki sefer “şu portu şuraya alsak?” dendiğinde aklınıza router menüsü yerine Windows’un kendi köprüsü de gelsin. Bazen en şık çözüm, en az bileşenli olandır — yeter ki iş bitince kapıyı kilitleyin.