Ricerca nel sito web

Come proteggere i servizi di rete utilizzando i wrapper TCP in Linux


In questo articolo spiegheremo cosa sono i wrapper TCP e come configurarli per limitare l'accesso ai servizi di rete in esecuzione su un server Linux. Prima di iniziare, però, dobbiamo chiarire che l'utilizzo dei wrapper TCP non elimina la necessità di un firewall opportunamente configurato.

A questo proposito, puoi pensare a questo strumento come a un elenco di controllo degli accessi basato su host e non come la misura di sicurezza definitiva per il tuo sistema. Utilizzando un firewall e wrapper TCP, invece di favorire l'uno rispetto all'altro, ti assicurerai che il tuo server non rimanga con un singolo punto di errore.

Comprendere gli host.allow e gli host.deny

Quando una richiesta di rete raggiunge il tuo server, i wrapper TCP utilizzano hosts.allow e hosts.deny (in quest'ordine) per determinare se al client deve essere consentito utilizzare un determinato servizio .

Per impostazione predefinita, questi file sono vuoti, tutti commentati o non esistono. Pertanto, tutto è consentito attraverso il livello wrapper TCP e il sistema può fare affidamento sul firewall per una protezione completa. Poiché ciò non è desiderato, per il motivo indicato nell'introduzione, assicurati che entrambi i file esistano:

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

La sintassi di entrambi i file è la stessa:

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

Dove,

  1. servizi è un elenco di servizi separati da virgole a cui deve essere applicata la regola corrente.
  2. I client rappresentano l'elenco di nomi host o indirizzi IP separati da virgole interessati dalla regola. Sono accettati i seguenti caratteri jolly:

    1. ALL corrisponde a tutto. Vale sia per i clienti che per i servizi.
    2. LOCAL corrisponde agli host senza punto nel loro FQDN, ad esempio localhost.
    3. NOTO indica una situazione in cui il nome host, l'indirizzo host o l'utente sono noti.
    4. SCONOSCIUTO è l'opposto di NOTO.
    5. PARANOID provoca l'interruzione della connessione se le ricerche DNS inverse (prima sull'indirizzo IP per determinare il nome host, quindi sul nome host per ottenere gli indirizzi IP) restituiscono in ciascun caso un indirizzo diverso.
  3. Infine, un elenco facoltativo di azioni separate da due punti indica cosa dovrebbe accadere quando viene attivata una determinata regola.

Potresti tenere presente che una regola che consente l'accesso a un determinato servizio in /etc/hosts.allow ha la precedenza su una regola in /etc/hosts.deny che vieta Esso. Inoltre, se allo stesso servizio si applicano due regole, verrà presa in considerazione solo la prima.

Sfortunatamente non tutti i servizi di rete supportano l'uso dei wrapper TCP. Per determinare se un determinato servizio li supporta, eseguire:

ldd /path/to/binary | grep libwrap

Se il comando precedente restituisce un output, è possibile eseguire il wrapper TCP. Un esempio di ciò sono sshd e vsftpd, come mostrato qui:

Come utilizzare i wrapper TCP per limitare l'accesso ai servizi

Mentre modifichi /etc/hosts.allow e /etc/hosts.deny, assicurati di aggiungere una nuova riga premendo Invio dopo l'ultima riga non vuota.

Per consentire l'accesso SSH e FTP solo a 192.168.0.102 e localhost e negare a tutti gli altri, aggiungi queste due righe in /etc/hosts.deny :

sshd,vsftpd : ALL
ALL : ALL

e la seguente riga in /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

Queste modifiche avvengono immediatamente senza necessità di riavvio.

Nell'immagine seguente puoi vedere l'effetto della rimozione della parola LOCAL dall'ultima riga: il server FTP diventerà non disponibile per localhost. Dopo aver aggiunto nuovamente il carattere jolly, il servizio diventa nuovamente disponibile.

Per consentire tutti i servizi agli host il cui nome contiene example.com, aggiungi questa riga in hosts.allow:

ALL : .example.com

e per negare l'accesso a vsftpd alle macchine su 10.0.1.0/24, aggiungi questa riga in hosts.deny:

vsftpd : 10.0.1.

Negli ultimi due esempi, nota il punto all'inizio e alla fine dell'elenco dei clienti. Viene utilizzato per indicare “TUTTI gli host e/o client in cui il nome o l'IP contiene quella stringa”.

Questo articolo ti è stato utile? Avete domande o commenti? Sentiti libero di inviarci una nota utilizzando il modulo di commento qui sotto.