Teoria y practica con Iptables

Anuncio
PRÁCTICA 5: USO DE CORTAFUEGOS
IPTABLES
1. ¿ Qué es IPTABLES ?
En linux, el filtrado de paquetes se controla a nivel del kernel.
Existen módulos para el kernel que permiten definir un sistema de reglas para aceptar o
rechazar los paquetes o las comunicaciones que pasan por el sistema. Estos sistemas de
reglas conforman lo que se conoce como firewall o cortafuegos; en otros sistemas los
firewall pueden estar implementados en software y estar desvinculados del sistema
operativo, pero en el caso de linux, el firewall se puede montar a nivel de kernel y no es
necesario instalar un software adicional que a veces tiene agujeros.
En versiones de Kernel anteriores a la 2.4 se disponía de los módulos IPCHAINS para
montar firewalls, así como de otros módulos de soporte para comunicaciones concretas
(enmascaramiento de FTP, de IRC, Real Audio etc.).
Gracias a IPCHAINS, además de poder definir normas de firewall muy precisas,
también podía hacer que un linux funcionara como gateway enmascarando todas las
peticiones de una LAN.
IPCHAINS ha muerto, viva IPTABLE. A partir del kernel 2.4 se esta dando soporte a
otro modulo para filtrado de paquetes mucho más potente que IPCHAINS, llamado
IPTABLES.
Para acceder a ciertos sitios ftp tendremos problemas usando IPCHAINS con el kernel
2.4. A pesar de que IPCHAINS siga funcionando, ya no tendremos los antiguos
módulos para solventar los problemas de acceso a servicios especiales,
Y se recomienda pasarse a IPTABLES.
En el siguiente gráfico se distingue el camino que siguen los paquetes al pasar por un
firewall con IPTables, y nos guía sobre la forma de aplicar las reglas.
(En general, a lo que se ruta a través del firewall se le aplica FORWARD y a lo que va
al firewall se le aplica INPUT).
2. Diferencias respecto a IPCHAINS
IPTABLES es más completo que IPCHAINS, permite un control aún más preciso,
aunque también es más complejo.
En principio el sistema sigue siendo el mismo. Hay que cargar un modulo del kernel (se
puede hacer en el propio script de firewall), y ejecutar un script de shell convencional
que tiene el aspecto de un conjunto de reglas. Un script de este tipo se podría complicar
y sofisticar tanto como se deseara, eso ya es cuestión de cada cual.
La sintaxis, obviamente cambia, aunque no mucho.
DENY no existe, ahora sería DROP.
MASQ y REDIRECT no existen como destinos de paquetes.
REJECT extendidos con mas opciones
LOG con más opciones, muy útil para monitorizar y depurar
… y más que se pueden ver en el Howto y en otras páginas.
3. Elementos básicos de iptables
El script:
· Comienza cargando los módulos necesarios (los imprescindibles y los auxiliares, como
el de ftp masquerading),
· Establece algún bit como por ejemplo el de forwarding.
· Luego borra todas las reglas actuales (flush).
· Establece las políticas por defecto para la aceptación, reenvío y salida.
· Y finalmente va aplicando todas las reglas de firewall, que varían enormemente
dependiendo de las necesidades de cada red.
El orden de algunos puntos no tiene por que ser siempre así.. Por lo general, una
aproximación buena suele ser CERRAR todo por defecto, e ir abriendo lo que se
necesite. Aunque esta última aproximación da mucho más quebraderos de cabeza.
-Ordenes básicas:
iptables –F : flush de reglas (las elimina)
iptables –L : listado de reglas que se están aplicando
iptables –A : append, añadir regla
iptables –D : borrar una reglas, etc…
-Ejemplo de regla:
#Regla que acepta conexiones al puerto 80
iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p TCP --dport www -j ACCEPT
ANATOMIA DE LA REGLA:
iptables: comando iptables (no hay que olvidar que las reglas son un shell script)
-A: append, opción para añadir la regal
INPUT: estado del paquete (al entrar es input).
-i eth0: interfaz de red eth0
-s 0.0.0.0/0: dirección de acceso (cualquiera en este caso)
-p TCP: tipo de puerto
--dport: puerto de destino
-j ACCEPT: destino del paquete (se acepta, podría ser DROP, LOG, REJECT,..)
-Guía rápida de flags:
-i = –in-interface : el interfaz por el que se entra (eth0,eth1, ppp0,…)
-o = --out-interface: el interfaz por el que se sale (eth0,eth1, ppp0,…)
-s : source address. Ej: -s 192.168.1.0/24
-d : destino. Ej: -d 84.56.73.3
-p : tipo de protocolo(TCP,UDP,ICMP). Ej: -p TCP
--sport : puerto de origen
--dport: puerto de destino
-Notas:
-i se usa con reglas INPUT y FORWARD
-o se usa con reglas FORWARD y OUTPUT
A partir de estas normas básicas, conociendo la anatomía básica de una regla, y viendo
ejemplos ya tenemos
suficiente material para hacernos con el dominio de IPTABLES.
IMPORTANTE
El orden en el que se ponen las reglas de firewall es determinante. Normalmente cuando
hay que decidir que se hace con un paquete se va comparando con cada regla del
firewall hasta que se encuentra una que le afecta (match), y se hace lo que dicte esta
regla (aceptar o denegar); después de eso NO SE MIRARÁN MÁS REGLAS para ese
paquete. ¿Cuál es el peligro? Si ponemos reglas muy permisivas entre las primeras del
firewall, puede que las siguientes no se apliquen y no sirvan de nada.
Ejercicio: comprobar el estado de IPTABLES
iptables -L -n
Ejercicio: Comprobar el estado de los puertos del sistema con netstat.
netstat -ln
3.1 Proteger la propia máquina
Muy bien, tenemos una máquina linux pinchada en internet y queremos protegerla con
su propio firewall. Lo único que tenemos que hacer es crear un script de shell en el que
se van aplicando las reglas.
Los scripts de iptables pueden tener este aspecto:
- Borrado de las reglas aplicadas actualmente (flush)
- Aplicación de políticas por defecto para INPUT, OUPUT, FORWARD
- Listado de reglas iptables.
Ojo con el orden de las reglas!
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina
echo -n Aplicando Reglas de Firewall...
## FLUSH
iptables
iptables
iptables
iptables
de reglas
–F
–X
–Z
-t nat –F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales)
iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s ?.?.?.? -j ACCEPT <- modificar IP
# A un compañero le dejamos entrar al servidor de internet
iptables -A INPUT -s ?.?.?.? -p tcp --dport 80 -j ACCEPT <- modificar IP
# A otro compañero le dejamos usar el ssh
iptables -A INPUT -s ?.?.?.? -p tcp --dport 22 -j ACCEPT<- modificar IP
# El puerto 443 de www debe estar abierto, es un servidor web seguo.
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# El puerto 80 de www debe estar cerado, es un servidor web seguo.
iptables -A INPUT -p tcp --dport 80 -j DROP
# Y el resto, lo cerramos
iptables -A INPUT -p tcp --dport
iptables -A INPUT -p tcp --dport
iptables -A INPUT -p tcp --dport
iptables -A INPUT -p tcp --dport
20:21 -j DROP
3306 -j DROP
22 -j DROP
10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Ejercicio: Escribir el script modificando las IP para que correspondan con
algún compañero. Modificar los permisos del script para poder ejecutarlo
chmod 750 firewall1.sh
, y ejecutarlo.
Ejercicio: Comprobar el estado de IPTABLE después de aplicar el script
iptables -L -n
Ejercicio: Comprobar que hace lo que se espera probando el acceso desde
alguna maquina vecina a la web (http://... Y https//..)
Ejercicio: Comprobar que hace lo que se espera probando el acceso desde
alguna maquina vecina a través de ssh.
Ejercicio: Hacer pequeñas modificaciones en el script y probar el acceso
desde distintas maquinas a través de diferentes puertos.
4. Depurar el funcionamiento del firewall
Programas útiles
IPTRAF. Sin duda alguna uno de los programas más prácticos para depurar el firewall
es IPTRAF, ya que con el podemos observar si la conexiones se establecen o no; es un
programa de consola que es aconsejable controlar ya que muestra en tiempo real el
tráfico que atraviesa nuestra máquina con todo lujo de detalles: origen/destino de ips y
puertos, tráfico total o tráfico total según el interfaz de red, etc… Si vemos muchas
conexiones simultaneas y nos perdemos, existe la posibilidad de aplicar filtros para
captar solo aquello que nos interesa.
NMAP. La herramienta para escanear puertos por excelencia, rechace imitaciones. Es
una herramienta de consola rápida, efectiva y con multitud de opciones. Podemos usarla
desde máquinas ajenas a nuestra red para comprobar si realmente el firewall esta
filtrando correctamente y en cierta manera para hacernos una idea de que "visión"
pueden tener los hackers de nuestro sistema.
Ejercicio: descargarse IPTRAF e instalarlo.
Se puede encontrar en la pagina http://cebu.mozcom.com/riker/iptraf/
Descomprimir el fichero .tar.gz usando:
tar zxvf iptraf-2.7.0.tar.gz
o bien usando:
gunzip iptraf-2.7.0.tar.gz
tar xvf iptraf-2.7.0.tar
Para compilar e instalar el programa ejecuta
./Setup
Los ficheros binaries resultants se colocan en el directorio /usr/local/bin . Y todos los
directories necesarios son creados.
Ejercicio: Ejecutar iptraf y familiarizarse con el programa. Probarlo para
varios de los scripts anteriores
Para profundizar:
En la web existe un manual que podéis consultar,
http://cebu.mozcom.com/riker/iptraf/
Probar filtrando para mejorar la visibilidad de los puertos que se desean
comprobar
También podéis probar NMAP con los scripts que habéis hecho, el NMAP lo
podéis encontrar en: http://www.insecure.org/nmap/nmap_download.html y el
manual en español ¡que existe! Esta en:
http://www.insecure.org/nmap/data/nmap_manpage-es.html
Para obtener más información se recomienda el articulo:
http://www.pello.info/filez/firewall/iptables.html en que podéis encontrar
ejemplos para otras configuraciones de firewall más complejos.
Descargar