Sei sulla pagina 1di 7

javiercarrasco.

es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

Proxy transparente con Squid + DHCP en Ubuntu 13.04


32 bits

Bueno, este mes de julio he dispuesto de más tiempo para poder instalar y configurar en
una de las aulas de informática el ordenador del profesor como PROXY
TRANSPARENTE y servidor DHCP en Ubuntu 13.04 32 bits.

Para este caso dispongo de un servidor con dos tarjetas de red, una de ellas será la que
esté conectada al router que nos da acceso a Internet (eth0) y la otra estará de cara al
aula, la red interna (eth1).

En primer lugar debemos configurar nuestras interfaces de red, la primera, eth0 se


configurará por DHCP desde el router, y la segunda, eth1, tendrá una IP estática a
nuestra elección, para mi caso 192.168.0.1, como puerta de enlace la misma y DNS para
navegar.

DHCP
Una vez configuradas las tarjetas de red, empezamos con el DHCP. Para instalar
ejecutamos desde una consola el siguiente comando.

$ sudo apt-get install isc-dhcp-server

En algunos casos puede ser que funcione dhcp3-server (obsoleto) en vez de isc-dhcp-
server.

Seguidamente debemos especificar la interfaz por la que serviremos las direcciones IP a


nuestros clientes, recordar, la interfaz interna. Editamos el fichero /etc/default/isc-dhcp-
server con nuestro editor favorito y buscamos la opción INTERFACES para indicar cual
será la nuestra.

1/7
javiercarrasco.es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

$ sudo gedit /etc/default/isc-dhcp-server

Dejándolo como se muestra a continuación.

# Defaults for isc-dhcp-server initscript # sourced by /etc/init.


d/isc-dhcp-server # installed at /etc/default/isc-dhcp-server by
the maintainer scripts # # This is a POSIX shell fragment #
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf # Path to dhcpd's PID file (de
fault: /var/run/dhcpd.pid). #DHCPD_PID=/var/run/dhcpd.pid # Ad
ditional options to start dhcpd with. # Don't use options -cf or
-pf here; use DHCPD_CONF/ DHCPD_PID instead #OPTIONS="" # On w
hat interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1". I
NTERFACES="eth1"

Ahora debemos configurar los parámetros del servicio DHCP, para eso vamos a /etc/dhcp
y antes de nada hacemos un backup de dhcpd.conf.

$ sudo cp dhcpd.conf dhcpd.conf.original

Y editamos el fichero.

$ sudo gedit dhcpd.conf

Lo podemos borrar por completo y añadir únicamente nuestra configuración, aquí dejo la
que he utilizado yo para el aula.

option domain-name "server-inf01.public"; option domain-name-serv


ers ns1.server-inf01.public, ns2.server-inf01.public; default-l
ease-time 600; max-lease-time 7200; # AulaInformatica subnet
192.168.0.0 netmask 255.255.255.0 { range 192.168.0.10 192.168.0
.40; option domain-name-servers tu_DNS1, tu_DNS2; option domai
n-name "inf01.server.public"; option routers 192.168.0.1; opti
on broadcast-address 192.168.0.255; default-lease-

2/7
javiercarrasco.es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

time 600; max-lease-time 7200; }

Guardamos y ya podemos reiniciar el servicio y comprobar.

$ sudo service isc-dhcp-server restart

En ocasiones, puede ser que necesitemos hacer reservas de direcciones IP, asignar la
misma IP siempre al mismo equipo. En el mismo fichero de configuración,
/etc/squid/dhcpd.conf, podemos añadir las siguientes líneas.

#Reservas host inf01-13 { hardware ethernet 00:1d:60:96:53:85;


fixed-address 192.168.0.13; option routers 192.168.0.1; opti
on domain-name "inf01.server.public"; }

Deberemos tener este conjunto de líneas por cada una de las reservas que queramos
tener.

Ya tenemos el segundo paso terminado.

PROXY TRANSPARENTE SQUID

En primer lugar debemos instalar Squid en nuestra máquina, desde un terminal


ejecutamos el siguiente comando.

$ sudo apt-get install squid3

El siguiente paso será configurar nuestro Squid, editamos el fichero squid.conf que
encontraremos en /etc/squid3.

$ sudo gedit /etc/squid3/squid.conf

3/7
javiercarrasco.es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

Deberemos modificar las siguientes opciones.

http_port 3128

por esta otra

http_port 192.168.0.1:3128 transparent

3128 es el puerto de Squid y debemos indicar la dirección IP del servidor, la que se


encuentre en la parte interna.

Si nuestra máquina tiene suficiente memoria, le quitamos la almohadilla a la opción


cache_men, y utilizamos un valor coherente a nuestra máquina, en mi caso la he dejado
como se muestra.

cache_mem 512 MB

Buscamos la opción cache_dir y la ajustamos como en la siguiente línea, aunque aquí los
valores de caché dependerán de nuestras preferencias y máquina.

cache_dir ufs /var/spool/squid3 2048 16 256

Y activamos las siguientes opciones, para asegurar que ningún usuario pueda acceder a
los recursos gestionados por Squid.

cache_effective_user proxy cache_effective_group proxy

Descomentamos la opción half_closed_clients y la dejamos en off, esto permitirá a Squid


cerrar las peticiones de los clientes que se queden a medias cuando cierran la conexión
TCP.

half_closed_clients off

4/7
javiercarrasco.es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

Ahora limitamos el tamaño máximo de los objetos que se guardarán en memoria, esto
puede ahorrarnos problemas con el tamaño de la caché. Descomentamos la siguiente
línea y la dejamos en 1024 KB.

maximum_object_size 1024 KB

También vamos a indicar cuando debe Squid vaciar la caché, esto nos permitirá un mejor
mantenimiento. Descomentamos las siguientes líneas.

cache_swap_low 90 cache_swap_high 95

En mi caso dejo los valores que nos dan por defecto. Como última modificación en las
opciones de configuración de Squid, buscamos la opción memory_pools, la
descomentamos y la ponemos en off.

memory_pools off

Esta opción, hará que Squid libere la memoria RAM que no esté utilizando.

Por último, tras la siguiente línea,

# # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENT
S #

Añadiremos la regla para permitir el acceso a Internet de nuestra red interna.

acl mi_red src 192.168.0.0/24 http_access allow mi_red

Y con esto ya podemos reiniciar Squid.

$ sudo service squid3 restart

5/7
javiercarrasco.es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

IPTABLES

Ya sólo nos faltan las IPTABLES, estas son muy duras de entender y no es que las
domine, pero podemos encontrar varios scripts por internet que hacen lo que
necesitamos.

Yo me he quedado con el siguiente que se adapta bastante a lo que necesito.

#!/bin/sh # IP del servidor SQUID SQUID_SERVER="192.168.0.1" #


Interface conectada a Internet INTERNET="eth0" # Interface inter
na LAN_IN="eth1" # Puerto Squid SQUID_PORT="3128" # Limpia l
as reglas anteriores iptables -F iptables -X iptables -t nat -F
iptables -t nat -X iptables -t mangle -F iptables -t mangle -X
# Carga los modulos IPTABLES para NAT e IP con soporte conntrack
modprobe ip_conntrack modprobe ip_conntrack_ftp echo 1 > /proc
/sys/net/ipv4/ip_forward # Politica de filtro por defecto iptabl
es -P INPUT DROP iptables -P OUTPUT ACCEPT # Acceso ilimitado a
loop back iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -
o lo -j ACCEPT # Permite UDP, DNS y FTP pasivo iptables -A INPUT
-i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT # Es
tablece el servidor como router para la red iptables --table nat
--append POSTROUTING --out-interface $INTERNET -j MASQUERADE ipta
bles --append FORWARD --in-interface $LAN_IN -j ACCEPT # acceso i
limiato a la LAN iptables -A INPUT -i $LAN_IN -j ACCEPT iptables
-A OUTPUT -o $LAN_IN -j ACCEPT # Redirige las peticiones de la r
ed interna hacia el proxy iptables -t nat -A PREROUTING -i $LAN_I
N -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT # Redi
rige la entrada al proxy iptables -t nat -A PREROUTING -i $INTERN
ET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT # Registra
r todo iptables -A INPUT -j LOG iptables -A INPUT -j DROP

Podéis encontrar el original aquí.

El inconveniente está en que las IPTABLES debes ejecutarlas cada vez que arranquemos
la máquina, por eso crearemos un script y haremos que se ejecute siempre al iniciar el
equipo.

Copiamos el script en /etc/init.d/.

$ sudo cp iptables_proxy.sh /etc/init.d

6/7
javiercarrasco.es
Sólo son mis apuntes y reflexiones
http://www.javiercarrasco.es

Cambiamos el propietario y los permisos del script.

$ sudo chown root:root iptables_proxy.sh $ sudo chmod 700 iptable


s_proxy.sh

A continuación editamos el fichero /etc/init.d/rc.local.

$ sudo gedit /etc/init.d/rc.local

Y añadimos las siguientes líneas bajo ### END INIT INFO.

### END INIT INFO cd /etc/init.d ./iptables_proxy.sh

Ya podremos reiniciar nuestra máquina y comprobar que se ejecuta y realiza su función


correctamente, espero os sirva de ayuda.

Au!!

Fuentes:
Sebest
Ubuntu Server Guide
tldp.org

7/7
Powered by TCPDF (www.tcpdf.org)

Potrebbero piacerti anche