Ver destacados

Cómo usar comandos Iptables Netfilter en Linux

Tutorial sobre qué usos y utilidades tiene Iptables con Netfilter para la seguridad del firewall en Linux.
Escrito por
11K Visitas  |  Publicado jun 20 2018 18:15
Favorito
Compartir
Comparte esta pagina a tus Amigos y Contactos usando las siguientes Redes Sociales


La seguridad siempre debe ser una de las premisas sobre la cual deben trabajar los administradores, personal de gestión y soporte y, en general todos los usuarios de cualquier sistema operativo actual debido a las múltiples amenazas que están presentes en la red.

 

En el caso de las distribuciones de Linux, la mayoría de ellas cuentan con las herramientas avanzadas para aplicar un filtro a los paquetes de red tanto a nivel de procesamiento de control de paquetes de red en ingreso, desplazamiento, control y salida de la pila de redes dentro del Kernel del sistema usado, por ello, a partir del kernel 2.4, se introdujeron las iptables, las cuales también son denominadas netfilter y estas poseen un mayor nivel de seguridad y funcionalidades prácticas para la protección del sistema.

 

iptables se encarga de gestionar el filtrado de IPv4 mientras que ip6tables maneja el filtrado de IPv6 en las redes actuales.
Solvetic hará un análisis sobre cómo funciona iptables y algunos de los comandos más prácticos que podemos tomar de él.

 

Una de las medidas de seguridad más importantes que debemos llevar en nuestro sistema operativo es la implementación de un firewall. Conoce los mejores que puedes instalar en Linux a continuación.

 

 


1. Filtrado de paquetes en Linux


El kernel de las distribuciones de Linux hace uso de la herramienta Netfilter para llevar a cabo el proceso de filtrado de paquetes, y con ello llevar a cabo las tareas de que estos sean recibidos o detenidos.

 

Reglas incorporadas en Netfilter
Netfilter esta incorpora por defecto en el kernel de Linux y cuenta con tres tablas o listas de reglas integradas así:
  • filter: Hace referencia a la tabla predeterminada diseñada para la gestión de los paquetes.
  • nat: Su función es alterar paquetes que han sido creados en una nueva conexión siendo usada primordialmente por NAT.
  • mangle: Su uso aplica cuando se deben alterar paquetes de red específicos.

 

 

Ahora, cada tabla posee un grupo de cadenas incorporadas que están relacionadas a las acciones que pueden ser llevadas a cabo por netfilter, estas son:

 

Reglas para tablas de filter
Las cadenas incorporadas para la tabla de filter son:
  • INPUT: Esta relacionada con los paquetes que han sido destinados al host.
  • OUTPUT: Esta funciona sobre los paquetes de red que han sido generados localmente.
  • FORWARD: Asocia los paquetes que han sido enrutados a través del host principal.

 

Reglas para tablas de nat
Las cadenas incorporadas para la tabla nat son:
  • PREROUTING: Su función es alterar los paquetes de redes tan pronto llegan.
  • OUTPUT: Se ha diseñado para altera los paquetes de redes que son creados localmente y se activa antes de que estos sean enviados.
  • POSTROUTING: Creada para alterar los paquetes antes de ser enviados de forma global.

 

 

Reglas para tablas de mangle
Las cadenas incorporadas para la tabla de mangle son:
  • INPUT: Diseñada para modificar los paquetes de red destinados para el host principal.
  • OUTPUT: Creada para alterar los paquetes de red creados localmente y funciona antes de que estos sean enviados.
  • FORWARD: Altera los paquetes que han sido enrutados a través del host principal.
  • PREROUTING: Su tarea es modificar los paquetes que están entrando antes de que sean enrutados.
  • POSTROUTING: Altera los paquetes de redes antes que se lleve a cabo el proceso de envío.

 

 

Cada paquete de redes recibido o enviado desde el sistema operativo Linux siempre está sujeto al menos a una tabla. Ahora, vamos a comprender algunos de los comandos más útiles que podemos usar con iptables.

 


2. Desplegar el estado del firewall

 

Paso 1

Para conocer el estado actual del firewall ejecutamos la siguiente línea:
sudo iptables -L -n -v

 

Paso 2

Allí podemos validar cada cadena con sus respectivos niveles de paquetes gestionados, los parámetros usados en este comando son:

 

-L
Despliega las reglas de lista.

 

-v
Genera información detallada como el nombre de la interfaz, las opciones de regla más, además los contadores de paquetes y bytes también están listados, con sufijo 'K', 'M' o 'G' para opciones de 1000, 1,000,000 y 1,000,000,000, respectivamente.

 

-n
Despliega la dirección IP y el puerto en formato numérico.

 

Paso 3

En caso de desear ve este resultado con número de líneas podemos ejecutar lo siguiente:
iptables -n -L -v --line-numbers

 

 


3. Detener, reiniciar o iniciar iptables en Linux

 

Paso 1

Los principales comandos para gestionar las tareas de iptables a nivel de arranque o detención son:
service iptables stop
service iptables start
service iptables restart
Paso 2

También será posible hacer uso del comando iptables para detener el firewall y eliminar todas las reglas así:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Paso 3

Los parámetros definidos son:

 

-F
Elimina todas las reglas.

 

-X
Elimina una cadena.

 

-t
table_name: Selecciona la tabla (llamada nat o mangle) y elimina o descarta las reglas.

 

-P
Establece la política predeterminada tales como DROP, REJECT o ACCEPT.

 

 


4. Añadir nuevas reglas de firewall en Linux

 

Paso 1

Una de las tareas más prácticas de iptables es crear determinadas reglas para la correcta gestión de los paquetes, para insertar una o más reglas en la cadena seleccionada usaremos la siguiente sintaxis donde primero se debe descubrir los números de línea:
iptables -L INPUT -n --line-numbers
Paso 2

por ejemplo, vamos a añadir la siguiente regla:
iptables -I INPUT 2 -s 192.168.0.50 -j DROP
Paso 3

Luego, veremos las reglas usando el comando arriba indicado. Allí vemos que la regla creada ha sido añadida en la línea 3 según se indicó.

 

 

 

 

 

 

 


5. Eliminar una regla del firewall en Linux

 

Paso 1

En primer lugar, debemos desplegar las reglas que están creadas para determinar con exactitud cuál debe ser eliminada, para obtener esta información contamos con las siguientes opciones:
iptables -L INPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers | less
Paso 2

Ahora, para borrar la regla 3 creada anteriormente, vamos a ejecutar lo siguiente:
iptables -D INPUT 3

 

 


6. Almacenar y restaurar las reglas de iptables en Linux

 

 

 

Paso 1

Cada vez que efectuemos algún cambio en las reglas de iptables debemos proceder a guardar esos cambios, para ello basta con ejecutar la siguiente línea:
service iptables sabe
Paso 2

Podremos restaurar de forma simple aquellas reglas que hemos almacenado ejecutando lo siguiente:
service iptables restart

7. Establecer las reglas por defecto en Linux


Con iptables será posible permitir o denegar las reglas por defecto que se han de aplicar a todo el sistema de la siguiente manera.

 

Paso 1

Para eliminar todo el tráfico ejecutamos:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Paso 2

Para eliminar todo el tráfico entrante:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state -- NEW,ESTABLISHED -j ACCEPT

 

 


8. Bloquear una dirección IP en Linux

 

 

Con iptables será posible realizar el bloqueo de una dirección IP en particular para evitar que esta tenga acceso de paquetes de red al sistema. Para esta tarea contamos con las siguientes opciones:

iptables -A INPUT -s 192.168.0.14 -j DROP (IP específica)
iptables -A INPUT -s 192.168.0.0/24 -j DROP (Rango de direcciones)

9. Bloquear solicitudes de puertos entrantes en Linux

 

Paso 1

Otra de las tareas típicas de seguridad es restringir el acceso de paquetes por un puerto especifico, con iptables tenemos las siguientes opciones:

 

Bloquear todas las acciones
Bloquear todas las acciones por un puerto especifico ejecutando:
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

 

Bloquear un puerto
Bloquear un puerto para una dirección IP especifica:
iptables -A INPUT -p tcp -s 192.168.0.14 --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp -s 192.168.0.1/24 --dport 80 -j DROP

 

Bloquear la dirección IP saliente

Es posible bloquear el tráfico saliente a un host o dominio especifico, por ejemplo Solvetic.com, para ello ejecutamos lo siguiente:
host -t a solvetic.com

 

 

Paso 2

Ahora, con esta dirección IP procedemos al bloqueo:
iptables -A OUTPUT -d 178.33.118.246 -j DROP
Paso 3

También será posible bloquear el dominio completo así:
iptables -A OUTPUT -p tcp -d www.solvetic.com -j DROP

10. Admitir o no tráfico de red usando la dirección MAC en Linux

 

 

 

 

 

Otra de las posibilidades a usar es restringir o permitir el uso de paquetes tomando como base la dirección MAC del dispositivo seleccionado. Para ello usaremos alguna de las siguientes opciones:

iptables -A INPUT -m mac --mac-source 00:2F:EF:85:04:09 -j DROP (Deniega el tráfico de la dirección MAC seleccionada)
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:2F:EF:85:04:09 -j ACCEPT (Admite los paquetes de la dirección indicada solo por el puerto 22)

11. Bloquear o permitir solicitudes ICMP en Linux


El protocolo ICMP (Internet Control Message Protocol - Protocolo de mensajes de control de Internet), es un protocolo desarrollado para administrar información relacionada con errores de los equipos en red local, de modo que con este protocolo se pueden hacer solicitudes remotas para verificar la disponibilidad de un equipo y esto en términos de seguridad puede llegar a ser delicado.

 

Paso 1

Podemos ejecutar las siguientes líneas para evitar las solicitudes ICMP en Linux:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Paso 2

Las respuestas de ping también las podemos limitar a ciertas redes o hosts así:
iptables -A INPUT -s 192.168.0.1/24 -p icmp --icmp-type echo-request -j ACCEPT
Paso 3

Podremos aceptar solo un tipo limitado de solicitudes ICMP así:
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

12. Abrir un rango de puertos y direcciones IP en Linux

 

Paso 1

Esto es útil si necesitamos habilitar un rango definido de puertos para llevar a cabo acciones administrativas o de ejecución de programas:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 9000:9020 -j ACCEPT
Así hemos abierto el rango de puertos 9000 a 9020 para las conexiones TCP.

 

Paso 2

Otra de las alternativas es habilitar un rango de direcciones IP estableciendo un puerto especifico así. Allí hemos autorizado este rango para que use el puerto 80.
iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.0.70-192.168.0.80 -j ACCEPT

13. Restringir el número de conexiones paralelas a un servidor por IP de cliente en Linux

 

Paso 1

Podemos usar el módulo connlimit para definir estas restricciones, por ejemplo, para permitir 5 conexiones ssh por cliente, ingresamos lo siguiente:
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 5 -j REJECT

 

Paso 2

Para restringir a 10 el acceso por HTTP:
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
Paso 3

Hemos indicado lo siguiente:
  • --connlimit-above 5: Coincide si la cantidad de conexiones existentes es superior a 5.
  • --connlimit-mask 24: Son los hosts de grupo que usan la longitud del prefijo. Para IPv4, debe ser un número entre (incluido) 0 y 32.

 


14. Restringir el número de conexiones paralelas a un servidor por IP de cliente en Linux

 

Paso 1

NAT (Network Address Translation) es un sistema para traducir las direcciones de red y así facilitar la navegación. Para listar estas vamos a ejecutar lo siguiente:
iptables -t nat -L -n -v

 

Paso 2

Será posible ver este resultado con sus respectivas líneas así:
iptables -t nat -v -L -n --line-number

15. Borrar las reglas de NAT en Linux


Paso 1

Si deseamos borrar las reglas establecidas de NAT vamos a ejecutar lo siguiente:
iptables -t nat -v -L -n --line-number
iptables -t nat -v -L PREROUTING -n --line-number
iptables -t nat -v -L POSTROUTING -n --line-number
Paso 2

Para borrar todas las reglas de "PREROUTING" ejecutamos la siguiente sintaxis:
iptables -t nat -D PREROUTING {Numero de regla}
Paso 3

Para borrar todas las reglas de "POSTROUTING" ejecutamos:
iptables -t nat -D POSTROUTING {número de regla}

16. Resetear los contadores de paquetes en Linux


En primer lugar, debemos ejecutar el comando “iptables -L -n -v”, el cual ya vimos anteriormente, para listar los contadores.

 

Paso 1

Para borrar estos contadores, basta con ejecutar lo siguiente:
iptables -Z
Paso 2

Para resetear los contadores de solo accesos ejecutamos:
iptables -Z INPUT

17. Validar el firewall en Linux

 

Paso 1

En primer lugar, debemos validar sil os puertos están abiertos o no con el siguiente comando:
netstat -tulpn

 

Paso 2

Para validar un puerto específico ejecutamos:
netstat -tulpn | grep :80

 

Paso 3

En caso de no encontrarse abierto el puerto ejecutamos:
service httpd start
Paso 4

Luego debemos asegurarnos qué iptables tenga acceso por dicho puerto:
iptables -L INPUT -v -n | grep 80

18. Permitir acceso de bucle con iptables en Linux

 

 

 

 

 

 

El acceso de bucle de retorno cuyo acceso es desde la IP 127.0.0.1 es importante y siempre debe dejarlo activo para tareas de administración y gestión de red. Para habilitarlo en iptables basta con ejecutar lo siguiente.

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

19. Definir nuevas cadenas de iptables en Linux


Paso 1

Con iptables tenemos la posibilidad de definir nuestra propia cadena y almacenar reglas personalizadas en ella. Para definir una cadena, ejecutamos lo siguiente:
iptables -N “Nombre cadena”
Paso 2

Luego ejecutamos "iptables -L" para listar las cadenas de iptables:

 

 

 

 

 

 

 

Paso 3

En el resultado veremos nuestra cadena creada:

 

 


20. Borrar las cadenas o las reglas del cortafuegos de iptables en Linux

 

 

Para realizar este borrado debemos ejecutar lo siguiente:

iptables -F
Como podemos ver, iptables es una solución integral para gestionar de forma centralizada diversos aspectos de seguridad en las distribuciones de Linux para lograr mejoras en todo lo relacionado con la privacidad.

 

Te explicamos los pasos que debes seguir para saber cómo configurar firewall Iptables y aumentar la seguridad en Linux con todo detalle.

¿Te ayudó este Tutorial?

Ayuda a mejorar este Tutorial!
¿Quieres ayudarnos a mejorar este tutorial más? Puedes enviar tu Revisión con los cambios que considere útiles. Ya hay 0 usuario que han contribuido en este tutorial al enviar sus Revisiones. ¡Puedes ser el próximo!