11.06.2013 Views

Linux server tuttofare - Teletu

Linux server tuttofare - Teletu

Linux server tuttofare - Teletu

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!