Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Linux</strong> <strong>server</strong> "<strong>tuttofare</strong>"<br />
<strong>Linux</strong> <strong>server</strong> "<strong>tuttofare</strong>"<br />
(Ultima revisione Febbraio 2005)<br />
http://home.tele2.it/marcoutilities<br />
In questo piccolo documento tento di spiegare come "riciclare" un vecchio pc utilizzandolo come <strong>server</strong> "<strong>tuttofare</strong>" in una<br />
lan di piccole dimensioni (come quella che potreste avere in casa o in una piccola azienda).<br />
Innanzitutto ci potremmo chiedere quali funzioni svolgerebbe questo "<strong>server</strong>ino"...<br />
In questo documento descrivo alcune funzioni che anche un 486 dovrebbe riuscire a svolgere e sono:<br />
-->gateway/firewall<br />
-->file <strong>server</strong><br />
-->mail virus scanner<br />
-->web cache<br />
-->intranet/internet web <strong>server</strong><br />
Ecco quindi uno schema della nostra ipotetica lan:<br />
(DMZ significa demilitarized zone, la zona di una rete esposta all'esterno - ad internet -)<br />
Di che sofware abbiamo bisogno?<br />
La soluzione piu' "pulita" e' utilizzare piu' software libero possibile quindi consiglierei:<br />
come OS: <strong>Linux</strong>, nello specifico utilizzerei l'ultima versione di Debian con installazione non grafica<br />
per le funzioni gateway e firewall (con NAT -network address traslation-): Iptables (incluso nei cd di Debian)<br />
per la funzione file <strong>server</strong>: Samba (incluso nei cd di Debian)<br />
per la funzione mail virus scanner: p3scan con ClamAV (clam antivirus) o F-Prot antivirus per <strong>Linux</strong> (purtroppo<br />
freeware e non open source)<br />
per la funzione web cache: Squid (incluso nei cd di debian)<br />
per la funzione intranet web <strong>server</strong>: questo dipende molto dalle vostre esigenze, comunque consiglierei (il glorioso)<br />
Apache o (a mio parere e' un bel programmino) pServ<br />
Ecco i link ai siti uffciali del software appena menzionato:<br />
Debian http://www.debian.org/<br />
Iptables http://www.netfilter.org/<br />
Samba http://www.samba.org/<br />
P3scan http://p3scan.sourceforge.net/<br />
ClamAV http://www.clamav.net/<br />
F-Prot for <strong>Linux</strong> http://www.f-prot.com/products/home_use/linux/<br />
Squid http://www.squid-cache.org/<br />
Apache http://www.apache.org/<br />
PServ http://pserv.sourceforge.net/ (da non confondere con Pico Web Server!!!)<br />
La maggior parte di questo software e' disponibile in comodi pacchetti Deb sui cd o con una ricerca sul sito di Debian:<br />
http://www.debian.org/distrib/packages#search_packages<br />
Infine ecco nuovamente i link alle varie sezioni del documento:<br />
-->gateway/firewall<br />
-->file <strong>server</strong><br />
1 di 4 06/03/2005 21.38
<strong>Linux</strong> <strong>server</strong> "<strong>tuttofare</strong>"<br />
-->mail virus scanner<br />
-->web cache<br />
-->intranet/internet web <strong>server</strong><br />
Configurare il gateway/firewall<br />
Ora esaminiamo nello specifico la funzione gateway/firewall che ci apprestiamo ad implementare con iptables.<br />
Iptables e' il firewall per <strong>Linux</strong> piu' famoso e funziona solo sui kernel 2.4 e successivi (rimpiazza ipchains, il firewall per i<br />
kernel 2.2, su cui un'annetto fa ho scritto questo documentino).<br />
Ricordiamo che:<br />
ppp0 e' il modem<br />
eth0 e' la scheda di rete<br />
Chiaramente, se la vostra configurazione non e' questa dovrete modificare le regole in base alle vostre esigenze.<br />
Per il suo utilizzo e' necessario compilare un kernel che includa i seguenti supporti:<br />
Nella sezione:<br />
Device drivers --> Networking support --> Networking options --> Network packet filtering --> IP: Netfilter Configuration<br />
-Tutto cio' che e' "(required for filtering/masq/NAT)" o "(required for masq/NAT)"<br />
-supporti necessari ai protocolli che useremo (ftp, irc, ecc.)<br />
-supporti ai metodi di filtraggio (i vari "match support", per comodita' ne metterei il piu' possibile)<br />
-supporto al "Packet filtering"<br />
-supporti alle regole (i vari "target support", per comodita' ne metterei il piu' possibile)<br />
Se avessimo anche bisogno del supporto a ipv6 (oggi ancora usato raramente) facciamo la stessa cosa in:<br />
Device drivers --> Networking support --> Networking options --> Network packet filtering --> IPv6: Netfilter<br />
Configuration<br />
Se avessimo problemi di compilazione del kernel potremmo rimuovere alcuni supporti che non useremo come i vari "mark<br />
support"...<br />
N.B. Le sezioni e i supporti disponibili per i kernel sono soggetti a cambiamenti, se qualcosa non corrispondesse a quanto<br />
sopra esposto e' probabilmente dovuto a queste normali modifiche. Comunicatemelo a marcomurk[at!]tele2.it - sostituite<br />
[at!] con @!!!<br />
A questo punto dobbiamo iniziare ad inserire regole (il firewall qui proposto non e' il piu' pulito ne' il piu' sicuro ma -a mio<br />
parere- è immediato e funzionale per una lan domestica o per una piccola impresa), iptables ha una sintassi piuttosto<br />
complessa, qui spiego solo i fondamentali:<br />
il programma principale e' iptables al quale si passano diverse opzioni e parametri:<br />
iptables -opzione parametro<br />
i "target" sono gli "ordini" di filtraggio e redirezione delle connessioni:<br />
ACCEPT accetta il pacchetto dati, da posporre a "-j"<br />
DROP blocca il pacchetto dati senza inviare alcuna segnalazione al mittente, da posporre a "-j"<br />
REJECT rifiuta il pacchetto dati ed invia una segnalazione al mittente, da posporre a "-j"<br />
MASQUERADE<br />
effettua nat (network address traslation), cioe' nasconde gli ip della lan esponendo all'esterno<br />
solo quello del firewall<br />
REDIRECT dirotta il traffico di rete diretto a una porta verso un'altra<br />
inoltre iptables usa le "chains" (zone di azione dei target):<br />
ingresso dati (sch. rete o modem)-->PREROUTING-->INPUT--><strong>Linux</strong>-->OUTPUT-->POSTROUTING-->uscita dati (nic O<br />
modem)<br />
\->-------->forward--------->-/<br />
Si noti che FORWARD agisce in parallelo, tuttavia cio' non permette alle connessioni di "scavalcare" le regole di INPUT,<br />
OUTPUT, PREROUTING e POSTROUTING, che sono comunque applicate.<br />
N.B. Le chain si scrivono SEMPRE IN MAIUSCOLO.<br />
Ecco una tabella con le opzioni che useremo:<br />
-A aggiunge una regola alla chain specificata<br />
-D<br />
-L<br />
-P<br />
elimina una regola, da usare con la stessa sintassi usata per -A o con la chain seguita dal numero della<br />
regola<br />
fa una lista delle regole, si possono visualizzare anche solo quelle di una particolare chain<br />
specificandola<br />
specifica le linee generali di comportamento del firewall, da usare con la chain e il comportamento di<br />
default (per intenderci: ACCEPT -accetta tutto tranne...-, DROP -blocca tutto tranne...-, REJECT<br />
-rifiuta tutto tranne...-)<br />
-F elimina tutte le regole della chain specificata<br />
2 di 4 06/03/2005 21.38
<strong>Linux</strong> <strong>server</strong> "<strong>tuttofare</strong>"<br />
-t specifica la tabella di routing (da usare per specificare le chain PREROUTING e POSTROUTING)<br />
-p specifica il protocollo in una regola (tcp,udp,icmp o all)<br />
-s<br />
-d<br />
specifica l'indirizzo ip sorgente del traffico di rete in una regola nel formato ip/subnet mask (la subnet<br />
mask 255.255.255.0 si puo' anche specificare col numero 24, inoltre la si puo' omettere -cosa<br />
sconsigliabile-)<br />
specifica l'indirizzo ip destinatario del traffico di rete in una regola nel formato ip/subnet mask (la<br />
subnet mask 255.255.255.0 si puo' anche specificare col numero 24, inoltre la si puo' omettere -cosa<br />
sconsigliabile-)<br />
-i specifica l'interfaccia di ingresso dei dati in una regola (ethx, pppx, ecc.)<br />
-o specifica l'interfaccia di uscita dei dati in una regola (ethx, pppx, ecc.)<br />
-j specifica il "target" (l'ordine di filtraggio)<br />
--sport specifica la porta sorgente del traffico di rete in una regola<br />
--dport specifica la porta destinataria del traffico di rete in una regola<br />
! --syn<br />
--icmp-type<br />
specifica se escludere i pacchetti syn (spesso usati nei portscan, ma a volte servono) da una regola, non<br />
necessita di parametri<br />
specifica il tipo di icmp (ping): echo-request = ping inviato (di richiesta) , echo-reply = risposta ad un<br />
ping<br />
--to-ports specifica la porta dove verra' reindirizzata una connessione (usata con il target REDIRECT)<br />
Le porte si possono definire singolarmente (es. 21), a gruppi (es. 23:541 = tutte da 23 a 541), o separate da virgola (es.<br />
34,87,983).<br />
Finalmente iniziamo a definire regole generali...<br />
N.B. Ogni tanto salviamo le regole inserite per evitare di dover ricominciare tutto dall'inizio con questo comando:<br />
/etc/init.d/iptables save active<br />
Il comando usa lo script di iptables con alcuni parametri, il percorso dello script potrebbe essere diverso da "/etc/init.d",<br />
inoltre il nome del file di regole potrebbe essere diverso, possiamo tentare di scoprirlo (se "/etc/init.d" e' il percorso per lo<br />
script di iptables) con:<br />
cat |grep ruleset=<br />
avremmo un output simile al seguente:<br />
ruleset="$libdir/$@"<br />
ruleset="${libdir}/$@"<br />
ruleset="${libdir}/reg"<br />
In questo caso "reg" e' il nome del file delle regole.<br />
Per caricare regole salvate in precedenza usiamo (ricordando cio' che si e' detto sopra sui parametri del salvataggio delle<br />
regole):<br />
/etc/init.d/iptables load active<br />
Inanzitutto il nostro firewall dovra' di default bloccare tutte le connessioni dall'esterno, permettere quelle dall'interno<br />
(sempre se vi fidate degli utenti della vostra lan) e non redirigere le connessioni dall'esterno all'esterno (MOLTO<br />
IMPORTANTE!!!) quindi:<br />
iptables -P INPUT DROP<br />
iptables -P OUTPUT ACCEPT<br />
iptables -P FORWARD DROP<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
poi iniziamo con le regole vere e proprie...<br />
INPUT<br />
Permette l'accesso totale a internet dalla lan:<br />
iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j ACCEPT<br />
permette il passaggio delle risposte alle richieste DNS:<br />
iptables -A INPUT -i ppp0 -p udp --sport 53 --dport 1024:65535 -j ACCEPT<br />
iptables -A INPUT -i ppp0 -p tcp --sport 53 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di https:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 443 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di pop3:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 110 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di smtp:<br />
3 di 4 06/03/2005 21.38
<strong>Linux</strong> <strong>server</strong> "<strong>tuttofare</strong>"<br />
iptables -A INPUT -i ppp0 -p tcp --sport 25 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di http:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 80 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di irc:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 6667 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di authentication service:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 113 --dport 1024:65535 -j ACCEPT ! --syn<br />
permette l'uso di ftp:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 21 --dport 1024:65535 -j ACCEPT ! --syn<br />
iptables -A INPUT -i ppp0 -p tcp --sport 20 --dport 1024:65535 -j ACCEPT<br />
permette l'uso di real player e quicktime live streaming:<br />
iptables -A INPUT -i ppp0 -p udp --sport 1024:65535 --dport 6970:6999 -j ACCEPT ! --syn<br />
permette di fare i ping (icmp) a chiunque, senza subirli dall'esterno:<br />
iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-reply -j ACCEPT<br />
permette l'uso di WinMX (potreste non volerlo...):<br />
iptables -A INPUT -i ppp0 -p tcp --sport 6699 --dport 6699 -j ACCEPT ! --syn<br />
iptables -A INPUT -i ppp0 -p udp --sport 6257 --dport 6257 -j ACCEPT<br />
permette l'uso di strane applicazioni che usano porte alte [PREFERIBILMENTE DA NON USARE]:<br />
iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT ! --syn<br />
iptables -A INPUT -i ppp0 -p udp --sport 1024:65535 --dport 1024:65535 -j ACCEPT ! --syn<br />
OUTPUT<br />
In base al nostro modello di firewall non usiamo questa chain.<br />
FORWARD<br />
Permette il forwarding di tutte le connessioni dalla lan all' esterno:<br />
iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -j ACCEPT<br />
permette il forwarding di tutte le connessioni dall'esterno alla nostra lan:<br />
iptables -A FORWARD -i ppp0 -d 192.168.0.0/24 -j ACCEPT<br />
PREROUTING<br />
Permette l'utilizzo di p3scan, usato in un'altra sezione del documento:<br />
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j REDIRECT --to-ports 8110<br />
permette l'utilizzo di squid, usato in un'altra sezione del documento:<br />
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128<br />
POSTROUTING<br />
Permette di mascherare (masquerading) tutti gli indirizzi ip della nostra lan in modo che dall'esterno si veda solo l'ip<br />
assegnatoci dall' internet service provider:<br />
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
Contattatemi per suggerimenti, errori e chiarimenti ======> marcomurk[at!]tele2.it<br />
Non capisci cosa sia [at!] nel mio indirizzo e-mail?<br />
E' una misura di sicurezza anti-spam, devi sostituire [at!] con @ per inviarmi un' e-mail...<br />
Gli spammer usano sistemi automatici basati sulla ricerca del carattere "@" nel codice html delle pagine web per aggiungere<br />
nuovi indirizzi e-mail alle loro liste!!!<br />
NON TUTTE LE PARTI DEL DOCUMENTO SONO ANCORA COMPLETE, SARANNO COMPLETATE IL PRIMA<br />
POSSIBILE...<br />
4 di 4 06/03/2005 21.38