Firewall: DHCP + Squid + Iptables
Dirección 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
Empecemos la configuración de nuestras tarjetas.
sudo gedit /etc/network/interfaces
Se abrirá un editor y 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 |
What is It?
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 address 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 |
Aqui indicamos que la direccion es de tipo estatico
iface eth0 inet static |
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 gedit /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 gedit /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 aptitude install squid |
Es muy importante para poder compartir el internet tener activado al Forward, 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 gedit /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.
Borra 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 aptitude install rcconf |
y lo ejecutaremos con
sudo rcconf |
Verán esta pantalla
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.
Ahora hay que configurar el Squid, para eso editaremos el siguiente archivo.
sudo gedit /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
sudo gedit /etc/squid/sites.lst |
Aqui pondremos las paginas bloqueadas, esta es mi lista, algunas paginas de video redes sociales, mensageros web etc, ademas puedes incluir palabras:
zorras perritas hi5.com www.metroflog.com igarcia.es.tl mx.youtube.com es.youtube.com www.youtube.com.us www.youtube.com www.youtube.com.mx www.dailymotion.com www.tu.tv www.ebuddy.com www.meebo.com webmessenger.msn.com www.webmessenger.msn.com www.iloveim.com |
Y sigue la lista de direcciones privilegiadas
sudo gedit /etc/squid/plus.lst |
Y agregamos las ip que deseemos
192.168.2.150 192.168.2.135 |
También puedes agregarlas por rangos
192.168.2.135-192.168.1.150 |
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 hay 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 habrá que reiniciar el servicio, esto interrumpirá todo el trafico que este pasando por el proxy, hasta que recargue el servicio según la velocidad de la computadora y la carga de trafico tardara unos 20 o 30 segundos.
yeah!!! Claces en vivo..jojojo!!
ResponderBorrarnos espera uan semana de coordinacion y desarrollo de una aplicación web....
hay q apurarnos eee...
saludos..colega lfrcorp!!!
DESARROLLO DE UN CORTAFUEGO..PROYECTO FINAL DE SEGURIDAD COMPUTACIONAL...YEAH!!! SALUDOS...
ResponderBorrarperfecto mejor imposible muy buen tuto
ResponderBorrarmmmm es copy and paste
ResponderBorrarxD se le llama código libre.
ResponderBorrar