Bir Linux sunucusunda veya ağ cihazında güvenlik denetimi yaparken ilk bakılması gereken yerlerden biri sistemde dinleme (listening) modunda olan portlardır. Modern Linux dağıtımlarında ss komutu ile açık portlar ve soket durumlarını incelemek, eski netstat komutuna kıyasla kat kat daha hızlı ve çekirdek (kernel) seviyesinde optimize bir deneyim sunar.
Bu rehberde; ss (Socket Statistics) komutunun bayraklarını, TCP/UDP soket filtreleme mantığını, açık portları dinleyen süreçlerin (PID) tespitini ve ağ sorunlarını giderme tekniklerini ele alacağız.
netstat vs ss: Neden ss Tercih Edilmeli?
Yıllarca ağ istatistikleri için başvurulan netstat, Linux çekirdeğinin /proc/net/ altındaki sanal dosyalarını okuyarak çalışırdı. Binlerce eşzamanlı bağlantının olduğu yüksek yüklü sunucularda /proc/net okuması ciddi yavaşlamalara ve işlemci yüküne yol açıyordu.
ss aracı ise doğrudan Linux çekirdeğinin Netlink arayüzü ile haberleşir. Bu sayede:
- Bellek ve CPU tüketimi asgari seviyededir.
- On binlerce açık soket milisaniyeler içinde filtrelenebilir.
- Modern
iproute2paketinin resmi bir parçasıdır (netstatise artık kullanımdan kaldırılmış / deprecated durumdadır).
| Karşılaştırma | netstat | ss |
|---|---|---|
| Veri Kaynağı | /proc/net/ metin dosyaları | Kernel Netlink soketleri |
| Yüksek Bağlantıda Hız | Yavaş (yüksek gecikme) | Çok Hızlı (anlık yanıt) |
| Paket Bağımlılığı | net-tools (eski) | iproute2 (modern standart) |
| Durum ve Filtreleme Desteği | Temel düzeyde | Zengin BPF ve durum filtreleri |
En Temel ss Komut Formülü: ss -tulpn
Ağ yöneticilerinin ezbere bildiği en popüler ss parametre grubu -tulpn kombinasyonudur:
sudo ss -tulpn
Bu parametrelerin her biri kritik bir işlevi temsil eder:
-t: Yalnızca TCP soketlerini göster.-u: Yalnızca UDP soketlerini göster.-l: Yalnızca dinleme modundaki (Listening) soketleri listele (aktif istemci bağlantılarını gizler).-p: Portu dinleyen sürecin adını ve PID (Process ID) numarasını göster (Root yetkisi gerektirir).-n: Sayısal gösterim yap (Port numaralarını servis adlarına çevirmeye çalışma, DNS çözümlemesi yapma; böylece komut takılmadan anında biter).
Örnek Çıktı:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=782,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1120,fd=6))
tcp LISTEN 0 70 127.0.0.1:3306 0.0.0.0:* users:(("mariadbd",pid=915,fd=19))
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("named",pid=642,fd=512))
Güvenlik Notu: Çıktıda
Local Addresssütununa dikkat edin! Eğer bir servis127.0.0.1:3306şeklinde dinliyorsa, bu servise yalnızca yerel makineden erişilebilir (güvenli). Eğer0.0.0.0:3306veya:::3306yazıyorsa, tüm internet veya yerel ağdaki herkese açık demektir!
Belirli Portları ve Soket Durumlarını Filtrelemek
Tüm portları listelemek yerine doğrudan ilgilendiğiniz porta odaklanabilirsiniz:
1. Belirli Bir Port Numarasını Sorgulamak
Örneğin 80 veya 443 portunun dinlenip dinlenmediğini kontrol etmek:
# Sadece 80 (HTTP) portunu dinleyenleri listele
ss -tln 'sport = :80'
# Alternatif olarak port aralığı veya isimle filtreleme
ss -tln 'sport = :http or sport = :https'
2. Dışarıya Açık Aktif Bağlantıları Görmek (ESTABLISHED)
Sunucunuza bağlı olan anlık istemcileri tespit etmek için -l parametresini kaldırıp durum filtresi uygulayabilirsiniz:
# Aktif (ESTABLISHED) TCP bağlantılarını göster
ss -tn state established
3. Belirli Bir Uzak IP Adresine Yapılan Bağlantıları Listeleme
# Belirli bir hedef sunucuya giden bağlantıları filtrele
ss -tn dst 192.168.1.50
Özet İstatistikleri Görmek (ss -s)
Sunucunuz bir DDoS atağı altında mı yoksa normal trafik mi işliyor? ss -s komutu sistemdeki tüm soketlerin anlık istatistiksel özetini tek ekranda verir:
ss -s
Çıktı:
Total: 342
TCP: 48 (estab 12, closed 18, orphaned 0, timewait 14)
Transport Total IP IPv6
RAW 0 0 0
UDP 6 4 2
TCP 30 20 10
INET 36 24 12
timewait veya estab sayılarının aşırı yüksek olması, web sunucunuzda veya API katmanında bağlantıların düzgün kapatılmadığına ya da soket tükenmesi (socket exhaustion) riski olduğuna işaret eder.
lsof ile Belirli Bir Portu Kullanan Süreci Bulmak
htop, ps ve lsof rehberimiz içinde de incelediğimiz gibi, ss çıktısındaki PID’yi doğrulamak veya doğrudan porta göre süreci bulmak için lsof harika bir tamamlayıcıdır:
# 8080 portunu kullanan programı bul
sudo lsof -i :8080
Eğer bir servis çakışması yaşıyorsanız (örneğin “Address already in use” hatası), bu komutla portu işgal eden süreci bulup kill -9 <PID> ile sonlandırabilirsiniz.
Güvenlik Denetimi Listesi (Checklist)
Ağ güvenliğinizi sağlamlaştırmak için ss çıktısını incelerken şu adımları izleyin:
- 0.0.0.0 ile Dinleyen Servisler: Veritabanları (MySQL, PostgreSQL, Redis) ve önbellek servisleri (Memcached) asla
0.0.0.0dinlememeli; sadece127.0.0.1veya dahili VPN IP’sine bağlanmalıdır. - Kullanılmayan Servisleri Kapatın: Çıktıda tanımadığınız veya test için açılmış bir port görüyorsanız servisi durdurun (
sudo systemctl stop <servis>vesudo systemctl disable <servis>). - Güvenlik Duvarı ile Kısıtlayın: Dışarıya açılması gereken portları bir sonraki rehberimiz olan ufw ve iptables ile sınırlandırın.
Özet
Modern Linux yönetiminde açık port tespiti ve ağ teşhisi için netstat yerine ss aracı kullanılmalıdır. ss -tulpn komutu açık olan tüm TCP/UDP portlarını ve ilgili servis PID’lerini tek seferde ortaya çıkarır. Bu düzenli kontroller, sunucunuza sızma girişimlerini engellemenin en pratik yoludur.