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ımlayabilir, yanlış yapılandırmaları tespit edebilir ve ciddi güvenlik açıklarına dönüşmeden gereksiz saldırı yüzeylerini ortadan kaldırabilirsiniz.
Yüksek trafikli bir uygulamayı VPS Hosting planında çalıştırıyor olsanız da veya bir dizi bare-metal makineyi yönetiyor olsanız, Linux sunucunuzun ağ maruziyetini anlamak zorunludur. Bu kılavuz, Linux’ta port denetimi için en yaygın olarak kullanılan iki komut satırı aracı olan netstat ve ss ile birlikte ek araçlar ve gerçek dünya en iyi uygulamalarının kapsamlı, teknik olarak doğru bir açıklamasını sağlar.
İçindekiler
- Portları ve Türlerini Anlamak
- netstat ile Portları Kontrol Etmek
- ss ile Portları Kontrol Etmek
- netstat vs. ss Karşılaştırması
- Açık Portları Kontrol Etmek için Diğer Araçlar
- Açık Port Yönetimi için Güvenlik En İyi Uygulamaları
- Sonuç
1. Portları ve Türlerini Anlamak {#understanding-ports}
Araçların kendisine dalmadan önce, portların ne olduğu, nasıl kategorize edildikleri ve neden izlenmelerinin önemli olduğu konusunda net bir anlayış oluşturmak önemlidir.
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 etkin bir bağlantı vardır.
- TIME_WAIT — Bağlantı kapanıyor; sistem uzak uçtan 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ı tabanlı, güvenilir, hata denetimi ve garantili teslimatla. 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 olmadan. DNS, NTP, DHCP ve akış hizmetleri tarafından kullanılır.
2. netstat ile Portları Kontrol Etmek {#netstat}
netstat Nedir?
netstat (ağ istatistikleri), etkin ağ bağlantılarını, yönlendirme tablolarını, arayüz istatistiklerini ve dinleyen portları görüntüleyen 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 bildiği ortamlarda.
netstat Kurulumu
netstat, birçok modern dağıtımda varsayılan olarak yüklü olmayan net-tools paketinin bir parçasıdır. Aşağıdaki gibi yükleyin:
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 Dinleyen TCP ve UDP Portlarını Kontrol Etmek
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 dinleyen soketleri 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ı okumak:
- Proto — Kullanımdaki 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 (etkin bağlantısı olmayan dinleyen portlar için
0.0.0.0:*olarak gösterilir). - State — Bağlantı durumu (
LISTEN,ESTABLISHED,TIME_WAIT, vb.).
İşlem Bilgisini Dahil Etmek
Her dinleyen portun sahibi olan işlemi görmek için -p bayrağını ekleyin:
sudo netstat -tulnpİşlem bilgisiyle ö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 kullanıcınızın 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ı Filtrelemek
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ülemek (Yalnızca Dinleyenler Değil)
Tüm etkin bağlantıları görmek için, kurulu olanlar da dahil olmak üzere, -l bayrağını kaldırın:
sudo netstat -tunpYönlendirme Tablosunu Görüntülemek
sudo netstat -rAğ Arayüzü İstatistiklerini Görüntülemek
sudo netstat -i3. ss ile Portları Kontrol Etmek {#ss}
ss Nedir?
ss (soket istatistikleri), iproute2 paketinin bir parçası olarak geliştirilen netstat için modern yedektir. Netlink soketleri aracılığıyla doğrudan Linux çekirdeğiyle iletişim kurarak, özellikle binlerce eşzamanlı bağlantısı olan sistemlerde netstat den önemli ölçüde daha hızlı ve verimli hale gelir.
ss neredeyse tüm modern Linux dağıtımlarında varsayılan olarak yüklüdür; Ubuntu 18.04+, CentOS 7+, Debian 9+ ve türevleri dahil.
Temel ss Söz Dizimi
ss [options] [filter]Tüm Dinleyen TCP ve UDP Portlarını Kontrol Etmek
ss -tulnBayraklar netstat ile aynı anlama sahiptir:
| Bayrak | Anlamı |
|---|---|
-t | TCP soketlerini göster |
-u | UDP soketlerini göster |
-l | Yalnızca dinleyen 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 Etmek
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 Filtrelemek
Yalnızca dinleyen TCP portlarını göster:
ss -tlYalnızca dinleyen 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 nin en güçlü özelliklerinden biri, port, adres, durum ve daha fazlasına göre filtreleme yapmanıza izin veren yerleşik ifade tabanlı filtrelemedir — grep ye güvenmeden.
Belirli 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 olan 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ülemek
ss ayrıca soket başına ayrıntılı bellek kullanımını gösterebilir; bu, performans sorunlarını tanılamak için yararlıdır:
ss -tmZamanlayıcı Bilgisini Görüntülemek
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 vs. ss Karşılaştırması {#comparison}
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/ den okur) | Daha hızlı (Netlink çekirdek arayüzünü kullanır) |
| Ölçekte performans | Binlerce bağlantıyla bozulur | Büyük bağlantı sayılarını verimli bir şekilde işler |
| Gelişmiş filtreleme | grep ye borulama gerektirir | Yerleşik ifade tabanlı filtreleme |
| Çıktı detayı | İyi | Daha ayrıntılı (bellek, zamanlayıcılar, 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öneticilere tanıdık | Biraz farklı söz dizimi ancak iyi belgelenmiş |
netstat Ne Zaman Kullanılır
- Eski Linux sistemlerini yönetirken (CentOS 6, Debian 7, vb.)
sskullanılamayabilir. - Zaten
netstatsöz dizimini kullanan betikler veya belgelerle çalışırken. - Çıktı biçimine daha rahat olduğunuzda ve gelişmiş filtrelemeye ihtiyacınız olmadığında.
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ı olan sunucuları yönetirken — örneğin ağır yük altında Dedicated Servers üzerinde çalışanlar.
- Gelişmiş filtreleme, zamanlayıcı bilgisi veya soket bellek istatistiklerine ihtiyacınız olduğunda.
- Performansın önemli olduğu otomasyon ve betik oluşturma için.
5. Açık Portları Kontrol Etmek için Diğer Araçlar {#other-tools}
netstat ve ss ötesinde, Linux’ta port denetimi 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 ele alır (Linux’un “her şey bir dosyadır” felsefesiyle tutarlı) ve hangi işlemin belirli bir portu açık tuttuğunu gösterebilir.
lsof yükle:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yHangi işlemin port 80’i kullandığını kontrol et:
sudo lsof -i :80Hangi işlemin port 443’ü kullandığını kontrol et:
sudo lsof -i :443Tüm ağ bağlantılarını listele:
sudo lsof -iTüm TCP dinleyen soketlerini listele:
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 — Ağ Haritacısı
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 den farklı olarak (yerel sistemi inceleyen), nmap hem yerel hem de uzak ana bilgisayarları tarayabilir.
nmap yükle:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -ylocalhost’ta tüm TCP portlarını tara:
sudo nmap -sT localhostİşletim sistemi algılamasıyla açık portları tara:
sudo nmap -sT -O localhostBelirli bir port aralığını tara:
sudo nmap -p 1-1024 localhostUDP portlarını tara (root gerektirir):
sudo nmap -sU localhostUzak bir sunucuyu tara:
sudo nmap -sT 203.0.113.50> Önemli: Yalnızca sahip olduğunuz veya tarama izni aldığınız 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 Çekirdek Arayüzü
Betik oluşturma amaçları için, port bilgilerini doğrudan Linux çekirdeğ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 de adreslerin ve portların onaltılık olarak görüntülendiğini ve insan tarafından okunabilir hale getirmek için dönüştürülmesi gerektiğini unutmayın. ss ve netstat gibi araçlar bu verileri otomatik olarak ayrıştırır.
