GNU/Linux >> Tutoriales Linux >  >> Linux

Hoja de referencia de comandos de IPtables

Resumen

IPtables es uno de los cortafuegos más conocidos (y bastante efectivo también) que también viene preinstalado en muchas distribuciones de Linux de forma predeterminada. El propósito de esta publicación es actuar como una hoja de trucos de comandos de Iptables, teniendo en cuenta lo poderoso que es Iptables, también tiene numerosos comandos para muchos escenarios de red. Iptables usa varias reglas de tabla diferentes con varias cadenas para bloquear y permitir el tráfico:

  • FILTRO: esta es la tabla predeterminada que está destinada a filtrar las reglas de tráfico
    • ENTRADA :En la cadena de entrada definimos las reglas y los comportamientos para controlar las conexiones entrantes.
    • SALIDA :Bajo la cadena de salida controlamos las conexiones salientes
    • ADELANTE :como sugiere el nombre, NOSOTROS usamos la cadena de reenvío para especificar las conexiones entrantes que vamos a redirigir de inmediato a otra ruta, dirección o puerto (reenviarlo). El reenvío se usa comúnmente junto con NAT.
  • NAT – tabla de traducción de direcciones de red que se utiliza para mapear múltiples recursos de tráfico local a las conexiones salientes para establecer una nueva ruta. La tabla NAT tiene las siguientes reglas de cadena incluidas:
    • PRE-ENRUTAMIENTO – se utiliza para controlar/modificar un paquete tan pronto como llega (conexiones entrantes)
    • SALIDA – se utiliza para modificar paquetes generados localmente
    • POST ENRUTAMIENTO – se utiliza para controlar/modificar un paquete tan pronto como esté a punto de salir (conexiones salientes)
  • MANGULO – la tabla mangle se utiliza para la modificación o alteración de paquetes. Mangle table tiene 5 reglas de cadena:
    • PRE-ENRUTAMIENTO – para alterar las conexiones entrantes
    • SALIDA – para alterar paquetes generados localmente
    • ENTRADA – para paquetes entrantes
    • POST ENRUTAMIENTO – para alterar los paquetes cuando están a punto de salir
    • ADELANTE – para paquetes enrutados a través de la caja (o necesita ser reenviado a una nueva conexión/ruta)

Para esta hoja de trucos hay un repositorio de github con una versión descargable en .pdf:ENLACE

Comandos de tablas IP

Cómo mostrar las reglas del cortafuegos

– Mostrar todas las reglas

# iptables -L

– Mostrar todas las reglas con números de línea

# iptables -L --line-numbers

:muestra todas las reglas con una salida detallada de los paquetes activos

# iptables -n -L -v

-Reglas de visualización para una cadena NAT

# iptables -t nat -L

Estas opciones de salida/visualización también se pueden combinar con otros comandos de visualización, como:

# iptables -t nat -L --line-numbers

– Reglas de visualización para una regla de cadena específica

# iptables -L INPUT

– Reglas de visualización pero con especificaciones de cadena

# iptables -S INPUT

-Reglas de visualización para una cadena y con paquetes activos

# iptables -S INPUT -v

Cómo eliminar y agregar reglas

– Eliminar una regla por un número de línea

# iptables -D INPUT 10

– Eliminar una regla por una especificación

# iptables -D INPUT -m conntrack --ctstate

– Limpiar toda la cadena (eliminar todas las reglas de la cadena)

# iptables -F

– Vaciar una sola cadena

# iptables -F INPUT
# Iptables -t nat -F
# Iptables -t mangle -F

– Agregar una nueva cadena

# iptables -N custom-filter

– Agregar una nueva regla

# iptables -I INPUT -s 123.123.123.133 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j REJECT

Nota con respecto a agregar las reglas, como puede ver aquí, tenemos dos reglas diferentes con diferentes opciones. Tenga en cuenta las primeras opciones definidas justo después de las iptables:-I y -A.
Estas opciones le indican dónde se colocarán las reglas en la tabla, al principio (opción -I) de la regla de la cadena o al final. inferior (-A).
Iptables lee las reglas yendo desde la primera regla en la parte superior de la cadena, luego desciende hasta el final y las aplica en ese orden.

Ejemplos y comandos de IPtables usados ​​más comunes

Bloquear tráfico

– Bloquee una dirección IP para tener acceso a los mensajes

# iptables -A INPUT -s 192.168.100.1 -j DROP

– Bloquee una subred de IP específica para entrante

# iptables -A INPUT -s 192.168.1.100/24 -j DROP

– Bloquee una dirección IP para rechazar todos los paquetes

# iptables -A INPUT -s 192.168.1.100 -j REJECT

– Bloquee una dirección IP a una interfaz de red específica en la entrada

# iptables -A INPUT -i eth0 -s 192.168.1.102 -j DROP

– Bloquee solo el tráfico TCP para una dirección IP específica o rango de IP

# iptables -A INPUT -p tcp -s 192.168.1.100 -j DROP
# iptables -A INPUT -p tcp -s 192.168.1.100/24 -j DROP

– Eliminar el tráfico de un puerto específico (cerrar puerto)

# iptables -A INPUT -p tcp --dport xxx -j DROP
# iptables -A INPUT -p tcp --dport 22 -j DROP

:descarte todos los paquetes de red no válidos en los entrantes

# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

Permitir tráfico o abrir puertos con IPtables

– Permitir el tráfico (entrante y saliente) en SSH

# iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Nota :para bloquear el tráfico en estos puertos, cambie la opción ACCEPT a DROP

– Permita una IP específica o un rango de red en SSH entrante (elimine CIDR para configurar solo una IP)

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Nota :Se puede aplicar la misma configuración para el rango de red en otras reglas entrantes que se enumeran a continuación

Nota :para bloquear el tráfico en estos puertos, cambie la opción ACCEPT a DROP

– Permitir el tráfico en HTTP y HTTPS (entrante y saliente)

# iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Configuración multipuerto

# iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Nota:para bloquear el tráfico en estos puertos, cambie la opción ACEPTAR a DROP

– Permitir el tráfico en MySQL 

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Permitir el tráfico de MySQL a una interfaz de red específica

# iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Permitir el tráfico de PostgreSQL

# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Permitir el tráfico de PostgreSQL a una interfaz de red específica

# iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Permitir entrantes en SMTP/IMAP/IMAPS/POP3/POP3S/

SMPT
# iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

IMAP
# iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

IMAPS
# iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

POP3
# iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

POP3S
# iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Cómo configurar el reenvío de puertos en IPtables

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Este comando, por ejemplo, redirigirá todo el tráfico entrante en eth0 puerto del puerto 25 al puerto 2525

Estos parámetros aquí también se utilizan como ejemplo. Lo que se logrará aquí es:en el puerto 80, todas las entradas se limitarán/reducirán a 100 conexiones establecidas por minuto y se establecerá una ráfaga limitada de 200 paquetes coincidentes.

– Bloquear solicitudes de ping entrantes

# iptables -A INPUT -p icmp -i eth0 -j DROP

– Bloquear o permitir el acceso a una dirección MAC específica

# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

– Permitir el acceso de loopback

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

– Limite el número de conexiones simultáneas por dirección IP

# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

El comando anterior limitará la cantidad de conexiones al puerto 22 (ssh) y no permitirá más de conexiones por cliente. El número de puerto, por supuesto, se puede cambiar.

Registrar paquetes perdidos

# iptables -A INPUT -i eth0 -j LOG --log-prefix "Dropped packets:"

Puede cambiar el prefijo de registro a su elección. Los registros se pueden buscar con el siguiente comando:

# grep "IPtables dropped packets:" /var/log/messages

– Registro de paquetes descartados provenientes de un rango de red específico

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "

– Cómo buscar entradas/reglas dentro de IPtables con grep

# iptables -L INPUT -v -n | grep 192.168.0.100

Comandos de iptables para prevenir ciberataques más avanzados

– Cómo bloquear la inundación de la red en el puerto http

# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

– Configurar la protección de escaneo de puertos

# iptables -N port-scanning
# iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
# iptables -A port-scanning -j DROP

– Protección de fuerza bruta para SSH

# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

– Protección contra ataques de inundación SYN

# iptables -N syn_flood
# iptables -A INPUT -p tcp --syn -j syn_flood
# iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
# iptables -A syn_flood -j DROPiptables -A INPUT -p icmp -m limit --limit  1/s --limit-burst 1 -j ACCEPT
# iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
# iptables -A INPUT -p icmp -j DROPiptables -A OUTPUT -p icmp -j ACCEPT

– Mitigación de ataques de inundación SYN con SYNPROXY

# iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
# iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

– Bloquea los paquetes entrantes que no son SYN

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

– Forzar la verificación de fragmentos en todos los paquetes entrantes

# iptables -A INPUT -f -j DROP

– Bloquee todos los paquetes entrantes para evitar ataques de paquetes XMAS

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

– Bloquea todos los paquetes NULL en la entrada

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

– Interceptar y descartar todos los paquetes con banderas TCP falsas

# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

– Guarde las reglas de IPtables en un archivo y restáurelas

# iptables-save > ~/iptables.rules
# iptables-restore < ~/iptables.rules

– Guarde las reglas de IPtables de forma permanente con netfilter

Nota:requiere el complemento de iptables “iptables-persistent” Para ser instalado. Puede instalarlo con “apt install iptables-persistent” en distribuciones Debian/Ubuntu.

# netfilter-persistent save

Resumen

Para resumir la publicación, compilamos una lista de una hoja de trucos de comandos de IPtables con algunas de las reglas más comunes sobre cómo configurar IPtables para varios casos de uso (con algunas reglas de permiso y eliminación que se usan a diario para muchos servicios web y servicios que funcionan a través de la red ) y también enumeró algunos comandos avanzados de IPtables que pueden prevenir varios ataques cibernéticos.

Aunque iptables es un cortafuegos increíble, tenga cuidado con las reglas que está aplicando.


Linux
  1. Hoja de trucos para los comandos comunes de Linux

  2. Presentamos una hoja de referencia de macros de Groff

  3. Hoja de referencia rápida de comandos de Docker

  4. Hoja de referencia de comandos de Linux

  5. Comandos vi básicos (hoja de trucos)

Hoja de referencia de comandos de Git

Hoja de referencia de comandos de MySQL

Hoja de referencia de comandos de base de datos MySQL para Linux

Hoja de referencia de comandos de Pacman para Arch Linux

Comandos nano básicos (hoja de trucos)

Comandos vim básicos (hoja de trucos)