Configuracion de Ubuntu Server 8.10: DHCP + Squid + Iptables

Despues de instalar un servidor con Ubuntu Server en este caso 8.10, lo que normalmente necesitamos es proveer de servicio de internet y con ello establecer ciertas reglas para controlar el acceso a ciertas paginas, para mantener fluido el trafico de nuestra red, el primer paso seria configurar el servidorDHCP, para asignar las ip automaticamente.

Para este caso en particular tomaremos de referencia la siguinete informacion

Direccion de red interna: 192.168.2.0/24

Interface con salida a internet: eth0

Interface conectada a la red interna: eth1

Ip de eth1: 192.168.2.1

Ip de eth0: 192.168.1.100

En este caso salimos a internet por medio de un modem, aun que esto no importa demaciado, solo es para referencia.

Lo primero que debemos da hacer es configurar las ip estaticas, como estamos usando una version de servidor asumimos que no tenemos interface grafica asi que nuestro editor de archivos sera VI , pero pueden usar el que mas les acomode.

En vi hay dos modos de trabajo edicion y comandos, para edita un archivo hay que precionar la tecla [insert] para salir del modo de edicion y pasar a comandos precionamos la tecla [esc]  si queremos guardar el archivo entramos a modo de comandos y tecleamos :w si queremos salir es :q si queremos guardar y salir :wq para forzar cualquier accion agregamos el ! forzar el guardar :w! o forzar la salida :q!

sudo apt-get install vim

sudo vi /etc/network/interfaces

Ahi pondremos esto

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
dns-nameservers 192.168.1.254

auto eth1
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0

Que significa esto?

Esto nos inidica cual es la interface de loopback nada interesante

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

Se define la configuracion para eth0 que es la tarjeta que nos conectara a internet

# The primary network interface
auto eth0

Aqui indicamos que la direccion es de tipo estatico

iface eth0 inet static

La variable addres  es una ip del rango que nos asigna el modem para salir a internet

address 192.168.1.100
netmask 255.255.255.0

La red por defecto

network 192.168.1.0
broadcast 192.168.1.255

Es la puerta de enlace que nos da salida a internet

gateway 192.168.1.254

Y los DNS en este caso usamos el mismo modem para que nos resuelva hacia internet, esto datos cambian segun la configuracion de la red que les da salida a internet

dns-nameservers 192.168.1.254

Esta es la configuracion de la tarjeta de red a la que se conectara la red interna, solo hay que indicar la direccion IP y mascara, ya que nos conectaremos a internet por la otra tarjeta de red.

auto eth1
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0

Para que cargue la nueva configuracion reiniciaremos los servicio de red

sudo /etc/init.d/networking restart

Si todo esta bien configurado veremos algo como esto

* Reconfiguring network interfaces…

* if-up.d/mountnfs[eth0]: waiting for interface eth1 before doing NFS mounts
[ OK ]

El siguiente paso es configurar el DHCP, para asignar las direcciones ip de forma automatica, para esto usaremos dhcp3-server

sudo apt-get install dhcp3-server

Primero hay que indicar en que interface de red es donde va a escuchar para eso editamos el siguiente archivo

sudo vi /etc/default/dhcp3-server

En nuestro caso la tarjeta que va a proveer el servicio es la eth1 que va a la red interna

# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. “eth0 eth1”.
INTERFACES=”eth1″

Ahora hay que configurar el dhcp, en el siguiente archivo.

sudo vi /etc/dhcp3/dhcpd.conf

Tendremos un muy extenso archivo de configuracion de lo cual solo nos servira lo siguiente, lo demas lo podemos eliminar

ddns-update-style interim;

authoritative;

subnet 192.168.2.0 netmask 255.255.255.0{
range 192.168.2.100 192.168.2.200;
option domain-name-servers 192.168.1.254;
option routers 192.168.2.1;
option broadcast-address 192.168.2.255;
default-lease-time 36000;
max-lease-time 180000;
}

Empezamos por definir sobre que red se va atrabajar y la mascara

ddns-update-style interim;

authoritative;

subnet 192.168.2.0 netmask 255.255.255.0{

Indicamos el rando de direcciones que deseamos que asigne en este caso asiganras desdela ip 192.168.2.100 hasta la ip 192.168.2.200

range 192.168.2.100 192.168.2.200;

Indicamos los DNS

option domain-name-servers 192.168.1.254;

La puerta de enlace, en este caso el servidor ubuntu, ya que todas las maquinas de la red se conectaran a nosotros para proveerlos de internet.

option routers 192.168.2.1;

Estos son los valores que en dado caso se tendrian que modificar segun su configuracion de red. Solo quedaria reiniciar el servicio de DHCP

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

Si todo esta bien obtendremos esto

* Stopping DHCP server dhcpd3                                           [ OK ]
* Starting DHCP server dhcpd3                                            [ OK ]

Ahora instalaremos el proxy, en este caso Squid

sudo apt-get install squid

Es muy importante para poder compartir el internet tener activado al Froward, para esto crearemos un archivo que se ejecutara al inicio del arranque donde tambien se cargaran las iptables, ya que estas configuraciones, se pierden cada vez que se apaga el equipo, este archivo se llamara iptables.cf, o como gusten llamarle

sudo vi /etc/init.d/iptables.cf

Y pondremos lo siguiente

iptables -F

iptables -X
iptables -Z
iptables -t nat -F

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE

iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d ! 192.168.2.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128

iptables -A INPUT -s 192.168.2.0/24 -i eth1 -j ACCEPT

iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 993 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 465 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 443 -j ACCEPT

iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p udp –dport 53 -j ACCEPT

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

Que es esto?

Las iptables nos ayudaran a decidir que dejar pasar por la red y por donde dejarlo pasar, en este caso, solo configuraremos las iptables para que nos redireccionen todo el del puerto 80 hacia el puerto 3128 que es el puerto del squid, para que no tengamos que configurar el proxy en todas las maquinas😀, y ya que compartimos el internet enmascaramos todo lo que venga de la red interna y que saldra por la interface eth0, permitiremos tambien el forward para el dhcp y tambien para el correo, para no tener problemas con los clientes de correo.

Borramos las reglas que se esten ejecuntando

iptables -X
iptables -Z
iptables -t nat -F

Aceptamos coneciones saliente, entrantes, el forward, prerouting y postrouting

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

Esta es una configuracion muy basica asi que por el momento no nos preocuparemos por el tema de la seguridad (eso es otro HowTo)

Habilitamos el enmascaramiento, para que la red interna pueda salir a internet por la conexion del server

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE

Activamos el redireccionamiento para el proxy tranparente, tambien indicamos que lo redireccionaremos siempre y cuando el destino no sea una direccion dentro de la misma red, digase servidores web locales todo lo demas al proxy

iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d ! 192.168.2.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128

Habilitamos el forward para los puertos especificos de correo y dhcp,  pop,  imap, simap, smtp, ssmtp y dhcp

iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 993 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 465 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 443 -j ACCEPT

iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p tcp –dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -i eth1 -p udp –dport 53 -j ACCEPT

Y por ultimo habilitamos el forward

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

Con esto es mas que suficiente, ahora hay que darle permisos de ejecucion

sudo chmod a+x /etc/init.d/iptables.cf

Ahora para que se ejecute al arranque instalaremos un pequeño programa que nos ayuda a configurar los archivos que se ejecutan al iniciar el sistema

sudo apt-get install rcconf

y lo ejecutaremos con

sudo rcconf

Veran esta pantalla solo hay que marcar el iptables.cf y todo listo si nececitan correr un archivo al arranque solo concedanle permisos y de la misma forma  : D.

Ahora hay que configurar el Squid, para eso editaremos el siguiente archivo.

sudo vi /etc/squid/squid.conf

De igualmanera, podemos borrar todo y dejar solo lo siguiente

http_port 3128 transparent

cache_mem 16 MB

cache_dir ufs /var/spool/squid 700 16 256

ie_refresh on

offline_mode on

acl all src 0.0.0.0/0.0.0.0
acl red_local src 192.168.2.0/24
acl plus src “/etc/squid/plus.lst”
acl sites url_regex “/etc/squid/sites.lst”
acl files url_regex -i .exe .flv .mp4 .mp3 .avi .wma .mov .acc .wav .bat .asf .mpeg .3gp .swf
acl localhost src 127.0.0.1/255.255.255.255

http_access deny red_local !plus sites
http_access deny red_local !plus files
http_access allow red_local
http_access allow localhost
http_access deny all

Para que esto funciones habremos de crear dos archivos, uno donde se guardaran las paginas que deseamos bloquear, y otro donde tendremos una lista de las ip que  tendran derechos privilegiados

vi /etc/squid/sites.lst

Aqui pondremos las paginas bloqueadas, esta es mi lista, algunas paginas de video redes sociales, mensageros web etc.

hi5.com
http://www.metroflog.com
mx.youtube.com
es.youtube.com
http://www.youtube.com.us
http://www.youtube.com
http://www.youtube.com.mx
http://www.dailymotion.com
http://www.tu.tv
http://www.ebuddy.com
http://www.meebo.com
webmessenger.msn.com
http://www.webmessenger.msn.com
http://www.iloveim.com
http://www.spacelive.com
home.spaces.live.com/
http://www.myspace.com/
spaces.live.com/
http://www.radiusim.com/
http://www.messengerfx.com
messengerfx.com/
http://www.facebook.com/
fulltono.com/
http://www.fulltono.com/
rapidshare.com
megaupload.com
http://www.veoh.com/
http://www.megavideo.com/
http://www.proxybutton.com/
http://www.videoblogs.com/
video.google.com/
imo.im
http://www.koolim.com/
koolim.com/
voltv.es/
http://www.imhaha.com
imhaha.com
proxify.com/
http://www.proxify.com/
http://www.megaclick.com/
http://www.my-proxy.com
http://www.blogger.com/
cbox.ws
megaclilck.com/
facebook.com/
youporn.com
http://www.lajaula.net
http://www.alianzo.com
http://www.goear.com
http://www.zshare.com
zshare.net
skydrive.live.com

Y sigue la lista de direcciones privilegiadas

sudo vi /etc/squid/plus.lst

Y agregamos las ip que deseemos

192.168.2.150

192.168.2.135

Ahora regresando al archivo de configuracion del squid

Indicamos que por el puerto 3128 escucharemos y que sera proy tranparente

http_port 3128 transparent

Estos valores dejarlos tal cual

cache_mem 16 MB

cache_dir ufs /var/spool/squid 700 16 256

ie_refresh on

offline_mode on

Las acl o definiciones de control de acceso, son las que nos permitiran hacer referencias hacia ciertos elementos ya sea ip, direciones etc

La definicion all indica un origen definido por todo el rango de direciones ip

acl all src 0.0.0.0/0.0.0.0

La siguiente definicion hace referencia al conjunto de ip comprendidas dentro de nuestra red

acl red_local src 192.168.2.0/24

La definicion plus hace referencia alas ip que se encuentran listadas dentro del archivo que creamos

acl plus src “/etc/squid/plus.lst”

La definicion sites hace referencia ala lista de sitios restringidos

acl sites url_regex “/etc/squid/sites.lst”

La definicion files es un conjunto de extenciones las cuales se van a restringir para su descarga, hay que tener un poco de cuidado, por ejemplo los archivos .bin pueden ser desde binarios de linux, como imagenes de cd o archivos comprimidos, si añaden esa extencion se daran cuenta que las busquedas de google desencadenaran el bloqueo del proxy y no les dejara buscar nada, ya que dentro de la url de la busqueda se generan este tipo de extenciones, la cadena .mp bloquea el yahoo mail, asi que sehan cuidadosos es este sentido, y evitense dolores de cabeza.

acl files url_regex -i .exe .flv .mp4 .mp3 .avi .wma .mov .acc .wav .bat .asf .mpeg .3gp .swf

Y por ultimo la definicion del loopback

acl localhost src 127.0.0.1/255.255.255.255

Ahora ay que generar las reglas, para permitir o denegar el acceso usamos http_acces despues la accion deny o allow aquien se lo vamos a aplicar y que le vamos a restringir

Aqui denegamos a todas las direciones de la red que sean diferente a las definidas en la lista plus los sitios definidos por la lista sites

http_access deny red_local !plus sites

De igual forma denegamos a todas las ip de la red local que sean diferentes a las definidas por la lista plus el acceso a los archivo definidos en la lista files

http_access deny red_local !plus files

Muy importante todas las reglas siempre deben de ir antes de estas ultimas de lo contrario el proxy aparentara que no esta funcionando, ya que las reglas llevan un orden de ejecucion

http_access allow red_local
http_access allow localhost
http_access deny all

Cada vez que se haga un cambio en las reglas habra que reiniciara el servicio, esto interrunpuria todo el trafico que este pasando por el proxy, hasta que recargue el servcio  segun la velocidad del servidor y la carga de trafico unos 20 o 30 segundo.

3 comments

  1. muchisimas gracias por el tip

    ha sido uno de los mas explicitos y claros q he leido y por sobretodo funcional, cambia lo de las eth a la configuracion que teniamos aki y funciono todo bien… pero debo decir d q el iptables me da errores al iniciar y la lista de pajinas “blokeadas” no funciona, pero es lo de menos .. la internet se comparte y eso es lo q yo keria. gracias por el aportazo.

  2. Actualmente tengo instalado en el servidor de la empresa Ubuntu Server 9.04 de 32bits (x86) corriendo con los siguientes servicios:
    Samba
    DHCP
    y compartiendo el internet con firestarter.
    Este servidor tiene un procesador Intel Dual Core con 2gb de RAM.
    Esta maquina esta sirviendo a 15 estaciones de trabajo.

    El problema es que algunos usuarios hacen un uso irresponsable del ancho de banda del internet, viendo videos de youtube o descargando archivos muy grandes por lo que he decidido instalar Squid y restringir el ancho de banda y el acceso a internet a quienes no deban hacer uso de el.
    De paso quiero instalar Ubuntu 10.04.1. de 64 bits

    A pesar que llevo mas de 2 años experimentando con Ubuntu Linux me considero aun un principante ya que lo poco que logrado aprender ha sido a travez de posts que leido en muchos lugares y me han ayudado a hacer algunas cosillas interesantes como levantar el servidor que tengo actualmente.
    Pero aunque he intentado instalar Squid en otras oportunidades ha sido bien frustrante porque nunca logro hacer que las estaciones de trabajo tengan acceso al correo electronico usando POP, SMTP ni tampoco IMAP.
    Fue un gran dolor de cabeza y noches enteras de no dormir sin lograr los resultados deseados, asi que deje ese proyecto por algunos meses, pero me veo ya en la necesidad de volver a retomar el proyecto pero esta vez quiero prepararme mejor.
    Segun he leido en varios posts, el exito de este proyecto reside (creo yo) en cuatro puntos principales:

    1.- Configurar correctamente ambas placas o tarjetas de red (eth0 y eth1)
    2.- Configurar exitosamente el servicio DHCP
    3.- Establecer correctamente ciertos redireccionamientos usando IPTABLES
    4.- Una configuracion adecuada de Squid.

    A mi poco entender si estas cuatro variables no estan configuradas de manera adecuada las cosas no funcionaran como necesito y como me considero ser muy novato aun en este tema acudo a ustedes para que me ayuden y me corrijan.

    1. – CONFIGURANDO CONEXIONES DE RED
    La conexion eth0 quien es la que esta conectada a mi router de internet (ISP) estara configurada automaticamente con DHCP. Aca ningun problema.

    La conexion eth1 quien es la que estara conectada a un Switch de 24 puertos a donde se contectaran todas las estaciones de trabajo, tendra una IP estatica asi:
    Adress: 192.168.0.1
    Netmask: 255.255.255.0
    Gateway: 0.0.0.0 (probablemente aparece con todos en ceros porque estoy usando Gnome y cuando consulto la configuracion de las placas es la informacion que me da)
    Se claramente porque lo he leido en otros posts que deberia de editar /etc/network/interfaces
    pero como no se como hacerlo prefiero hacerlo desde el escritorio de Gnome.

    2. – CONFIGURANDO DHCP
    Mi configuraion de DHCP server quedaria talvez asi:
    ddns-update-style interim;

    authoritative;

    subnet 192.168.0.0 netmask 255.255.255.0{
    range 192.168.0.2 192.168.0.225;
    option domain-name-servers 192.168.0.254;
    option routers 192.168.0.1;
    option broadcast-address 192.168.0.255;
    default-lease-time 36000;
    max-lease-time 180000;
    }

    3. – IPTABLES

    iptables -F

    iptables -X
    iptables -Z
    iptables -t nat -F

    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -A POSTROUTING -s 192.168.0.1/250 -o eth0 -j MASQUERADE

    iptables -t nat -A PREROUTING -s 192.168.0.1/250 -d ! 192.168.0.1/250 -p tcp –dport 80 -j REDIRECT –to-port 3128

    iptables -A INPUT -s 192.168.0.1/250 -i eth1 -j ACCEPT

    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 993 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 110 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 465 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 25 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 80 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 443 -j ACCEPT

    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p tcp –dport 53 -j ACCEPT
    iptables -A FORWARD -s 192.168.0.1/250 -i eth1 -p udp –dport 53 -j ACCEPT

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

    Sinceramente no entiendo absolutamente de nada de lo que estoy haciendo aca, lo unico que pretendo es que los usuarios puedan hacer uso del correo electronico atravez de Outlook Express o Thunderbird.

    4. – CONFIGURACION DE SQUID

    http_port 3128 transparent

    cache_mem 16 MB

    cache_dir ufs /var/spool/squid 700 16 256

    ie_refresh on

    offline_mode on

    acl all src 0.0.0.0/0.0.0.0
    acl red_local src 192.168.0.1/250
    acl plus src “/etc/squid/plus.lst”
    acl sites url_regex “/etc/squid/sites.lst”
    acl localhost src 127.0.0.1/255.255.255.255

    http_access deny red_local !plus sites
    http_access allow red_local
    http_access allow localhost
    http_access deny all

    Se que es una configuracion basica pero creo que se como irlo puliendo poco a poco para lograr las restricciones que necesito al final.
    Todas estas configuraciones las he obtenido de diferentes posts probablemente aca hayan muchos errores y es por eso que nunca logre que me funcionara Squid y el correo electronico.

    Mostrando estas configuraciones creo yo bastaria para que alguien iluminara mi camino y me dijera si voy por el rumbo correcto.

    Mil gracias por su valiosa ayuda

    Juanma

    juanma@itelgua.com

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

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