Sicurezza: I TCP Wrappers

Home Page Sicurezza

Scrivere un demone sotto UNIX è molto facile grazie al demone inetd. In realtà inetd, che molto spesso viene chiamato superdemone, si fà carico di trasformare lo standard input e lo standard output in un socket di rete, occupandosi di tutta la gestione delle connessione. Non si hanno a disposizione tutte le feature della libreria socket, ma per lavori semplici va più che bene.

Il demone inetd per garantire un minimo di protezione può chiedere aiuto al TCP wrappers. In pratica il tcp wrapper è il programma che viene richiamato da inetd per gestire una determinata richiesta dalla rete. Il wrapper si occupa di verificare che la connessione provenga da IP autorizzati in basi alle configurazioni fatte.

Se la richiesta è fatta da un host autorizzato viene poi lanciato lo script vero e proprio che gestira il servizio, altrimenti la connesione viene chiusa.

Il wrapper si configura attraverso due file di testo: hosts.allow ed hosts.deny.

Nel primo inseriamo gli indirizzi che sono autorizzati ad accedere ad un determinato servizio, nel secondo quelli che invece non lo sono.

Entrambi i file hanno la stessa sintassi. Per ogni rigo viene indicato il nome del servizio terminato dai due punti, poi delimitato da spazi si indica l’elenco degli hosts o delle subnet a cui consentire o negare l’accesso in base al file che si stà editando.

Il nome del servizio lo recuperiamo dal primo campo della riga di configurazione del demone inetd. I possibili valori sono indicati nel file /etc/services a cui inetd fa riferimento. Esiste il servizio ALL che identifica tutti i servizi.

L’elenco degli hosts o delle subnet può essere sia un indirizzo IP che un hostname. Se l’hostname inizia col carattere di punto, il wrapper lo interpreta come un dominio completo,, quindi a tutte le macchine il cui indirizzo IP viene risolto inversamente con un hostname appartenente a quel dominio, viene consentito/negato l’accesso.

Infine possono essere indicate le subnet con la notazione indirizzo sottorete/subnet mask.

Anche per gli indirizzi esistono delle keyword particolari come ALL che identifica tutti gli host oppure local che identifica gli hostname locali come localhost.

Con le ultime innovazioni è possibile indicare anche il nome dell’utente del servizio chiamante, ma per queste configurazioni è meglio fare riferimento alla manpage del wrapper che utilizzate.

Ricordatevi sempre di iniziare a configurare i wrappers inserendo come prima riga del file hosts.deny ALL:ALL.

Infine vi consiglio sempre di configurare i file di wrappers, perchè anche se non utilizzate inetd o il wrapper tcpd, molti programmi usano i file hosts.allow e hosts.deny per configurare il loro wrapper interno, come ad esempio sendmail.

Scritto da

Share