Iptables para principiantes

Iptables para principiantes
Los iptables se consideran uno de los principales recursos defensivos para muchos administradores del sistema a pesar de ser reemplazados por NFTables. Los principales fabricantes de redes incorporaron iptables a hardware todavía en entornos de producción.

Iptables es altamente versátil y acepta comandos directos del usuario que puede cargar y descargar reglas de acuerdo con la necesidad.

Este tutorial muestra Cómo proteger un servidor web, Reenviar conexiones a direcciones IP internas de nuestra LAN y ofrecer servicios específicos a direcciones IP de la lista blanca solamente.

Nota: Este tutorial de iptables se lanzó por primera vez hace dos años y se actualizó el 23/05/2021 con ejemplos mejorados y capturas de pantalla de mejor calidad.

Cómo instalar

Los iptables se omiten de forma predeterminada en distribuciones que incorporan NFTables.

Para instalar iPtables en distribuciones de Linux basadas en Debian, ejecute el siguiente comando:

Sudo Apt Update && Apt Install IpTable

Abra los puertos HTTP y HTTPS

En primer lugar, agregemos todas las políticas de aceptación que comienzan con el servidor web.

Nota: Si crea un script con reglas, no necesita usar sudo.

sudo iptables -a entrada -p tcp --dport 80 -j aceptar
sudo iptables -a entrada -p tcp --dport 443 -j aceptar

Para ver las reglas agregadas ejecutadas "iptables -l"

Dónde:

Iptables = llama al programa

-A = Agrega una regla

APORTE = Tráfico entrante

-pag = Protocolo

-ddport = puerto de destino

-j = especificar el "objetivo"; El objetivo es el tipo de política: aceptar, soltar, rechazar (incorporado) ..

Iptables -l = enumera todas las reglas cargadas de Iptables (Iptables -l -v = lo mismo con la verbosidad.)

En el ejemplo anterior, instruimos a IpTables que agregue una regla para el tráfico entrante a través del protocolo TCP y los puertos 80 (HTTP) y 443 (https) para ser aceptados.

Podemos cambiar el comando para aceptar la conexión solo de una IP específica agregando el parámetro "-s":

sudo iptables -a entrada -s 127.0.0.1 -p TCP - -DPort 80 -J Aceptar

Dónde:

s = fuente

También puede probar su firewall con NMAP:

Nota: En el ejemplo anterior, el puerto 443 no se muestra porque el servidor no tiene un certificado SSL configurado adecuadamente.

Nota: Para obtener más información sobre NMAP, puede leer esto.

Protección de su servidor con iptables:

#Open HTTP y Servicios HTTPS.
iptables -a entrada -p tcp --dport 80 -j aceptar
iptables -a entrada -p tcp --dport 443 -j aceptar
#Open SSH Service de puerto
iptables -a entrada -p tcp --dport 22 -m conntrack -ctstate nuevo, establecido -j aceptar

Donde están los nuevos parámetros:

-m significa "Match" y se usa para llamar a las extensiones iptables como Conntrack, que no es parte de las funciones centrales de iptables.

conntrack = Permite el seguimiento de la información sobre conexiones como direcciones específicas o, en este caso, el estado de la conexión. Esto debe usarse cuidadosamente ya que muchas reglas para defender a los servidores de algunos ataques usan Conntrack, mientras que el hardware limita su uso, y dicha limitación se puede usar para sobrecargar los recursos del servidor.

-ctstate = determina el estado de la regla para que coincida; Los posibles estados son: NUEVO, ESTABLECIDO, RELACIONADO y INVÁLIDO.

#Protecte su servicio SSH contra los ataques de la fuerza bruta al permitir solo una IP específica
Para acceder a iptables -a entrada -p tcp -s x.X.X.X --dport 22 -M Conntrack - -CtState New,
Establecido -j aceptar
#Protecte su servicio SSH contra los ataques de la fuerza bruta al limitar los intentos de conexión
Iptables -a entrada -p tcp -m tcp --dport 22 -m conntrack - -ctstate new -j 22 -test
Iptables -a 22 -test -m reciente --nombras de nombre --set -Masco 255.255.255.255 –Rsource
Iptables -a 22 -test -m reciente --nombras de nombre - -rcheck - -máscara 255.255.255.255
--rsource --seconds 30 --hitcount 3 -J 22 -protección
Iptables -A 22 -test -J acepta
Iptables -a 22 -protección -j got

Dónde:

En la primera línea, nuestra regla dice "-m Conntrack -CtState nuevo " lo que significa que si la conexión es nueva, pase a la regla "22 pruebas".

La segunda línea dice que los paquetes netmask 255.255.255.255 se nombran como Conexión.

La tercera línea dice si un Conexión es más de 3 veces en 30 segundos, el firewall continúa aplicando la cadena 22 protección. La cuarta línea dice si el Conexión no fueron vistos más de 3 veces en 30 segundos, podrían ser aceptados.

La quinta línea, que pertenece al 22 protección cadena, dice que caiga Conexión Si parecen superar 3 veces en 30 segundos.

Ahora, para terminar, rechazemos todas las conexiones entrantes no apagadas y permitamos todo el tráfico saliente:

iptable -p salida aceptar
iptables -p entrada de entrada

PAG se refiere a la política de la cadena; Recuerde que el objetivo es la política, aceptar, soltar, rechazar. En este caso, estamos diciendo que la política predeterminada para el tráfico saliente es aceptar, y la política predeterminada para el tráfico entrante es rechazar a menos que especificamos algo diferente en las reglas anteriores. Este es un firewall muy básico que no incluye reglas para muchos ataques, para fines de aprendizaje y no para la producción; Al final del artículo, adjunto un firewall que usé para la producción en un servidor; tiene comentarios explicando cada regla.

Reenviar una conexión a un puerto específico a una dirección IP específica

Esto también es muy útil para los usuarios de escritorio que desean engrasar una conexión a través de un dispositivo específico; Puede ser útil incluso para los jugadores; Por lo general, lo hacemos desde la configuración del enrutador, pero supongamos que el dispositivo de enrutamiento está ejecutando iptables.

iptables -A previa priorización -t nat -p tcp -d x.X.X.X --dport 8080 -j DNAT -a la destino Y.Y.Y.Y: 80
iptables -A POSTROUTING -T NAT -P TCP -J SNAT -A FRAVE X.X.X.X

Las reglas anteriores invocan NAT (traducción de direcciones de red) para especificar conexiones a través del protocolo TCP a la dirección x.X.X.X y el puerto 8080 se redirigirán para abordar y.Y.Y.Y, puerto 80. La segunda regla especifica las respuestas deben enviarse a la dirección de origen (x.X.X.X). Podemos usar estas reglas para permitir el acceso a una cámara IP, habilitar los juegos en línea con redes externas, etc.

Este tutorial estaba destinado a presentar a los principiantes a iptables y solo explica un número limitado de conceptos básicos. A continuación puede ver una muestra de un firewall bien planificado utilizado para un servidor de producción; Incluye algunas de las reglas que ya vimos a reglas más complejas para evitar DDO, entre otros tipos de ataques.

Bonificación: muestra de firewall de producción

iptables -f
#---- Habilitar la protección de mensajes de error de malos
enable/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#---- Encienda el filtrado de ruta inversa. Más seguro, pero rompe el enrutamiento asimétrico y/o iPsec
Habilitar/proc/sys/net/ipv4/conf/*/rp_filter
#---- No acepte paquetes enrutados de origen. El enrutamiento de origen rara vez se usa para legítimo
propósitos deshabilitar/proc/sys/net/ipv4/conf/*/acept_source_route
#---- Desactivar la aceptación de redirección de ICMP que se puede utilizar para alterar sus tablas de enrutamiento
deshabilitar/proc/sys/net/ipv4/conf/*/acepta_redirects
#---- Como no aceptamos redirecciones, tampoco envíe mensajes de redirección
Desactivar/proc/sys/net/ipv4/conf/*/send_redirects
#---- Ignorar paquetes con direcciones imposibles
Desactivar/proc/sys/net/ipv4/conf/*/log_martians
#---- Protege contra los números de secuencia de envoltura y ayuda a la medición del tiempo de ida y vuelta
Habilitar/proc/sys/net/ipv4/tcp_timestamps
#---- Ayuda contra los ataques Syn-Flood Dos o DDoS utilizando opciones particulares de iniciales
Números de secuencia TCP Habilitar/Proc/SYS/NET/IPV4/TCP_SYNCOOKIES
#---- Use ACK selectivo que se puede usar para indicar que faltan paquetes específicos
deshabilitar/proc/sys/net/ipv4/tcp_sack
ModProbe NF_Conntrack_IPV4
modprobe nf_nat
# ModProbe NF_Conntrack_IPV6
# ModProbe NF_Conntrack_amanda
# ModProbe NF_NAT_AMANDA
ModProbe NF_Conntrack_H323
Modprobe NF_NAT_H323
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
# ModProbe NF_Conntrack_netbios_NS
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# ModProbe NF_NAT_PROTO_DCCP
modprobe nf_conntrack_netlink
# ModProbe NF_Conntrack_PPTP
# ModProbe NF_NAT_PPTP
# ModProbe NF_Conntrack_Proto_Udplite
# ModProbe NF_NAT_PROTO_UDPLITE
# ModProbe NF_Conntrack_Proto_Gre
# ModProbe NF_NAT_PROTO_GRE
# ModProbe NF_Conntrack_Proto_SCTP
# modprobe nf_nat_proto_sctp
# ModProbe NF_Conntrack_Sane
modprobe nf_conntrack_sip
modprobe nf_nat_sip
# ModProbe NF_Conntrack_tftp
# modprobe nf_nat_tftp
# ModProbe NF_NAT_SNMP_BASIC
#NOW podemos comenzar a agregar servicios seleccionados a nuestro filtro de firewall. La primera cosa
es una interfaz localhost iptables -A entrada -i lo -j aceptar
#Le le dijimos al firewall que tome todos los paquetes entrantes con banderas TCP ninguno y simplemente los dejara caer.
iptables -a entrada -p TCP ! -M Conntrack - -CtState New -J Drop
#Le decimos a iptables que agregue (-a) una regla al entrante (entrada)- SSH funciona en el puerto 50683
en cambio 22.
iptables -a entrada -p tcp -m tcp --dport 50683 -j aceptar
iptables -a entrada -p tcp -m tcp -s ip específica ip --dport 50683 -j aceptar
iptables -a entrada -p tcp -m tcp -s ip específica ip --dport 50683 -j aceptar
iptables -a entrada -p tcp -m tcp -s ip específica ip --dport 50683 -j aceptar
iptables -a entrada -p tcp --dport 50683 -m conntrack -ctstate new -m reciente --set
--nombre ssh -j aceptar
iptables -a entrada -p tcp --dport 50683 -m reciente -update --seconds 60 -hitcount 4
--rttl - -name ssh -j log --log -prefix "ssh_brute_force"
iptables -a entrada -p tcp --dport 50683 -m reciente -update --seconds 60 -hitcount 4
--rttl - -name ssh -j drop
iptables -a entrada -p tcp --dport 50683 -m conntrack -ctstate new -m reciente --set
--Nombre SSH
iptables -a entrada -p tcp --dport 50683 -m conntrack -ctstate new -j ssh_whitelist
iptables -a entrada -p tcp --dport 50683 -m conntrack -ctstate new -m reciente -update
--Segundos 60 - -HITCOUNT 4 - -RTTL - -NAME SSH -J ULOG --ULOG -PREFIX SSH_BRU
iptables -a entrada -p tcp --dport 50683 -m conntrack -ctstate new -m reciente -update
--Segundos 60 -HITCOUNT 4 - -RTTL - -NAME SSH -J Drop
#NOW Permito IMAP y SMTP.
-Una entrada -p tcp --dport 25 -j aceptar
# Permite conexiones pop y pops
-Una entrada -p tcp --dport 110 -j aceptar
-Una entrada -p tcp --dport 995 -j aceptar
########### iMap & iMaps ###########
-Una entrada -p tcp --dport 143 -j aceptar
-Una entrada -p tcp --dport 993 -j aceptar
########### mysql ##################
iptables -a entrada -i eth0 -p tcp -m tcp --dport 3306 -j aceptar
######### Sistema R1Soft CDP ##############
iptable -a entrada -p tcp -m tcp -s ip específico - -dport 1167 -j aceptar
############### extrovertido ###################
iptables -i entrada -m conntrack -ctstate establecido, relacionado -j aceptar
### Permitir en curso, bloque entrante no definido ###
iptable -p salida aceptar
iptables -p entrada de entrada
iptables -l -n
iptables-Save | tee /etc /iptables.prueba.normas
iptables-restaur < /etc/iptables.test.rules
#service iptables reiniciar