Bu rehber; sunucularını ve web altyapılarını gereksiz ağ maruziyetini ortadan kaldırarak sertleştirmek isteyen geliştiriciler, sistem yöneticileri ve teknik yöneticiler için hazırlanmıştır. Bu adımların sonunda sisteminizde dinlemedeki her portu nasıl keşfedeceğinizi, hangilerinin gerçekten açık olması gerektiğine nasıl karar vereceğinizi, geri kalanları nasıl kapatacağınızı ve zaman içinde yeni risklerin sessizce ortaya çıkmaması için nasıl izleme yapacağınızı öğreneceksiniz.
Mevcut Açık Portları Denetleyin
Herhangi bir şeyi kapatmadan önce, şu anda bağlantı bekleyen tüm portların eksiksiz ve doğru bir resmini elde etmeniz gerekir. Sunuculara zaman içinde yazılım yüklendikçe ve unutuldukça açık portlar birikir. Gerçek tabloyu görmek için önce sunucunun içinden başlayın, ardından dışarıdan doğrulayın.
- Linux'ta dinleme durumundaki her TCP ve UDP portu, sorumlu işlem adı ve PID ile birlikte listelemek için
ss -tlnup(veya eski sistemlerdenetstat -tlnup) komutunu çalıştırın. - Windows Server'da, yükseltilmiş komut isteminde
netstat -anokomutunu çalıştırın; ardından PID'leri Görev Yöneticisi veya PowerShell'dekiGet-Processile çapraz kontrol edin. - Sonuçları bir tabloya kaydedin: port numarası, protokol (TCP/UDP), servis adı ve işlem sahibi sütunlarını ekleyin.
- İnternetteki bir saldırganın tam olarak ne gördüğünü anlamak için genel IP adresinize dışarıdan bir port taraması yapın — Sensagraph, açığa çıkan portlarınızı sürekli olarak dışarıdan kontrol eder ve beklenmedik bulguları vurgular.
- İç listeyi dış tarama sonuçlarıyla karşılaştırın; tutarsızlıklar genellikle güvenlik duvarı yanlış yapılandırmalarını veya bulut güvenlik grubu boşluklarını ortaya koyar.
Hangi Portların Gerekli Olduğunu Belirleyin
Her açık port bir sorun değildir, ancak her açık portun bir gerekçesi olmalıdır. Dinlemedeki her portu bir iş veya operasyonel gereksinime eşleştirin. Bir portun neden erişilebilir olması gerektiğini net bir şekilde ifade edemiyorsanız, o port kapatılmalı ya da en azından kısıtlanmalıdır.
- Bir web sunucusunda meşru olarak açık olan yaygın portlar: 80 (HTTP), 443 (HTTPS). Diğer her şey için açık bir gerekçe bulunmalıdır.
- 3306 (MySQL), 5432 (PostgreSQL) ve 27017 (MongoDB) gibi veritabanı portları asla genel internete açık olmamalıdır — yalnızca localhost veya özel bir ağ arayüzü üzerinden erişilebilir olmalıdır.
- 22 (SSH) ve 3389 (RDP) gibi uzak yönetim portları yalnızca kesinlikle gerektiğinde açık olmalı ve IP izin listesiyle kısıtlanmalıdır.
- Üretimde çalışmaya devam eden geliştirme veya hata ayıklama portları (ör. 8080, 8443, 9000, 4000) yaygın bir risktir — hiçbirinin açığa çıkmadığını doğrulayın.
- Posta portları (25, 110, 143, 587, 993, 995) yalnızca sunucunuz bir posta sunucusuysa açık olmalıdır; aksi takdirde tamamen kapatın.
- Tablonuzdaki her portu Gerekli, Kısıtlı (belirli IP'lere açık) veya Kapatılacak olarak işaretleyin.
Gereksiz Servisleri Devre Dışı Bırakın
Bir portu güvenlik duvarı düzeyinde kapatmak iyidir, ancak alttaki servisi durdurmak daha iyidir — dinleyiciyi tamamen ortadan kaldırır ve güvenlik duvarı yanlış yapılandırmalarının portu yeniden açığa çıkarma riskini azaltır. İhtiyaç duymadığınız servisleri yalnızca engellemek yerine devre dışı bırakın.
- systemd tabanlı Linux'ta: hemen durdurmak için
sudo systemctl stop <servis>, yeniden başlatmada başlamasını önlemek içinsudo systemctl disable <servis>komutunu kullanın. - Kullanılmıyorsa incelenip devre dışı bırakılacak yaygın servisler:
telnet,ftp,rsh,rlogin,finger,talk,chargen,daytime,echo,discard. - İzleme için kullanılmıyorsa SNMP'yi (port 161/162) devre dışı bırakın; SNMP gerekliyse varsayılan topluluk dizelerini değiştirin ve kimlik doğrulamalı SNMPv3 kullanın.
- Telnet'i (port 23) her koşulda devre dışı bırakın — kimlik bilgilerini düz metin olarak iletir ve modern sistemlerde meşru bir kullanımı yoktur.
- Windows'ta, Remote Registry, Routing and Remote Access veya NetBIOS yardımcısı gibi servisler için
services.mscveya PowerShell'dekiSet-Service -StartupType Disabledkomutu aracılığıyla servisleri denetleyin ve devre dışı bırakın. - Bir servisi durdurduktan sonra portun artık listede olmadığını doğrulamak için
ss -tlnupkomutunu yeniden çalıştırın.
Güvenlik Duvarı Kurallarınızı Yapılandırın
Alttaki servisin durdurulamadığı portlar için bile, doğru yapılandırılmış bir güvenlik duvarı önemli bir güvenlik ağı sağlar. Varsayılan olarak reddet yaklaşımını benimseyin: her şeyi engelleyin, ardından yalnızca gerekli olanı açıkça izin verin.
- Linux (iptables): INPUT ve FORWARD zincirleri için varsayılan politikayı DROP olarak ayarlayın —
iptables -P INPUT DROPveiptables -P FORWARD DROP— ardından 80, 443 ve SSH portunuz için açık ACCEPT kuralları ekleyin. - Linux (ufw):
ufw default deny incomingkomutunu çalıştırın, ardındanufw allow 443/tcp,ufw allow 80/tcpgibi komutlarla gerekli portları açın.ufw enableile etkinleştirin. - Linux (firewalld):
firewall-cmd --set-default-zone=dropkullanın, ardındanfirewall-cmd --permanent --add-service=httpsile yalnızca gerekli servisleri ekleyin. - Windows Güvenlik Duvarı: Gelişmiş Güvenlik ile Windows Defender Güvenlik Duvarı'nı açın, varsayılan gelen işlem eylemini Engelle olarak ayarlayın ve yalnızca gerekli portlar için Gelen İzin Ver kuralları oluşturun.
- Bulut ortamları (AWS, Azure, GCP): Security Group / Network Security Group / VPC Güvenlik Duvarı Kurallarını gözden geçirin ve sıkılaştırın — bunlar işletim sistemi güvenlik duvarından bağımsız olarak çalışır ve sıklıkla yanlış yapılandırılır.
- Güvenlik duvarı kurallarınızın yeniden başlatmalarda kalıcı olmasını sağlayın (Debian/Ubuntu'da
iptables-save/netfilter-persistentkullanın veya varsayılan olarak kalıcı olan firewalld/ufw'ye güvenin). - Bilgi sızıntısını azaltmak için tüm ICMP zaman damgası isteklerini ve adres maskesi yanıtlarını engelleyin; meşru tanılama için gerekiyorsa temel ping'e izin verin.
Yönetim Portlarını IP İzin Listesiyle Kısıtlayın
SSH (22) ve RDP (3389) gibi bazı portlar meşru yönetim için açık kalmalıdır, ancak rastgele internet adreslerinden erişilebilir olmamalıdır. Bu portlara erişimi yalnızca bilinen ve güvenilen IP aralıklarıyla sınırlayın.
- Ekibinizin uzaktan yönetim için kullandığı statik IP adreslerini veya CIDR aralıklarını belirleyin.
- Güvenlik duvarınızda, port 22 veya 3389 için geniş kapsamlı ACCEPT kuralını kaynak kısıtlamalı bir kuralla değiştirin; ör.
iptables -A INPUT -p tcp --dport 22 -s 203.0.113.0/24 -j ACCEPT. - Bulut güvenlik gruplarında, SSH/RDP gelen kurallarının Kaynağını belirli ofis veya VPN IP'nize ayarlayın — asla
0.0.0.0/0kullanmayın. - Otomatik kaba kuvvet gürültüsünü azaltmak için SSH'yi standart dışı bir porta (ör. 2222) taşımayı düşünebilirsiniz; ancak bu, uygun kimlik doğrulama ve güvenlik duvarı kurallarının yerini alamaz.
- Yönetim portlarını doğrudan açığa çıkarmaktan kaçınmak için bir VPN veya atlama sunucusu kullanın; tüm yöneticilerin SSH veya RDP'ye erişebilmeden önce VPN'e bağlanmasını zorunlu kılın.
- SSH anahtar tabanlı kimlik doğrulamayı etkinleştirin ve parola girişini devre dışı bırakın:
/etc/ssh/sshd_configdosyasındaPasswordAuthentication novePermitRootLogin nodeğerlerini ayarlayın.
Uygulama Düzeyi Portlarını Dikkatli Yönetin
Web uygulamaları genellikle API'lar, yönetici panelleri, geliştirme sunucuları veya izleme panoları için ek portlar açar. Bunlar altyapı portlarıyla aynı titizliği hak eder ve sertleştirme sırasında sıklıkla göz ardı edilir.
- 1024'ün üzerindeki tüm dinlemedeki portları denetleyin — uygulamalar yaygın olarak 3000, 4000, 8080, 8443, 8888, 9000, 9090 ve benzeri portlara bağlanır.
- Tüm uygulama trafiğini Nginx veya Apache üzerinden ters proxy yapılandırması ile 443 numaralı porta yönlendirin; uygulama işlemlerini yalnızca
127.0.0.1'e bağlayın, böylece dışarıdan doğrudan erişilemez. - Node.js'de uygulamanızı dış maruziyeti önlemek için
0.0.0.0:3000yerine127.0.0.1:3000'de dinleyecek şekilde yapılandırın. - Docker ortamlarında, portları
-p 0.0.0.0:PORT:PORTile yayınlamaktan kaçının; bunun yerine127.0.0.1:PORT:PORTkullanın. Docker'ın varsayılan olarak iptables INPUT kurallarını atladığını unutmayın — özel bir güvenlik duvarı kural seti ile Docker'ı--iptables=falseseçeneğiyle çalıştırın veyaufw-dockergibi araçlar kullanın. - İzleme panolarını (Grafana, Kibana, Prometheus) kaldırın veya parola koruyun; kimlik doğrulama olmadan hiçbirini genel arayüzlerde açığa çıkarmayın.
- Beklenmedik portlarda içerik sunabilecek sanal ana bilgisayarlar için
/etc/nginx/sites-enabled/ve/etc/apache2/sites-enabled/dizinlerini gözden geçirin.
Değişikliklerinizi Doğrulayın
Değişiklikler yaptıktan sonra işi tamamlanmış saymadan önce bunları titizlikle doğrulayın. Bir işletim sistemi güncellemesinin ardından bir servisin yeniden başlayarak portu açması ya da bulut güvenlik grubu değişikliğinin doğru kaydedilmemesi yaygın durumlardır.
- Sunucuda
ss -tlnupkomutunu yeniden çalıştırın ve çıktıda yalnızca beklenen portların göründüğünü doğrulayın. - Güvenlik duvarı kurallarını uyguladıktan hemen sonra bir dış port taraması yaparak değişikliklerin sunucu dışından görünür olduğunu doğrulayın — Sensagraph, yeniden tarama başlatmak ve açığa çıkan port profilinizi doğrulamak için kullanılabilir.
- Kapalı olması gereken portlara
telnet <IP> <PORT>veyanc -zv <IP> <PORT>kullanarak doğrudan bağlanmaya çalışın — bir bağlantı reddi veya zaman aşımı, portun erişilemez olduğunu doğrular. - Güvenlik duvarı değişikliklerinden sonra gerekli servislerin (izin verilen IP'lerden HTTPS, SSH) hâlâ doğru çalıştığını test edin.
- Onaylanan nihai port listesini belgeleyin ve gelecekte başvurmak üzere çalışma kitabınıza veya altyapı wiki'nize kaydedin.
Port Kaymasına Karşı Sürekli İzleyin
Port maruziyeti tek seferlik bir düzeltme değildir. Yazılım güncellemeleri, yeni dağıtımlar, geliştirici testleri, konteyner orkestrasyonu değişiklikleri ve işletim sistemi yamaları, kimsenin fark etmeden yeni dinleme servisleri oluşturabilir. Sürekli izleme, port kaymasına karşı güvenilir tek savunmadır.
- Yinelenen port taramaları planlayın — en az haftalık, ideal olarak günlük — ve son taramada mevcut olmayan herhangi bir port sonuçlarda göründüğünde uyarı alın.
- Port denetimini CI/CD hattınıza entegre edin; böylece yeni portlar açan dağıtımlar yayına girmeden önce bir inceleme adımını tetiklesin.
- Süreçlerin yeni ağ soketlerine bağlandığını kaydetmek için Linux'ta
auditdgibi izinsiz giriş tespit araçlarını kullanın. - Sensagraph, saldırı yüzeyinizi sürekli otomatik taramayla izler ve dışarıdan yeni bir port görünür hale geldiğinde sizi anında uyarır; böylece manuel zamanlama olmadan port kaymasına anında görünürlük kazanırsınız.
- Açık port listenizi meşru altyapı değişikliklerini yansıtacak şekilde onaylı listeyi güncelleyerek üç ayda bir resmi bir güvenlik incelemesinin parçası olarak gözden geçirin.
- Herhangi bir büyük altyapı olayından sonra — yeni sunucu hazırlama, bulut geçişi, Kubernetes kümesi güncellemesi — ortamı üretime hazır saymadan önce tam bir port denetimi yapın.