Linux’ta netstat ve ss Kullanarak Açık ve Dinleyen Portları Kontrol Etme
Bir Linux sisteminde açık ve dinleyen portları izlemek, sunucu güvenliğini korumak, ağ sorunlarını tanılamak ve altyapınızı etkili bir şekilde yönetmek için en kritik uygulamalardan biridir. Hangi portların açık olduğunu ve hangi hizmetlerin bunlara bağlı olduğunu düzenli olarak denetleyerek, yetkisiz erişim denemelerini proaktif olarak tanıyabilir, yanlış yapılandırmaları tespit edebilir ve ciddi güvenlik açıklarına dönüşmeden önce gereksiz saldırı yüzeylerini ortadan kaldırabilirsiniz.
İster bir VPS Hosting planında yüksek trafikli bir uygulama çalıştırıyor olun ister bir dizi bare-metal makineyi yönetiyor olun, Linux sunucunuzun ağ maruziyetini anlamak kaçınılmazdır. Bu kılavuz, Linux’ta port incelemesi için en yaygın olarak kullanılan iki komut satırı aracı olan netstat ve ss kullanımının kapsamlı ve teknik olarak doğru bir açıklamasını, ek araçları ve gerçek dünya en iyi uygulamalarını sağlar.
1. Portları ve Türlerini Anlamak
Araçların kendisine geçmeden önce, portların ne olduğunu, nasıl kategorize edildiklerini ve neden izlenmelerinin önemli olduğunu net bir şekilde anlamak gerekir.
Ağ Portu Nedir?
Ağ portu, bir ana bilgisayardaki belirli bir işlem veya hizmetle ilişkili mantıksal bir iletişim uç noktasıdır. Portlar, tek bir IP adresine sahip bir sunucunun aynı anda birden fazla ağ hizmetini çalıştırmasını sağlar — örneğin, port 80’de bir web sunucusu, port 22’de bir SSH daemon’u ve port 3306’da bir veritabanı.
Port Kategorileri
| Aralık | Kategori | Açıklama |
|---|---|---|
| 0–1023 | İyi Bilinen Portlar | Standart sistem hizmetleri için ayrılmış (HTTP, SSH, FTP, vb.) |
| 1024–49151 | Kayıtlı Portlar | Uygulamalar ve ara yazılım tarafından kullanılır (MySQL, PostgreSQL, vb.) |
| 49152–65535 | Dinamik/Geçici Portlar | Giden istemci bağlantıları için geçici olarak atanır |
Karşılaşacağınız Port Durumları
- LISTEN — Port açıktır ve bir hizmet gelen bağlantıları aktif olarak beklemektedir.
- ESTABLISHED — İki uç nokta arasında aktif bir bağlantı vardır.
- TIME_WAIT — Bağlantı kapanmaktadır; sistem uzak uçun son onayı aldığından emin olmak için beklemektedir.
- CLOSE_WAIT — Uzak uç bağlantıyı kapatmıştır; yerel uygulama henüz kendi tarafını kapatmamıştır.
Taşıma Protokolleri
- TCP (Transmission Control Protocol): Bağlantı yönelimli, güvenilir, hata denetimi ve garantili teslimat ile. HTTP, HTTPS, SSH, FTP ve çoğu uygulama katmanı protokolü tarafından kullanılır.
- UDP (User Datagram Protocol): Bağlantısız, daha hızlı, ancak teslimat garantisi olmaksızın. DNS, NTP, DHCP ve akış hizmetleri tarafından kullanılır.
2. netstat ile Portları Kontrol Etme
netstat Nedir?
netstat (network statistics), etkin ağ bağlantılarını, yönlendirme tablolarını, arayüz istatistiklerini ve dinleme portlarını gösteren klasik bir komut satırı yardımcı programıdır. Modern Linux dağıtımlarında ss lehine resmi olarak kullanımdan kaldırılmış olsa da, netstat yaygın olarak dağıtılmaya devam etmektedir — özellikle eski sistemlerde ve yöneticilerin söz dizimini derinlemesine bildikleri ortamlarda.
netstat Kurulumu
netstat, birçok modern dağıtımda artık varsayılan olarak yüklü olmayan net-tools paketinin bir parçasıdır. Aşağıdaki gibi kurun:
Debian / Ubuntu:
sudo apt update && sudo apt install net-tools -yCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch Linux:
sudo pacman -S net-toolsTemel netstat Söz Dizimi
sudo netstat [options]Tüm Dinleme TCP ve UDP Portlarını Kontrol Etme
sudo netstat -tulnBayrak açıklaması:
| Bayrak | Anlamı |
|---|---|
-t | TCP bağlantılarını ve portlarını görüntüle |
-u | UDP bağlantılarını ve portlarını görüntüle |
-l | Yalnızca dinleme soketlerini göster (bağlantı bekleyen portlar) |
-n | Sayısal IP adreslerini ve port numaralarını görüntüle (hız için DNS çözümlemesini atla) |
Örnek çıktı:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*Çıktıyı okuma:
- Proto — Kullanılan protokol (tcp, udp, tcp6, udp6).
- Local Address — Hizmetin dinlediği IP adresi ve port numarası.
0.0.0.0hizmetin tüm kullanılabilir arayüzlerde dinlediği anlamına gelir;127.0.0.1yalnızca yerel olarak erişilebilir olduğu anlamına gelir. - Foreign Address — Uzak istemcinin adresi (dinleme portları için etkin bağlantı olmadığında
0.0.0.0:*olarak gösterilir). - State — Bağlantı durumu (
LISTEN,ESTABLISHED,TIME_WAIT, vb.).
İşlem Bilgisini Dahil Etme
Her dinleme portunun sahibi olan işlemi görmek için -p bayrağını ekleyin:
sudo netstat -tulnpİşlem bilgisi ile örnek çıktı:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2847/nginx
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3102/mysqld> Not: Yalnızca kendi işlemleriniz değil, tüm kullanıcıların işlem adlarını görmek için bu komutu sudo ile çalıştırmanız gerekir.
Belirli Portlar veya Hizmetler için Çıktıyı Filtreleme
Sonuçları belirli bir porta veya hizmete daraltmak için grep kullanın:
# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"
# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"
# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"
# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"Tüm Etkin Bağlantıları Görüntüleme (Yalnızca Dinleme Değil)
Kurulan olanlar da dahil olmak üzere tüm etkin bağlantıları görmek için -l bayrağını kaldırın:
sudo netstat -tunpYönlendirme Tablosunu Görüntüleme
sudo netstat -rAğ Arayüzü İstatistiklerini Görüntüleme
sudo netstat -i3. ss ile Portları Kontrol Etme
ss Nedir?
ss (socket statistics), netstat için modern bir yedek olup, iproute2 paketinin bir parçası olarak geliştirilmiştir. Linux kernel ile Netlink soketleri aracılığıyla doğrudan iletişim kurarak, özellikle binlerce eşzamanlı bağlantısı olan sistemlerde netstat ile karşılaştırıldığında önemli ölçüde daha hızlı ve verimlidir.
ss Ubuntu 18.04+, CentOS 7+, Debian 9+ ve türevleri dahil olmak üzere neredeyse tüm modern Linux dağıtımlarında varsayılan olarak yüklüdür.
Temel ss Sözdizimi
ss [options] [filter]Tüm Dinleme Yapan TCP ve UDP Portlarını Kontrol Etme
ss -tulnBayraklar netstat ile aynı anlamda:
| Bayrak | Anlamı |
|---|---|
-t | TCP soketlerini göster |
-u | UDP soketlerini göster |
-l | Yalnızca dinleme yapan soketleri göster |
-n | Sayısal adresleri göster (DNS çözümlemesi yok) |
Örnek çıktı:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*İşlem Bilgisini Dahil Etme
sudo ss -tulnpÖ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=1023,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2847,fd=6))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=3102,fd=21))Protokole Göre Filtreleme
Yalnızca dinleme yapan TCP portlarını göster:
ss -tlYalnızca dinleme yapan UDP portlarını göster:
ss -ulTüm TCP bağlantılarını göster (kurulu olanlar dahil):
ss -tss ile Gelişmiş Filtreleme
ss en güçlü özelliklerinden biri, port, adres, durum ve daha fazlasına göre filtreleme yapmanıza olanak tanıyan yerleşik ifade tabanlı filtrelemedir — grep kullanmaya gerek kalmaz.
Belirli bir port numarasına göre filtrele:
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Hedef porta göre filtrele:
ss -tuln dport = :3306ESTABLISHED durumundaki tüm soketleri göster:
ss -t state establishedLISTEN durumundaki tüm soketleri göster:
ss -t state listeningKaynak IP adresine göre filtrele:
ss -tuln src 192.168.1.100Belirli bir uzak ana bilgisayara bağlantıları göster:
ss -t dst 203.0.113.50Birden fazla filtreyi birleştir:
ss -t state established '( dport = :443 or sport = :443 )'Soket Bellek Kullanımını Görüntüleme
ss ayrıca soket başına ayrıntılı bellek kullanımını gösterebilir, bu da performans sorunlarını tanılamak için kullanışlıdır:
ss -tmZamanlayıcı Bilgisini Görüntüleme
ss -toBu, TCP bağlantıları için yeniden iletim zamanlayıcılarını ve canlı tutma zamanlayıcılarını gösterir; bu, bağlantı kararlılığı sorunlarını tanılamak için çok değerlidir.
4. netstat ve ss Karşılaştırması
Her iki araç da aynı temel amacı gerçekleştirir, ancak seçiminizi yönlendirmesi gereken anlamlı farklar vardır:
| Özellik | netstat | ss |
|---|---|---|
| Paket | net-tools (genellikle önceden yüklü değil) | iproute2 (modern dağıtımlarda önceden yüklü) |
| Hız | Daha yavaş (/proc/net/ dosyasından okur) | Daha hızlı (Netlink kernel arayüzünü kullanır) |
| Ölçekte performans | Binlerce bağlantı ile kötüleşir | Büyük bağlantı sayılarını verimli şekilde işler |
| Gelişmiş filtreleme | grep ile yönlendirme gerektirir | Yerleşik ifade tabanlı filtreleme |
| Çıktı detayı | İyi | Daha detaylı (bellek, timerlar, vb.) |
| IPv6 desteği | Yeterli | Mükemmel |
| Bakım durumu | Kullanımdan kaldırıldı | Aktif olarak bakımı yapılıyor |
| Öğrenme eğrisi | Uzun süredir yönetici olan kişilere tanıdık | Biraz farklı sözdizimi ama iyi belgelenmiş |
netstat Ne Zaman Kullanılır
- Eski Linux sistemlerini yönetirken (CentOS 6, Debian 7, vb.)
ssmevcut olmayabilir. - Zaten
netstatsözdizimini kullanan betikler veya belgelerle çalışırken. - Çıktı formatına daha aşina olduğunuzda ve gelişmiş filtrelemeye ihtiyaç duymadığınızda.
ss Ne Zaman Kullanılır
- Herhangi bir modern Linux dağıtımında (Ubuntu 18.04+, CentOS 7+, Debian 9+ ve daha yeni).
- Yüksek hacimli eşzamanlı bağlantıları yönetirken — örneğin Dedicated Servers üzerinde ağır yük altında çalışanlar.
- Gelişmiş filtreleme, timer bilgisi veya soket bellek istatistiklerine ihtiyaç duyduğunuzda.
- Performansın önemli olduğu otomasyon ve betik yazımı için.
5. Açık Portları Kontrol Etmek için Diğer Araçlar
netstat ve ss dışında, Linux’ta port incelemesi ve ağ analizi için yararlı olan birkaç başka yardımcı program vardır.
lsof — Açık Dosyaları Listele (Soketler Dahil)
lsof (Açık Dosyaları Listele), ağ soketlerini dosya olarak değerlendirir (Linux’un “her şey bir dosyadır” felsefesiyle tutarlı) ve hangi işlemin belirli bir portu açık tuttuğunu gösterebilir.
lsof’u yükleyin:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yPort 80’i hangi işlemin kullandığını kontrol edin:
sudo lsof -i :80Port 443’ü hangi işlemin kullandığını kontrol edin:
sudo lsof -i :443Tüm ağ bağlantılarını listeleyin:
sudo lsof -iTüm TCP dinleme soketlerini listeleyin:
sudo lsof -i TCP -s TCP:LISTENÖrnek çıktı:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2847 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 2848 www-data 6u IPv4 23456 0t0 TCP *:http (LISTEN)nmap — Network Mapper
nmap güvenlik denetimi, ağ keşfi ve port taraması için kullanılan güçlü bir ağ tarama aracıdır. ss ve netstat (yerel sistemi inceleyen) aksine, nmap hem yerel hem de uzak ana bilgisayarları tarayabilir.
nmap’i yükleyin:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -ylocalhost’taki tüm TCP portlarını tarayın:
sudo nmap -sT localhostİşletim sistemi algılaması ile açık portları tarayın:
sudo nmap -sT -O localhostBelirli bir port aralığını tarayın:
sudo nmap -p 1-1024 localhostUDP portlarını tarayın (root gerektirir):
sudo nmap -sU localhostUzak bir sunucuyu tarayın:
sudo nmap -sT 203.0.113.50> Önemli: Yalnızca sahip olduğunuz veya açık izniniz olan sistemleri tarayın. Yetkisiz port taraması yasaları ve hizmet şartlarını ihlal edebilir.
fuser — Dosya veya Soket Kullanan İşlemleri Tanımla
# Find which process is using port 80 (TCP)
sudo fuser 80/tcp
# Find which process is using port 53 (UDP)
sudo fuser 53/udp/proc/net/ — Doğrudan Kernel Arayüzü
Komut dosyası yazma amaçları için, port bilgilerini doğrudan Linux kernel’inin sanal dosya sisteminden okuyabilirsiniz:
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udp/proc/net/tcp içindeki adresler ve portlar onaltılık (hexadecimal) olarak görüntülenir ve insan tarafından okunabilir hale getirilmesi için dönüştürülmesi gerekir. ss ve netstat gibi araçlar bu verileri otomatik olarak ayrıştırır.
6. Açık Port Yönetimi için Güvenlik En İyi Uygulamaları
Açık portları nasıl kontrol edeceğinizi bilmek savaşın sadece yarısıdır. Bu bilgiye göre hareket etmek sunucunuzu güvende tutar. İşte her Linux yöneticisinin izlemesi gereken uygulanabilir en iyi uygulamalar:
En Az Maruz Kalma Prensibi
Yalnızca uygulamanızın işlev görmesi için kesinlikle gerekli olan portları açığa çıkarın. Her açık port potansiyel bir saldırı vektörüdür. Dinleme portlarınızı düzenli olarak denetleyin ve herkese açık olması gerekmeyen her şeyi kapatın veya güvenlik duvarı arkasına alın.
Hizmetleri Belirli Arayüzlere Bağlayın
Gerekli olmadığı sürece hizmetleri 0.0.0.0 (tüm arayüzler) öğesine bağlamaktan kaçının. Örneğin, bir MySQL veritabanı sunucusu yalnızca yerel olarak erişiliyorsa 127.0.0.1 öğesinde dinlemelidir:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Güvenlik Duvarı Kullanın
Açık portlara erişimi IP adresi, alt ağ veya ağ arayüzüne göre kısıtlamak için ufw (Ubuntu) veya firewalld / iptables (CentOS/RHEL) kullanın:
# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22
# Deny all other access to port 22
sudo ufw deny 22Dinleme Portlarını Düzenli Olarak Denetleyin
Cron işleri veya izleme araçlarını kullanarak düzenli port denetimleri planlayın. Aniden yeni bir dinleme portu, tehlikeye atılmış bir hizmeti, yanlış yapılandırmayı veya en kötü durumda kötü amaçlı yazılımı gösterebilir:
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtHizmetleri SSL/TLS ile Güvenli Hale Getirin
İnternete açık olan herhangi bir hizmet (web sunucuları, posta sunucuları, kontrol panelleri) şifreli bağlantılar kullanmalıdır. Açık portlarınızı geçerli SSL Sertifikaları ile eşleştirerek aktarım sırasında verileri koruyun ve ortadaki adam saldırılarını önleyin.
Beklenmeyen Değişiklikleri İzleyin
Yeni işlemler portlarda dinlemeye başladığında sizi uyarmak için AIDE, Tripwire veya auditd gibi izinsiz giriş algılama araçlarını kullanın. Kapsamlı görünürlük için merkezi günlüğe kaydetme (örneğin, ELK Stack, Graylog) ile entegre edin.
Kullanılmayan Hizmetleri Devre Dışı Bırakın
Bir hizmet gerekli değilse, onu durdurun ve önyükleme sırasında başlamasını devre dışı bırakın:
# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>Hızlı Referans: En Kullanışlı Komutlar
| Görev | netstat Komutu | ss Komutu | |
|---|---|---|---|
| Tüm dinleme TCP/UDP portları | sudo netstat -tuln | sudo ss -tuln | |
| Tüm dinleme portları PID’ler ile | sudo netstat -tulnp | sudo ss -tulnp | |
| Yalnızca dinleme TCP portları | sudo netstat -tln | sudo ss -tl | |
| Yalnızca dinleme UDP portları | sudo netstat -uln | sudo ss -ul | |
| Port 80’e göre filtrele | `sudo netstat -tuln | grep ":80"` | sudo ss -tuln sport = :80 |
| Tüm kurulan bağlantılar | sudo netstat -tunp | sudo ss -t state established | |
| Yönlendirme tablosunu göster | sudo netstat -r | ip route show |
Sonuç
Açık ve dinleyen portları izlemek, herhangi bir Linux sistem yöneticisi veya DevOps mühendisi için temel bir beceridir. İster bir üretim web sunucusunu güvenli hale getiriyor olun, ister bir bağlantı sorununu gideriyor olun, ister rutin bir güvenlik denetimi yapıyor olun, netstat ve ss sisteminizin ağ maruziyeti hakkında anında, işlem yapılabilir görünürlük sağlar.
Temel çıkarımları özetlemek gerekirse:
sskullanın herhangi bir modern Linux dağıtımında birincil araç olarak — daha hızlı, daha zengin özelliklere sahip ve aktif olarak bakımı yapılmaktadır.netstatkullanın eski sistemlerle çalışırken veya mevcut betikler ve iş akışları buna bağlı olduğunda.lsofvenmapile tamamlayın daha derin işlem düzeyinde inceleme ve harici port taraması için.- Her zaman bulgularınız üzerine hareket edin — gereksiz portları kapatın, hizmetleri doğru arayüzlere bağlayın ve güvenlik duvarı kurallarını uygulayın.
- Açığa çıkan hizmetleri güvenli hale getirin uygun SSL Sertifikaları ve erişim kontrolleri ile.
Bu güvenlik uygulamalarını uygulamak için tam root erişimi sağlayan bir barındırma ortamı arıyorsanız, AlexHost’un VPS Barındırma planları Linux sunucu yapılandırması üzerinde tam kontrol sağlar — güvenlik duvarı yönetimi, hizmet sertleştirme ve ağ izleme dahil. Maksimum performans ve özel kaynaklar gereken takımlar için, Özel Sunucularımız kurumsal düzey güvenlik işlemleri için gereken ham güç ve izolasyon sağlar. Tanıdık bir arayüzle yönetilen bir ortamı tercih ediyorsanız, kontrol kaybetmeden kolaylaştırılmış sunucu yönetimi için cPanel ile VPS seçeneklerimizi keşfedin.
Düzenli port denetimi, sertleştirilmiş bir sunucu yapılandırması ile birleştirildiğinde, yetkisiz erişim ve veri ihlallerine karşı en etkili savunmalardan biridir. Bunu sistem yönetimi uygulamanızın rutin bir parçası haline getirin.
tasarruf edin