15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
30.10.2024

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

  1. Înțelegerea porturilor și tipurile acestora
  2. Verificarea porturilor cu netstat
  3. Verificarea porturilor cu ss
  4. Compararea netstat vs. ss
  5. Alte instrumente pentru verificarea porturilor deschise
  6. Bune practici de securitate pentru gestionarea porturilor deschise
  7. 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

IntervalCategorieDescriere
0–1023Porturi cunoscuteRezervate pentru serviciile standard ale sistemului (HTTP, SSH, FTP, etc.)
1024–49151Porturi înregistrateUtilizate de aplicații și middleware (MySQL, PostgreSQL, etc.)
49152–65535Porturi dinamice/efemereAtribuite 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 -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

Sintaxa de bază netstat

sudo netstat [options]

Verificarea tuturor porturilor TCP și UDP în ascultare

sudo netstat -tuln

Detalii despre steaguri:

SteagSemnificație
-tAfișează conexiuni și porturi TCP
-uAfișează conexiuni și porturi UDP
-lAfișează doar socket-uri în ascultare (porturi care așteaptă conexiuni)
-nAfiș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 -tulnp

Exemplu 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 -tunp

Afișarea tabelului de rutare

sudo netstat -r

Afișarea statisticilor interfețelor de rețea

sudo netstat -i

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

Steagurile au semnificații identice cu netstat:

SteagSemnificație
-tAfișează socket-uri TCP
-uAfișează socket-uri UDP
-lAfișează doar socket-uri în ascultare
-nAfiș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 -tulnp

Exemplu 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 -tl

Afișare doar porturi UDP în ascultare:

ss -ul

Afișare toate conexiunile TCP (inclusiv cele stabilite):

ss -t

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

Filtrare după portul de destinație:

ss -tuln dport = :3306

Afișare toate socket-urile în stare ESTABLISHED:

ss -t state established

Afișare toate socket-urile în stare LISTEN:

ss -t state listening

Filtrare după adresa IP sursă:

ss -tuln src 192.168.1.100

Afișare conexiuni la o gazdă la distanță specifică:

ss -t dst 203.0.113.50

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

Afișarea informațiilor despre temporizator

ss -to

Aceasta 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ănetstatss
Pachetnet-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 conexiuniGestionează eficient numere mari de conexiuni
Filtrare avansatăNecesită piping la grepFiltrare pe bază de expresii încorporate
Detaliu ieșireBunMai detaliat (memorie, temporizatoare, etc.)
Suport IPv6AdecvatExcelent
Stare de mentenanțăDepreciatActiv menținut
Curbă de învățareFamiliar 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 ss poate 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 -y

Verificare ce proces utilizează portul 80:

sudo lsof -i :80

Verificare ce proces utilizează portul 443:

sudo lsof -i :443

Listare toate conexiunile de rețea:

sudo lsof -i

Listare toate socket-urile TCP în ascultare:

sudo lsof -i TCP -s TCP:LISTEN

Exemplu 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 -y

Scanare toate porturile TCP pe localhost:

sudo nmap -sT localhost

Scanare pentru porturi deschise cu detectare OS:

sudo nmap -sT -O localhost

Scanare interval de porturi specific:

sudo nmap -p 1-1024 localhost

Scanare porturi UDP (necesită root):

sudo nmap -sU localhost

Scanare 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/udp

Reț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.1

Utilizare 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 22

Audit 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).txt

Securizare 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ă netstatComandă ss
15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți