Verificarea Porturilor Deschise și în Ascultare pe Linux Folosind netstat și ss
Monitorizarea porturilor deschise și în ascultare pe un sistem Linux este una dintre cele mai critice practici pentru menținerea securității serverului, diagnosticarea problemelor de rețea și gestionarea eficientă a infrastructurii. Prin auditarea regulată a porturilor deschise și a serviciilor legate de acestea, puteți identifica proactiv încercările de acces neautorizat, detecta configurații greșite și elimina suprafețele de atac inutile înainte ca acestea să devină vulnerabilități grave.
Indiferent dacă rulați o aplicație cu trafic ridicat pe un plan VPS Hosting sau gestionați o flotă de mașini bare-metal, înțelegerea expunerii rețelei a serverului Linux este obligatorie. Acest ghid oferă o prezentare cuprinzătoare și precis din punct de vedere tehnic a modului de utilizare a ambelor netstat și ss — cele două instrumente de linie de comandă cel mai utilizate pentru inspectarea porturilor pe Linux — împreună cu instrumente suplimentare și bune practici din lumea reală.
Cuprins
- Înțelegerea porturilor și tipurile acestora
- Verificarea porturilor cu netstat
- Verificarea porturilor cu ss
- Compararea netstat vs. ss
- Alte instrumente pentru verificarea porturilor deschise
- Bune practici de securitate pentru gestionarea porturilor deschise
- Concluzie
1. Înțelegerea porturilor și tipurile acestora {#understanding-ports}
Înainte de a aprofunda în instrumente, este important să stabilim o înțelegere clară a ceea ce sunt porturile, cum sunt categorizate și de ce monitorizarea lor este importantă.
Ce este un port de rețea?
Un port de rețea este un punct final de comunicație logic asociat cu un proces sau serviciu specific pe un gazdă. Porturile permit unui singur server cu o adresă IP să ruleze mai multe servicii în rețea simultan — de exemplu, un server web pe portul 80, un daemon SSH pe portul 22 și o bază de date pe portul 3306.
Categorii de porturi
| Interval | Categorie | Descriere |
|---|---|---|
| 0–1023 | Porturi cunoscute | Rezervate pentru serviciile standard ale sistemului (HTTP, SSH, FTP, etc.) |
| 1024–49151 | Porturi înregistrate | Utilizate de aplicații și middleware (MySQL, PostgreSQL, etc.) |
| 49152–65535 | Porturi dinamice/efemere | Atribuite temporar pentru conexiuni client de ieșire |
Stări de port pe care le veți întâlni
- LISTEN — Portul este deschis și un serviciu așteaptă activ conexiuni de intrare.
- ESTABLISHED — Există o conexiune activă între două puncte finale.
- TIME_WAIT — Conexiunea se închide; sistemul așteaptă pentru a se asigura că capătul distant a primit confirmarea finală.
- CLOSE_WAIT — Capătul distant a închis conexiunea; aplicația locală nu și-a închis încă partea.
Protocoale de transport
- TCP (Transmission Control Protocol): Orientat pe conexiune, fiabil, cu verificare de erori și livrare garantată. Utilizat de HTTP, HTTPS, SSH, FTP și majoritatea protocoalelor la nivel de aplicație.
- UDP (User Datagram Protocol): Fără conexiune, mai rapid, dar fără garanții de livrare. Utilizat de DNS, NTP, DHCP și serviciile de streaming.
2. Verificarea porturilor cu netstat {#netstat}
Ce este netstat?
netstat (statistici de rețea) este un utilitar clasic de linie de comandă care afișează conexiuni de rețea active, tabele de rutare, statistici de interfață și porturi în ascultare. Deși a fost oficial depreciat în favoarea ss pe distribuțiile Linux moderne, netstat rămâne larg implementat — mai ales pe sisteme moștenite și în medii în care administratorii sunt profund familiarizați cu sintaxa acestuia.
Instalarea netstat
netstat face parte din pachetul net-tools, care nu mai este instalat implicit pe multe distribuții moderne. Instalați-l după cum urmează:
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-toolsSintaxa de bază netstat
sudo netstat [options]Verificarea tuturor porturilor TCP și UDP în ascultare
sudo netstat -tulnDetalii despre steaguri:
| Steag | Semnificație |
|---|---|
-t | Afișează conexiuni și porturi TCP |
-u | Afișează conexiuni și porturi UDP |
-l | Afișează doar socket-uri în ascultare (porturi care așteaptă conexiuni) |
-n | Afișează adrese IP și numere de port numerice (omite rezoluția DNS pentru viteză) |
Exemplu de ieșire:
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:*Citirea ieșirii:
- Proto — Protocolul în uz (tcp, udp, tcp6, udp6).
- Local Address — Adresa IP și numărul portului pe care serviciul ascultă.
0.0.0.0înseamnă că serviciul ascultă pe toate interfețele disponibile;127.0.0.1înseamnă că este accesibil doar local. - Foreign Address — Adresa clientului la distanță (afișată ca
0.0.0.0:*pentru porturile în ascultare fără conexiune activă). - State — Starea conexiunii (
LISTEN,ESTABLISHED,TIME_WAIT, etc.).
Includerea informațiilor despre proces
Pentru a vedea ce proces deține fiecare port în ascultare, adăugați steagul -p:
sudo netstat -tulnpExemplu de ieșire cu informații despre proces:
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ă: Trebuie să rulați această comandă cu sudo pentru a vedea numele proceselor pentru toți utilizatorii, nu doar pentru al dvs.
Filtrarea ieșirii pentru porturi sau servicii specifice
Utilizați grep pentru a restrânge rezultatele la un port sau serviciu specific:
# 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"Vizualizarea tuturor conexiunilor active (nu doar celor în ascultare)
Pentru a vedea toate conexiunile active, inclusiv cele stabilite, omiteți steagul -l:
sudo netstat -tunpAfișarea tabelului de rutare
sudo netstat -rAfișarea statisticilor interfețelor de rețea
sudo netstat -i3. Verificarea porturilor cu ss {#ss}
Ce este ss?
ss (statistici socket) este înlocuitorul modern pentru netstat, dezvoltat ca parte a pachetului iproute2. Se comunică direct cu kernelul Linux prin socket-uri Netlink, ceea ce o face semnificativ mai rapidă și mai eficientă decât netstat — mai ales pe sisteme cu mii de conexiuni simultane.
ss este instalat implicit pe practic toate distribuțiile Linux moderne, inclusiv Ubuntu 18.04+, CentOS 7+, Debian 9+ și derivatele acestora.
Sintaxa de bază ss
ss [options] [filter]Verificarea tuturor porturilor TCP și UDP în ascultare
ss -tulnSteagurile au semnificații identice cu netstat:
| Steag | Semnificație |
|---|---|
-t | Afișează socket-uri TCP |
-u | Afișează socket-uri UDP |
-l | Afișează doar socket-uri în ascultare |
-n | Afișează adrese numerice (fără rezoluție DNS) |
Exemplu de ieșire:
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:*Includerea informațiilor despre proces
sudo ss -tulnpExemplu de ieșire:
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))Filtrarea după protocol
Afișare doar porturi TCP în ascultare:
ss -tlAfișare doar porturi UDP în ascultare:
ss -ulAfișare toate conexiunile TCP (inclusiv cele stabilite):
ss -tFiltrare avansată cu ss
Una dintre cele mai puternice caracteristici ale ss este filtrarea pe bază de expresii încorporate, care vă permite să filtrați după port, adresă, stare și altele — fără a depinde de grep.
Filtrare după numărul portului specific:
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Filtrare după portul de destinație:
ss -tuln dport = :3306Afișare toate socket-urile în stare ESTABLISHED:
ss -t state establishedAfișare toate socket-urile în stare LISTEN:
ss -t state listeningFiltrare după adresa IP sursă:
ss -tuln src 192.168.1.100Afișare conexiuni la o gazdă la distanță specifică:
ss -t dst 203.0.113.50Combinare mai multor filtre:
ss -t state established '( dport = :443 or sport = :443 )'Afișarea utilizării memoriei socket
ss poate afișa, de asemenea, utilizarea detaliată a memoriei per socket, ceea ce este util pentru diagnosticarea problemelor de performanță:
ss -tmAfișarea informațiilor despre temporizator
ss -toAceasta afișează temporizatoare de retransmisie și temporizatoare keepalive pentru conexiuni TCP, ceea ce este neprețuit pentru diagnosticarea problemelor de stabilitate a conexiunilor.
4. Compararea netstat vs. ss {#comparison}
Ambele instrumente realizează același scop fundamental, dar există diferențe semnificative care ar trebui să vă ghideze alegerea:
| Caracteristică | netstat | ss |
|---|---|---|
| Pachet | net-tools (adesea nu este pre-instalat) | iproute2 (pre-instalat pe distribuții moderne) |
| Viteză | Mai lent (citește din /proc/net/) | Mai rapid (utilizează interfața kernel Netlink) |
| Performanță la scară | Se degradează cu mii de conexiuni | Gestionează eficient numere mari de conexiuni |
| Filtrare avansată | Necesită piping la grep | Filtrare pe bază de expresii încorporate |
| Detaliu ieșire | Bun | Mai detaliat (memorie, temporizatoare, etc.) |
| Suport IPv6 | Adecvat | Excelent |
| Stare de mentenanță | Depreciat | Activ menținut |
| Curbă de învățare | Familiar administratorilor cu experiență lungă | Sintaxă ușor diferită dar bine documentată |
Când să utilizați netstat
- La administrarea sistemelor Linux mai vechi (CentOS 6, Debian 7, etc.) unde
sspoate să nu fie disponibil. - Când lucrați cu scripturi sau documentație care utilizează deja sintaxa
netstat. - Când sunteți mai confortabil cu formatul ieșirii acestuia și nu aveți nevoie de filtrare avansată.
Când să utilizați ss
- Pe orice distribuție Linux modernă (Ubuntu 18.04+, CentOS 7+, Debian 9+ și mai noi).
- La gestionarea serverelor cu un volum ridicat de conexiuni simultane — cum ar fi cele care rulează pe Servere dedicate sub sarcină grea.
- Când aveți nevoie de filtrare avansată, informații despre temporizatoare sau statistici de memorie socket.
- Pentru automatizare și scripting unde performanța contează.
5. Alte instrumente pentru verificarea porturilor deschise {#other-tools}
Dincolo de netstat și ss, mai multe alte utilitare sunt utile pentru inspectarea porturilor și analiza rețelei pe Linux.
lsof — Listare fișiere deschise (inclusiv socket-uri)
lsof (List Open Files) tratează socket-urile de rețea ca fișiere (în conformitate cu filosofia Linux „totul este un fișier”) și poate afișa ce proces are un port specific deschis.
Instalare lsof:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yVerificare ce proces utilizează portul 80:
sudo lsof -i :80Verificare ce proces utilizează portul 443:
sudo lsof -i :443Listare toate conexiunile de rețea:
sudo lsof -iListare toate socket-urile TCP în ascultare:
sudo lsof -i TCP -s TCP:LISTENExemplu de ieșire:
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 este un instrument puternic de scanare a rețelei utilizat pentru audit de securitate, descoperire de rețea și scanare de porturi. Spre deosebire de ss și netstat (care inspectează sistemul local), nmap poate scana atât gazde locale cât și la distanță.
Instalare nmap:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -yScanare toate porturile TCP pe localhost:
sudo nmap -sT localhostScanare pentru porturi deschise cu detectare OS:
sudo nmap -sT -O localhostScanare interval de porturi specific:
sudo nmap -p 1-1024 localhostScanare porturi UDP (necesită root):
sudo nmap -sU localhostScanare server la distanță:
sudo nmap -sT 203.0.113.50> Important: Scanați doar sisteme pe care le dețineți sau pentru care aveți permisiune explicită. Scanarea neautorizată de porturi poate încălca legi și termeni de serviciu.
fuser — Identificare procese care utilizează fișiere sau socket-uri
# 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/ — Interfață directă cu kernelul
Pentru scopuri de scripting, puteți citi informații despre porturi direct din sistemul de fișiere virtual al kernelului Linux:
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udpRețineți că adresele și porturile în /proc/net/tcp sunt afișate în hexazecimal și necesită conversie pentru lizibilitate umană. Instrumente precum ss și netstat analizează automat aceste date.
6. Bune practici de securitate pentru gestionarea porturilor deschise {#security}
Știind cum să verificați porturile deschise este doar jumătate din bătălie. Acționarea asupra acestor informații este ceea ce ține serverul dvs. în siguranță. Iată bune practici acționabile pe care ar trebui să le urmeze fiecare administrator Linux:
Principiul expunerii minime
Expuneți doar porturile care sunt absolut necesare pentru funcționarea aplicației dvs. Fiecare port deschis este un vector de atac potențial. Auditați regulat porturile în ascultare și închideți sau blocați cu firewall orice care nu trebuie să fie accesibil public.
Legare servicii la interfețe specifice
Evitați legarea serviciilor la 0.0.0.0 (toate interfețele) dacă nu este necesar. De exemplu, un server de bază de date MySQL ar trebui să asculte doar pe 127.0.0.1 dacă este accesat doar local:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Utilizare firewall
Utilizați ufw (Ubuntu) sau firewalld / iptables (CentOS/RHEL) pentru a restricționa accesul la porturile deschise după adresă IP, subnet sau interfață de rețea:
# 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 22Audit regulat al porturilor în ascultare
Programați audituri regulate ale porturilor folosind joburi cron sau instrumente de monitorizare. Un port nou în ascultare poate indica un serviciu compromis, o configurație greșită sau — în cel mai rău caz — malware:
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtSecurizare servicii cu SSL/TLS
Orice serviciu expus internetului — servere web, servere de poștă, panouri de control — ar trebui să utilizeze conexiuni criptate. Asociați porturile deschise cu Certificatele SSL valide pentru a proteja datele în tranzit și a preveni atacurile man-in-the-middle.
Monitorizare pentru schimbări neașteptate
Utilizați instrumente de detectare a intruziunilor precum AIDE, Tripwire sau auditd pentru a vă alerta atunci când noi procese încep să asculte pe porturi. Integrați cu jurnalizare centralizată (de ex., ELK Stack, Graylog) pentru vizibilitate cuprinzătoare.
Dezactivare servicii neutilizate
Dacă un serviciu nu este necesar, opriți-l și dezactivați-l din pornire la boot:
# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>Referință rapidă: Comenzile cel mai utile
| Sarcină | Comandă netstat | Comandă ss |
|---|
