Squid en modo transparente

Hola a todos, fui un pelín mentiroso cuando dije que la práctica de Dansguardian iba a ser la última del curso. Esta sí que va a ser la última. Hoy vamos a ver cómo configurar Squid en modo transparente.

¿Modo transparente?

Normalmente, los proxys navegan a través del puerto 3128, y hay que configurar los clientes para que puedan acceder a internet a través del proxy. En cambio, en un proxy transparente, no es necesario configurar ningún cliente, todo se configura una única vez en la máquina en la que está instalado el proxy y los clientes no saben que navegan a través de este. Se redirige el tráfico del puerto 80 al 3128.

Empezando

Supongamos que tenemos una red local con tres equipos que deseamos conectar a internet, pero antes queremos que pasen por un proxy, ya sea para filtrar contenidos o para almacenar información en la caché. Para ello necesitamos una máquina con dos interfaces de red, una para nuestra red local y otra que nos conectará a Internet. Sabiendo esto, vamos a comenzar.

Configurando las interfaces de red

En primer lugar vamos a mostrar información referente a nuestras interfaces de red. En una consola tecleamos:

ifconfig

Como vemos en la imagen, poseemos dos interfaces de red, etc0 y eht1eth0 será la interfaz que nos conectará con nuestra red local y eth1 nos conectará con el ruter que a su vez no conectará a Internet. Necesitamos configurar eth0 de forma estática, para ello abrimos un terminal y tecleamos:

sudo gedit  /etc/network/interfaces

Y dejamos el archivo de la siguiente forma:

auto lo
     iface lo inet loopback

auto eth1
     iface eth1 inet dhcp

auto eth0
     iface eth0 inet static
     address 10.0.0.1
     netmask 255.0.0.0
     gateway 10.0.0.1

Bien, ya tenemos configurada eth1 como dinámica y eth0 como estática. Ahora reiniciamos el servicio de red, desde la terminal:

sudo /etc/init.d/networking restart

Instalando el servidor DHCP

Vamos ahora a instalar el servidor DHCP en nuestra máquina, desde un terminal escribimos:

sudo aptitude install dhcp3-server

Ya tenemos instalado nuestro servidor DHCP, ahora vamos a configurarlo, así que tenemos tecleamos lo siguiente en una consola:

sudo gedit /etc/dhcp3/dhcpd.conf

Una vez con el archivo abirto, borramos el contenido y lo dejamos aproximadamente así:

option domain-name "midominio.com";
option domain-name-servers 10.0.0.1;
option subnet-mask 255.0.0.0;
option netbios-name-servers 10.0.0.1;
option routers 10.0.0.1;
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.0.0.0 {
     range 10.0.0.2 10.0.0.100;
     option domain-name-servers 10.0.0.1;
     option subnet-mask 255.0.0.0;
     option netbios-name-servers 10.0.0.1;
     option routers 10.0.0.1;
     host PC1 {
          option host-name "PC1";
          hardware ethernet 00:1E:24:6F:2B:5C;
          fixed-address 10.0.0.11;
     }
     host PC2 {
          option host-name "PC2";
          hardware ethernet 00:1E:24:1C:53:DF;
          fixed-address 10.0.0.12;
     }
     host PC3 {
          option host-name "PC3";
          hardware ethernet 00:1E:24:CC:1A:E2;
          fixed-address 10.0.0.13;
     }
}

Explicación del contenido: En el fichero anterior, debemos incluir un nombre de dominio si pertenecemos a uno, la dirección de la máquina donde está el servidor con su máscara y diversas opciones más como NetBios y los tiempos de asignación de direcciones.

En subnet, vamos a configurar cómo se asignarán las direcciones para esa red (que está controlada por eth0), aparte de indicarle la misma información que antes, le debemos de especificar el rango con el que queremos que trabaje. En mi caso he especificado del 1 al 100.

En host, definimos la dirección que se asignará a cada máquina de nuestra red, se especifica el nombre real, su dirección MAC y la dirección IP que se asociará a dicha MAC. Así hasta que completemos todos los equipos de los que dispondrá la red.

Ahora reiniciamos el servicio de DHCP con el siguiente comando:

sudo /etc/init.d/dhcp3-server restart

Creando las iptables

Vamos ahora a crear las llamadas iptables. Las iptables son un complemento del framework Netfilter, usadas para el filtro de tráfico en una red. Nosotros vamos a usarlas para redirigir el tráfico del puerto 80 al 3128, entre otras cosas.

Para crear nuestras iptables, debemos crear un archivo con ellas, para crear el archivo tecleamos el siguiente comando en un terminal:

sudo gedit /etc/init.d/proxy-rules.sh

Al nuestro archivo le añadimos lo siguiente:

echo "Aplicando las reglas para el direccionamiento, espere..."
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -F
iptables -X
iptables -Z

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -s 10.0.0.0/8 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.0/8 -j MASQUERADE

Nota: Yo he elegido el nombre de proxy-rules para el archivo, podéis elegir el que queráis, pero obviamente que sea de carácter descriptivo.

Explicación de las iptables: Las primeras reglas iptables eliminan cualquier iptable que se encuentre en ejecución en ese momento. La primera cadena de iptables, direcciona el tráfico de nuestra red desde el puerto 80 al puerto 3128. La segunda cadena de iptables, se encarga de enmascarar nuestra red para que pueda salir a Internet mediante la interfaz eth1.

Descargando, compilando y configurando Squid

Vamos ahora a descargar Squid desde su web oficial para después compilarlo. Las versiones disponibles las podemos ver en http://www.squid-cache.org/Versions/, sería ideal trabajar con la última versión estable de Squid, en este caso, la última versión estable es la 3.0. Antes de descargar Squid, nos vamos al directorio /usr/local/src, para ello tecleamos en la consola:

cd /usr/local/src

Una vez allí, volvemos a teclear en el terminal lo siguiente:

sudo wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE24.tar.gz

Eso descargará la última versión de Squid al directorio en el que nos encontramos. Cuando ya tenemos descargado el paquete de Squid, tenemos que descomprimirlo, por lo que tecleamos en un terminal:

sudo tar xvzf squid-3.0.STABLE24.tar.gz

Muy bien, ya tenemos los archivos de Squid listos para compilar, para esto necesitaremos tener instalado un compilador de C/C++ en nuestra máquina, por lo que en un terminal tecleamos:

sudo aptitude install build-essential

Una vez instalado el compilador, y estando dentro de /usr/local/src, tecleamos en un terminal:

cd squid-3.0.STABLE24

Bien, ya estamos dentro de dicho directorio, ahora de nuevo en un terminal tecleamos lo siqguiente:

sudo ./configure --prefix=/usr/local/squid --enable-linux-netfilter  --enable-follow-x-forwarded-for --enable-x-accelerator-vary

Cuando el proceso acabe (es posible que esté unos minutos) tecleamos esto ahora:

sudo make

Este proceso también tardará unos minutos posiblemente. Al finalizar este proceso, escibimos lo siguiente en la consola:

sudo make install

Ya tenemos Squid instalado en /usr/local/squid. Vamos ahora a crear el usuario y grupo squid. En un terminal tecleamos:

sudo useradd squid

Y después:

sudo groupadd squid

Nota: Es posible que al añadir el grupo nos diga que ya existe un grupo llamado squid, no pasa nada, nos saltamos este paso y sin problemas.

Ahora vamos a hacer al usuario squid dueño de los directorios de Squid. Para ello nos vamos a un terminal y tecleamos:

cd /usr/local/squid

Una vez estamos en este directorio, tecleamos lo siguiente:

sudo chown -R squid *

Y depués:

chgrp -R squid *

Con esto, el usuario squid ya es dueño de los directorios que maneja Squid. Vamos ahora a configurar nuestro Squid para permitir la conexión a nuestra red, nos vamos a un terminal y tecleamos:

sudo gedit /usr/local/squid/etc/squid.conf

Una vez tenemos el archivo, con Ctrl + F, buscamos la línea http_port, la borramos y la añadimos de esta forma:

http_port 10.0.0.1:3128 transparent

Ahora buscamos la línea cache_dir, y la dejamos de la siguiente manera:

cache_dir ufs /usr/local/squid/var/cache 1024 16 256

Volvemos a realizar otra búsqueda, esta vez de cache_effective_user, aquí añadimos dos líneas:

cache_effective_user squid
cache_effective_group squid

Ahora vamos a añadir una ACL, nos vamos a la zona de las ACL, que está por la línea 600 más o menos, y allí añadimos:

acl nuestra_red src 10.0.0.0/24

Vamos ahora a añadir una regla http_access, nos vamos aproximadamente a la línea 645, y añadimos:

http_access allow nuestra_red

Ya queda poco por hacer, ahora vamos a crear los directorios para la caché de Squid, así que desde un terminal tecleamos:

sudo /usr/local/squid/sbin/squid -z

Ahora toca configurar rc.local para que arranque Squid y proxy-rules.sh al iniciar Ubuntu, esto es fácil, desde el terminal tecleamos:

sudo gedit /etc/rc.local

Una vez con el fichero abierto, añadimos lo siguiente:

sh /etc/init.d/proxy-rules.sh
cd /usr/local/squid/sbin/
./squid

Magnífico, ya sólo queda reiniciar nuestra máquina y comprobar que hay dos procesos de Squid ejecutándose en nuestro equipo. Una vez con la máquina reiniciada, volvemos a abrir un terminal y tecleamos:

sudo ps ax | grep squid

Si nos apareden los dos procesos de Squid significa que todo está correcto, ya tenemos nuestro proxy caché transparente instalado y configurado.

About these ads

Publicado el 11 marzo 2010 en Internet, Proxy, Seguridad, Squid, Tutoriales, Ubuntu. Añade a favoritos el enlace permanente. 16 comentarios.

  1. Pedazo tutorial tio, me vendrá bien si algún día arranco por equivocación mi Ubuntu xD.

    Un saludo.

  2. Excelente tutorial!, muchísimas gracias por el aporte, todo funciono al paso

  3. William Garcia

    Buen dia

    muchas gracias por el tuto, pero no he podido cinfugurar mi servidor squid, tenemos un servidor win 2008 server, el que asigna las ip del formato 192.168.215.XXX, internet actualmente esta conectado directamente al switch, por ende no hay filtro, quiero configurar el squid con dos tarjetas la eth0 conectaria el cablemodem el que provee internet esta se obtiene automticamente y la eth1 al switch.

    mi duda es que si puede haber conflicto por el DHCP del ubuntu y del win server

    agradeiendo de antemo en lo que me pueda colaborar

    muchas gracias

    • caternolmac

      hola respondiendo a tu pregunta no habria conflicto ya que las maquinas que se conectan al switch estaran en otra red pues el servidor squid estara en medio y es el el que entregaria las ip a las maquinas de su subred problemas habrian si los dos servidores dhcp estarian en la misma red pero eso es una burrada yo he creado redes en empresas hasta con 3 dhcp server y no he tenido ningun comflicto espero haber aclarado tu duda

    • caternolmac

      hola mira no havia leido bien tu pregunta pero mira si tu servidor esta antes del server squid no habria conflicto pero si esta en la subred del squid lo que pasaria es que las maquinas cogerian ip de cualquira de ellos pero podrias tener conflictos lo que puedes hacer es saltarte la instalacion del server dhcp en el server squid y hacer nat sin mas, y las maquinas puestas en dhcp buscaran un server que les asigne una ip aunque yo te recomendaria que quitaras el winserver y pusieras el dhcp server en el squid espero haberte ayudado

  4. Funciona a la perfección pero solo en la versión de Ubuntu 10.04, trate de hacerlo en la 11.04 y nada.
    gracias por el tutorial muy bueno y el único que es lo suficientemente claro.

  5. William García

    Excelente tutorial, como hago para reiniciar el squid por comando.

    muchas gracias

    William Garcia

  6. luego de tener squid en modo transparente como hago para instalar tunder cache3 y proseguir con la configuracion para cachear paginas web como por ejemplo de youtube etc…………………

  7. Excelente tutorial.
    En mi caso el dhcp lo hago por router. Al script del iptables le agrego el comando
    route add -net 0.0.0.0/0 gw 10.0.0.2 dev eth1.

    Mi problema es que al final también agrego una regla para filtrar por dirección ip, por ejemplo:
    iptables -A OUTPUT -p tcp -d 69.63.176.0/20 –dport 443 -j DROP
    iptables -A OUTPUT -o eth1 -p tcp -d 69.63.176.0/20 –dport 443 -j DROP

    pero solo me filtra de modo local y no en las demás PC de la red.

    Saludos.

  8. Amigo encontre tu guia publicada en otra web pero le cambiaron estas partes: soy un novato en ubuntu asi si me podrias ayudar porque me doy cuenta que la guia original es tuya, checa esto le cambiaron estas cosas.

    auto lo
    iface lo inet loopback

    auto eth1
    iface eth1 inet dhcp

    auto eth0
    iface eth0 inet static
    address 10.0.0.1
    netmask 255.0.0.0
    gateway 10.0.0.1

    ======== la cambiaron por ==========

    auto lo
    iface lo inet loopback

    auto eth1
    iface eth1 inet dhcp

    auto eth0
    iface eth0 inet static
    address 10.0.0.1
    netmask 255.0.0.0
    network <————————— agregar estas dos instrucciones en vez de gateway
    broadcast en que cambia ¿perjudica o veneficia?

    la otra parte

    iptables -t nat -A PREROUTING -s 10.0.0.0/8 -p tcp –dport 80 -j REDIRECT –to-port 3128
    iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.0/8 -j MASQUERADE

    la cambiaron por

    iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128
    iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/8 -j MASQUERADE

    la pagina es

    http://www.ubuntu-es.org/node/145220#.UBV0-6PDten

    • Gracias por la información, Heriberto.

      Estaba al tanto, de que por ahí cogen material mío… Pero bueno, no me preocupa, de hecho me gusta :-)

      Un saludo.

  9. Hola amigo muy buen post, quisiera por favor saver como configurar el ncsa_auth ya que en la ruta de instalacion de squid no esta la carpeta a la q por defecto se hace referencia en la mayoria de tutos. Gracias

    • Hola Nuzox,

      Se puede dar el caso de que el archivo al que intentas acceder haya cambiado de ruta porque estés trabajando bajo una versión de 64 bits. De ser así, es probable que el archivo se encuentre en:

      /usr/lib64/squid/ncsa_auth

      De cualquier forma, siempre puedes buscar la ubicación exacta ejecutando el siguiente comando:

      sudo find / -name ncsa_auth

      Un saludo ;-)

  1. Pingback: Los números de 2010 « The bit developer

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: