CentOS-6 ¿Cómo bloquear FaceBook con iptables?

Imagen de Epe

Probado en CentOS-5 y CentOS-6 con tal de que la distro tenga un módulo de iptables llamado "string" esto funcionará

me lo pidió un amigo hoy y realmente no lo tenía previsto.

La idea es que sí, en el squid puedes bloquear de una u otra forma el sitio facebook.com (url_regex, dansguardian, etc), sin embargo los usuarios han descubrierto que si ponen https, no les bloquea el facebook.

Por qué ocurre esto? porque el proxy transparente que es lo que normalmente usas para que los usuarios sean forzados a pasar por el squid, solamente atiende el puerto 80, y no otros puertos, por ejemplo el 443.. y pum, se te escapan descaradamente.

Hoy buscando en google, y rebuscando, al final encontré el tema, cómo le solucioné?


iptables -I FORWARD -p tcp --dport 443 -m string --string 'facebook' --algo bm -j DROP

y listo, intenta ahora navegar a facebook usando https:// para que veas. El http lo manejo desde el squid.

Si tuvieras un usuario (192.168.1.123) que TENGA que usar facebook, pones debajo:

iptables -I FORWARD -s 192.168.1.123 -p tcp --dport 443 -m string --string 'facebook' --algo bm -j ACCEPT

Si quieres le controlas también el puerto 80... pero no sé, prefiero el squid para eso, quizá son viejuconadas o quizá me da pereza poner dos puertos en una línea de iptables

Comentarios

Disculpas

Mira que busque lo que mencionabas de falcon mas no encontre si no entradas muy viejas sobre el problema en cuestion me podrias echar una mano con esto.

Inconveniente en navegadores Internet Explorer y Mozilla Firefox

Al aplicar la regla:
iptables -I FORWARD -p tcp --dport 443 -m string --string 'facebook' --algo bm -j DROP
Por alguna extraña razón los navegadores IE y mozilla han logrado evadir esta regla y han ingresado a facebook luego de un buen momento de espera de la petición.

Pero hay una regla adicional que soluciona este problema:
iptables -A FORWARD -d 192.168.110.0/24 -m string --string 'facebook' --algo bm -j DROP

Esta regla evita que los paquetes que provienen de los servidores de facebook lleguen al destino (-d) 192.168.110.0/24
Con estas 2 reglas de iptables absolutamente nadie de la red 192.168.110.0/24 logra acceder a Facebook.

Victor_Sanga

¿Todos bloqueados?

Al momento vic_vcp no tengo como probar tu regla :
iptables -A FORWARD -d 192.168.110.0/24 -m string --string 'facebook' --algo bm -j DROP

pero te pregunto, aún puedes dar acceso a ciertos usuarios mediante por ejemplo:
iptables -I FORWARD -s 192.168.110.14 -p tcp --dport 443 -m string --string 'facebook' --algo bm -j ACCEPT

? La idea nos es bloquear definitivamente a todos sino tener la capacidad de controlar los accesos.
Saludos y gracias por tu aporte!

Lista de Ip's

Creo que una de las soluciones seria;
1. Permitir el libre acceso a toda la red
2. Tener una lista de ip's negadas (las que no podràn acceder a facebook)
3. Crear un script donde se aplique las 2 reglas a toda la lista de ip's negadas (dentro de un ciclo for)
asi mas o menos:
___________________________
#!/bin/bash
for ip in `ips_negadas`
do
iptables -A FORWARD -p tcp --dport 443 -m string --string 'facebook' --algo bm -j DROP
iptables -A FORWARD -d $ip -m string --string 'facebook' --algo bm -j DROP
done
__________________________________________________________
De esta manera se bloqueará el acceso a facebook solo a las ips que esten definidas en archivo "ips_negadas"

Victor_Sanga

La idea original era bloquear

Imagen de deathUser

La idea original era bloquear a todos :), y si hay excepciones que casi siempre son menos que los bloqueados, agregar reglas para las excepciones, cómo te digo, las reglas de iptables son una pila que se aplican una tras de otra, los paquetes son filtrados con la primera regla que hace match, así, si las excepciones están listadas antes del bloqueo global, los paquetes pasan sin problemas ...

Además en el for, aplicas la regla:

iptables -A FORWARD -p tcp --dport 443 -m string --string 'facebook' --algo bm -j DROP

n veces, y esta regla no cambia nunca :)

bye
;)

De acuerdo

Totalmente de acuerdo con deathUser en la mayoría de los casos lo mejor es bloquear todos y permitir determinados usuarios.

nop

Estimados esto está muy hablado, jeje
En primer lugar lo del for, quedaría así:

for sitios in google facebook twitter hotmail outlook bing msn live.com youtube
do
iptables -I FORWARD -p tcp --dport 443 -m string --string $sitios --algo bm -j DROP
echo "Bloqueado $sitios"
done

echo "Dando accesos"
for ips in 192.168.0.14 192.168.0.30
do
for sitios in facebook twitter youtube
do
iptables -I FORWARD -s $ips -p tcp --dport 443 -m string --string $sitios --algo bm -j ACCEPT
echo "A $ips le dimos acceso a $sitios"
done
done

Luego, mira lo que haces con la red:
[quote]iptables -A FORWARD -d 192.168.0.0/24 -m string --string $sitios --algo bm -j DROP[/quote]

Reenvias "lo que sea" y bloqueas los sitios buscando la cadena mediante el algoritmo B/M mmm, no me parece. En lo personal me hizo pedazos la red. (y eso que lo probé por puro protocolo).

Es verdad algunas maquinas siguen accediendo a facebook. :( No me pregunten la solución final ya que a mi me dieron en "Estructura de Datos", pura vaina, tuve que investigar mucho por mi cuenta. Seguiré investigando

Páginas