Archive

You are currently browsing the Jose Antonio Cely Saidiza blog archives for .

MONTANDO UN GATEWAY GNU/LINUX CON TODO Y FIREWALL

By Jose Antonio Cely Saidiza

Se denomina Gateway al servidor que permite a las computadoras que se encuentran dentro de una determinada red conectarse a otras computadoras que se encuentran en otra red, la otra red es generalmente Internet.
Entonces la idea es montarnos un server que nos comparta una conexión dedicada a Internet. Para esto podemos usar cualquier CPU obsoleta que tengamos por ahí descuidada. Cualquier Pentium, o Pentium 2 nos puede servir. Asumimos que tenemos un Debian instalado, aunque esto funciona con cualquier distro.
Para compartir la conexión a Internet necesitamos hacer NAT  (Network Address Translation, en español Traducción de la dirección de red), dicho de una forma casta, es el proceso que hace algún dispositivo de hardware como un router o un servidor, el cual maneja dos redes, una interna (LAN) y una externa (Internet), comparte su conexión a Internet cambiando las IP de origen de las peticiones que vienen de la LAN por su propia IP enviándolas a Internet, cuando recibe la respuesta de Internet identifica el paquete y lo redirecciona dentro de la LAN a el equipo que hizo la solicitud. Este proceso es transparante tanto para el equipo dentro de la LAN como para el servidor que responde desde Internet
Tal vez esta animación que realicé para una capacitación aclare este concepto.

firewallejemplo.gifClick en la imagen para ver

 

QUE ES IPTABLES?

Para crear un firewall necesitamos ejecutar comandos de IPTABLES, que es la aplicación firewall para el Kernel Linux en las series del núcleo 2.4 y posteriores, reemplaza a ipchains de las series 2.2 e ipfwadm de las series 2.0. En la mayoría de los manuales que he visto de Iptables, explican como compilar el Kernel para activar Iptables, pero NUNCA lo he tenido que hacer, en las distribuciones que he probado (que son bastantes) siempre esta Iptables funcionando, no hay necesidad de recompilar el Kernel, eso lo que hace es confundir a usuarios noveles como me paso a mi hace unos años :(.
Volviendo al tema, un comando de iptables modifica el comportamiento del Kernel con respecto a la administración de los paquetes de red, es decir que le podemos decir al kernel que haga y que no haga con los paquetes, no les parece fantástico ? … Generalmente tenemos que digitar mas de un comando de Iptables para crear un firewall, es por eso que tenemos que hacer un script con los comandos para no estar digitando cada que iniciamos la maquina los comandos, pero nótese que el firewall NO ES EL SCRIPT!, en el script guardamos son los comandos de Iptables, el firewall es el mismisimo Kernel en persona, no es una aplicación por ahí volando.

EL FIREWALL CON IPTABLES

Aca pueden bajar el script que a continuación trato de explicar

#!/bin/bash
# firewall de ejercicio, con NAT, y bloqueo de puertos

Los caracteres #! indican que el shell /bin/sh es el programa a para ejecutar este script.

IPTABLES="/sbin/iptables"         # ubicacion de iptables
INTERNET="eth0"             # tarjeta de red que se conecta a Internet
LAN="eth1"                 # tarjeta de red que se conecta a la red local
IP_INTERNET="192.168.1.3"          # dirección IP de la tarjeta de red que se conecta Internet

Aca configuro variables en shell para el firewall, esto se hace para que sea mas practico hacer cambios al script. Adaptadlo a tus necesidades.

$IPTABLES -F
$IPTABLES -t nat -F


Borro reglas anteriores, esto es en caso que se haya ejecutado alguna otra sentencia de iptables, por ejemplo algún script de arranque en la distribución que usen o pruebas anteriores de nosotros mismos

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

Activamos el reenvío de paquetes en el Kernel poniendo un ‘1’ en el archivo /proc/sys/net/ipv4/ip_forward , si no se hace, el kernel sencillamente ignoraría los paquetes, por que no son suyos.

$IPTABLES -t nat -A POSTROUTING -o $INTERNET -j SNAT –to $IP_INTERNET

Masquerading es un caso especial de SNAT (source NAT) donde se cambia la dirección IP de origen por la de la interfaz por la cual sale el paquete.

# Dejo pasar los paquetes ICMP
$IPTABLES -A INPUT -i $INTERNET -p ICMP -j ACCEPT

Dejo pasar paquetes ICMP, esto es para que el firewall responda pings, nada mas, algunos dirán que es algo inseguro, pero anda tíos que este es un tutorial básico y para el troubleshoting es mejor habilitar pings.

$IPTABLES -A INPUT -i $INTERNET -p TCP –dport 80 -m state –state NEW -j ACCEPT
$IPTABLES -A INPUT -i $INTERNET -p TCP –dport 22 -m state –state NEW -j ACCEPT

Permito conexiones al puerto 80 (Web) y al puerto 22 (ssh), para poder acceder a estos servicios desde Internet

$IPTABLES -A INPUT -p TCP -m state –state RELATED -j ACCEPT

Acepto paquetes de conexiones ya establecidas

$IPTABLES -A INPUT -i $INTERNET -m state –state NEW,INVALID -j DROP
$IPTABLES -A FORWARD -i $INTERNET -m state –state NEW,INVALID -j DROP


Rechazamos paquetes de conexiones nuevas y rechazamos paquetes de forwarding de conexiones no establecidas. En palabras castas diría que bloqueo todo lo que venga de Internet y no coincida con las reglas anteriores, este es un firewall cuya política por defecto es bloquear todo.

Cuando llega un paquete al firewall, este es analizado por el kernel siguiendo el ORDEN DE LAS REGLAS, es por eso que primero aceptamos las conexión al servidor web y ssh, si un paquete es para alguno de estos servicios entonces el Kernel acepta el paquete y no continua con las demás reglas, pero si el paquete no coincide con las reglas del servidor web y ssh entonces continuara analizándolo con alguna de las ultimas reglas que sencillamente dicen que destruya el paquete.

AÑADIMOS NUESTRO FIREWALL AL ARRANQUE

Guardamos nuestro script en alguna parte de nuestro sistema de archivos, por ejemplo creamos una carpeta en /etc llamada firewall y ahí guardamos nuestros firewalls, por ejemplo nos quedaría así:

/etc/firewall/firewall.sh

Ahora nos aseguramos que nuestro script tenga permisos de ejecución con el comando

chmod +x /etc/firewall/firewall.sh

Ahora debemos añadir nuestro script al arranque, en el caso de Debian Sarge, lo podemos insertar en los archivos de configuración de los adaptadores de red, para que el script se ejecute siempre que se inicien los adaptadores de red. El archivo generalmente es  /etc/network/interfaces
Al archivo le añadimos la siguiente linea:

pre-up /etc/firewall/firewall.sh Esta linea le indica que ejecute el script antes de arrancar el dispositivo de red. El siguiente es un ejemplo de como quedaría el archivo.

labs:/etc/firewall# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
#
        pre-up /etc/firewall/firewall.sh
        address 192.168.1.3
        netmask 255.255.255.0
        gateway 192.168.1.1

auto eth1
iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0

Para usuarios de otras distribuciones como Fedora pueden sencillamente pegar el path completo al firewall en el final del archivo /etc/rc.local, y se ejecutará siempre al arranque después de que todos los servicios inicien.

DNS CACHE

Ahora necesitamos montar un DNS cache, es decir un servidor de solo cache, que almacene las peticiones DNS que le han hecho, para que cuando otro cliente vuelva a realizar la misma petición, el servidor la entrega directamente sin necesidad de buscarla directamente de Internet, esto suena simple, vale… es simple, pero nos puede ahorrar ancho de banda y optimizar nuestra red cuando se trata con bastantes equipos.
Para esto en Debian Sarge sencillamente ejecutamos

apt-get install bind9

y listo… nos aseguramos que se este ejecutando servidor al arranque y con la configuración que trae por defecto nos sirve de DNS cache. Para usuarios de otras distribuciones (joder tíos, ya es hora para que se pasen a Debian ) creo que también funciona con la configuración por defecto, por ejemplo probé con Fedora Core 3 y me funciono, pero con la versión 2 toca hacer algunos ajustes al archivo /etc/named.conf .

CONFIGURACIÓN DE LOS CLIENTES

A los clientes les configuramos como Gateway y servidor DNS la dirección IP de nuestro servidor y vola!, funciona como magia.
Ejemplo de una configuración:

Dirección IP servidor 192.168.0.1

Dirección IP maquina cliente192.168.0.10
Mascara de Red 255.255.255.0
Gateway 192.168.0.1
Servidor DNS 192.168.0.1

Ahora podemos poner nuestra maquina como Gateway… podemos dejar esta maquina sin teclado en algún rincón y os garantizo que no tendrá ningún problema (tal vez solo problemas de hardware, por dejarla descuidada en un rincón ;-) …)

Dudas, comentarios, sugerencias?
Links:
http://www.netfilter.org/
http://bulma.net/body.phtml?nIdNoticia=1522

Oct

7

Viejo servidor… por fin descansaras…

By Jose Antonio Cely Saidiza

Después serverviejode mas de un año en funcionamiento, hemos cambiando el servidor que hospedaba el dominio http://www.tecsua.com, este y otros blogs, y el hosting de algunos clientes… Pero que tenia de especial este servidor?
Un día, como por variar trabajando con computadores, internet algo de electrónica, decidí montar un servidor en serio para mi, pues montaba servidores y no tenia ninguno, queria una maquina que durara 100% del tiempo encendida, y por que no, hospedaría alguna Web y de golpe un fileserver… en fin.
Pero veamos la realidad en esa época, no tenia un duro o mas bien no queria gastar ni un peso… eso si tenia cualquier cantidad de hardware: boards, procesadores, cables, soldadura, una UPS por ahí volando, etc. inspirado por algun cobalt ,  busque la caja de computador mas vieja que tenia, le puse una board sis 530, con un procesador k6II de 500Mhz, 256Mb de RAM, controladora SCCI IBM y un par de discos de 4GB. Después de ensamblarlos en la caja, me di cuenta que sobraba mucho espacio, ademas no iba a usar ninguna unidad de cd-rom ni floppy… entonces decidí incrustar la UPS Trip litte que tenia de 500W dentro de la caja :D. Pues… joder, ahi que aprovechar es espacio al máximo!!!, además me incomodaba tanto cablerio por ahi volando…

Anda… que la UPS no cabía dentro de la caja aun después de haber arrancado las laminas en las que se atornillaban las unidades (Esto con la ayuda de un taladro y una sierra :D), entonces decidí sacar la UPS de  el chasis plástico e incrustarla dentro de la caja, no recuero quien estaba conmigo, pero me trataba de loco demente, y que decía que eso no iba a funcionar, que la interferencia del la UPS iba a bloquear el equipo, que me iba a tirar todo, en fin, algún amigo cabron pesimista.

 Después de algunas cuantas horas termine, una caja con board sis, procesador k6 de 500 MHZ, discos SCCI, y UNA UPS DENTRO!!!, esto le daba autonomíaprocesadorups al server de mas o menos una hora y media, con el pesimismo de mi amigo acerca de las interferencias y demases encendimos el equipo, nadie lo podía creer, una UPS desbaratada, amarrada con cables , alambres y cauchos dentro, en la que el transformador de la UPS estaba a 10cm del procesador (lo pueden comprobar en la foto) y funcionaba a las mil maravillas… le instale Fedora Core 1, y la deje en pruebas en la terraza de la casa donde vivía en esa época, donde tenia Internet inalámbrico, con un proveedor local (en Sogamoso). Funcionaba a la perfección… monte un webserver de pruebas, la dejaba en la noche descargando, en fin, no podía de la felicidad, hasta el día en el que deje unas cuantas ISO descargando y en la madrugada hubo un fallo eléctrico, que es muy común acá en Colombia (como diría mi mama, " se fue la luz mijo"), el súper servidor resistió, pero la conexión a Internet no, puesto que el radio ahora estaba conectado a un estabilizador sin UPS, por que la UPS la tenia el Server dentro ni modos de conectarlo, entonces llego el momento del hack 2 :D.

Necesbackserveritaba una conexión eléctrica con UPS para el corazón de mi laboratorio (el súper Server y el radio para Internet), el Server en 7 días no había tenido que apagarlo ni nada por estilo, entonces le ampute el switch de encendido, corte, uní uno que otro cable y le atornille una toma eléctrica a la parte de atrás de la caja que va directamente a la UPS, ahora ya podía conectar el radio a esa toma eléctrica y en la otra que quedaba disponible podía conectar un monitor pequeño, y si señores, ahora podía descargar ilimitadamente, el Server y el radio nunca se caían, y para rematar cuando fallaba la electricidad subía a la terraza a navegar con el Server emoticon, se imaginaran la cara de pobre demente que me hacían los vecinos. 

A principios de este año, el contrato de hosting del http://www.tecsua.com se vencía, entonces plantee la posibilidad de montar el hosting en el súper Server, no fue difícil convencer a los socios, puesto que la CPU había demostrado su eficacia, entonces sin mas ni menos la trasladamos a Bogotá y si señores!!!, ahora si estaba en serio, nada mas que el correo de la empresa y el Web hosting. Funciono durante unos 9 meses antes de que la cambiara, en esos 9 meses hospedamos mas de un dominio, los weblogs, nos escaneo papa google, el correo con qmail, el moodle, groupware, etc. etc.
saerverlado
Con nostalgia hace un mes se tomo la determinación de cambiar el server y ayer 06 de Octubre se cambio por uno nuevo… emoticon… el moodle ya pedia mucha maquina y el pobre K6II tardaba mas de 8 segundos armándonos algunas paginas, además ya estábamos manejando proyectos mas serios, y tengo que aceptarlo… no podemos ponernos a la experimentación cuando se trata con clientes emoticon. Repito, con nostalgia el súper Server fue cambiado por un Server de verdad, un ATHLON con 512MB de memoria y RAID 1 de 80GB, con Debian Sarge :'( … en este Server ahora esta hospedado todo incluyendo este weblog, los tiempos de respuesta del moodle ahora son de máximo 2 segundos, ahora en vez de 8 Gigas hay 80 Gigas… en fin un cambio del cielo a la tierra …. pero tengo que aceptarlo… "preferiría mi viejo Server " ….

Conclusiones:

  • Tener tu propio server y hospedar tus web es una cuestión de actitud :D .
  • Fue posible gracias al software libre/open source, en la que la tecnología de punta no esta reservada para las grandes empresas.
  • En donde queda la electrónica y el magnetismo? un transformador, electrónica de potencia junto a una board y nunca se bloqueo emoticon
  • Cuando armes un equipo con una caja vieja, una UPS con todo y baterias dentro ten en cuenta que va a pesar mucho emoticon.

Aca esta una recopilación de fotos. 

Dudas, comentarios, sugerencias?