Cluster Heterogéneo De Computadoras - Configuración Firewall

11 - Configuración Firewall


Tutorial creado por Emilio José Plaza Nieto . Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-cluster-computadoras/doc-cluster-computadoras-html/node1.html
23 Febrero 2006
""Un cortafuegos en el mundillo de las redes de ordenadores e un dispositivo físico o lógico que protege una red privada del resto de la red (pública).

  • Se toma un ordenador con capacidad de rutar (por ejemplo un PC con LINUX).
  • Se le ponen dos interfaces (por ejemplo interfaces serie, o ethernet, o de paso de testigo con anillo (Token Ring), etc...).
  • Se le deshabilita el reenvío de paquetes IP (IP forwarding).
  • Se conecta una interfaz a la Internet.
  • Se conecta la otra interfaz a la red que se quiere proteger.
Ahora hay dos redes distintas que comparten un ordenador. El ordenador que actua de cortafuegos, al que de ahora en adelante llamaremos "cortafuegos", puede comunicarse tanto con la red protegida como con la Internet. La red protegida no puede comunicarse con la Internet, y la Internet no puede comunicarse con la red protegida, dado que hemos deshabilitado el reenvío IP en el único ordenador que las conecta.

Si se quiere llegar a la Internet desde la red protegida, hay que hacer primero un telnet al cortafuegos, y acceder a la Internet desde él. Del mismo modo, para acceder a la red protegida desde la Internet, se debe antes pasar por el cortafuegos.

Este es un mecanismo de seguridad excelente contra ataques desde la Internet. Si alguien quiere atacar la red protegida, primero tiene que atravesar el contrafuegos. De estar manera el ataque se divide en dos pasos, y, por lo tanto, se dificulta. Si alguien quiere atacar la red protegida por métodos más comunes, como el bombardeo de emails, o el nefasto "Gusano de Internet", simplemente no podrá alcanzarla. Con esto se consigue una protección excelente.

Un cortafuegos puede proteger una red de diversas formas. Puede proporcionar servicios de encubrimiento que nieguen o garanticen los accesos basados en: el nombre del usuario, el nombre del host, y el protocolo TCP/IP, etc. Un cortafuegos puede suministrar también una variedad de servicios que dejen paso a los usuarios autorizados (si se implementa un PROXY) mientras excluyen a los no autorizados. Al mismo tiempo, asegura que todas las comunicaciones entre la red e Internet dan la impresión de finalizar en el cortafuegos, si se usa NAT (Network Address Translation), evitando que el mundo externo pueda vislumbrar en modo alguno la estructura de la red.


Introducción al IPCHAINS


Linux emphipchains es una modificación de la codificación de Linux IPv4 firewalling y una modificación de ipfwadm. Es necesaria para la administración del filtrado de paquetes de IP en las versiones 2.1.102 o posteriores.


Ipchains es la herramienta que te permite administrar los recursos de tu red a nivel ip, permitiendo el tráfico de determinados paquetes y denegando el acceso a otros, permite cerrar puertos, redireccionarlos, esconderlos, etc. Es la herramienta necesaria para montar y administrar los cortafuegos.

Ipchains se basa en una lista (cadena) de reglas que determinan el comportamiento y las decisiones a tomar sobre paquetes cuando alcanzan un interfaz de entrada o salida. Inicialmente siempre hay cadenas de reglas que son las básicas y sobre las que se construye todo lo demás. Estas son:


  • Input
  • Output
  • Forward

Con ellas hacemos respectivamente alusión a los paquetes que entran, a los que salen, y a los que se enruta. Aparte de estas tres básicas se pueden definir otras por el usuario.


Cada lista de reglas contiene, como se ha comentado anteriormente, las reglas, a las cuales se van consultando secuencialmente desde la primera a la última, cuando se encuentra una con la que coincide el paquete, se aplica. Si al final de todas las reglas no se ha encontrado ninguna, se adopta la política por defecto que recordemos tenía dos formas: aceptar o denegar.

Los comandos para manipular las listas de reglas son (siempre en mayúsculas):


  • N: Crea una nueva cadena de reglas.
  • X: Borra una cadena de reglas que antes debe estar vacía.
  • P: Cambia la política de la cadena de reglas. Esta puede ser ACCEPT, DENY, REJECT y MASQ (ésta solo valida en forward).
  • L: Lista las reglas de la cadena de reglas.
  • F: Borra todas las reglas.
  • Z: Pone a cero todos los contadores de bytes en todas las reglas de la lista.

Los comandos para manipular las reglas que están dentro de la cadena:



  • A: Añade una nueva regla a la cadena (la añade al final).
  • I: Inserta una regla en una posición indicada.
  • R: Reemplaza una regla.
  • D: Borra una regla.

Las reglas suelen seguir el formato de: ipchains -(ADIR) opciones -j (salto)

Donde:


  • salto: Si el paquete coincide con la susodicha regla se saltará a donde indique -j que puede ser aceptar, denegar, rejectar u otra cadena definida por el usuario. De todas formas no es imprescindible el -j.
  • opciones:

    • -s fuente del paquete. Se puede expresar redes o IP, se sigue el formato: [red|ip]/mask. Si no se pone mask se usa por defecto la 32. Con 0/0 referenciamos a todo el mundo. también se pueden especificar los puertos, estos se especifican al final, tras la ip/mask y pueden ser un puerto solo o un rango que se expresa separando los puertos límites por un ``:''", para expresarlos se pueden usar números o el nombre (que se pueden encontrar en /etc/services).
    • -d igual que -s pero para destino.
    • -p especifica el protocolo (TCP, UDP, ICMP). Se pueden poner también los números equivalentes. Con el protocolo ICMP, se puede especificar el tipo y código, se puede poner en -s y -d el nombre del paquete ICMP o si se prefiere el tipo en -s y el código en -d.
    • -i especifica el interfaz por el que entra el paquete (en input) o sale (en output y forward). Se pueden especificar interfaces inexistentes. Se permite el uso del comodín ``+'' para designar un conjunto de interfaces.
    • -y referencia a los paquetes SYN que son los que se usan para iniciar una conexión. Con ! hacemos referencia a los que no son para iniciar una conexión.
    • -f la regla solo se aplicará al segundo y demás fragmentos de un paquete, no se permite especificar puertos.
    • -j especifica el objetivo de la regla que puede ser: ACCEPT, REJECT y DENY (deniegan), MASQ (aplica masquerade a un paquete, solo válida en forward), REDIRECT (redirecciona a otro puerto o máquina, RETURN (aplica la política por defecto). Se puede especificar otra cadena de reglas definidas por el usuario con lo que se aplicarán las reglas de esa cadena y luego se volverá al original. Si no se especifica -j, la regla solo realizará una actualización de la cuenta, esto es, se pueden contar el número de paquetes que cumplen la regla sin tomar acción sobre ellos (también se cuentan cuando se usa -j).
    • -l si un paquete coincide con la regla se registra en el syslog.
    • -v en conjunción con -L aumenta la información ofrecida.

Configuración del firewall


La configuración que se llevará a cabo permitirá la conexión desde el exterior al front-end a través del protocolo SSH, además se podrán conectar a la web de documentación a través del puerto 80.


#!/bin/sh
# firewall
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
if [ ! -f /etc/sysconfig/network ]; then
exit 0
fi
. /etc/sysconfig/network
# Check that networking is up.
[ $NETWORKING = ``no'' ] && exit 0
if [ ! -x /sbin/ipchains ]; then
exit 0
fi
# See how we were called.
case ``$1'' in
start)
# Activacion de firewall
echo``===============================================''
echo``Activacion de las reglas del firewall para cluster.psa.es''
echo``===============================================''
# Proteccion a nivel del nucleo
# Activacion ip_masq
echo 1 $>$ /proc/sys/net/ipv4/ip_forward
# Enable IP spoofing protection
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 $>$ $f
done
# Enable TCP SYN Cookie Protection
echo 1 $>$ /proc/sys/net/ipv4/tcp_syncookies
# Enable always defragging Protection
echo 1 $>$ /proc/sys/net/ipv4/ip_always_defrag
# Enable broadcast echo Protection
echo 1 $>$ /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Enable bad error message Protection
echo 1 $>$ /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 $>$ $f
done
# Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 $>$ $f
done
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 1 $>$ $f
done
# Inclusion de modulos de enmasqueramiento en el kernel
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_quake
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_vdolive
# Variables de configuracion del firewall
PATH=/sbin:$PATH
export ppp0ADDR=ifconfig eth0 | grep inet addr | awk print $2 | sed -e s/.*:// /24"
export device=eth0
echo ``Utilizando la ip $ppp0ADDR de la interfaz $device''newline # Reglas del firewall
# Limpiamos reglas anteriores
ipchains -F
# Set the default policy to deny
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward DENY
# Anti-spoofing
# Refuse packets claiming to be to the loopback interface
ipchains -A input -p all -j DENY -s 127.0.0.0/8 -i $device -l
# Refuse packets claiming to be to a Class A private network
ipchains -A input -p all -j DENY -s 10.0.0.0/8 -i $device -l
# Refuse packets claiming to be to a Class B private network
ipchains -A input -p all -j DENY -s 172.16.0.0/12 -i $device -l
# Refuse packets claiming to be to a Class C private network
ipchains -A input -p all -j DENY -s 192.168.0.0/16 -i $device -l
# Refuse Class D multicast addresses
ipchains -A input -p all -j DENY -s 224.0.0.0/4 -i $device -l
# Refuse Class E reserved IP addresses
ipchains -A input -p all -j DENY -s 240.0.0.0/5 -i $device -l
# Refuse malformed broadcast packets
ipchains -A input -p all -j DENY -s 255.255.255.255 -i $device -l
ipchains -A input -p all -j DENY -d 0.0.0.0 -i $device -l
# Refuse addresses defined as reserved by the IANA.
ipchains -A input -p all -j DENY -s 1.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 2.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 5.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 7.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 23.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 27.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 31.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 37.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 39.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 41.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 42.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 58.0.0.0/7 -i $device -l
ipchains -A input -p all -j DENY -s 60.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 65.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 66.0.0.0/7 -i $device -l
ipchains -A input -p all -j DENY -s 68.0.0.0/6 -i $device -l
ipchains -A input -p all -j DENY -s 72.0.0.0/5 -i $device -l
ipchains -A input -p all -j DENY -s 80.0.0.0/4 -i $device -l
ipchains -A input -p all -j DENY -s 96.0.0.0/3 -i $device -l
ipchains -A input -p all -j DENY -s 112.0.0.0/3 -i $device -l
ipchains -A input -p all -j DENY -s 169.254.0.0/16 -i $device -l
ipchains -A input -p all -j DENY -s 192.0.0.0/24 -i $device -l
ipchains -A input -p all -j DENY -s 217.0.0.0/8 -i $device -l
ipchains -A input -p all -j DENY -s 218.0.0.0/7 -i $device -l
ipchains -A input -p all -j DENY -s 220.0.0.0/6 -i $device -l
ipchains -A input -p all -j DENY -s 248.0.0.0/5 -i $device -l
# Rechazamos la conexion con nuestra ip interna
ipchains -A input -p all -j DENY -d 192.168.1.0/25 -i $device -l
# ICMP
ipchains -A input -p icmp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR -l
# SSH abierto
ipchains -A input -p tcp -j ACCEPT -s 0.0.0.0/0 -i $device -d $ppp0ADDR 22 -l
# HTTP abierto
ipchains -A input -p tcp -j ACCEPT -s 0.0.0.0/0 -i $device -d $ppp0ADDR 80 -l
ipchains -A input -p udp -j ACCEPT -s 0.0.0.0/0 -i $device -d $ppp0ADDR 80 -l
# Set uid de conexion
ipchains -A input -p tcp -y -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR -l
# Bloqueo 1:21
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 1:21 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 1:21 -l
# Bloqueo 23:79
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 23:79 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 23:79 -l
# Bloqueo 81:1023
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 81:1023 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 81:1023 -l
# Acepta ssh
ipchains -A input -p tcp -s 0/0 -d 0/0 22 -j ACCEPT
ipchains -A input -p udp -j ACCEPT -s 0.0.0.0/0 -i $device -d $ppp0ADDR 22 -l
# Acepta http
ipchains -A input -p tcp -s 0/0 -d 0/0 80 -j ACCEPT
ipchains -A input -p udp -j ACCEPT -s 0.0.0.0/0 -i $device -d $ppp0ADDR 80 -l
# Bloqueo de otros puertos
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 1109 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 1243 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 1524 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 1600 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 2001 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 2001 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 2003 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 2049 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 2049 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 2105 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 3001 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 3001 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 3128:3130 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 3128:3130 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 3306 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 3306 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 4444 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 6000:6100 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 6000:6100 -l
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 6600:6800 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 6600:6800 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 7000 -l
# Back Orifice
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 31337 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 31337 -l
# NetBus
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 12345:12346 -l
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i $device -d $ppp0ADDR 12345:12346 -l
# Reglas de redireccionamiento
ipchains -A forward -p all -j MASQ -s 192.168.1.0/255.255.255.0 -d 0.0.0.0/0
;;
stop)
echo "Parando Servicios del Firewall: "
# Borra todas las reglas por defecto
ipchains -F
# Borra todas las chain definidas por el usuario para el filtrado
ipchains -X
# Resetea los poltica por defecto de fitrado
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo ``Uso: firewall start|stop|restart|reload''
exit 1
;;
esac
exit 0



Este fichero únicamente podrá ser manipulado por el superusuario y ser localizado en directorio: $$>$/etc/rc.d/init.d/


Activación del firewall en el arranque


El firewall se activará al iniciarse nuestro sistema justo después de activarse o levantarse todos los servicios en el arranque. Para llevar a cabo eso editaremos el ficheros /etc/rc.d/rc.local y al final de este se escribirá la siguiente línea:



#activación de las reglas del firewall
/etc/rc.d/init.d/firewall start

""

Autor y licencia de 'Cluster Heterogéneo De Computadoras'

Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.