RDP Monster

Linux'ta Açık Portları Kontrol Etme: ss, netstat, lsof, nmap

Linux'ta Açık Portları Kontrol Etme: ss, netstat, lsof, nmap

ss ile açık portları kontrol etmek: modern standart

Bir Linux sisteminde her açık port, bir sürecin çekirdekten o port üzerinde dinleme talep etmesi sayesinde vardır. Bu soketleri bugün size gösteren araç, her modern dağıtımda kurulu olan iproute2 paketinin parçası ss (socket statistics) aracıdır. Tek bir komut çoğu durumu kapsar:

sudo ss -tulpn

Her bayrağın tek bir görevi var:

  • -t: TCP soketlerini dahil eder
  • -u: UDP soketlerini dahil eder
  • -l: yalnızca dinlemede olan soketleri gösterir (kurulu bağlantıları da görmek için bu bayrağı kaldırın)
  • -p: her soketin sahibi olan süreci gösterir; sudo istemenizin nedeni budur, çünkü onsuz yalnızca kendi süreçlerinizi görürsünüz
  • -n: sayısal çıktı, yani :ssh yerine :22 yazar ve ters DNS sorgularını atlar, bu da komutu hızlandırır

Tipik bir çıktı satırı şöyle görünür:

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=712,fd=3))

Güvenlik açısından önemli olan kolon Local Address kolonudur. 0.0.0.0:22, soketin her IPv4 arayüzünde bağlantı kabul ettiği anlamına gelir, [::]:22 bunun IPv6 karşılığıdır ve 127.0.0.1:5432 servisin yalnızca loopback üzerinden yanıt verdiğini, ağdan hiçbir şekilde erişilemediğini gösterir.

Akılda tutulmaya değer birkaç varyasyon:

ss -tlnp                      # TCP listeners only
ss -ulnp                      # UDP listeners only
sudo ss -tlnp 'sport = :22'   # who is listening on port 22
ss -tn state established      # active TCP connections right now

netstat hâlâ çalışıyor ama artık eski bir araç

Sayısız eğitim içeriği hâlâ netstat -tulpn diyor ve bayraklar yukarıdaki ss komutuyla birebir örtüştüğü için alışkanlığınız her iki yöne de aktarılıyor. Fark motor kapağının altında: netstat, bakım modundaki net-tools paketine ait ve /proc dosyalarını okuyor; ss ise çekirdeği doğrudan netlink üzerinden sorguluyor, bu yüzden binlerce soketle uğraşan makinelerde belirgin şekilde daha hızlı.

Güncel dağıtımların çoğu net-tools paketini artık varsayılan olarak sunmuyor. Yine de gerekiyorsa:

sudo netstat -tulpn

# if the command is missing:
sudo apt install net-tools    # Debian / Ubuntu
sudo dnf install net-tools    # RHEL / Fedora

Yeni bir sunucuya kurmak için hiçbir neden yok. netstat aracını devraldığınız eski sistemler için bir uyumluluk yedeği olarak görün, diğer her yerde ss kullanın.

lsof: portlara süreçler penceresinden bakmak

Linux’ta ağ soketleri dahil her şey bir dosyadır, dolayısıyla lsof (list open files) aynı zamanda bir port inceleme aracıdır. Portlardan çok süreçler üzerinden düşündüğünüzde parlar:

sudo lsof -i -P -n                  # every process with a network socket
sudo lsof -iTCP -sTCP:LISTEN -P -n  # TCP listeners only
sudo lsof -i :443                   # everything touching port 443

-P ve -n port adı ve ana bilgisayar adı çözümlemesini kapatır; ss -tulpn içindeki -n ile aynı fikir. Üçüncü biçim günlük kullanımda olan: aracı bir porta yönlendirin, komut adını, PID’i, kullanıcıyı ve dosya tanımlayıcısını tek bir okunabilir tabloda alın. ss aracından farklı olarak lsof, her sürecin dinleyicilerinin yanı sıra kurulu bağlantılarını da listeler; bu da bir servisin yalnızca var olduğunu değil, o anda kimin onunla konuştuğunu bilmek istediğinizde işe yarar.

nmap: dinlemede olmak, erişilebilir olmakla aynı şey değil

Buraya kadar her şey tek bir soruyu yanıtlıyor: bu makinede ne dinliyor. Güvenlik için daha önemli olan başka bir soru var: dışarıdan gerçekten neye erişilebiliyor. İki liste nadiren birebir aynıdır, çünkü ana bilgisayar güvenlik duvarları, sağlayıcı seviyesindeki filtreleme ve yalnızca loopback’e yapılan bağlamalar aralarında boşluklar yaratır. Kendinizi kendinizden taramanın pek bir şey kanıtlamamasının nedeni de bu: nmap localhost loopback arayüzü üzerinden gider, harici güvenlik duvarı kurallarınızı tamamen atlar ve hiçbir saldırganın asla erişemeyeceği servisleri mutlulukla raporlar.

Taramayı farklı bir makineden, sunucunun genel IP adresine yönelterek çalıştırın:

nmap 203.0.113.10                            # top 1000 TCP ports
nmap -p- 203.0.113.10                        # all 65535 TCP ports
sudo nmap -sU --top-ports 100 203.0.113.10   # common UDP ports (slow)

nmap, anlamayı hak eden üç durum bildirir: open bir servisin yanıt verdiği anlamına gelir, closed paketin ulaştığı ama orada hiçbir şeyin dinlemediği anlamına gelir, filtered ise paketin sessizce düşürüldüğünü, neredeyse her zaman bir güvenlik duvarı tarafından, gösterir. ss tarafında LISTEN görünen ama uzaktan yapılan nmap taramasında filtered raporlanan bir port, tam olarak çalışan bir güvenlik duvarının görüntüsüdür. İstisnasız geçerli tek bir kural var: yalnızca sahibi olduğunuz veya test etmek için açıkça yetkilendirildiğiniz sistemleri tarayın.

Bir portu tam olarak hangi sürecin tuttuğunu bulmak

Diyelim ki bir şey 8080 portuna oturmuş ve uygulamanız bağlanamıyor. PID’e giden üç yol var:

sudo ss -tlnp 'sport = :8080'
sudo lsof -i :8080
sudo fuser -v 8080/tcp

fuser en derli toplu olanı: PID’i yazdırır, -v ise kullanıcı ve komut adını ekler. Suçluyu fuser -k 8080/tcp ile doğrudan öldürebilir bile, ancak bu servis seviyesinde hiçbir temizlik yapmadan sinyal gönderir; dolayısıyla son çare olarak görün. Bir PID edindikten sonra ps -fp PID komutu tam komut satırını gösterir, systemctl status PID ise onu hangi systemd biriminin başlattığını söyler.

Hiç aracınız olmadığında (örneğin son derece sade bir konteyner imajında) çekirdeğin kendi tablosu her zaman oradadır: cat /proc/net/tcp. Portlar onaltılık tabanda görünür (0016 = 22) ve 0A durumu LISTEN anlamına gelir. Bu ham tablo, diğer araçların sizin için ayrıştırıp biçimlendirdiği verinin ta kendisidir.

Soket bağlayan her şey, bir veritabanı da olsa bir proxy yığını da olsa, bu listelerde aynı şekilde görünür. Örneğin bir V2Ray inbound bağlantısı, yapılandırdığınız portta dinleyen sıradan bir dinleyiciden başka bir şey değildir; ayrıntılar V2Ray protokol rehberimizde.

Açık bir portu kapatmak: kill mi, güvenlik duvarı mı

Bir port, bir süreç onu dinlediği için açıktır; bu da size iki ayrı kol verir: dinleyiciyi kaldırmak veya erişilebilirliği engellemek. Bunlar birbirinin yerine geçmez ve önemli sistemlerde genellikle her ikisini de çekmelisiniz.

Temiz çözüm, soketin sahibi olan servisi durdurmak ve devre dışı bırakmaktır. PID’i öldürmek daha hızlı görünür ama nadiren kalıcı olur: systemd gözetimindeki servisleri otomatik olarak yeniden başlatır ve siz ss komutunu tekrar çalıştırmadan port geri gelir. kill komutunu elle başlattığınız süreçlere saklayın. Nelerin çalıştığını görmek ve ihtiyacınız olmayanları kapatmak için systemctl ile servisleri listeleme rehberimiz bu iş akışını baştan sona ele alıyor.

sudo systemctl stop cups
sudo systemctl disable cups

İkinci kolu güvenlik duvarı üstlenir. Ubuntu’da ufw’yi etkinleştirmeden önce SSH’a izin verin, aksi halde kendinizi makinenin dışında kilitlersiniz:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable

RHEL ailesi sistemlerde firewalld’nin varsayılan bölgesi zaten istenmeyen trafiği düşürür; daha önce açtığınız her şeyi firewall-cmd --permanent --remove-port=8080/tcp ve ardından firewall-cmd --reload ile kaldırın. Çözüm olmayan bir şey var: bir servisi standart dışı bir porta taşımak. Bu sizi yalnızca en tembel taramalardan saklar ve kayıtlarınızı sessizleştirir, ancak nmap -p- yeni portu dakikalar içinde bulur. Belirsizlik güvenlik değildir — portu kapatın ya da güvenlik duvarıyla engelleyin.

Yeni bir sunucu için beş dakikalık port denetimi

Yeni kurulmuş bir makinede ilk girişinizde envanteri sudo ss -tulpn ile çıkarın. Temiz bir minimal kurulum çok az şey göstermelidir: 22 portunda sshd ve systemd-resolved kullanan dağıtımlarda 127.0.0.53:53 üzerinde bir DNS stub servisi. Bunun dışındaki her şey bir açıklamayı hak eder. Ardından şu kontrol listesini uygulayın:

  1. Her dinleyiciyi süreç adı ve PID ile tanımlayın; talep etmediğiniz her servisi devre dışı bırakın.
  2. Her 0.0.0.0 veya [::] bağlamasını sorgulayın: veritabanları ve yönetim panelleri, ağa gerçekten hizmet vermeleri gerekmiyorsa 127.0.0.1 üzerinde durmalıdır.
  3. Yaygın portları bir bakışta tanıyın: 22 SSH, 80/443 web, 3306 MySQL, 5432 PostgreSQL, 6379 Redis. 3389 portu uzak masaüstüdür: Linux’ta bu, xrdp’nin çalıştığı anlamına gelir; bu portun dışa açıklığı ve sıkılaştırma kuralları RDP 3389 portu rehberimizin konusudur.
  4. Genel IP adresini kendi makinenizden nmap -p- ile tarayın ve sonucu ss listesiyle karşılaştırın; her uyuşmazlık ya işini yapan bir güvenlik duvarıdır ya da bir loopback bağlamasıdır.
  5. Yalnızca bilinçli olarak açığa çıkarmayı seçtiğiniz portlara izin veren, varsayılan olarak reddeden bir güvenlik duvarıyla bitirin.

İşte tüm araç kutusu, her biri tek satırda:

KomutGösterdiğiNe zaman kullanılır
sudo ss -tulpnDinlemede olan TCP/UDP soketleri ve sahibi olan süreçHer makinede günlük ilk bakış
netstat -tulpnEski net-tools üzerinden aynı görünümss bulunmayan eski sistemler
sudo lsof -i :PORTTek bir porttaki süreçler ve bağlantılarBir portu bir sürece ve dosyalarına bağlamak
sudo fuser -v PORT/tcpBir porta bağlı PID’lerHızlı PID sorgusu, betikleme
nmap SERVER_IP (uzaktan)Dışarıdan gerçekten erişilebilen portlarGüvenlik duvarını ve gerçek dışa açıklığı doğrulamak
cat /proc/net/tcpHam çekirdek soket tablosu (onaltılık)Hiç araç kurulu olmayan minimal konteynerler

Komutlar ancak gerçek root yetkisine sahip olduğunuz ve önemli hiçbir şeyin bozulamayacağı bir makinede refleks hâline gelir. rdp.monster’dan bir Linux VPS size tam olarak bu kum havuzunu verir: tam yönetici erişimi, ayrılmış CPU ve RAM, sınırsız (adil kullanım) bant genişliği, KYC yok ve sunucu ödeme onaylandıktan yaklaşık 10 saniye sonra çevrimiçi olur. Kahveniz soğumadan ilk ss -tulpn komutunuzu çalıştıracak kadar hızlı.

Sık sorulan sorular

Linux’ta açık portları kontrol etmek için root gerekir mi?

Portları listelemek için hayır, hangi sürecin sahibi olduğunu görmek için evet.
Herhangi bir kullanıcı ss -tuln komutunu çalıştırabilir veya /proc/net/tcp dosyasını okuyabilir, dolayısıyla dinlemede olan portların listesi hiçbir zaman gizli değildir. Sınır -p bayrağında: root olmadan ss, lsof ve fuser yalnızca kendi kullanıcınıza ait süreçleri gösterir, diğer soketler boş bir süreç kolonuyla görünür. nmap tarafında varsayılan SYN taraması (-sS) root gerektirir; yetkisiz alternatif, biraz daha gürültülü olsa da sorunsuz çalışan connect taramasıdır (-sT).

Uzak bir sunucuda belirli bir portun açık olup olmadığını nasıl kontrol ederim?

netcat kullanın: nc -zv host port anında yanıt verir.
nc -zv example.com 443 bir TCP bağlantısı kurmayı dener ve veri göndermeden başarı ya da başarısızlık bildirir. netcat yoksa düz Bash de bunu yapabilir: timeout 3 bash -c '</dev/tcp/example.com/443' && echo open. İkisi de yalnızca bir şeyin bağlantıyı kabul ettiğini kanıtlar. Hangi servisin yanıt verdiği veya sağlıklı olup olmadığı hakkında hiçbir şey söylemez. UDP için güvenilir bir hızlı test yoktur, çünkü sessiz bir port açık da filtrelenmiş de olabilir; orada nmap -sU kullanın.

ss bir portu dinlemede gösteriyor ama dışarıdan bağlanamıyorum, neden?

Soket loopback’e bağlıdır ya da bir güvenlik duvarı trafiği düşürüyordur.
Önce Local Address kolonuna bakın: 127.0.0.1:PORT veya [::1]:PORT servisin yalnızca yerel bağlantıları kabul ettiği anlamına gelir; bu kasıtlıdır ve veritabanlarında yaygındır. 0.0.0.0 adresine bağlıysa paketler yol üzerinde bir yerde filtreleniyordur: ufw, firewalld ya da düz nftables gibi bir ana bilgisayar güvenlik duvarı veya sağlayıcınızın kenar filtrelemesi. Harici bir nmap taramasının portu filtered olarak bildirmesi bir güvenlik duvarını doğrular; closed ise trafiğin ulaştığını ama o arayüzde hiçbir şeyin dinlemediğini gösterir.

Yeni bir Linux sunucusunda hangi portlar açık olmalı?

Bir tane: SSH. Temiz bir kurulumda bunun dışındaki her şey bir açıklamayı hak eder.
Minimal bir Debian, Ubuntu veya Rocky kurulumu ağa yalnızca 22 portunda sshd servisini açmalıdır. 127.0.0.53:53 üzerindeki stub DNS çözümleyicisi (systemd-resolved) normaldir ve dışarıdan erişilemez. Bulut imajları bazen bir ajan veya izleme servisi ekler. Her dinleyiciyi ss -tulpn ile tanımlayın ve talep etmediğiniz her şeyi devre dışı bırakın. Sonradan kurduğunuz her servis, ağa gerçekten hizmet vermesi gerekmiyorsa varsayılan olarak loopback üzerinde kalmalı ve güvenlik duvarı yalnızca herkese açık olması gerekenlere izin vermelidir.

Adrien Roche, Altyapı ve Hosting Editörü

Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.

Bayilik programımıza kaydolun

Bilgileriniz

Bir sorunuz varsa, contact us by clicking here !
Ad Soyad(Zorunlu)
E-posta adresinizi girin, şu adreste bir hesabınız olmalı: manager.rdp.monster !

Şirketiniz

Varsa web sitenizin adresini girin
Hizmetleri müşterilerinize nasıl satacağınızı kısaca açıklayın. Örneğin, forumlarda insanlarla konuşmak gibi.

Çerez kullanıyoruz !

Tarama deneyiminizi geliştirmek, kişiselleştirilmiş reklam veya içerik sunmak ve trafiğimizi analiz etmek için çerez kullanıyoruz. «Kabul Et»'e tıklayarak çerez kullanımımızı onaylarsınız.