PDF de programación - Introducción a Netfilter/Iptables

Imágen de pdf Introducción a Netfilter/Iptables

Introducción a Netfilter/Iptablesgráfica de visualizaciones

Publicado el 23 de Mayo del 2021
625 visualizaciones desde el 23 de Mayo del 2021
173,3 KB
8 paginas
Creado hace 11a (12/02/2013)
Introducción a Netfilter/Iptables

Enrutamiento en Linux
El enrutamiento es el proceso de envío de paquetes entre diferentes redes. Los routers pueden ser
dispositivos hardware u ordenadores normales con el software apropiado. Linux puede ser la solución a
nuestras necesidades de enrutamiento.

En nuestro caso, Network Address Traslation (NAT) es la forma más sencilla de dar acceso a Internet a
los equipos de la red local: con una sólo IP pública, todos los equipos saldrán a Internet.

Nuestro router debería tener al menos dos tarjetas de red, una conectada a la LAN y la otra a la WAN
(Internet).

Los equipos en la red local usarán como puerta de enlace la IP interna del router. Linux recibirá los
paquetes, los procesará y los reenviará a Internet.

Un servicio muy conveniente en un router es un cortafuegos, que permite el filtrado de paquetes tanto
entrantes como salientes para proteger nuestra red de forma eficiente. Netfilter/Iptables, el sistema de
filtrado de paquetes incluido en las series 2.4, 2.6 y 3 del núcleo de Linux, puede hacer tanto de
cortafuegos como realizar la traducción de direcciones de red NAT.

Otra posibilidad interesante es la instalación de Squid. Es un proxy cache para la web que soporta HTTP,
HTTPS, FTP y otros protocolos. Reduce el uso de ancho de banda y mejora los tiempos de respuesta al
cachear y reutilizar los elementos de las páginas web más visitadas desde nuestra red. Squid también
ofrece control de acceso para regular el uso de Internet de diversas formas:

• bloqueando ciertos sitios web.
• bloqueando la salida a Internet de algunos equipos.
• permitiendo la conexión sólo durante ciertas horas del día, etc.

Activando el enrutamiento en Linux
Si queremos activar el enrutamiento en el núcleo de Linux, tenemos que poner a '1' la variable de sistema
'ip_forward'. Desde una terminal o en un script, ejecutaríamos (como root):

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

Desde ese momento y sin tener que reiniciar ningún servicio, el equipo empezaría a reenviar por cada
tarjeta de red todo lo que le llega por la otra y cuyo destino no es el propio equipo.

Pero eso no es suficiente, por ejemplo, para enviar paquetes desde nuestra LAN a Internet. El problema es
la dirección IP de origen de los paquetes (192.168.x.x u otra de los rangos reservados para direcciones
privadas), que no es válida en Internet.
Netfilter/Iptables
Como se ha dicho, Netfilter es el sistema de filtrado de paquetes incluido en las series 2.4 y 2.6 del
núcleo de Linux. Iptables es el programa de línea de comandos que usamos para configurar las reglas de
filtrado de paquetes en Linux.

El objetivo de este documento es crear un script para convertir nuestro equipo Linux en un enrutador para
nuestra red. Controlará el tráfico de red, permitiendo el paso de ciertos paquetes y bloqueando el resto.

Netfilter/Iptables ofrece muchas posibilidades, pero nosotros nos vamos a centrar en dos de ellas: filtrado
de paquetes y traducción de direcciones. Iptables tiene dos tablas (subprogramas) para realizar dichas
tareas: la tabla filter y la tabla nat. La tabla nat se utiliza para modificar las direcciones IP de los
paquetes, mientras que la tabla filter deja o no pasar los paquetes que llegan al cortafuegos.
Esas tablas se aplican en diferentes momentos o actúan sobre paquetes con diferentes destinos, como se
muestra en la figura, donde se ve un esquema simplificado del camino que recorren los paquetes cuando
llegan al enrutador:

Netfilter/Iptables - Tablas and cadenas

Flujo simplificado de las posibles rutas que siguen los paquetes

que llegan o salen del firewall

En la figura también aparecen 5 cadenas (chains): PREROUTING, POSTROUTING, INPUT, OUTPUT
y FORWARD.

La traducción de direcciones o nat puede realizarse en dos momentos:



en cuanto el paquete llega al firewall y antes de decidir si el destino es el propio equipo o si debe
ser reenviado a otro. Este momento o cadena se denomina PREROUTING. “PREROUTING nat”
se usa, por ejemplo, cuando queremos que un equipo de nuestra red local aloje un servidor web
accesible desde el exterior. Ese equipo tendrá una IP privada, por lo que, en principio, no es

posible que equipos de Internet establezcan conexiones TCP con dicho servidor. Sin embargo, un
cortafuegos debidamente configurado modificará la IP de destino de los paquetes que le lleguen al
puerto 80, de forma que serán reenviados al equipo en cuestión. Este proceso se conoce como
"reenvío de puertos" o, en el contexto de las descargas o de los juegos online, como "abrir puertos
en el router".
justo antes de que el paquete abandone el firewall, es decir, en la cadena POSTROUTING. Este
es el escenario más habitual, usamos la traducción de direcciones de red para posibilitar que todos
los equipos de la red local salgan a Internet compartiendo una única dirección IP pública.



La tabla filter se puede usar con todos los paquetes, pero en diferentes cadenas dependiendo del destino
de cada paquete:







los paquetes cuyo destino es el propio firewall, sea desde la red interna o desde la externa, pueden
ser filtrados en la cadena INPUT. De esta forma podemos controlar el tráfico que alcanza el
firewall. Por ejemplo, si el único servicio que nuestro firewall ofrece es el servidor SSH,
admitiremos conexiones al puerto 22 y rechazaremos todo lo demás.
los paquetes que salen del cortafuegos, en cualquier dirección, pueden ser filtrados en la cadena
OUTPUT.
los paquetes que llegan al firewall pero cuyo destino final es otro equipo, es decir, los que deben
ser reenviados, pueden ser filtrados en la cadena FORWARD. De nuevo se aplica tanto a los
paquetes que entran a nuestra red como a los que salen de ella.

Borrado de reglas
Cuando añadimos nuevas reglas al cortafuegos utilizando el comando iptables, éstas no sobrescriben las
anteriores, sino que se añaden a ellas. Es por eso que las primeras líneas de todos los scripts de Iptables se
dedican a borrar cualquier regla que pudiera existir:

iptables -t filter -F
iptables -t nat -F

En la primera línea le indicamos a Iptables que debe vaciar (-F viene de “flush”, tirar de la cadena) las
reglas de la tabla filter. La segunda línea borrará completamente la tabla nat.
Es más habitual encontrar las líneas anteriores en un formato ligeramente diferente:

iptables -F
iptables -t nat -F

Pero es resultado es el mismo, porque filter es la tabla por defecto, la que se usa cuando no se especifica
ninguna.
Política por defecto
El paso siguiente supone tomar una decisión sobre la estrategia a seguir: ¿vamos a permitir todo el tráfico
salvo ciertos paquetes? o, por el contrario, ¿vamos a denegar todo por defecto, admitiendo sólo lo que nos
interese?

Nosotros aplicaremos la segunda estrategia, la cual, aunque algo más difícil de implementar, es más
segura, con menos riesgo de dejar “agujeros” en nuestro sistema.

De cara a “sellar” completamente nuestro sistema, debemos incluir en nuestro script (después de las
líneas que borran las reglas que pudiera haber) las líneas siguientes :

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

La explicación es bastante intuitiva: la política por defecto (-P) se establece para cada cadena (INPUT,
OUTPUT y FORWARD) a DROP, esto es, los paquetes que lleguen a cada una de esas cadenas serán
ignorados totalmente... a menos que en posteriores reglas se indique lo contrario.

Tal como está, podríamos ejecutar el script y conduciría al aislamiento completo de la máquina, que no
sería capaz de enviar ni de recibir ningún paquete. Debemos por tanto tener en cuenta que si ejecutásemos
dicho script en remoto la comunicación se cortaría inmediatamente y no podríamos usar la máquina hasta
que abramos el puerto de SSH... en local!

Práctica – Coloca las dos reglas de borrado y las tres que establecen la política por defecto en un script
llamado “ipt_todocerrado.sh”. Recuerda que los scripts deben comenzar con la línea #!/bin/bash, que es
conveniente añadir comentarios que expliquen qué hace cada orden y que las órdenes se ejecutan
secuencialmente. Ejecuta el script en el cortafuegos y comprueba que ahora ni puede acceder a la red ni
responde a nada que llegue de ella.

Práctica – Copia el script anterior como 'ipt_todoabierto.sh' y sustituye los tres DROP por ACCEPT.
Ejecútalo y comprueba que el equipo puede acceder de nuevo a la red.

Ten en cuenta que el hecho de que la política por defecto sea ACCEPT no implica que cualquiera va a
poder establecer conexiones con nuestro equipo. Mientras no haya servicios funcionando y, por tanto,
puertos abiertos, no debería haber peligro de conexiones desde otros equipos.
Pero cuando instalamos servicios de red (servidores DNS, servidores web...), los puertos correspondientes
se abren y es entonces cuando el firewall resulta útil, garantizando que sólo aceptamos ciertas conexiones
a ciertos puertos. En otras palabras, el cortafuegos nos proporciona la tranquilidad de saber que, aunque
hayamos instalado un programa que abre un puerto sin nosotros ser conscientes de ello, el firewall evitará
las conexiones. Además de ello, permite un control más fino sobre quién accede y quién no.
Las líneas del script 'ipt_todocerrado.sh' serán las primeras de todos nuestros scripts. Todos los puertos
empiezan cerrados y a partir de ahí permitiremos sólo los servicios necesarios.

El segundo script, 'ipt_todoabierto.sh', es útil para devolver el sistema a su estado original en cuanto al
comportamiento del firewall.

Práctica - Usa el comando 'netstat' para comprobar los puertos abiertos en tu equipo.
Reenvío de paquetes
A partir de ahora, añadiremos al script 'ipt_todocerrado.sh' una serie de reglas condicionales que se irán
ejecutando en secuencia.
Por ejemplo, si queremos que el firewall reenvíe todos los paquetes que le llegan pero no son para él, sino
para otros equipos, debemos añadir la siguiente línea a nuestro script:

iptables -t filt
  • Links de descarga
http://lwp-l.com/pdf19225

Comentarios de: Introducción a Netfilter/Iptables (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad