Sunucu Yönetimi 10 dk okuma

Sunucuda Port Açma: Ubuntu UFW, AlmaLinux firewalld ve Windows Server Güvenlik Duvarı

Port açtınız ama bağlantı gelmiyor mu? Servisin gerçekten dinlediğini kontrol etmekten UFW, firewalld ve Windows Defender Güvenlik Duvarı kurallarına, Docker tuzağından dışarıdan port testine kadar sunucuda port açmanın bütün adımları.

Sunucuda Port Açma: Ubuntu UFW, AlmaLinux firewalld ve Windows Server Güvenlik Duvarı
AnkSOFT
Yayıncı

Bir oyun sunucusu, web uygulaması ya da veritabanı kurdunuz; sunucu içinde her şey çalışıyor ama dışarıdan kimse bağlanamıyor. Çoğu zaman sorun ya servisin yanlış adreste dinlemesi ya da güvenlik duvarının o portu kapalı tutmasıdır. Sunucuda port açma, bu iki katmanı doğru sırayla kontrol etmek ve yalnız gereken portu, doğru protokolle (TCP ya da UDP) açmak demektir.

Bu rehberde portun ne olduğunu ve TCP ile UDP arasındaki farkı, servisin gerçekten dinleyip dinlemediğini ss ve netstat ile nasıl göreceğinizi, Ubuntu'da UFW, AlmaLinux ve Rocky Linux'ta firewalld, Windows Server'da Windows Defender Güvenlik Duvarı ile kural eklemeyi, Docker'ın yayınladığı portlarla ilgili önemli uyarıyı ve portu dışarıdan nasıl test edeceğinizi öğreneceksiniz. Örneklerde belgelere ayrılmış 203.0.113.10 adresi kullanılmıştır.


Port Nedir? TCP ve UDP Farkı

Bir sunucunun tek bir IP adresi vardır ama üzerinde aynı anda onlarca servis çalışabilir. Port, gelen trafiğin hangi servise gideceğini belirleyen 0 ile 65535 arasındaki numaradır. IP adresi binanın adresiyse port, daire numarasıdır. SSH genellikle 22, HTTP 80, HTTPS 443, Uzak Masaüstü 3389 numaralı portu kullanır.

Her port numarası iki ayrı protokolle kullanılabilir ve güvenlik duvarı kuralları da protokole göre ayrı yazılır:

Özellik TCP UDP
Bağlantı Önce el sıkışma yapılır, bağlantı kurulur Bağlantı kurulmadan paket gönderilir
Güvenilirlik Kaybolan paket yeniden gönderilir, sıra korunur Kayıp ve sıra kontrolü uygulamaya kalır
Tipik kullanım Web, SSH, veritabanı, e-posta, RDP Oyun trafiği, sesli sohbet, DNS sorguları
Test kolaylığı Kolay: bağlantı kurulursa port açıktır Zor: yanıt gelmemesi kapalı olduğunu kanıtlamaz

Bu yüzden "25565 portunu açtım" demek yetmez; hangi protokolü açtığınız da önemlidir. Bir oyun UDP kullanıyorsa yalnız TCP kuralı eklemek hiçbir işe yaramaz. Oyunun ya da uygulamanın belgesinde portla birlikte protokol de yazar; ikisi de gerekiyorsa iki kural eklersiniz.


Önce Kontrol: Servis Gerçekten Dinliyor mu?

Güvenlik duvarına dokunmadan önce servisin o portta dinlediğinden emin olun. Dinlemeyen bir porta kural eklemek, kapısı olmayan bir duvara anahtar takmaya benzer.

Linux'ta ss -tulpn

sudo ss -tulpn

Bayrakların anlamı: -t TCP soketleri, -u UDP soketleri, -l yalnız dinleyen soketler, -p soketi kullanan süreç, -n servis adı çözmeden sayısal gösterim. Belirli bir portu aramak için çıktıyı süzebilirsiniz:

sudo ss -tulpn | grep 25565

ss -tulpn çıktısı: 0.0.0.0 üzerinde dinleyen Java süreci ile yalnız 127.0.0.1 üzerinde dinleyen MariaDB arasındaki fark (temsilî)

Çıktıdaki yerel adres sütununa dikkat edin:

  • 0.0.0.0:25565 ya da [::]:25565: Servis tüm ağ arayüzlerinde dinliyor, dışarıdan erişilebilir (güvenlik duvarı izin verirse).
  • 127.0.0.1:3306: Servis yalnız sunucunun kendi içinden erişilebilir. Bu durumda güvenlik duvarında port açmak sonucu değiştirmez; uygulamanın ayar dosyasında dinleme adresini değiştirmeniz gerekir. Veritabanları için bu kısıtlama çoğu zaman bilinçli ve doğrudur.
  • Satır hiç yoksa servis çalışmıyor ya da farklı bir portu kullanıyordur. Önce servisin günlüklerine bakın.

Windows'ta netstat -ano

Komut İstemi ya da PowerShell'de:

netstat -ano | findstr :3389

-a tüm bağlantıları ve dinlenen TCP ile UDP portlarını, -n adresleri sayısal olarak, -o her satırın süreç kimliğini (PID) gösterir. LISTENING durumundaki satırın son sütunundaki PID'yi Görev Yöneticisi'nin Ayrıntılar sekmesinde arayarak portu hangi programın kullandığını bulabilirsiniz. UDP satırlarında durum sütunu boş görünür; bu normaldir.


Ubuntu ve Debian'da UFW ile Port Açma

UFW (Uncomplicated Firewall), Ubuntu'nun iptables ya da nftables üzerine kurulu sade güvenlik duvarı aracıdır. Etkinleştirildiğinde gelen bağlantıları varsayılan olarak reddeder, yalnız izin verdiğiniz portlar açılır.

UFW'yi güvenle etkinleştirmek

UFW kapalıysa, etkinleştirmeden önce SSH'a izin verin. Aksi hâlde bağlantınız kopabilir ve sunucuya yalnız paneldeki konsoldan girebilirsiniz:

sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose

SSH portunu değiştirdiyseniz 22 yerine kendi portunuzu yazın. ufw enable SSH üzerinden çalıştırıldığında sizi bu konuda uyaran bir onay sorusu sorar. SSH ve UFW ile ilgili genel sertleştirme adımlarını Ubuntu sunucu güvenliği rehberinde ayrıca bulabilirsiniz.

Port açma, aralık ve kaynak kısıtlama

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 19132/udp
sudo ufw allow 7777:7778/udp
sudo ufw allow proto tcp from 198.51.100.0/24 to any port 3306
  • Protokolü (/tcp, /udp) yazmazsanız kural her iki protokol için eklenir. Gereksiz açıklık bırakmamak için protokolü her zaman belirtin.
  • Port aralığı (7777:7778) yazarken protokol zorunludur.
  • Son satır veritabanı portunu yalnız 198.51.100.0/24 ağına açar. Yönetim panelleri, veritabanları ve RCON gibi portlar için herkese açmak yerine bu biçimi tercih edin.

Kuralları listeleme ve silme

sudo ufw status numbered
sudo ufw delete 4
sudo ufw delete allow 80/tcp

status numbered kuralları numarasıyla listeler, delete 4 o numaralı kuralı siler. Numara her silmeden sonra değişir; birden çok kural silecekseniz her seferinde listeyi yeniden alın. IPv4 ve IPv6 için ayrı satır görürseniz ((v6) ekiyle), ikisini birden silmek için kuralın kendisini delete allow 80/tcp biçiminde yazmak daha güvenlidir.

UFW ile port açma, numaralı listeleme ve kural silme komutları ile çıktıları (temsilî)


AlmaLinux ve Rocky Linux'ta firewalld ile Port Açma

AlmaLinux, Rocky Linux ve diğer RHEL tabanlı dağıtımlarda güvenlik duvarı firewalld hizmetidir ve firewall-cmd komutuyla yönetilir. İki kavramı bilmeniz yeterli: zone (bölge) ve runtime ile permanent ayrımı.

Zone: kural hangi bölgeye eklenecek?

firewalld, ağ arayüzlerini bölgelere bağlar ve kurallar bölge bazında uygulanır. Önce hizmetin çalıştığını ve arayüzünüzün hangi bölgede olduğunu görün:

sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones

Sunucularda bu genellikle public bölgesidir. --zone belirtmezseniz kural varsayılan bölgeye eklenir. Arayüzünüz başka bir bölgedeyse kuralı o bölgeye eklemelisiniz; aksi hâlde kural var görünür ama trafiğe uygulanmaz.

Runtime ve permanent: kalıcı kural ekleme

--permanent olmadan eklenen kural hemen çalışır ama firewalld yeniden yüklendiğinde ya da sunucu yeniden başladığında kaybolur. --permanent ile eklenen kural ise kalıcı yapılandırmaya yazılır ama --reload yapılana kadar etkin olmaz. Pratik yöntem şudur:

sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp
sudo firewall-cmd --permanent --zone=public --add-port=7777-7778/udp
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-ports

Bilinen servisler için port numarası yerine servis adını da kullanabilirsiniz: --add-service=http. Bir kuralı kaldırmak için:

sudo firewall-cmd --permanent --zone=public --remove-port=25565/tcp
sudo firewall-cmd --reload

Kuralları önce --permanent olmadan deneyip çalıştığını gördükten sonra sudo firewall-cmd --runtime-to-permanent ile etkin yapılandırmayı kalıcı hâle getirmek de mümkündür. Bölgedeki her şeyi tek ekranda görmek için --list-all kullanın.

firewall-cmd ile etkin bölgeyi görme, kalıcı port ekleme, reload ve list-ports çıktısı (temsilî)


Windows Server'da Güvenlik Duvarı Port Açma

Windows Server'da gelen trafiği Windows Defender Güvenlik Duvarı denetler. Kuralı grafik arayüzden ya da PowerShell'den ekleyebilirsiniz; ikisi aynı kural listesine yazar.

wf.msc ile gelen kuralı oluşturma

  1. Başlat menüsüne wf.msc yazıp Enter'a basın; Gelişmiş Güvenlik Özellikli Windows Defender Güvenlik Duvarı konsolu açılır.
  2. Sol bölmede Gelen Kurallar (Inbound Rules) seçin, sağdan Yeni Kural (New Rule) deyin.
  3. Kural türü olarak Bağlantı Noktası (Port) seçin. Daha fazla seçenek isterseniz Özel (Custom) türü tüm sayfaları gösterir.
  4. TCP ya da UDP seçin ve Belirli yerel bağlantı noktaları alanına portu yazın (ör. 25565 ya da 7777-7778).
  5. Eylem sayfasında Bağlantıya izin ver seçin.
  6. Profil sayfasında kuralın geçerli olacağı ağ profillerini işaretleyin. Sunucuda ağ profili beklenmedik biçimde değişebileceği için gerekiyorsa üç profili de seçin.
  7. Kurala anlaşılır bir ad verin (ör. "Minecraft 25565 TCP") ve Son'a tıklayın.

Kapsam (Scope) sayfasında kuralı yalnız belirli IP adreslerine sınırlayabilirsiniz; RDP ya da veritabanı gibi yönetim portları için bunu değerlendirin. IIS ile web sitesi yayınlarken 80 ve 443 portlarının ayrıntılı kurulumunu IIS kurulumu rehberinde bulabilirsiniz.

PowerShell ile New-NetFirewallRule

Yönetici olarak açtığınız PowerShell'de aynı kural tek satırdır:

New-NetFirewallRule -DisplayName "Minecraft 25565 TCP" -Direction Inbound -Protocol TCP -LocalPort 25565 -Action Allow
New-NetFirewallRule -DisplayName "Oyun 7777-7778 UDP" -Direction Inbound -Protocol UDP -LocalPort 7777-7778 -Action Allow

Belirli bir ağdan gelen trafiğe sınırlamak için -RemoteAddress 198.51.100.0/24 ekleyin. Kuralı görmek ve silmek için:

Get-NetFirewallRule -DisplayName "Minecraft 25565 TCP"
Remove-NetFirewallRule -DisplayName "Minecraft 25565 TCP"

Komut çalıştığında oluşturulan kuralın özellikleri ekrana yazılır ve kural wf.msc listesinde de hemen görünür.

PowerShell'de New-NetFirewallRule ile gelen kuralı oluşturma ve başka bir bilgisayardan Test-NetConnection ile doğrulama (temsilî)


Panel Güvenlik Duvarı ve İşletim Sistemi: İki Katman

Birçok sanal sunucu hizmetinde işletim sistemi içindeki güvenlik duvarına ek olarak sağlayıcının panelinden yönetilen bir güvenlik duvarı da bulunur. Örneğin AnkSOFT VDS panelinde ayrı bir güvenlik duvarı bölümü bulunur. Bu iki katman birbirinin yerine geçmez, birlikte çalışır:

  • Panelde kural açtınız ama işletim sistemi içindeki güvenlik duvarı (UFW, firewalld ya da Windows Defender Güvenlik Duvarı) kapalı tutuyorsa bağlantı yine gelmez.
  • İşletim sisteminde port açık ama panel kuralı engelliyorsa bağlantı yine kurulmaz.

Bir port için her iki katmanda da izin olmalıdır. Sorun ararken sırayı içeriden dışarıya doğru izleyin: önce servis dinliyor mu, sonra işletim sistemi güvenlik duvarı, sonra panel kuralı, en son dışarıdan test.

Port açma kontrol sırası: servis, dinleme adresi, işletim sistemi güvenlik duvarı, panel kuralı ve dış test


Docker Kullanıyorsanız: UFW Kurallarını Atlayan Portlar

Docker ile çalışan sunucularda gözden kaçan önemli bir ayrıntı vardır. Docker'ın resmi belgesine göre bir konteyner portunu yayınladığınızda (-p 8080:80 ya da Compose'da ports:), paketler Docker'ın nat tablosundaki kurallarla UFW'nin kullandığı zincirlere ulaşmadan yönlendirilir. Sonuç: UFW'de kapalı görünen bir port dışarıdan erişilebilir olabilir.

Docker belgesi ayrıca, adres belirtmeden yayınlanan portların varsayılan olarak sunucunun tüm adreslerinde açıldığını söyler. Bir portun yalnız sunucu içinden erişilebilmesini istiyorsanız (ör. önünde Nginx gibi bir ters vekil sunucu varsa) yerel adrese bağlayın:

docker run -d -p 127.0.0.1:8080:80 nginx

Compose dosyasında aynı şey "127.0.0.1:8080:80" biçiminde yazılır. Böylece dışarıya yalnız ters vekilin 80 ve 443 portları açık kalır, uygulama portu doğrudan erişime kapalı olur. Docker kurulumunun ayrıntıları için Docker kurulumu rehberine bakabilirsiniz.


Portun Dışarıdan Açık Olduğunu Test Etme

Testi sunucunun kendisinden değil, başka bir bilgisayardan yapın. Sunucu içinden yapılan test güvenlik duvarını ve panel filtresini çoğu zaman atlar, yanıltıcı "açık" sonucu verir.

Windows'tan Test-NetConnection

Test-NetConnection -ComputerName 203.0.113.10 -Port 25565

Çıktıdaki TcpTestSucceeded : True satırı TCP bağlantısının kurulduğunu gösterir. False ise ya servis dinlemiyordur ya da bir güvenlik duvarı engelliyordur. Bu cmdlet yalnız TCP portunu test eder; UDP için kullanılamaz.

Linux ve macOS'tan nc

nc -zv 203.0.113.10 25565
nc -zvu 203.0.113.10 19132

-z veri göndermeden yalnız bağlantıyı dener, -v sonucu ayrıntılı yazar, -u UDP kullanır. TCP sonucu güvenilirdir. UDP'de ise bağlantı kavramı olmadığı için "succeeded" yazması portun açık olduğunu, yanıt gelmemesi de kapalı olduğunu kesin kanıtlamaz. UDP kullanan bir oyun için en sağlam test, oyunun istemcisiyle gerçekten bağlanmayı denemektir.

Sonuçları yorumlama

Belirti Olası neden Bakılacak yer
Bağlantı zaman aşımına uğruyor Paket bir güvenlik duvarında düşüyor İşletim sistemi kuralı, panel kuralı
Bağlantı hemen reddediliyor Sunucuya ulaşılıyor ama o portta dinleyen yok ss -tulpn / netstat -ano, servis günlükleri
Sunucu içinden açık, dışarıdan kapalı Servis 127.0.0.1 üzerinde dinliyor ya da dış kural eksik Dinleme adresi, panel kuralı
UFW kapalı ama port dışarıdan açık Docker portu yayınlamış docker ps çıktısındaki port eşlemesi

Oyun Sunucusu Port Örnekleri

Oyun sunucularında port açarken her zaman sunucunun kendi ayar dosyasındaki değeri esas alın; varsayılan değer değiştirilmiş olabilir. İki yaygın örnek:

Oyun Varsayılan port Protokol Ayar
Minecraft Java Edition 25565 TCP server.properties içindeki server-port
Minecraft Bedrock Edition 19132 (IPv6 için 19133) UDP server.properties içindeki server-port ve server-portv6

Birçok oyun ana portun yanında sorgu, RCON ya da sesli sohbet için ek portlar kullanır. Minecraft Java'da enable-query açıksa sorgu portu UDP, rcon.port ise TCP'dir (varsayılan 25575). RCON portunu herkese açmak yerine yalnız kendi IP adresinize sınırlayın. Sesli sohbet eklentileri genellikle ayrı bir UDP portu ister; bunun bir örneğini Simple Voice Chat kurulumu rehberinde görebilirsiniz.

Hazır panelli oyun sunucularında portlar genellikle sağlayıcı tarafından atanır ve güvenlik duvarı ayarı gerekmez; bağlantı sorunu yaşıyorsanız oyun sunucusuna bağlanamıyorum kontrol listesini izleyin. Bu rehberdeki adımlar daha çok oyun sunucusunu kendi VDS'inizde çalıştırdığınız durumlar içindir.


En Sık Yapılan Hatalar

  1. Yanlış protokolü açmak. UDP kullanan bir oyun için yalnız TCP kuralı eklemek en yaygın hatadır. Belgedeki protokolü kontrol edin, gerekiyorsa ikisini ayrı ayrı açın.
  2. SSH kuralı eklemeden UFW'yi etkinleştirmek. Bağlantınız kopar ve sunucuya yalnız paneldeki konsoldan girebilirsiniz. Önce ufw allow 22/tcp, sonra ufw enable.
  3. firewalld'de --permanent sonrası --reload yapmamak. Kalıcı kural eklenir ama etkin olmaz; ya da tersi, --permanent olmadan eklenen kural ilk yeniden başlatmada kaybolur.
  4. Yalnız bir katmanı açmak. Panel kuralı ile işletim sistemi kuralı birlikte çalışır. İkisinden biri eksikse bağlantı gelmez.
  5. Servis 127.0.0.1'de dinlerken güvenlik duvarıyla uğraşmak. ss -tulpn çıktısında adres yerelse sorun güvenlik duvarında değil, uygulamanın ayarındadır.
  6. Docker portlarının UFW ile korunduğunu sanmak. Yayınlanan portlar UFW kurallarını atlayabilir. Yalnız iç erişim gereken portları 127.0.0.1 adresine bağlayın.
  7. Testi sunucunun kendisinden yapmak. Sunucu içinden alınan "açık" sonucu dış erişimi kanıtlamaz. Başka bir ağdan test edin.

Özet

  1. Port, trafiğin hangi servise gideceğini belirler ve TCP ile UDP için ayrı kural gerekir.
  2. Kural eklemeden önce ss -tulpn ya da netstat -ano ile servisin dinlediğini ve dinleme adresinin 0.0.0.0 olduğunu doğrulayın.
  3. Ubuntu'da ufw allow PORT/PROTOKOL, AlmaLinux'ta firewall-cmd --permanent --add-port ardından --reload, Windows Server'da wf.msc ya da New-NetFirewallRule kullanın.
  4. Panel güvenlik duvarı ile işletim sistemi güvenlik duvarının ikisi de izin vermelidir; Docker kullanıyorsanız yayınlanan portları ayrıca denetleyin.
  5. Sonucu başka bir bilgisayardan Test-NetConnection ya da nc ile test edin; UDP için oyun istemcisiyle bağlanmak en güvenilir yöntemdir.

Panelinde ayrı bir güvenlik duvarı bölümü bulunan Linux ve Windows sunucular için AnkSOFT VDS seçeneklerine göz atabilirsiniz.


Kaynaklar

Sıkça Sorulan Sorular

Port açtım ama hâlâ bağlanamıyorum, ilk neye bakmalıyım?

Önce sunucuda ss -tulpn (Linux) ya da netstat -ano (Windows) ile servisin o portta dinlediğini ve adresin 127.0.0.1 değil 0.0.0.0 olduğunu kontrol edin. Ardından işletim sistemi güvenlik duvarını, sonra sağlayıcı panelindeki güvenlik duvarı kuralını inceleyin ve testi başka bir bilgisayardan yapın.

TCP mi UDP mi açmam gerektiğini nasıl anlarım?

Uygulamanın ya da oyunun belgesinde port numarasıyla birlikte protokol yazar. Örneğin Minecraft Java Edition varsayılan olarak 25565 TCP, Bedrock Edition 19132 UDP kullanır. Belge iki protokolü de istiyorsa iki ayrı kural ekleyin.

firewalld'de eklediğim port yeniden başlatınca neden kayboldu?

Kuralı --permanent seçeneği olmadan eklediyseniz yalnız çalışma anı (runtime) yapılandırmasına yazılır ve yeniden yüklemede ya da yeniden başlatmada silinir. Kuralı --permanent ile ekleyip firewall-cmd --reload çalıştırın ya da çalışan yapılandırmayı --runtime-to-permanent ile kalıcı hâle getirin.

UFW kapalı olduğu hâlde Docker konteynerimin portu dışarıdan açık, neden?

Docker'ın resmi belgesine göre yayınlanan konteyner portlarına giden paketler, UFW'nin kullandığı zincirlere ulaşmadan Docker'ın kendi kurallarıyla yönlendirilir. Yalnız sunucu içinden erişilmesi gereken portları -p 127.0.0.1:8080:80 biçiminde yerel adrese bağlayın.

UDP portunun açık olduğunu nasıl test ederim?

nc -zvu ile deneme yapabilirsiniz ama UDP'de bağlantı kavramı olmadığı için sonuç kesin değildir. Test-NetConnection yalnız TCP test eder. En güvenilir yöntem, ilgili oyunun ya da uygulamanın istemcisiyle başka bir ağdan gerçekten bağlanmayı denemektir.

Panelde güvenlik duvarı kuralı açtım, sunucu içinde ayrıca port açmam gerekir mi?

Evet. Panel güvenlik duvarı ile işletim sistemi içindeki güvenlik duvarı birlikte çalışır. UFW, firewalld ya da Windows Defender Güvenlik Duvarı portu engelliyorsa paneldeki izin tek başına yetmez; iki katmanda da izin olmalıdır.

TR| EN