Inetd e i servizi di rete: differenze tra le versioni
m (da adottare) |
|||
(15 versioni intermedie di 9 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Guida da adottare}} | |||
==Il superdemone inetd== | ==Il superdemone inetd== | ||
===Introduzione=== | ===Introduzione=== | ||
Inetd ('''Internet Super-Server''') | Inetd ('''Internet Super-Server''') è un [[demone]] che ascolta sulle porte specificate nel suo file di configurazione e fa avviare il relativo servizio nel momento in cui viene fatta una richiesta. Esso controlla tramite dei [[wrapper]] i file <code>'''/etc/hosts.allow'''</code> e <code>'''/etc/hosts.deny'''</code> per verificare che la connessione sia consentita. | ||
Viene chiamato superdemone proprio per questa sua funzione di controllo di altri demoni. | Viene chiamato superdemone proprio per questa sua funzione di controllo di altri demoni. | ||
Il vantaggio di usarlo | Il vantaggio di usarlo è di ottimizzare le risorse del sistema, avviando il demone che gestisce un determinato servizio solo quando ci sono effettive richieste. | ||
Sebbene possa essere usato per gestire quasi tutti i servizi | Sebbene possa essere usato per gestire quasi tutti i servizi è consigliabile farlo solo per quelli a basso e occasionale traffico. | ||
===Installazione=== | ===Installazione=== | ||
Se per qualche motivo il demone inetd non | Se per qualche motivo il demone inetd non dovesse essere installato è sufficiente installarlo tramite APT. Inoltre consiglio l'installazione dei TCP wrappers: | ||
<pre> | <pre># apt-get install openbsd-inetd tcpd</pre> | ||
=== | ===Configurazione=== | ||
Per prima cosa | Per prima cosa è necessario modificare i permessi al file <code>'''/etc/inetd.conf'''</code> in modo che solo root abbia accesso: | ||
<pre> | <pre># chmod 600 /etc/inetd.conf</pre> | ||
Ogni riga di '''/etc/inetd.conf''' corrisponde ad un servizio che viene gestito da inetd. Se | Ogni riga di <code>'''/etc/inetd.conf'''</code> corrisponde ad un servizio che viene gestito da inetd. Se è commentata con un <code>#</code> il servizio non viene avviato e inetd non mette la relativa porta in listening. Esempio: | ||
<pre># These are standard services. | <pre># These are standard services. | ||
Riga 35: | Riga 36: | ||
#dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd</pre> | #dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd</pre> | ||
Il formato tipico di ogni riga | Il formato tipico di ogni riga è il seguente: | ||
<pre>service type protocol wait user server cmdline</pre> | <pre>service type protocol wait user server cmdline</pre> | ||
Un esempio pratico di una riga presente in <code>'''/etc/inetd.conf'''</code>: | |||
Un esempio pratico di una riga presente in '''/etc/inetd.conf''': | <pre>ftp stream tcp nowait root /usr/sbin/in.ftpd –l | ||
<pre>ftp stream tcp nowait root /usr/sbin/in.ftpd | |||
ftp: nome del servizio | ftp: nome del servizio | ||
Riga 47: | Riga 47: | ||
tcp: indica il protocollo | tcp: indica il protocollo | ||
nowait: indica se deve attendere | nowait: indica se deve attendere | ||
user: indica | user: indica l'utente che ha il privilegio di accesso | ||
server: indica dove si trova il programma | server: indica dove si trova il programma | ||
cmdline:indica il nome | cmdline:indica il nome dell’eseguibile e eventuali flag</pre> | ||
< | Inoltre inetd si appoggia su un altro file di configurazione dei servizi: <code>/etc/services</code>, file che assegna un nome di servizio alla relativa porta e che viene usato anche da altri programmi come file di riferimento. | ||
Se si vogliono utilizzare i tcpwrapper per limitare l'accesso al servizio la riga sopra diventa: | Se si vogliono utilizzare i tcpwrapper per limitare l'accesso al servizio la riga sopra diventa: | ||
<pre>ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd | <pre>ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd –l</pre> | ||
Nelle distribuzioni Linux, solitamente inetd | Nelle distribuzioni Linux, solitamente inetd è già configurato per supportare i tcp wrappers. | ||
===TCP wrappers=== | ===TCP wrappers=== | ||
Riga 72: | Riga 69: | ||
<pre>client -----> inetd -----> TCPD -----> servizio</pre> | <pre>client -----> inetd -----> TCPD -----> servizio</pre> | ||
Nella nuova configurazione i tcpwrappers possono limitare l'accesso al servizio secondo criteri configurabili ed hanno | Nella nuova configurazione 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. | ||
Questo file permette di specificare quali servizi abilitare e da quali indirizzi IP: | Questo file permette di specificare quali servizi abilitare e da quali indirizzi IP: | ||
< | <code>/etc/hosts.allow</code> | ||
Questo file permette di specificare come limitare l'accesso a specifici servizi: | Questo file permette di specificare come limitare l'accesso a specifici servizi: | ||
< | <code>/etc/hosts.deny</code> | ||
===Comandi utili=== | ===Comandi utili=== | ||
Per avviare, riavviare, fermare il servizio inetd: | Per avviare, riavviare, fermare il servizio inetd: | ||
<pre> | <pre># service openbsd-inetd start/stop/restart</pre> | ||
===Configurazioni utili=== | ===Configurazioni utili=== | ||
Riga 97: | Riga 94: | ||
sshd: 10.0.0.1 prova.it</pre> | sshd: 10.0.0.1 prova.it</pre> | ||
Manda una | Manda una email all'indirizzo specificato admin_mail ogni qualvolta qualcuno si connette attraverso il servizio telnet, indicando l'indirizzo del client (%a) e l'utente (%u), la lista di questi parametri è contenuta nella man page hosts_access. | ||
<pre>File da applicare: /etc/hosts.allow | <pre>File da applicare: /etc/hosts.allow | ||
in.telnetd : ALL@ALL : spawn ( /bin/mail -s "Connessione telnet da: %a %u" admin_mail ) & </pre> | in.telnetd : ALL@ALL : spawn ( /bin/mail -s "Connessione telnet da: %a %u" admin_mail ) & </pre> | ||
Riga 108: | Riga 105: | ||
:*Offre un sistema di logging indipendente da syslog; | :*Offre un sistema di logging indipendente da syslog; | ||
:*Permette di limitare l'accesso ai servizi in determinate ore della giornata; | :*Permette di limitare l'accesso ai servizi in determinate ore della giornata; | ||
:*Supporta il protocollo | :*Supporta il protocollo IPv6; | ||
:*Utilizza vari meccanismi che mitigano l'impatto di un attacco DOS. | :*Utilizza vari meccanismi che mitigano l'impatto di un attacco DOS. | ||
===File di configurazione=== | ===File di configurazione=== | ||
La configurazione del demone e dei servizi | La configurazione del demone e dei servizi può essere suddivisa in più file non compatibili con i vecchi file di configurazione del demone inetd. Le directory contenenti i file di configurazione sono leggermente cambiate: | ||
<pre>/etc/xinetd.conf | <pre>/etc/xinetd.conf | ||
File di configurazione del demone | File di configurazione del demone | ||
Riga 119: | Riga 116: | ||
Directory che contiene i singoli file dei servizi offerti da xinetd</pre> | Directory che contiene i singoli file dei servizi offerti da xinetd</pre> | ||
Il file di configurazione di xinetd | Il file di configurazione di xinetd è un file di testo che indica i servizi gestiti da xinetd. Contiene delle sezioni, ognuna delle quali identifica un servizio, con la seguente sintassi: | ||
<pre>service service_name | <pre>service service_name | ||
{ | { | ||
Riga 127: | Riga 124: | ||
Dove i seguenti attributi indicano: | Dove i seguenti attributi indicano: | ||
:* '''service_name''' | :* <code>'''service_name'''</code> è l'indicazione di un servizio gestito da xinetd; | ||
:* '''attribute''' indica un attributo relativo al servizio service_name; | :* <code>'''attribute'''</code> indica un attributo relativo al servizio service_name; | ||
:* '''assign_op''' | :* <code>'''assign_op'''</code> è un operatore di assegnamento, e può essere <code>=</code> (specifica l’unico valore dell’attributo), <code>+=</code> (aggiunge un valore all'attributo) o <code>-=</code> (rimuove un valore dall’attributo). | ||
===Esempi di configurazione di Xinetd=== | ===Esempi di configurazione di Xinetd=== | ||
Di seguito sono riportati alcuni esempi pratici e semplici di un file di configurazione '''/etc/xinetd.conf''': | Di seguito sono riportati alcuni esempi pratici e semplici di un file di configurazione <code>'''/etc/xinetd.conf'''</code>: | ||
<pre>service shell | <pre>service shell | ||
{ | { | ||
Riga 156: | Riga 153: | ||
}</pre> | }</pre> | ||
Per una guida dettagliata di ogni singolo parametro | Per una guida dettagliata di ogni singolo parametro è possibile consultare il '''man''' una volta installato xinetd. Xinetd è un demone molto flessibile e tramite il suo file di configurazione è possibile specificare decine e decine di opzioni. | ||
===Opzioni di Xinetd=== | ===Opzioni di Xinetd=== | ||
Le opzioni che possono essere utilizzate per la | Le opzioni che possono essere utilizzate per la modalità di funzionamento di xinetd sono le seguenti: | ||
:* '''-d''' abilita la | :* <code>'''-d'''</code>: abilita la modalità di debug; | ||
:* '''-syslog syslog_facility''' imposta la facility relativa al system | :* <code>'''-syslog syslog_facility'''</code>: imposta la facility relativa al system log secondo quanto specificato da <code>syslog_facility</code>; | ||
:* '''-filelog logfile''' | :* <code>'''-filelog logfile'''</code>: indica di redirigere il log degli eventi di xinetd nel file logfile; | ||
:* '''-f config_file''' indica il file di configurazione da considerare secondo quanto specificato da config_file (default /etc/xinetd.conf); | :* <code>'''-f config_file'''</code>: indica il file di configurazione da considerare secondo quanto specificato da <code>config_file</code> (default <code>/etc/xinetd.conf</code>); | ||
:* '''-pidfile pid_file''' indica di scrivere nel file pid_file il PID del processo lanciato; | :* <code>'''-pidfile pid_file'''</code>: indica di scrivere nel file <code>pid_file</code> il PID del processo lanciato; | ||
:* '''-stayalive''' indica di rimanere in esecuzione anche se nel file di configurazione non | :* <code>'''-stayalive'''</code>: indica di rimanere in esecuzione anche se nel file di configurazione non è stato specificato nessun servizio; | ||
:* '''-limit proc_limit''' imposta il numero massimo di processi che xinetd | :* <code>'''-limit proc_limit'''</code>: imposta il numero massimo di processi che xinetd può lanciare secondo quanto specificato da <code>proc_limit</code>; | ||
:* '''-logprocs limit''' imposta il numero massimo di daemon che possono essere lanciati in esecuzione per ogni utente, secondo quanto specificato da limit; | :* <code>'''-logprocs limit'''</code>: imposta il numero massimo di daemon che possono essere lanciati in esecuzione per ogni utente, secondo quanto specificato da <code>limit</code>; | ||
:* '''-version''' visualizza la versione di xinetd; | :* <code>'''-version'''</code>: visualizza la versione di xinetd; | ||
:* '''-inetd_compat''' indica di considerare anche il file di configurazione '''/etc/inetd.conf''' subito dopo '''/etc/xinetd.conf'''; | :* <code>'''-inetd_compat'''</code>: indica di considerare anche il file di configurazione <code>'''/etc/inetd.conf'''</code> subito dopo <code>'''/etc/xinetd.conf'''</code>; | ||
:* '''-cc interval''' indica di controllare un controllo periodico del proprio stato ogni interval secondi; | :* <code>'''-cc interval'''</code>: indica di controllare un controllo periodico del proprio stato ogni <code>interval</code> secondi; | ||
Il processo xinetd effettua le operazioni elencate in | Il processo xinetd effettua le operazioni elencate in corrispondenza dei seguenti segnali: | ||
:*'''SIGHUP''' rilegge il file di configurazione e termina | :*<code>'''SIGHUP'''</code>: rilegge il file di configurazione e termina l’esecuzione dei daemon relativi a servizi non più attivi (secondo quanto specificato nel file di configurazione); | ||
:* '''SIGQUIT''' termina la sua esecuzione | :* <code>'''SIGQUIT'''</code>: termina la sua esecuzione; | ||
:* '''SIGTERM''' termina | :* <code>'''SIGTERM'''</code>: termina l’esecuzione di tutti i daemon prima di terminare anche la sua esecuzione; | ||
:* '''SIGUSR1''' scrive il suo stato interno (dump) nel file '''/var/run/xinetd.dump''' | :* <code>'''SIGUSR1'''</code>: scrive il suo stato interno (dump) nel file <code>'''/var/run/xinetd.dump'''</code>; | ||
:* '''SIGIOT''' controlla la consistenza delle sue strutture dati, visualizzando quindi un messaggio relativo. | :* <code>'''SIGIOT'''</code>: controlla la consistenza delle sue strutture dati, visualizzando quindi un messaggio relativo. | ||
[[Categoria:Monitoraggio]] | |||
[[Categoria:Shell]] |
Versione attuale delle 19:19, 3 nov 2019
Guida da adottare! |
Il superdemone inetd
Introduzione
Inetd (Internet Super-Server) è un demone che ascolta sulle porte specificate nel suo file di configurazione e fa avviare il relativo servizio nel momento in cui viene fatta una richiesta. Esso controlla tramite dei wrapper i file /etc/hosts.allow
e /etc/hosts.deny
per verificare che la connessione sia consentita.
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 demone 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.
Installazione
Se per qualche motivo il demone inetd non dovesse essere installato è sufficiente installarlo tramite APT. Inoltre consiglio l'installazione dei TCP wrappers:
# apt-get install openbsd-inetd tcpd
Configurazione
Per prima cosa è necessario modificare i permessi al file /etc/inetd.conf
in modo che solo root abbia accesso:
# chmod 600 /etc/inetd.conf
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. Esempio:
# These are standard services. # #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd # # Shell, login, exec, comsat and talk are BSD protocols. # #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #comsat dgram udp wait root /usr/sbin/tcpd in.comsat #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd
Il formato tipico di ogni riga è il seguente:
service type protocol wait user server cmdline
Un esempio pratico di una riga presente in /etc/inetd.conf
:
ftp stream tcp nowait root /usr/sbin/in.ftpd –l ftp: nome del servizio stream: indica il tipo tcp: indica il protocollo nowait: indica se deve attendere user: indica l'utente che ha il privilegio di accesso server: indica dove si trova il programma cmdline:indica il nome dell’eseguibile e eventuali flag
Inoltre inetd si appoggia su un altro file di configurazione dei servizi: /etc/services
, file che assegna un nome di servizio alla relativa porta e che viene usato anche da altri programmi come file di riferimento.
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
Nelle distribuzioni Linux, solitamente inetd è già configurato per supportare i tcp wrappers.
TCP wrappers
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 configurazione:
client -----> inetd -----> servizio
Si passa ad una configurazione:
client -----> inetd -----> TCPD -----> servizio
Nella nuova configurazione 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.
Questo file permette di specificare quali servizi abilitare e da quali indirizzi IP:
/etc/hosts.allow
Questo file permette di specificare come limitare l'accesso a specifici servizi:
/etc/hosts.deny
Comandi utili
Per avviare, riavviare, fermare il servizio inetd:
# service openbsd-inetd start/stop/restart
Configurazioni utili
Nega l'accesso a tutti i client e controlla che ip - nome.host corrispondano:
File da applicare: /etc/hosts.deny ALL:ALL@ALL,PARANOID
Consente l'accesso a tutti i client e controlla che ip - nome.host corrispondano:
File da applicare: /etc/hosts.allow ALL: LOCAL 192.168.1.0/255.255.255.0
Permette l'accesso SSH all'host prova.it corrispondente all'IP 10.0.0.1
File da applicare: /etc/hosts.allow sshd: 10.0.0.1 prova.it
Manda una email all'indirizzo specificato admin_mail ogni qualvolta qualcuno si connette attraverso il servizio telnet, indicando l'indirizzo del client (%a) e l'utente (%u), la lista di questi parametri è contenuta nella man page hosts_access.
File da applicare: /etc/hosts.allow in.telnetd : ALL@ALL : spawn ( /bin/mail -s "Connessione telnet da: %a %u" admin_mail ) &
Da inetd a Xinetd
Differenze
A differenza del precedessore, xinetd (extended inetd):
- Limita o regola l'accesso a determinati servizi senza ricorrere al Tcp Wrapper;
- 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.
File di configurazione
La configurazione del demone e dei servizi può essere suddivisa in più file non compatibili con i vecchi file di configurazione del demone inetd. Le directory contenenti i file di configurazione sono leggermente cambiate:
/etc/xinetd.conf File di configurazione del demone /etc/xinetd.d/* Directory che contiene i singoli file dei servizi offerti da xinetd
Il file di configurazione di xinetd è un file di testo che indica i servizi gestiti da xinetd. Contiene delle sezioni, ognuna delle quali identifica un servizio, con la seguente sintassi:
service service_name { attribute assign_op [value] [value] [...] [...] }
Dove i seguenti attributi indicano:
service_name
è l'indicazione di un servizio gestito da xinetd;attribute
indica un attributo relativo al servizio service_name;assign_op
è un operatore di assegnamento, e può essere=
(specifica l’unico valore dell’attributo),+=
(aggiunge un valore all'attributo) o-=
(rimuove un valore dall’attributo).
Esempi di configurazione di Xinetd
Di seguito sono riportati alcuni esempi pratici e semplici di un file di configurazione /etc/xinetd.conf
:
service shell { socket_type = stream wait = no user = root instances = UNLIMITED server = /usr/etc/in.rshd log_on_success += HOST RECORD } service ftp { socket_type = stream wait = no nice = 10 user = root server = /usr/etc/in.ftpd server_args = -l instances = 4 log_on_success += DURATION HOST USERID access_times = 2:00-9:00 12:00-24:00 }
Per una guida dettagliata di ogni singolo parametro è possibile consultare il man una volta installato xinetd. Xinetd è un demone molto flessibile e tramite il suo file di configurazione è possibile specificare decine e decine di opzioni.
Opzioni di Xinetd
Le opzioni che possono essere utilizzate per la modalità di funzionamento di xinetd sono le seguenti:
-d
: abilita la modalità di debug;-syslog syslog_facility
: imposta la facility relativa al system log secondo quanto specificato dasyslog_facility
;-filelog logfile
: indica di redirigere il log degli eventi di xinetd nel file logfile;-f config_file
: indica il file di configurazione da considerare secondo quanto specificato daconfig_file
(default/etc/xinetd.conf
);-pidfile pid_file
: indica di scrivere nel filepid_file
il PID del processo lanciato;-stayalive
: indica di rimanere in esecuzione anche se nel file di configurazione non è stato specificato nessun servizio;-limit proc_limit
: imposta il numero massimo di processi che xinetd può lanciare secondo quanto specificato daproc_limit
;-logprocs limit
: imposta il numero massimo di daemon che possono essere lanciati in esecuzione per ogni utente, secondo quanto specificato dalimit
;-version
: visualizza la versione di xinetd;-inetd_compat
: indica di considerare anche il file di configurazione/etc/inetd.conf
subito dopo/etc/xinetd.conf
;-cc interval
: indica di controllare un controllo periodico del proprio stato ogniinterval
secondi;
Il processo xinetd effettua le operazioni elencate in corrispondenza dei seguenti segnali:
SIGHUP
: rilegge il file di configurazione e termina l’esecuzione dei daemon relativi a servizi non più attivi (secondo quanto specificato nel file di configurazione);SIGQUIT
: termina la sua esecuzione;SIGTERM
: termina l’esecuzione di tutti i daemon prima di terminare anche la sua esecuzione;SIGUSR1
: scrive il suo stato interno (dump) nel file/var/run/xinetd.dump
;SIGIOT
: controlla la consistenza delle sue strutture dati, visualizzando quindi un messaggio relativo.