RESOLT!: Squid en mode transparent + Dansguardian, filtrat de continguts web

Hola a tots, he provat de seguir les instruccions que apareixen a:
http://phobos.xtec.cat/formaciotic/matform/doku.php?id=cursos:d83:modul_6:practica_3

És un servidor LTSP amb linkat 3.0. El Firefox no filtra res...

L'única diferència amb les instruccions és que com el rang d'IP que faig servir és 192.161.1.0, he modificat les línies

iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 18081

i he posat

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 18081

La resta tot igual, fins i tot he reiniciat més d'un cop...

No filtra res.

A algú li ha passat el mateix?

Gràcies

Joan Padró
Hola,

Aquesta guia és per implantar l'squid al servidor Linkat i no pas al servidor de terminals. El servidor de terminals també fa servir regles de IPTABLES que poden entrar en conflicte amb les del Squid. Potser es pot fer, però no es troba documentat.

Salut.

Projecte Linkat
Hola Pablo,

Moltes gràcies per la informació. Seguiré investigant.

Joan Padró
Hola Pablo, he fet les mateixes proves amb una màquina autònoma i passa el mateix.

A les instruccions NO s'indica que si NO es modifica el Firefox perquè faci servir l'intermediari (proxy), el DansGuardian NO filtra, ni encara que activis l'intermediari a nivell de sistema.

Si s'activa al firefox SÍ funciona. Jo he fet servir l'squid i el DansGuardian a Mandriva amb èxit sense haver de tocar els navegadors dels usuaris.

Però a Linkat, si no modifiques el Firefox, no filtra. Com es pot fer perquè filtri sense modificar el navegador?

Aquí teniu les instruccions que faig servir a Mandriva, i que aquí no m'han funcionat, per si pot servir d'ajuda.

groupadd -r squid
useradd -g squid -d /var/spool/squid -s /bin/false -r squid
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner squid -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 3128 -m owner --uid-owner squid -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -p tcp --dport 3128 -j REDIRECT --to-ports 8080
iptables-save > /etc/sysconfig/iptables
chkconfig iptables on
service iptables stop
service iptables start
chkconfig squid on

Amb aquestes instruccions d'iptables, el sistema filtra SENSE tocar el navegador, això vol dir que no cal modificar els fitxers .mozilla dels usuaris.

Moltes gràcies

Joan Padró
Hola Joan,

Si no vols tocar els preferències del Firefox, la gateway dels clients cal que sigui la IP del servidor Squid.

Mira a veure si així et funciona.

Salut.

Projecte Linkat
Hola Pablo, com que amb Mandriva no calia tocar res, he preferit buscar una solució que NO impliqués tocar configuracions de xarxa ni de navegadors.

He trobat això per Internet, i m'ha funcionat. Potser són massa línies, i podríeu "triar" quines són realment necessàries, i que no impliqués saber quina interfície de xarxa (eth0, eth1), ni quina IP s'està fent servir, perquè resulti una solució més "estàndard".

Aquestes són les ordres de tipus iptables que han fet que el DansGuardian filtri sense tocar RES MÉS!

# Allow Squid outbound access on port 8080 (Dansguardian)
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 8080 -m owner --uid-owner squid -j ACCEPT

# Allow Squid outbound access on port 80
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner squid -j ACCEPT

# Don't redirect root on port 80
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner root -j ACCEPT

# Don't redirect root on port 3128 (Squid)
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 3128 -m owner --uid-owner root -j ACCEPT

# Redirect all requests on port 80 to 8080 (Dansguardian)
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

# Accept requests on port 3128 from nobody (Dansguardian user)
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 3128 -m owner --uid-owner nobody -j ACCEPT

# Redirect all other requests on port 3128 to 8080 to prevent users from getting around Dansguardian by going directly to Squid
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 3128 -j REDIRECT --to-ports 8080

# Delete the NOTRACK rule that SuSEfirewall2 adds to the raw table of the OUTPUT chain
iptables -t raw -D OUTPUT -o lo -j NOTRACK

... que he afegit al fitxer /etc/sysconfig/scripts/SuSEfirewall2-custom.

Després he executat, com a root, les ordres següents:

chkconfig squid on
chkconfig dansguardian on
rcSuSEfirewall2 restart
rcsquid reload
rcdansguardian reload

He reiniciat la màquina per assegurar-me que tot funcionaria un cop reiniciada i HA FUNCIONAT, el DansGuardian filtra sense haver de tocar el navegador.

Si podeu "polir" les frases de tipus iptables, estaria molt bé.

Si algú pogués confirmar que també li ha funcionat així, seria perfecte.

Gràcies

Joan Padró
Hola Joan

Potser n'haguessis fet més via preguntant als fòrums del curs, de fet diria que la teva qüestió s'ha formulat i s'ha contestat. Pensa que el que demanes no és el més habitual, sembla lògic emprar-ho a nivell de màquines autònomes com una mena de "Net Nanny" sobredimensionat, però no en un servidor de thinclients que en la configuració òptima hauria de ser client a la seva vegada d'un servidor Linkat, almenys si vols que els usuaris hi puguin trobar els seus /home. Penso que un servidor de thin clients s'ha de dedicar a servir-los i el tema del filtrat de continguts via proxy transparent millor canalitzar-ho a través d'un servidor clàssic que faci d'enrutador o bé amb distribucions específiques com ipcop, smoothwall i d'altres, bé, és una opinió i suposant que no tens alguna raó molt especial per fer-ho així.

Una versió mínima del que vols seria

# L'squid és l'únic que podrà conectar al port 80
iptables -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner squid -j REJECT --reject-with tcp-reset

# El DansGuardian és l'únic que es podrà connectar al port on escolta l'squid ( 3128 ) per
defecte.
iptables -A OUTPUT -p tcp --dport 3128 -m owner ! --uid-owner dansguardian -j REJECT --reject-with tcp-reset

Uissh , m'acabo d'adonar que m'havia oblidat de dir-li que redireccioni totes les peticions al port 80 cap el port 8080 on escolta el dansguardian per defecte, ho tens escrit per dalt.

iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

Ja diràs si et funciona.



editat per: lgras, 29/Abril/2010 - 20:49
Hola, gràcies per respondre.

El que jo provo és de donar solucions integrals amb LInkat.

NO tothom (escoles, particulars, entitats) disposen d'1 servidor per dedicar-lo com a filtre de continguts.

Miro de poder facilitar equips que puguin servir com a estació de treball a casa amb filtre (per als fills d'aquelles persones que vulguin Linkat a casa), o com a servidor de terminals amb filtre/sense fitre per a una biblioteca escolar, una sala d'informàtica que té engegada dual com a estacions amb W98 o terminals de Linkat, etc.

El que provo és que tot funcioni en una sola màquina, tot i que sé que d'altres opcions (més complexes a l'hora d'implementar-les) poden donar un rendiment millor.

No tothom va "sobrat" de maquinari, per això provo de fer-ho amb una sola màquina i, sobretot, que funcioni.

Moltíssimes gràcies per la vostra ajuda.

Joan Padró
Hola, em vaig descuidar indicar que cal definir que el tallafocs s'iniciï en iniciar-se al sistema, des del Yast, opció Tallafocs, marcar que s'iniciï en engegar el sistema, o des d'una consola "yast2 firewall" i marcar l'opció que fa que s'iniciï en engegar-se el sistema.

Gràcies de nou.

Joan Padró