Newsgroup: it.comp.os.linux.iniziare
Titolo: Il pinguino

Come abbiamo già detto più volte l'uso più naturale di Linux è sui server.
Nonostante questo può essere una buona alternativa a Windows come desktop,
mantenendo una grande flessibilità e tutta una serie di caratteristiche che
non sono proprie di un sistema operativo per un'utenza domestica, come ad
esempio una grande versatilità verso le reti, in particolare verso Internet.
Questi strumenti seppur molto potenti, possono rivelarsi però pericolosi se
mal gestiti. In più, spesso le varie distribuzioni installano di default
alcuni server come sshd, httpd, pop3 che non solo sono spesso inutili a chi
usa il proprio PC solo per navigare, ma aumentano anche la vulnerabilità del
nostro sistema.
Un server mal configurato o un errore di programmazione possono rendere il
nostro
PC facilmente attaccabile.E' importante capire dunque le esigenze che
abbiamo e
ciò di cui abbiamo bisogno. E' necessario infatti trovare il giusto
compromesso
tra usabilità e sicurezza. Nessun computer può essere ritenuto al sicuro al
100%
da malintenzionati. L'unico modo per avere un computer sicuro potrebbe
essere a
prima vista quello di togliere tutti i servizi attivi, ma neanche questo
potrebbe
bastare, perchè potrebbe esserci sempre eseguito qualche programma
vulnerabile e
poco sicuro (sono un esempio degli ultimi anni le vulnerabilità scoperte in
Internet Explorer e Netscape, che di certo non sono dei server). A questo
punto
allora non ci rimane altro che isolare il computer e scollegarlo da ogni
rete,
in particolar modo da Internet. Ma qualcuno potrebbe sempre accedervi in
locale,
da casa nostra. Non ci rimane altra scelta che lasciarlo spento. Questo
paradosso
vuole farvi capire che non esiste un sistema totalmente sicuro e che quello
che viene
considerato "ragionevolmente sicuro" oggi potrebbe (e probabilmente non lo
sarà)
essere sicuro domani. Primo passo risulta quindi scegliere ciò di cui
abbiamo
realmente bisogno.
Dei server disponibili con Linux, ben pochi possono essere utili a un
normale
utente che usa il proprio PC per lavorare, scaricare la posta e guardare
delle
pagine web. Vediamo quindi come fare per disabilitare ciò di cui non abbiamo
bisogno.
Prima di tutto dobbiamo conoscere quello che è stato caricato all'avvio e
quali
sono i server che sono in ascolto. Uno dei modi per sapere quali sono
le "porte in ascolto" è usare il comando:
lnxbox1:~# netstat -a
Che ci mostrerà tutti i socket aperti. In particolare a noi interessano i
primi
della lista, quelli con state "LISTEN". Un altro modo è quello di usare uno
scanner
come nmap. Dopo averlo installato (è probabile che sia sul CD della vostra
distribuzione) scrivete:
lnxbox1:~# nmap localhost
Una volta scoperto quali server sono in esecuzione sul nostro PC, scegliamo
quelli
che a noi interessano, in modo da togliere quelli inutili. Inizialmente se
non sapete
cosa facciano questi server è conveniente toglierli tutti, per poi
riavviarli a mano a
mano che ne sentiamo la necessità. Esistono due modi per avviare un server:
tramite il
superserver inetd (o il più recente xinetd) oppure da soli al boot. Vediamo
come toglierli.
Editiamo il file /etc/inetd.conf (oppure /etc/xinetd.conf) e commentiamo con
un # tutte le
righe (per inetd.conf) o tutte le sezioni (per xinetd.conf) riguardanti i
server che non
vogliamo avviare. Come già detto prima è raccomandabile all'inizio
commentare tutte le
righe in modo da non avviare nessun server. Ora non ci rimane altro che
riavviare inetd (o xinetd).
Per far questo scriviamo (da root):
lnxbox1:~# /etc/init.d/inetd restart
Se abbiamo inetd.
lnxbox1:~# /etc/init.d/xinted restart
Se abbiamo xinetd.
Attualmente tutte le maggiori distribuzioni sono passate da inetd a xinetd
che aggiunge
delle nuove e interessanti feature.
In questo modo abbiamo tolto tutti i server che sono avviati da inetd (o
xinetd), ma rimangono
ancora quelli che sono avviati direttamente in fase di boot. In
distribuzioni come Red Hat la
scelta dei servizi è semplice grazie all'utility ntsysv per il caricamento
dei demoni.
Non tutti quelli presenti nella lista sono dei server, quindi limitatevi a
togliere solo i
demoni che ci riguardano. Anche le altre distribuzioni più user-friendly
hanno dei tools analoghi,
e non sono difficili da trovare. Solitamente sono gli script di avvio in
/etc/rc*
che si occupano dell'avvio dei demoni.
Un'ulteriore precauzione è quella di impedire l'accesso tramite il TCP
wrapper a
dei determinati utenti. Il TCP wrapper si occupa per esempio di avviare
realmente un server
quando è avvenuta una richiesta per i servizi presenti in /etc/inetd.conf,
dopo aver fatto
degli opportuni controlli. è possibile scegliere chi può accedere a un
server già prima che
il server venga caricato. Per far questo dobbiamo editare i file
/etc/hosts.allow e /etc/hosts.deny.
La sintassi è identica per entrambi i file, solo che nel primo andranno
inseriti gli hosts
ai quali è consentito connettersi, mentre nel secondo quelli non desiderati.
Se c'è una
richiesta e chi la fa soddisfa le regole in /etc/hosts.allow la richiesta
viene accettata,
altrimenti viene processato il file /etc/hosts.deny. Se soddisfa una delle
regole in
questo file la richiesta viene scartata, se l'host di origine non riguarda
nessuno di
questi due file, la richiesta viene accettata ugualmente. Per questo è bene
inserire
el file /etc/hosts.deny la riga
ALL : ALL
Che nega l'accesso a tutti (ovviamente a tutti quelli che non sono
autorizzati nel
file /etc/hosts.allow). La sintassi di questi file prevede 3 campi, di cui
uno si
può omettere (come sopra).
servizio : host o subnet : opzioni
Il terzo campo può essere omesso e per ora ci accontenteremo di usare solo i
primi due.
Al posto di servizio va inserito il server a cui ci riferiamo (per esempio
in.telnetd
oppure in.tftpd oppure wu-ftpd, si può far riferimento al demone inserito in
/etc/inetd.conf),
oppure usare ALL per indicare tutti i servizi, al posto di host o subnet va
inserito
l'indirizzo IP, il dominio, o l'intera subnet di chi vogliamo garantire o
negare l'accesso.
è possibile specificare questo campo o inserendo per esempio mio.dominio o l
'IP esatto (XXX.XXX.XXX.XXX)
o la subnet (XXX.XXX.XXX.) o l'IP con la mask (tipo
XXX.XXX.XXX.XXX/
255.255.255.0
 per esempio).
Per questo campo è possibile usare delle wildcards. Tra le più importanti
abbiamo:
ALL Indica tutti gli hosts (come nell'esempio di prima)
LOCAL Indica tutti gli host che non contengono un . nel loro nome.
PARANOID Indica tutti gli host il cui nome non corrisponde al loro
indirizzo.
Per un uso casalingo è bene specificare nel file /etc/hosts.allow che si
vogliono
autorizzare solo le richieste provenienti da locale. Per questo scriviamo:
ALL : localhost
E per finire non mi rimane altro che darvi questi 10 consigli:
1) usate password non facilmente individuabili, meglio se casuali e formate
da lettere
maiuscole e minuscole e da numeri.
2) se la vostra distribuzione non l'ha fatto in fase di installazione
abilitate le shadow
password per non permettere a tutti gli utenti di vedere le password (anche
se crittate).
Infatti come già detto in un precedente articolo, pur se crittate le
password che usano
il DES possono essere decrittate con appositi programmi che cercano di
"indovinarle".
Per abilitarlo usate shadowconfig pwconv e grpconv.
3) usate come algoritmo di cifratura l'MD5 o il 3DES per le vostre password
(abilitatelo in fase di installazione).
4) editate il file /etc/securetty che contiene i terminali dai quali è
concesso
loggarsi come root. è bene lasciare solo ttyX ossia i terminali aperti da
locale
(X è un numero).
5) usate SSH al posto di telnet se vi serve loggarvi da remoto sul vostro
computer.
SSH permette di crittare le proprie connessioni da remoto, risultando quindi
molto
più sicuro. Limitate l'uso di telnet solo nei casi particolari (molto rari)
in cui
non ne possiate fare a meno.
6) usate un programma per loggare nei particolari il traffico che avviene
sul vostro PC.
Usate per esempio ippl che permette di monitorare le connessioni che si
stanno tentando,
ed ha anche una facile configurazione.
7) potete utilizzare un terminale non utilizzato
(per esempio tty9 che può essere scelto usando ALT+F9) per visualizzare l'
output di syslog.
Per farlo aggiungete:
*.* /dev/tty9
al file /etc/syslog.conf
8) usate ipchains o iptables (quest'ultimo è il più recente e dipende dal
kernel 2.4)
per mettere a punto un firewall.
9) usate l'account di root solo per svolgere operazioni che richiedano i
permessi dell'amministratore.
In altre parole, limitatene il più possibile l'uso.
10) tenete i vostri programmi e in particolar modo i vostri server sempre
aggiornati scaricando
sempre le ultime versioni (per limitare la presenza di bug "conosciti"
potenzialmente dannosi).

 nostro sistema.
Intanto comincia a postare da un vero pinguino, poi se ne riparla :)
Ciao.
ps
Quella di disattivare i servizi non essenziali è una delle cose che il
nuovo pinguino impara per prima o quasi.
-- 
Claudio Rampini Liutaio
www.claudiorampini.com

 Intanto comincia a postare da un vero pinguino, poi se ne riparla :)
Cosě magari non c'č quel "meraviglioso" effetto fiordo e i suoi post 
iniziano ad essere leggibili.
-- 
Antonio