iptables

Iptables para principiantes

Iptables para principiantes
Iptables es básicamente el firewall principal utilizado para los sistemas Linux, existen alternativas como nftables pero Iptables sigue siendo la principal, es muy flexible al aceptar comandos directos del usuario, puede cargar y descargar reglas según sea necesario para aumentar las políticas de su firewall precisión.

En realidad, ni siquiera necesita conocer la sintaxis de Iptable para usarlo, tiene herramientas gráficas como Firewall Builder que pueden hacer que el proceso de aprendizaje sea innecesario, pero si el deseo es aumentar el conocimiento de administración de Linux, Iptables es el primer paso para aprender cómo hacerlo de manera práctica. administrar la seguridad en Linux e incluso facilitar la gestión de dispositivos de seguridad CISCO o Fortigate y similares.

Iptables básicamente le permite instruir a su sistema para que acepte, rechace o reenvíe una conexión dependiendo de los parámetros elegidos, por ejemplo, para redirigir todas las conexiones al puerto X a una dirección IP diferente, para bloquear todas las conexiones provenientes de una IP específica, rango de IP o para aceptar todas las conexiones provenientes de direcciones IP incluidas en la lista blanca, entre muchas otras funciones.

En este tutorial, aprenderemos cómo proteger un servidor web, cómo reenviar conexiones a direcciones IP internas desde nuestra LAN y cómo ofrecer servicios específicos solo a direcciones IP incluidas en la lista blanca.

Instalación de Iptables

Para instalar iptables en sistemas Debian / Ubuntu simplemente ejecute "apt update && apt install iptables" como root o con "sudo" como prefijo como en la siguiente imagen.

Abrir puertos HTTP y HTTPS

En primer lugar, agreguemos todas las políticas ACEPTAR comenzando por el servidor web.

iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR
iptables -A ENTRADA -p tcp --dport 443 -j ACEPTAR

Para ver nuestras reglas agregadas, ejecute "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, DROP, QUEUE o RETURN.

Luego, en la muestra de la imagen de arriba, le estamos diciendo a Iptables que agregue una regla para que el tráfico entrante a través del protocolo TCP y los puertos 80 y 443 sean aceptados.

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

iptables -A ENTRADA -s 127.0.0.1 -p tcp --dport 80 -j ACEPTAR

Dónde:

s = fuente
Iptables -L = enumera todas las reglas cargadas de iptables
Iptables -L -v = lo mismo con la verbosidad.

También podemos probar nuestro firewall con nmap:

Como podemos ver el puerto 80 está abierto tanto según “iptables -L” como Nmap.

Nota: Para obtener más información sobre el uso de Nmap, puede leer nuestro tutorial al respecto

Protegiendo su servidor

#Abrir servicios HTTP y HTTPS.
iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR
iptables -A ENTRADA -p tcp --dport 443 -j ACEPTAR
# Servicio de puerto SSH abierto
iptables -A ENTRADA -p tcp --dport 22 -m conntrack --ctstate NUEVO, ESTABLECIDO -j ACEPTAR

Dónde están los nuevos parámetros:

-metro = significa "coincidencia" y se utiliza para llamar a las extensiones de Iptable como conntrack, que no forma parte de las funciones principales de iptable.

conntrack = Permite rastrear información sobre conexiones como direcciones específicas o en este caso el estado de la conexión. Esto debe usarse con cuidado, ya que muchas reglas para defender los servidores de algunos ataques usan conntrack mientras que su uso está limitado por el hardware y dicha limitación puede usarse para sobrecargar los recursos del servidor.

-ctstate = determina el estado de la regla para que coincida, los estados posibles son: NUEVO, ESTABLECIDO, RELACIONADO e NO VÁLIDO.

#Proteja su servicio SSH contra ataques de fuerza bruta permitiendo solo una IP específica
para acceder a iptables -A INPUT -p tcp -s X.X.X.X --dport 22 -m conntrack --ctstate NUEVO,
ESTABLECIDO -j ACEPTO
#Proteja su servicio SSH contra ataques de fuerza bruta limitando los intentos de conexión
Iptables -A ENTRADA -p tcp -m tcp --dport 22 -m conntrack --ctstate NUEVO -j 22-test
Iptables -A 22-test -m reciente --name CONNECTIONS --set --mask 255.255.255.255 - fuente
Iptables -A 22-test -m reciente --name CONNECTIONS --rcheck --mask 255.255.255.255
--rsource --seconds 30 --hitcount 3 -j 22-protection
Iptables -A 22-test -j ACEPTAR
Iptables -A 22-protección -j DROP

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-test".

La segunda línea dice paquetes netmask 255.255.255.255 se nombran como CONEXIONES .

La tercera línea dice si un CONEXIONES parece 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 CONEXIONES no parecía más de 3 veces en 30 segundos, se puede aceptar.
Quinta línea, que pertenece a la 22-protección la cadena dice que se caiga CONEXIONES si parece más de 3 veces en 30 segundos.

Ahora para terminar, rechacemos todas las conexiones no aceptadas y permitamos todo el tráfico saliente:

iptables -P SALIDA ACEPTAR
iptables -P CAIDA DE ENTRADA

Donde -P significa la cadena del objetivo, recuerde que el objetivo es la política, ACEPTAR, DROP, QUEUE o RETURN. 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 especifiquemos algo diferente en las reglas anteriores. Este es un firewall muy básico que no incluye reglas para muchos ataques, con fines de aprendizaje y no de producción, al final del artículo adjunto un firewall que utilicé para producción en un servidor, tiene comentarios explicando cada regla.

ENVIAR UNA CONEXIÓN A UN PUERTO ESPECÍFICO A UNA DIRECCIÓN IP ESPECÍFICA

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

iptables -A PREROUTING -t nat -p tcp -d X.X.X.X --dport 8080 -j DNAT --to destino
Y.Y.Y.Y: 80
iptables -A POSTROUTING -t nat -p tcp -j SNAT --to-source X.X.X.X

Las reglas anteriores invocan a 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 redireccionarán a la dirección Y.Y.Y.Y, puerto 80. La segunda regla especifica que 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, para permitir juegos en línea con redes externas, etc.

Este tutorial estaba destinado a presentar Iptables a los principiantes y solo explica un número limitado de funciones básicas. A continuación puede ver una muestra de un firewall bien planificado que se utilizó para un servidor de producción, incluye desde algunas de las reglas que ya vimos hasta reglas más complejas para prevenir ataques DDoS, entre otras.
El siguiente tutorial será sobre rastreo dentro de redes locales, pero en un próximo tutorial explicaré algunas de las reglas aplicadas al cortafuegos a continuación.  Gracias por seguir LinuxHint.com, síguenos para futuras actualizaciones de Iptables y Linux en general.

Bono: muestra de firewall de producción

iptables -F
# ---- Habilita la protección de mensajes de error incorrectos
habilitar / proc / sys / net / ipv4 / icmp_ignore_bogus_error_responses
# ---- Activar 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 utiliza para fines legítimos
propósitos deshabilitar / proc / sys / net / ipv4 / conf / * / accept_source_route
# ---- Deshabilite la aceptación de redireccionamiento ICMP que puede usarse para alterar sus tablas de enrutamiento
deshabilitar / proc / sys / net / ipv4 / conf / * / accept_redirects
# ---- Como no aceptamos redireccionamientos, tampoco enviemos mensajes de redireccionamiento
deshabilitar / proc / sys / net / ipv4 / conf / * / send_redirects
# ---- Ignorar paquetes con direcciones imposibles
deshabilitar / proc / sys / net / ipv4 / conf / * / log_martians
# ---- Protege contra los números de secuencia envolventes y ayuda a medir el tiempo de ida y vuelta
habilitar / proc / sys / net / ipv4 / tcp_timestamps
# ---- Ayuda contra ataques syn-flood DoS o DDoS usando opciones particulares de inicial
Los números de secuencia TCP habilitan / 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
# Ahora podemos comenzar a agregar servicios seleccionados a nuestro filtro de firewall. La primera de esas cosas
es una interfaz de host local iptables -A INPUT -i lo -j ACCEPT
# Le dijimos al cortafuegos que tomara todos los paquetes entrantes con banderas tcp NINGUNO y que los SIGA.
iptables -A ENTRADA -p tcp ! -m conntrack --ctstate NUEVO -j DROP
#Le decimos a iptables que agregue (-A) una regla a la entrada (INPUT) - SSH funciona en el puerto 50683
en lugar de 22.
iptables -A ENTRADA -p tcp -m tcp --dport 50683 -j ACEPTAR
iptables -A ENTRADA -p tcp -m tcp -s ip específica --dport 50683 -j ACEPTAR
iptables -A ENTRADA -p tcp -m tcp -s ip específica --dport 50683 -j ACEPTAR
iptables -A ENTRADA -p tcp -m tcp -s ip específica --dport 50683 -j ACEPTAR
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NUEVO -m reciente --set
--nombre SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 50683 -m reciente --update --seconds 60 --hitcount 4
--rttl --name SSH -j LOG --log-prefix "SSH_brute_force"
iptables -A INPUT -p tcp --dport 50683 -m reciente --update --seconds 60 --hitcount 4
--rttl --name SSH -j DROP
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NUEVO -m reciente --set
--nombre SSH
iptables -A ENTRADA -p tcp --dport 50683 -m conntrack --ctstate NUEVO -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NUEVO -m reciente --update
--segundos 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_bru
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NUEVO -m reciente --update
--segundos 60 --hitcount 4 --rttl --name SSH -j DROP
#Ahora permito imap y smtp.
-A ENTRADA -p tcp --dport 25 -j ACEPTAR
# Permite conexiones pop y pops
-A ENTRADA -p tcp --dport 110 -j ACEPTAR
-A ENTRADA -p tcp --dport 995 -j ACEPTAR
############ IMAP e IMAPS ###################################################################################################################################################################################################################################################################### IMAP & IMAPS ############
-A ENTRADA -p tcp --dport 143 -j ACEPTAR
-A ENTRADA -p tcp --dport 993 -j ACEPTAR
########### MYSQL #######################################################################################################################################################################################################################################################################################
iptables -A ENTRADA -i eth0 -p tcp -m tcp --dport 3306 -j ACEPTAR
########## R1soft CDP System ###############
iptables -A ENTRADA -p tcp -m tcp -s ip específica --dport 1167 -j ACEPTAR
############### extrovertido ###################
iptables -I ENTRADA -m conntrack --ctstate ESTABLECIDO, RELACIONADO -j ACEPTAR
### Permitir en curso, bloquear entrante no definido ###
iptables -P SALIDA ACEPTAR
iptables -P CAIDA DE ENTRADA
iptables -L -n
iptables-save | tee / etc / iptables.prueba.reglas
iptables-restore < /etc/iptables.test.rules
#servicio reinicio de iptables
Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....