1. Home
  2. Docs
  3. Linux
  4. Ağ ve Güvenlik
  5. ss ve netstat ile Açık Portları ve Ağ Soketlerini İnceleme

ss ve netstat ile Açık Portları ve Ağ Soketlerini İnceleme

Print

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 iproute2 paketinin resmi bir parçasıdır (netstat ise artık kullanımdan kaldırılmış / deprecated durumdadır).
Karşılaştırmanetstatss
Veri Kaynağı/proc/net/ metin dosyalarıKernel Netlink soketleri
Yüksek Bağlantıda HızYavaş (yüksek gecikme)Çok Hızlı (anlık yanıt)
Paket Bağımlılığınet-tools (eski)iproute2 (modern standart)
Durum ve Filtreleme DesteğiTemel düzeydeZengin 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 Address sütununa dikkat edin! Eğer bir servis 127.0.0.1:3306 şeklinde dinliyorsa, bu servise yalnızca yerel makineden erişilebilir (güvenli). Eğer 0.0.0.0:3306 veya :::3306 yazı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:

  1. 0.0.0.0 ile Dinleyen Servisler: Veritabanları (MySQL, PostgreSQL, Redis) ve önbellek servisleri (Memcached) asla 0.0.0.0 dinlememeli; sadece 127.0.0.1 veya dahili VPN IP’sine bağlanmalıdır.
  2. 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> ve sudo systemctl disable <servis>).
  3. 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.

Tags , , , , , ,

How can we help?