Iptables Tutorial: Asegurando VPS con el Cortafuegos de Linux
¿Estás buscando un tutorial completo sobre iptables para tu VPS? Este artículo te mostrará cómo instalar y usar iptables en un sistema Ubuntu. Puedes asegurar tu VPS utilizando la interfaz de línea de comandos al aprender sobre esta herramienta de cortafuegos de Linux.
¿Qué es Iptables?
Iptables es un programa de cortafuegos para Linux. Monitoreará el tráfico desde y hacia tu servidor utilizando tablas. Estas tablas contienen conjuntos de reglas, llamadas cadenas, que filtrarán paquetes de datos entrantes y salientes.
¿Cómo Funciona Iptables?
Cuando un paquete coincide con una regla, se le asigna un destino, que puede ser otra cadena o uno de estos valores especiales:
- ACCEPT: permitirá que el paquete pase.
- DROP: no permitirá que el paquete pase.
- RETURN: detiene el paquete de atravesar una cadena y le dice que regrese a la cadena anterior.
En este tutorial de iptables, trabajaremos con una de las tablas predeterminadas, llamada "filter". Esta tabla consta de tres cadenas:
- INPUT: controla los paquetes entrantes al servidor.
- FORWARD: filtra los paquetes entrantes que se reenviarán a otro lugar.
- OUTPUT: filtra los paquetes que salen de tu servidor.
Antes de comenzar esta guía, asegúrate de tener acceso SSH de root o sudo a tu máquina que funciona con Ubuntu 16.04 o superior. Puedes establecer la conexión a través de PuTTY (Windows) o la terminal (Linux, macOS). Si tienes un VPS de Holy, puedes obtener los detalles de inicio de sesión SSH en la pestaña "Servidores" de hPanel.
Importante: las reglas de iptables solo se aplican a IPv4. Si deseas configurar un cortafuegos para el protocolo IPv6, deberás usar "ip6tables" en su lugar.
Cómo Instalar y Usar el Cortafuegos Linux Iptables
Dividiremos este tutorial de iptables en tres pasos. Primero, aprenderás cómo instalar la herramienta en Ubuntu. En segundo lugar, te mostraremos cómo definir las reglas. Por último, te guiaremos para realizar cambios persistentes en iptables.
1. Instalar Iptables
Iptables viene preinstalado en la mayoría de las distribuciones de Linux. Sin embargo, si no lo tienes en tu sistema Ubuntu/Debian por defecto, sigue los pasos a continuación:
- Conéctate a tu servidor a través de SSH. Si no sabes cómo, puedes leer nuestro tutorial de SSH.
- Ejecuta los siguientes comandos uno por uno:
```bash
sudo apt-get update
sudo apt-get install iptables
```
- Verifica el estado de tu configuración actual de iptables ejecutando:
```bash
sudo iptables -L -v
```
Aquí, la opción `-L` se utiliza para listar todas las reglas, y `-v` es para mostrar la información de manera más detallada.
Obtendrás un resultado similar al siguiente:
```plaintext
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
```
Ahora tendrás el cortafuegos iptables de Linux instalado. En este punto, notarás que todas las cadenas están configuradas como ACCEPT y no tienen reglas. Esto no es seguro, ya que cualquier paquete puede pasar sin filtrar.
No te preocupes, te diremos cómo definir reglas en el siguiente paso de nuestro tutorial de iptables.
2. Definir Reglas de Cadena
Definir una regla significa agregarla a la cadena. Para hacer esto, debes insertar la opción `-A` (Append) justo después del comando iptables, de la siguiente manera:
```bash
sudo iptables -A
```
Esto alertará a iptables que estás agregando nuevas reglas a una cadena. Luego, puedes combinar el comando con otras opciones, como:
- `-i` (interfaz): la interfaz de red cuyo tráfico deseas filtrar, como eth0, lo, ppp0, etc.
- `-p` (protocolo): el protocolo de red donde se lleva a cabo tu proceso de filtrado. Puede ser tcp, udp, udplite, icmp, sctp, icmpv6, y más. Alternativamente, puedes escribir "all" para elegir todos los protocolos.
- `-s` (origen): la dirección desde la cual proviene el tráfico. Puedes agregar un nombre de host o una dirección IP.
- `--dport` (puerto de destino): el número de puerto de destino de un protocolo, como 22 (SSH), 443 (https), etc.
- `-j` (destino): el nombre del destino (ACCEPT, DROP, RETURN). Debes insertar esto cada vez que hagas una nueva regla.
Si deseas usar todos estos parámetros, debes escribir el comando en este orden:
```bash
sudo iptables -A <cadena> -i <interfaz> -p <protocolo (tcp/udp)> -s <origen> --dport <número de puerto> -j <destino>
```
Una vez que comprendas la sintaxis básica, puedes comenzar a configurar el cortafuegos para dar más seguridad a tu servidor. Para este tutorial de iptables, usaremos la cadena "INPUT" como ejemplo.
Habilitar el Tráfico en localhost
Para permitir el tráfico en localhost, escribe el siguiente comando:
```bash
sudo iptables -A INPUT -i lo -j ACCEPT
```
Para este tutorial de iptables, usamos "lo" o la interfaz de bucle. Se utiliza para todas las comunicaciones en localhost. El comando anterior se asegurará de que las conexiones entre una base de datos y una aplicación web en la misma máquina funcionen correctamente.
Habilitar Conexiones en los Puertos HTTP, SSH y SSL
A continuación, queremos que las conexiones http (puerto 80), https (puerto 443) y ssh (puerto 22) funcionen como de costumbre. Para hacer esto, necesitamos especificar el protocolo (-p) y el puerto correspondiente (--dport). Puedes ejecutar estos comandos uno por uno:
```bash
sudo iptables -A INPUT -p tcp --dport 22 -j
ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
```
Es hora de comprobar si las reglas se han agregado en iptables:
```bash
sudo iptables -L -v
```
Debería devolver los resultados a continuación, lo que significa que se aceptarán todas las conexiones de protocolo TCP desde los puertos especificados:
```plaintext
La aceptación del puerto de destino en iptables que consiste en http, https y ssh
```
Filtrar Paquetes Según la Fuente
Iptables te permite filtrar paquetes según una dirección IP o un rango de direcciones IP. Debes especificarlo después de la opción `-s`. Por ejemplo, para aceptar paquetes de 192.168.1.3, el comando sería:
```bash
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT
```
También puedes rechazar paquetes de una dirección IP específica reemplazando el destino ACCEPT con DROP.
```bash
sudo iptables -A INPUT -s 192.168.1.3 -j DROP
```
Si deseas rechazar paquetes de un rango de direcciones IP, debes usar la opción `-m` y el módulo iprange. Luego, especifica el rango de direcciones IP con --src-range. Recuerda, un guion debe separar el rango de direcciones IP sin espacio, así:
```bash
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
```
Filtrar paquetes según sus fuentes es crucial si estás utilizando un sistema de detección y prevención de intrusiones (IDS/IPS) como Suricata. Esta herramienta monitorea la red de tu VPS y te notifica sobre tráfico malicioso.
IDS/IPS muestra los orígenes de los paquetes maliciosos, que puedes agregar a la lista de bloqueo de iptables. Consulta nuestro artículo para aprender más sobre cómo configurar Suricata en Ubuntu.
Bloquear Todo Otro Tráfico
Es crucial utilizar el destino DROP para todo otro tráfico después de definir reglas --dport. Esto evitará que una conexión no autorizada acceda al servidor a través de otros puertos abiertos. Para lograr esto, simplemente escribe:
```bash
sudo iptables -A INPUT -j DROP
```
Ahora, la conexión fuera de los puertos especificados se bloqueará.
Eliminar Reglas
Si deseas eliminar todas las reglas y comenzar desde cero, puedes usar la opción -F (flush):
```bash
sudo iptables -F
```
Este comando borra todas las reglas actuales. Sin embargo, para eliminar una regla específica, debes usar la opción -D. Primero, debes ver todas las reglas disponibles ingresando el siguiente comando:
```bash
sudo iptables -L --line-numbers
```
Obtendrás una lista de reglas con números:
```plaintext
Cadena INPUT (política ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 192.168.0.4 anywhere
2 ACCEPT tcp -- anywhere anywhere tcp dpt:https
3 ACCEPT tcp -- anywhere anywhere tcp dpt:http
4 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
```
Para eliminar una regla, inserta la cadena correspondiente y el número de la lista. Digamos que, para este tutorial de iptables, queremos deshacernos de la regla número tres de la cadena "INPUT". El comando debería ser:
```bash
sudo iptables -D INPUT 3
```
Alternativamente, si necesitas filtrar solo el tráfico entrante, puedes usar el Firewall de VPS de Holy. Selecciona tu VPS y navega a la sección de Firewall:
Conclusion
Iptables es un potente programa de cortafuegos que puedes usar para asegurar tu servidor Linux o VPS. Lo grandioso es que puedes definir varias reglas según tus preferencias.
En este tutorial de iptables, has aprendido cómo instalar y usar la herramienta. Ahora, esperamos que puedas administrar tus conjuntos de reglas para filtrar paquetes entrantes y salientes.
¡Es hora de probarlo por ti mismo y buena suerte!