5.7. Contenitori Tcp (wrapper Tcp)

Per limitare l'accesso al nostro sistema e ai servizi, possiamo usare soluzioni a livello di pacchetto o di applicazione. Le soluzioni a livello di pacchetto sono abitualmente chiamate firewall e di norma svolgono il loro lavoro tramite il kernel di sistema. In altre parole, se il firewall respinge un pacchetto, sarà scartato ben prima di avere la minima possibilità di raggiungere l'applicazione reale.

Noi possiamo, tuttavia, controllare gli accessi anche a livello di applicazione. Il controllo a livello di applicazione può essere implementato utilizzando i proxy (basati sul contenuto), gli involucri TCP (wrapper TCP basati su sorgente e destinazione), metodi personalizzati o una combinazione di questi. Come dice il titolo della sezione, qui stiamo per dare uno sguardo ai wrapper TCP.

Fondamentalmente, i wrapper TCP servono da meccanismi generici di controllo degli accessi a livello applicazione, e sono stati sviluppati inizialmente da Vietse Venema. I wrapper TCP sono stati molto utili in combinazione con Inetd, ma da allora sono stati integrati in numerosi servizi indipendenti.

Quando un pacchetto raggiunge il sistema (e il corrispondente servizio in ascolto per le richieste), tutto quello che l'applicazione deve fare è richiedere una verifica al wrapper TCP. Basandosi sui dettagli della connessione (IP remoto, nome utente remoto, servizio di destinazione, eccetera), il wrapper TCP inoltra o rifiuta le richieste. A questo punto, o l'applicazione prosegue con l'autenticazione del client (generalmente nome utente e password), oppure chiude la connessione.

I wrapper TCP sono una componente standard di Debian. Per maggiori informazioni si vedano le pagine di manuale hosts.allow(5) e hosts.deny(5).

I wrapper TCP possono anche servire come esempio di pratica professionale di programmazione: essi sono forniti di un insieme di programmi aggiuntivi sviluppati per testare comodamente i propri file di configurazione e le ipotetiche connessioni; si vedano le pagine di manuale tcpdchk(8) e tcpdmatch(8).

Per impedire tutti i servizi ad indirizzi remoti, essere sicuri che il file /etc/hosts.allow sia vuoto e mettere in /etc/hosts.deny:

ALL: ALL EXCEPT LOCAL 127.0.0.1: DENY
Per maggiori informazioni (compreso su come far scattare comandi di sistema all'arrivo di richieste in ingresso), si leggano le pagine di manuale hosts_access(5) e hosts_options(5).

NotaNotare che
 

I wrapper TCP e un firewall hanno molto poco in comune; il livello al quale le decisioni di accettazione/rifiuto vengono prese è fondamentalmente diverso. Con un firewall, ciò accade al livello più basso, di pacchetto: il pacchetto inviato ad esempio a una porta FTP, potrebbe essere scartato dal firewall non appena viene ricevuto dall'hardware di rete e elaborato dal livello di gestione della rete del sistema operativo: esso non raggiungerebbe mai il demone FTP. Con i wrapper TCP, il pacchetto raggiunge la sua destinazione (Inetd, o un servizio indipendente). La verifica di validità deve essere richiamata esplicitamente dall'applicazione che gestisce il paccheto ed è solitamente realizzata prima che il server biforchi (inizi) un nuovo processo figlio per servire eventualmente la richiesta in ingresso.