Inserisci Infobox

Il superdemone Inetd (e Xinetd)

Configurazione di inetd e tcp wrappers. Configurazione di xinetd.

Introduzione a inetd
Autore: al - Ultimo Aggiornamento: 2002-10-17 12:33:51 - Data di creazione: 2002-10-17 12:33:51
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Inetd è un demone (servizio) che ascolta sulle porte specificate nel suo file di configurazione e fa avviare il relativo servizio nel momento in cui viene fatta una richiesta.

Viene chiamato superdemone proprio per questa sua funzione di controllo di altri demoni.
Il vantaggio di usarlo è di ottimizzare le risorse del sistema, avviando il programma che gestisce un determinato servizio solo quando ci sono effettive richieste.
Sebbene possa essere usato per gestire quasi tutti i servizi è consigliabile farlo solo per quelli a basso e occasionale traffico.
/etc/inetd.conf E' solitamente il suo file di configurazione
/etc/services E' un file che assegna un nome di servizio alla relativa porta. Viene usato anche da altri programmi.

Spesso inetd si trova abbinato ai tcp wrappers che permettono di introdurre delle access list che regolano quali IP possono accedere a determinati servizi.
Spesso un'installazione standard di Unix lascia il file inetd.conf con molte porte inutilmente aperte: è consigliabile commentare le relative righe per evitare che inet ascolti su porte non utilizzate e potenzialmente soggette ad intrusioni.
Ogni volta che viene cambiato il suo file di configurazione, va riavviato il servizio.

Inetd è comune su tutti gli Unix, ma su Linux più recenti si utilizza Xinetd, che è una versione più evoluta che introduce nuove funzionalità.

I TCP wrappers
Autore: al - Ultimo Aggiornamento: 2002-10-17 12:58:23 - Data di creazione: 2002-10-17 12:58:23
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

I tcp wrapper (tcpd), sviluppati dall'olandese Wietse Venema, sono un layer software che permette il controllo e il filtro degli accessi a servizi del sistema, tipicamente gestiti con inetd.

In pratica da una logica:
1- client (che esegue una connessione)
2- inetd (che risponde alla connessione e lancia il relativo server)
3- server (che processa la connessione al suo servizio)
si passa ad una configurazione:
1- client  2- inetd  3- tcpd  4- server
in cui i tcpwrappers possono limitare l'accesso al servizio secondo criteri configurabili ed hanno funzionalità anti-spoofing e anti tcp sequence guessing.
La configurazione dei tcp wrappers si fa essenzialmente in due file:
/etc/hosts.allow Permette di specificare quali servizi permettere e da quali indirizzi IP
/etc/hosts.deny Permette di specificare come limitare l'accesso a specifici servizi

In alcuni sistemi con Xinetd (es: RedHat) la configurazione dei wrappers viene direttamente inglobata nella configurazione dei singoli servizi.

/etc/inetd.conf
Autore: al - Ultimo Aggiornamento: 2004-05-23 16:13:13 - Data di creazione: 2004-05-23 16:13:13
Tipo Infobox: PATH - Skill: 2- JUNIOR

E' il file di configurazione del superdemone Inetd.
Qui si configurano quali servizi e relative porte vengono resi disponibili sul sistema.
Ogni riga di /etc/inetd.conf corrisponde ad un servizio che viene gestito da inetd.
Se è commentata con un # il servizio non viene avviato e inetd non mette la relativa porta in listening.

Il formato di ogni riga è:
service type protocol wait user server argument
Un esempio di una riga tipica è:
ftp stream tcp nowait root /usr/sbin/in.ftpd -l
Se si vogliono utilizzare i tcpwrapper per limitare l'accesso al servizio la riga sopra diventa:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l
Vediamo nei dettagli le varie voci:
service E' il nome del servizio a cui si riferisce la riga di inetd.conf. La porta a cui è associato viene ottenuta dal file /etc/services. Di default inetd.conf prevede vari servizi. Alcuni sono attivati, altri commentati. Tipicamente gli unici che si dovrebbero lasciare attivati (se serve) sono ftp e telnet o ssh (se si decide di non far partire il server ssh autnonomamente).
type Specifica il tipo di socket usata per il protocollo indicato. Può essere: stream, dgram, sunrpc_tcp, sunrpc_udp.
protocol Indica il tipo di protocollo: tcp o udp. Si basa sul file /etc/protocols
wait Indica se aspettare o no che il server invocato rilasci la socket prima di rimettersi in listening sulla relativa porta
user L'utente con cui viene lanciato il server. Inetd di suo viene eseguito come root.
server Il path completo del programma da eseguire per gestire la connessione per il servizio specificato
argument Gli argomenti da passare al comando di server lanciato.

Gestire troppi collegamenti via inetd
Autore: al - Ultimo Aggiornamento: 2002-10-17 13:19:31 - Data di creazione: 2002-10-17 13:19:31
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Di default inetd permette fino a 40 connessioni al minuto su una specifica porta (è una misura anti attacchi DOS).

Questo può essere un limite per server particolarmente affollati.
Tipicamente un server pop3 con parecchie connessioni può superare questo limite e venire temporaneamente disattivato, lasciando un esplicativo messaggio di errore nei log.
Per impostare, per esempio a 100, il numero massimo di connessioni al minuto inserire una simile riga in inetd.conf:
pop-3 stream tcp nowait.100 root /usr/sbin/tcpd ipop3d

Introduzione a Xinetd
Autore: al - Ultimo Aggiornamento: 2002-10-17 13:09:46 - Data di creazione: 2002-10-17 13:09:46
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Nelle versioni di Linux più recenti Inetd viene sostituito da un superdemone più versatile e sicuro: Xinetd.

A differenza del precedessore, xinetd:
- Limita o regola l'accesso a determinati servizi sia con un sistema proprio sia inglobando nella sua configurazione i TcpWrappers
- Offre un sistema di logging indipendente da syslog
- Permette di limitare l'accesso ai servizi in determinate ore della giornata
- Supporta il protocollo Ipv6
- Utilizza vari meccanismi che mitigano l'impatto di un attacco DOS.
La configurazione del demone e dei servizi può essere suddivisa in più file (non compatibili con /etc/inetd.conf).
Su RedHat si deve operare su:
/etc/xinetd.conf File principale di configurazione del demone
/etc/xinetd.d/* Directory che contiene i singoli file dei servizi offerti da xinetd

/etc/xinetd.conf
Autore: al - Ultimo Aggiornamento: 2002-10-18 13:48:33 - Data di creazione: 2002-10-18 13:48:33
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

E' il file di configurazione del superdemon Xinetd. Ha una sintassi leggermente più complicata e flessibile del suo analogo /etc/inet.conf e può prevedere degli "include" che ne facilitano la gestione.
In particolari su distribuzioni Linux come RedHat si usa inserire per ogni servizio un omonimo file di configurazione nella directory /etc/xinetd.d/

Vediamo un esempio di xinetd.conf leggermente modificato (in versione security paranoia) rispetto a quello standard.

[[email protected] al]# cat /etc/xinetd.conf
Si definiscono fra parentesi graffe le proprietà comuni a tutti i servizi (defaults)
defaults
{
Numero di istanze del server evocato. Di default sono infinite
        instances               = 60
Specifica di usare SYSLOG con facility authpriv per il logging. Può anche essere FILE /path/nomelog
        log_type                = SYSLOG authpriv
Cosa viene loggato di ogni connessione. Può essere uno o più delle seguenti voci: HOST remoto, PID del server, DURATION della sessione, EXIT status del server, USERID dell'utente remoto (tramite identd - sconsigliato)
        log_on_success          = HOST PID
Cosa viene loggato di ogni connessione non riuscita (per access list o problemi nel lancio del server): HOST remoto, ATTEMPT registrato, USERID dell'utente remoto (identd), RECORD di ogni dato utile
        log_on_failure          = HOST RECORD
Limita il numero massimo di connessioni contemporanee per server: il primo numero è il numero di connessioni al secondo, superato il quale il servizio viene temporaneamente disabilitato per il numero di secondo indicato con la seconda cifra. Su server molto   
        cps                     = 25 30
Il numero massimo di connessioni da un singolo IP ad un determinato servizio  
        per_source  = 5
}
Specifica la directory che contiente ulteriori file di configurazione (in genere 1 per ogni servizio)
includedir /etc/xinetd.d


Prendiamo un file di esempio di configurazione di un singolo servizio:
cat /etc/xinetd.d/wu-ftp
Definisce il servizio, associa la relativa prota tramite il file /etc/services
service ftp
{
Indica se disattivarlo o farlo funzionare, in questo caso il servizio è attivo
        disable = no
Come viene gestito il flusso di dati sulla socket: stream Servizio basato su stream di dati, dgram Servizio basati su datagrammi, raw Servizio che richiede accesso diretto all'IP, seqpacket Sercizio che richiede una trasmissione di datagrammi affidabile
        socket_type             = stream
Indica se il server lanciato è single-threaded (wait=yes: Xinetd non accetta più connessioni fino a quando il server lanciato muore) o multi-threaded (wait=no: Xinetd continua ad accettare connessioni per il servizio ed invocare nuove istanze del server)
        wait                    = no
L'utente con cui viene lanciato il server
        user                    = root
Il path completo del comando per lanciare il server
        server                  = /usr/sbin/in.ftpd
Gli argomenti eventualmente passati al comando lanciato
        server_args             = -l -a
Il += indica di aggiungere le impostazioni qui indicate a quelle impostate di default
        log_on_success          += DURATION
Il livello di priorità del server lanciato
        nice                    = 10
Limita l'accesso al servizio solo dagli IP o reti indicati (Alcune notazioni valide: 10.0.0.0/24, 10.0.0.1, 0.0.0.0 (tutti gli IP)
        only_from               = 192.168.0.0/24
Esclude l'accesso dagli IP o reti indicati. Insieme a only_from gestire le access list di xinetd
        no_access               = 192.168.4.0/24
Definisce il range di ore del giorno in cui servizio è attivo. Formato hh.mm-hh.mm (hh da 0 a 23, mm da 0 a 59)
        access_times            = 0:0-6:30
}

grep disable /etc/xinetd.d/*
Autore: al - Ultimo Aggiornamento: 2002-10-18 12:59:23 - Data di creazione: 2002-10-18 12:59:23
Tipo Infobox: BOFH - Skill: 2- JUNIOR

Visualizza rapidamente quali servizi sono attivati e quali disattivati nella configurazione di xinetd.

Le righe dove si trova un disable = no indicano che il rispettivo servizio è attivato.
grep disable /etc/xinetd.d/*
/etc/xinetd.d/chargen:  disable = yes
/etc/xinetd.d/chargen-udp:      disable = yes
/etc/xinetd.d/daytime:  disable = yes
/etc/xinetd.d/daytime-udp:      disable = yes
/etc/xinetd.d/echo:     disable = yes
/etc/xinetd.d/echo-udp: disable = yes
/etc/xinetd.d/finger:   disable = yes
/etc/xinetd.d/ntalk:    disable = yes
/etc/xinetd.d/rexec:    disable = yes
/etc/xinetd.d/rlogin:   disable = yes
/etc/xinetd.d/rsh:      disable = yes
/etc/xinetd.d/rsync:    disable = no
/etc/xinetd.d/servers:  disable = yes
/etc/xinetd.d/services: disable = yes
/etc/xinetd.d/talk:     disable = yes
/etc/xinetd.d/telnet:   disable = yes
/etc/xinetd.d/time:     disable = yes
/etc/xinetd.d/time-udp: disable = yes
/etc/xinetd.d/wu-ftpd:  disable = no

Privacy Policy