IPTABLES (Firewall)

Anuncio
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
IPTABLES (Firewall)
El propósito de un cortafuegos (firewall) es controlar el flujo de datos que salen o entran por una
interface de red. Se construye mediante un filtro de paquetes, que es un código que lee el
encabezado de un paquete de red que recibe una interface (e.g. lo, eth0 o ppp0) y luego decide si
aceptarlo, rechazarlo o redirigirlo antes de alcanzar un proceso local (daemon). En Linux, el filtro de
paquetes es parte del núcleo. A partir de la versión del núcleo 2.4 se reescribió completamente y
pasó a llamarse iptables, reemplazando al antiguo ipchains.
El Firewall deLinux
iptables
Existen varias aplicaciones de cortafuegos (firewall) para Linux, pero independientemente de cuál e
use, el corazón de todos estos programas es una sola aplicación bastante poderosa que está
integrada en el mismo Kernel de sistema operativo, su nombre: iptables. Pero ¿por qué es
mportante un firewall? Porque su propósito es controlar el flujo de datos que salen o entran por na
interfaz de red. Este se construye mediante un filtro de paquetes, que es un código que lee el
encabezado de un paquete de red que recibe e inmediatamente decide si aceptarlo, rechazarlo o
redirigirlo antes de alcanzar un proceso local (demonio: ssh, vsftpd...). En Linux, el filtro de paquetes
s parte del núcleo. Independiente del sistema operativo, un firewall es un programa que se ejecuta
n un Gateway, Bridge, PC, Laptop o teléfono inteligente
©Unidad de e-Learning 2015
1
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
capaz de filtrar los paquetes de red entrantes, salientes y reenviarlos a un proceso previamente
definido. iptables puede dar una sensación falsa de seguridad. No existe red completamente segura,
aunque esta herramienta es considerada de primera línea para la defensa de la información, es
necesario disponer de otros mecanismos de vigilancia ante actividades extrañas para mantener el
sistema seguro.
Filtro de datos
El núcleo parte con una tabla que contiene tres listas básicas de reglas llamadas “cadenas” (chain):
INPUT, OUTPUT y FORWARD, respectivamente (entrada, salida y redirección). Cuando un paquete
entra a una interfaz de red, el núcleo examina primero el destino del paquete y decide que ruta
tomar (INPUT o FORWARD). Luego el paquete es examinado en la cadena, en donde la decisión de
desechar (DROP) o aceptar (ACCEPT) el paquete es tomada. Si la decisión es aceptada, el paquete
continúa hacia el destino, siendo recibido por algún proceso local (demonio). En cambio, si la
decisión es desechar, el paquete es descartado completamente, muriendo en el lugar, antes de
alcanzar un proceso local.
Una cadena es entonces una lista de reglas de control. Cada regla dice, “Si el encabezado del paquete
es de esta manera, aplico tal acción sobre él”. La regla puede estar compuesta de una o múltiples
condiciones. Si cualquiera de las condiciones de la regla no se cumple, la próxima regla es consultada.
©Unidad de e-Learning 2015
2
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
Reglas específicas
Las opciones más comunes son:
taller~ # iptables -L
Chain INPUT (policy ACCEPT)
Target prot
opt source
destination
Chain FORWARD (policy ACCEPT)
Target prot opt
source destination
Chain OUTPUT (policy ACCEPT)
Target prot opt source
destination
Agregando reglas
Supongamos que queremos añadir una regla que permita que cualquier usuario pueda conectarse
al puerto 22. Recuerde que el puerto 22 es designado por defecto al protocolo SSH. Por supuesto,
un buen administrador de sistemas tomará otras medidas de seguridad, inclusive cambiar el puerto
©Unidad de e-Learning 2015
3
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
22 por uno totalmente inesperado, esto puede lograrlo modificando el archivo sshd_config pero
como este es solamente un ejemplo, continuaremos con el número de puerto por defecto.
Examinemos el comando:






-I Ingresamos una nueva regla
INPUT Especificamos a qué cadena pertenece esta regla (paquetes entrantes)
-i Establecemos la interfaz de red que recibirá el paquete (eth0)
-p Protocolo (tcp, udp)
--dport Puerto de destino (22 en el ejemplo SSH)
-j Salto para la toma de una decisión (para el ejemplo es aceptado)
Como el lector puede comprobar, las reglas no son tan complejas (aunque existen algunas que
requieren de un vasto conocimiento sobre el tema). Lógicamente, estas reglas se pueden reforzar para
mayor seguridad. A continuación veremos una variación de la regla anterior, en esta ocasión solo
permitiremos que una determinada dirección IP, pueda acceder al puerto 22.
En la primer regla ingresada, se agregó la opción -s que significa cuál es la dirección IP origen del
paquete, es decir la dirección IP del host que se permitirá el acceso al puerto 22. A continuación se
agrega otra regla que indica que todas las demás peticiones de conexión hacia SSH serán rechazadas.
Incluso se puede determinar que la conexión al puerto 22 solo podrá ser realizada desde una dirección
MAC específica (la complejidad de las reglas depende de la paranoia del administrador de sistemas)
Nuevamente el lector puede comprobar que estas reglas básicas no son para nada complejas.
A continuación escribiremos una regla para descartar peticiones ICMP desde el servidor. A pesar de
ser una regla básica, puede salvar al equipo de un ataque puesto que el atacante pensará que la
dirección IP a la que está realizando ping no ha sido asignada, o que el equipo que la posee está
desconectado.
taller ~ # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Los únicos cambios notables son la opción –icmp-typey echo-request, que son las peticiones de tipo
ICMP y la acción que se ha determinado como respuesta (en el ejemplo: no se hace nada).
©Unidad de e-Learning 2015
4
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
Una regla en la cadena OUTPUT tiene la misma secuencia de comandos que convergen en una
decisión (-jACCEPT, DROP o REJECT), un ejemplo sencillo:
taller ~ # iptables -A OUTPUT -p tcp --dport telnet -j REJECT
Simplemente le estamos informando a iptables que todas las conexiones salientes para el servicio
telnet sean rechazadas. Una regla también puede ser eliminada. Imagine que el administrador se haya
equivocado en una regla y esta evite el funcionamiento adecuado de alguno de los servicios. Veamos
como deshacernos de una regla:
taller ~ # iptables -D INPUT -p icmp --icmp-type echo-request -j DROP
Creación de un firewall básico
En un cortafuegos no hay que perder el objetivo (filtrar datos). Es necesario aclarar que la
única tabla que se ha tratado en este documento, es, en efecto, la tabla de filtro de contenidos,
cuyo único propósito es permitir o denegar el envío de información para acceder a un
servicio.
Para estudiar un poco la tabla nat le invitamos a estudiar el video (paso a paso) “Linux como
Router”.
También es necesario aclarar que las reglas que ingresamos a iptables solo están presentes
mientras la computadora esté funcionando, esdecir que una vez que la computadora se
reinicie o apague, estas reglas se borrarán. Obviamente Linux posee muchas alternativas para
que estas reglas no se borren. Mencionamos algunas de ellas:



Escribir estas reglas de manera íntegra al archivo rc.local del SO Linux Debian. Esto
hará que las reglas de iptables se ejecuten cada vez que arranque del sistema.
Crear un Bash Script con las reglas de iptables, otorgar permisos de ejecución copiar
la ruta de este archivo en rc.local.
Instalar algún módulo persistente que mantenga las reglas aunque la computadora se
apague.
Cualquiera de las anteriores es válida. En este documento estudiaremos la tercera alternativa
(la instalación de una herramienta persistente), la cual conseguimos con la siguiente
instrucción:
©Unidad de e-Learning 2015
5
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
Instalación:
#apt-get install netfilter-persistent
Iniciar el servicio de Persisencia de iptables.
#/etc/init.d/netfilter-persistent start
Al momento de agregar reglas podemos emitir el comando
netfilter-persistent save
Para
mayor
información
de
la
paquetería
netfilter-persistent
consultar
http://manpages.ubuntu.com/manpages/wily/man8/netfilterpersistent.8.html
Lo primero es definir las reglas necesarias para los servicios que vamos a ofrecer, partiendo
de una decisión muy importante:
 Permitimos todo y bloqueamos los servicios que no utilizaremos
o
 Bloqueamos todo y permitimos solo los servicios que utilizaremos.
Evidentemente la segunda opción es la más acertada: bloquear todo y solamente liberar lo que
necesitamos. Para conseguir este propósito ingresamos las reglas a continuación: (estas reglas no
permitirán entrada de información, por eso debemos permitir que nuestra propia computadora tenga
permisos para entrar datos, así como también aceptar paquetes de peticiones que se originen en la
misma)
Iniciamos ahora con las reglas para los servicios que ofrecemos
En la última regla aplicamos el flag –m conntrack, esta regla es especial porque crea un registro que
mantiene información de cada conexión y toda la información necesaria para esa conexión, esto es
realmente útil para las conexiones FTP.
©Unidad de e-Learning 2015
6
Sesión 1 – Unidad 5 – Desarrollo de Software Libre I
El administrador puede definir, además, algunas restricciones (bloquear ip, dar acceso solo a ciertas
ip a servicios específicos,entre otros).
Ahora solo resta guardar las reglas que se han especificado:
#netfilter-persistent save
Hasta este punto el lector notará que iptables no es tan complejo (no obstante existen reglas que sí lo
son). Siempre es importante conocer las bases de herramientas útiles como esta, una vez que hemos
ganado un poco de conocimiento es recomendable (mientras el estudio continua) apoyarse de otras
herramientas que facilitan la inserción de reglas en iptables, una de ellas (muy gentil y cómoda de
usar) es firehol (http://firehol.org/) cuyo eslogan es “iptables para humanos”. Le invitamos a que
estudie la documentación, notará la gran diferencia que existe.
No olvide la importancia de conocer las bases de iptables en crudo, esto puede informar al
administrador sobre alguna regla mal escrita que esté causando alguna incomodidad en el servidor.
Actividad de evaluación
Nombre de la actividad
Tipo de actividad
Objetivo
Instruccines
Fecha de entrega
Criterios de evaluación
Quiz
Individual
Evaluar los conocimientos adquiridos por el estudiante.
Responder un quiz de 10 preguntas respecto a lo expuesto esta
semana en el aula virtual.
Domingo, último día a las 23:59 horas
Respuestas correctas, nivel de comprensión en las preguntas
abiertas.
©Unidad de e-Learning 2015
7
Descargar