15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
30.10.2024

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

  1. Portları ve Türlerini Anlamak
  2. netstat ile Portları Kontrol Etmek
  3. ss ile Portları Kontrol Etmek
  4. netstat vs. ss Karşılaştırması
  5. Açık Portları Kontrol Etmek için Diğer Araçlar
  6. Açık Port Yönetimi için Güvenlik En İyi Uygulamaları
  7. 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ıkKategoriAçıklama
0–1023İyi Bilinen PortlarStandart sistem hizmetleri için ayrılmış (HTTP, SSH, FTP, vb.)
1024–49151Kayıtlı PortlarUygulamalar ve ara yazılım tarafından kullanılır (MySQL, PostgreSQL, vb.)
49152–65535Dinamik/Geçici PortlarGiden 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 -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch Linux:

sudo pacman -S net-tools

Temel netstat Söz Dizimi

sudo netstat [options]

Tüm Dinleyen TCP ve UDP Portlarını Kontrol Etmek

sudo netstat -tuln

Bayrak açıklaması:

BayrakAnlamı
-tTCP bağlantılarını ve portlarını görüntüle
-uUDP bağlantılarını ve portlarını görüntüle
-lYalnızca dinleyen soketleri göster (bağlantı bekleyen portlar)
-nSayı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.0 hizmetin tüm kullanılabilir arayüzlerde dinlediği anlamına gelir; 127.0.0.1 yalnı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 -tunp

Yönlendirme Tablosunu Görüntülemek

sudo netstat -r

Ağ Arayüzü İstatistiklerini Görüntülemek

sudo netstat -i

3. 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 -tuln

Bayraklar netstat ile aynı anlama sahiptir:

BayrakAnlamı
-tTCP soketlerini göster
-uUDP soketlerini göster
-lYalnızca dinleyen soketleri göster
-nSayı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 -tl

Yalnızca dinleyen UDP portlarını göster:

ss -ul

Tüm TCP bağlantılarını göster (kurulu olanlar dahil):

ss -t

ss 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 = :22

Hedef porta göre filtrele:

ss -tuln dport = :3306

ESTABLISHED durumundaki tüm soketleri göster:

ss -t state established

LISTEN durumundaki tüm soketleri göster:

ss -t state listening

Kaynak IP adresine göre filtrele:

ss -tuln src 192.168.1.100

Belirli bir uzak ana bilgisayara olan bağlantıları göster:

ss -t dst 203.0.113.50

Birden 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 -tm

Zamanlayıcı Bilgisini Görüntülemek

ss -to

Bu, 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:

Özelliknetstatss
Paketnet-tools (genellikle önceden yüklü değil)iproute2 (modern dağıtımlarda önceden yüklü)
HızDaha yavaş (/proc/net/ den okur)Daha hızlı (Netlink çekirdek arayüzünü kullanır)
Ölçekte performansBinlerce bağlantıyla bozulurBüyük bağlantı sayılarını verimli bir şekilde işler
Gelişmiş filtrelemegrep ye borulama gerektirirYerleşik ifade tabanlı filtreleme
Çıktı detayıİyiDaha ayrıntılı (bellek, zamanlayıcılar, vb.)
IPv6 desteğiYeterliMükemmel
Bakım durumuKullanımdan kaldırıldıAktif olarak bakımı yapılıyor
Öğrenme eğrisiUzun süredir yöneticilere tanıdıkBiraz farklı söz dizimi ancak iyi belgelenmiş

netstat Ne Zaman Kullanılır

  • Eski Linux sistemlerini yönetirken (CentOS 6, Debian 7, vb.) ss kullanılamayabilir.
  • Zaten netstat sö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 -y

Hangi işlemin port 80’i kullandığını kontrol et:

sudo lsof -i :80

Hangi işlemin port 443’ü kullandığını kontrol et:

sudo lsof -i :443

Tüm ağ bağlantılarını listele:

sudo lsof -i

Tü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 -y

localhost’ta tüm TCP portlarını tara:

sudo nmap -sT localhost

İşletim sistemi algılamasıyla açık portları tara:

sudo nmap -sT -O localhost

Belirli bir port aralığını tara:

sudo nmap -p 1-1024 localhost

UDP portlarını tara (root gerektirir):

sudo nmap -sU localhost

Uzak 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.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın