Versione pdf intero documento

Transcript

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