Reverse proxy con Ubuntu Gutsy
In questi giorni ho fatto un po’ di ordine, ho spostato il dominio www.spippolazione.net e gli ho messo davanti un reverse proxy.
Per vari motivi, di solito per sicurezza, per poter filtrare / censire / analizzare da un antivirus il contenuto di quel che si scaricarica, e per risparmiare banda, e’ possibile impedire ai pc della lan la navigazione di internet tramite il default gateway e usare una o piu’ macchine, dette appunto proxy, che sono deputate a scaricare le pagine web richieste dei pc della lan al loro posto, filtrarne i contenuti, fare scansionni antivirus e poi passarle ai suddetti.

Queste pagine inoltre vengono mantenute in una cache nel disco fisso del proxy di modo che se un altro pc vuole navigare una pagina gia’ visitata da qualcun’altro non la si deve scaricare di nuovo, ma gli viene passata quella gia’ presente in cache.
Inoltre e’ possibile, usando programmi, liste e policy di vari tipi, creare black list di siti dove non e’ consentito andare, o black list di file che non e’ consentito scaricare, o addirittura white list di siti sui quali e’ consentito navigare senza poter andare in giro per il resto di internet.
Questi server sono usati spesso in grandi lan di grandi reti di grandi aziende e la fanno da padrone in due: ISA server di Microsoft che non ho mai usato, e Squid, che gira in vari sistemi operativi (Windows, Linux, *BSD, OS/2, e vari unix commerciali).
Io ho sempre usato Squid, la prima volta 6 anni fa’, su una vecchia Mandrake, poi sempre su Debian, ultimamente su Devil linux, ma senza le funzioni di cache, visto che ho poco spazio su disco…
Esiste un particolare ambito in cui il proxy e’ usato alla rovescia (da qui il nome di “reverse proxy” o anche “application proxy”), e cioe’ quando viene messo su una macchina esposta su internet e non asserve una lan per navigare su internet ma viene usato dalle macchine che arrivano da internet per navigare i server web presenti una lan / dmz /web farm.

Questo viene fatto perche’, grazie alle policy di Squid, e’ possibile evitare che talune pagine siano richiamate dall’esterno, per esempio evitare sql injection o url malformati, ma soprattutto, e questo e’ il caso mio, c’e’ la comodita’ enorme di poter mettere un numero a piacere di web server su un numero a piacere di macchine i nuna DMZ, ogniuna col suo sistema operativo diverso dagli altri, e poterli raggiungere tutti usando un solo indirizzo ip pubblico.
…e con quel che costano gli ip pubblici al giorno d’oggi.
C’e’ da notare che le guide per fare reverse che si trovano in rete sono tutte piuttosto antiche, e la versione di squid presente in Ubuntu Gutsy (e si, ho un firewall fatto conUbuntu, per me e’ strano usare roba cosi’ instabile per macchine di produzione, ma vi assicuro che avra’ vita breve
), cioe’ la 2.6STABLE14 ha bisogno di impostazioni leggermente diverse da quelle che si usano di solito e che avevo usato successo in questo articolo.
Le impostazioni sono :
# Ip e porta su internet sulla quale stare in ascolto
http_port PUBLIC_IP_ADDRESS:80 transparent
# Disabilito le query ICP da e verso altri proxy
icp_port 0
# I log creati potranno poi essere utilizzati per statistiche di accesso
emulate_httpd_log on
# NON consento le connessioni dall’esterno per evitare che da internet mi scrocchino la connessione
http_access deny all
# ma consento l’accesso alla mia dmz
acl dmz dst 192.168.1.0/255.255.255.0
http_access allow datel
tutte le opzioni di tipo http_accel che si usavano prima non devono piu’ essere usate, questa versione non le usa piu’.
Ovviamente il proxy deve sapere dove trovare i nostri i nostri domini nella lan, quindi o si una un dns locale, o, se le macchine sono poche come nel mio caso, si puo’ inserire la corrispondenza ip <-> dominio direttamente nel file /etc/hosts.
Ottima spiegazione, complimenti
veramente grandiosa questa spiegazione.
come sempre
Grazie, grazie, troppo buoni, pero’ per gli autografi mettevi in fila…
bella spiegazione concisa. Ma il mio interesse è un altro: che cosa hai usato per realizzare i diagrammi delle reti pc? Soprattutto i primi due sono davvero carini e mi piacerebbe poterne creare di simili per le mie presentazioni.
Se devo essere sincero le immagini che inserisco nei post le cerco in rete
…pero’ per disegnare diagrammi di rete puoi usare Visio su Windows mentre per Linux ho sentito parlare bene (anche se non l’ho mai usato) di Dia che trovi qui: http://www.gnome.org/projects/dia/
Complimenti per l’ottimo articolo.
Avrei una domanda però. Squid ha le stesse funzioni di iptables o ci sono delle differenze sostanziali tra uno e l’altro?
Iptables e Squid sono due cose completamente diverse: squid (per sintetizzare) e’ una cache per la navigazione web, come ho raccontato nell’articolo, mente iptables e’ framework che filtra i pacchetti del traffico ip / udp / icmp in base a vari parametri, tipo indirizzo e porta del mittente, indirizzo e porta del destinatario, vari flag di stato dei singoli pacchetti e chi piu’ ne ha piu’ ne metta, sia su ipV4 che su ipV6.
squid è un proxy iptables viene usato per i firewall
si beh….so cosa sono i due programmi, ma quello che volevo sapere io è…..a parte la cache, che mi era sfuggito come giustamente spippolazione mi ha fatto notare, posso gestire un proxy anche con iptables o vado incontro a qualche problema?
cioè…..quello che ho in mente io sarebbe una cosa del genere
internet ———–> iptables ———-> lan
la macchina di mezzo che utilizza iptables bloccherebbe tutti gli accessi esterni alla lan, e approverebbe solo le connessioni iptables –> lan e viceversa, e i domini gestiti con un dns o /etc/hosts sempre sulla stessa macchina di iptables
potrebbe funzionare, o c’è qualche intoppo che mi sfugge?
Certo che si puo’ fare, quello che stai proponendo esiste gia’ e ci shiama DMZ, trovi una breve ma chiara descrizione qui: http://it.wikipedia.org/wiki/Demilitarized_zone
In pratica la macchina con iptables posta nel crocevia lan / DMZ / internet filtra il traffico dall’esterno verso le macchine che devono essere raggiungibili
ecco perfetto
sapevo a grandi linee cos’era la DMZ ma non l’avevo associata al meccanismo preciso
grazie mille
GRAZIE PER LA SOLUZIONE,.. MA GLI ZAINI NON HANNO LE GAMBE PERO’!!!
MMHHH mi sento un po’ a disagio qua, il mio BLOG è prettamente di disinformazione gossip e stupidaggini, mentre qua si fa sul serio
Ma come diavolo mi hai trovata? sulle pagine gialle o su quelle bianche!
wood
giusto per mettere i puntini sulle i, “iptables e’ framework che filtra i pacchetti del traffico ip / udp / icmp in base a vari parametri”.
iptables non e’ un framework, e se dici traffico ip comprendi gia’ tcp, udp, icmp e tanti altri.
ciao
Dall’home page del progetto http://www.netfilter.org/ “netfilter.org is home to the software of the packet filtering framework inside theLinux 2.4.x and 2.6.x kernel series. Software commonly associated with netfilter.org is iptables.”
@gabreiele: si Dia non è male anche se a volte come usabilità ti lascia scappare qualche sacramento…
[...] Reverse proxy con Ubuntu Gutsy; [...]
La questione della pubblicazione dei server web…. penso tu intendessi dire che usi un solo IP pubblico ma porte diverse…. o no?
No, uso un solo ip pubblico e una sola porta, ma piu’ ip privati, sempre sulla stessa porta. Questo permette di usare con lo stesso UNICO ip pubblico piu’ macchine, fisiche o virtuali e’ indifferente, con sistemi operativi anche diversi, cosi’ che apparira’ da internet che su un solo ip pubblico girano siti su apache su linux e su IIS su windows.
e come fai a distinguerli. Ovvero come fai da internet a specificare su quale sito web voi navigare? Dalla directory virtuale? quindi una cosa tipo: http://www.nomesito.it/webserver1, http://www.nomesito.it/webserver2, ecc
Squid dirotta il traffico ai vari web server nella lan, o dmz che sia, perche’ e’ scritto dove stanno nel suo file hosts.
Se rileggi l’articolo vedrai che ad un certo pnuto ne cito un’altro
http://www.spippolazione.net/index.php/2007/07/23/fare-hosting-di-web-server-virtuali-vmware-con-dmz-separate-e-application-proxy-squid/
leggilo, e’ scritto tutto li.
Penso di aver capito: la scelta del web server il proxy la fa in base al nome di dominio che viene richiesto. Quindi http://www.dominio1.com = stesso IP degli altri e lui vede l’url che indirizza ad un server web che è scritto nei suoi file di configurazione.
esatto
Se non si ha bisogno di sistemi operativi e applicazioni web server variegate, basta appoggiarsi ai Virtual Host di apache (o di lighttpd), no?
Un’ultima cosa: questo meccanismo si può applicare anche a cose diverse dal server web? Sto pensando a server Terminal o di posta.
No, al,eno non con squid.
Il problema sta’ nel servizio da proxare, squid gestisce solo http/https.
Se trovi altri software adatti allora si, ma non saprei come indicarti…