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