Linux'ta Açık Portları Kontrol Etme: ss, netstat, lsof, nmap
- 15 Eylül 2026
- 09:00
- Yazar: Adrien Roche
- Güncellendi 3 Ekim 2026
- Ağ

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 -tulpnHer 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;sudoistemenizin nedeni budur, çünkü onsuz yalnızca kendi süreçlerinizi görürsünüz-n: sayısal çıktı, yani:sshyerine:22yazar 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 nownetstat 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 / FedoraYeni 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/tcpfuser 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 enableRHEL 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:
- Her dinleyiciyi süreç adı ve PID ile tanımlayın; talep etmediğiniz her servisi devre dışı bırakın.
- Her
0.0.0.0veya[::]bağlamasını sorgulayın: veritabanları ve yönetim panelleri, ağa gerçekten hizmet vermeleri gerekmiyorsa127.0.0.1üzerinde durmalıdır. - 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.
- Genel IP adresini kendi makinenizden
nmap -p-ile tarayın ve sonucusslistesiyle 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. - 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:
| Komut | Gösterdiği | Ne zaman kullanılır |
|---|---|---|
sudo ss -tulpn | Dinlemede olan TCP/UDP soketleri ve sahibi olan süreç | Her makinede günlük ilk bakış |
netstat -tulpn | Eski net-tools üzerinden aynı görünüm | ss bulunmayan eski sistemler |
sudo lsof -i :PORT | Tek bir porttaki süreçler ve bağlantılar | Bir portu bir sürece ve dosyalarına bağlamak |
sudo fuser -v PORT/tcp | Bir porta bağlı PID’ler | Hızlı PID sorgusu, betikleme |
nmap SERVER_IP (uzaktan) | Dışarıdan gerçekten erişilebilen portlar | Güvenlik duvarını ve gerçek dışa açıklığı doğrulamak |
cat /proc/net/tcp | Ham ç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?
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?
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?
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ı?
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.
İlgili yazılar




