Cum să securizați serviciile de rețea folosind Wrapper-uri TCP în Linux


În acest articol, vom explica ce sunt pachetele TCP și cum să le configurați pentru a restricționa accesul la serviciile de rețea care rulează pe un server Linux. Înainte de a începe, totuși, trebuie să clarificăm că utilizarea wrapper-urilor TCP nu elimină necesitatea unui firewall configurat corespunzător.

În acest sens, vă puteți gândi la acest instrument ca la o listă de control al accesului bazată pe gazdă și nu ca la măsura de securitate supremă pentru sistemul dumneavoastră. Folosind un firewall și pachete TCP, în loc să-l favorizați pe unul față de celălalt, vă veți asigura că serverul dvs. nu rămâne cu un singur punct de eșec.

Înțelegerea hosts.allow și hosts.deny

Când o solicitare de rețea ajunge la serverul dvs., TCP wrapper-urile utilizează hosts.allow și hosts.deny (în această ordine) pentru a determina dacă clientului ar trebui să i se permită să utilizeze un anumit serviciu .

În mod implicit, aceste fișiere sunt goale, toate comentate sau nu există. Astfel, totul este permis prin stratul de ambalaje TCP și sistemul dumneavoastră este lăsat să se bazeze pe firewall pentru o protecție completă. Deoarece acest lucru nu este de dorit, din cauza motivului pe care l-am menționat în introducere, asigurați-vă că există ambele fișiere:

ls -l /etc/hosts.allow /etc/hosts.deny

Sintaxa ambelor fișiere este aceeași:

<services> : <clients> [: <option1> : <option2> : ...]

Unde,

  1. servicii este o listă de servicii, separată prin virgulă, la care ar trebui aplicată regula actuală.
  2. clienții reprezintă lista de nume de gazdă sau adrese IP separate prin virgulă afectate de regulă. Sunt acceptate următoarele wildcards:

    1. TOT se potrivește cu toate. Se aplică atât clienților, cât și serviciilor.
    2. LOCAL corespunde gazdelor fără punct în FQDN-ul lor, cum ar fi localhost.
    3. CUNOSCUT indică o situație în care numele gazdei, adresa gazdei sau utilizatorul sunt cunoscute.
    4. NECUNOSCUT este opusul CUNOSCUT.
    5. PARANOID determină întreruperea unei conexiuni dacă căutările DNS inverse (mai întâi pe adresa IP pentru a determina numele gazdei, apoi pe numele gazdei pentru a obține adresele IP) returnează o adresă diferită în fiecare caz.
  3. În cele din urmă, o listă opțională de acțiuni separate prin puncte indică ce ar trebui să se întâmple atunci când o anumită regulă este declanșată.

Poate doriți să rețineți că o regulă care permite accesul la un anumit serviciu din /etc/hosts.allow are prioritate față de o regulă din /etc/hosts.deny care interzice aceasta. În plus, dacă pentru același serviciu se aplică două reguli, va fi luată în considerare doar prima.

Din păcate, nu toate serviciile de rețea acceptă utilizarea pachetelor TCP. Pentru a determina dacă un anumit serviciu le acceptă, faceți:

ldd /path/to/binary | grep libwrap

Dacă comanda de mai sus returnează ieșire, aceasta poate fi încapsulată în TCP. Un exemplu în acest sens sunt sshd și vsftpd, după cum se arată aici:

Cum să utilizați pachetele TCP pentru a restricționa accesul la servicii

Pe măsură ce editați /etc/hosts.allow și /etc/hosts.deny, asigurați-vă că adăugați o linie nouă apăsând pe Enter după ultima linie nevide.

Pentru a permite accesul SSH și FTP numai la 192.168.0.102 și localhost și pentru a le refuza pe toate celelalte, adăugați aceste două linii în /etc/hosts.deny :

sshd,vsftpd : ALL
ALL : ALL

și următoarea linie în /etc/hosts.allow:

sshd,vsftpd : 192.168.0.102,LOCAL
#
hosts.deny	This file contains access rules which are used to
#		deny connections to network services that either use
#		the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		The rules in this file can also be set up in
#		/etc/hosts.allow with a 'deny' option instead.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : ALL
ALL : ALL
#
hosts.allow	This file contains access rules which are used to
#		allow or deny connections to network services that
#		either use the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : 192.168.0.102,LOCAL

Aceste modificări au loc imediat, fără a fi nevoie de o repornire.

În imaginea următoare puteți vedea efectul eliminării cuvântului LOCAL din ultima linie: serverul FTP va deveni indisponibil pentru localhost. După ce adăugăm wildcard-ul înapoi, serviciul devine din nou disponibil.

Pentru a permite tuturor serviciilor gazdelor în care numele conține example.com, adăugați această linie în hosts.allow:

ALL : .example.com

și pentru a refuza accesul la vsftpd la mașinile de pe 10.0.1.0/24, adăugați această linie în hosts.deny:

vsftpd : 10.0.1.

Pe ultimele două exemple, observați punctul la începutul și la sfârșitul listei de clienți. Este folosit pentru a indica „TOATE gazdele și/sau clienții unde numele sau IP-ul conține acel șir”.

Ți-a fost de ajutor acest articol? Aveți întrebări sau comentarii? Simțiți-vă liber să ne trimiteți o notă folosind formularul de comentarii de mai jos.