Cómo asegurar tu VPS Ubuntu con el firewall de Linux Iptables

Cómo asegurar tu VPS Ubuntu con el firewall de Linux Iptables

Iptables es el firewall de Linux que se utiliza para supervisar el tráfico entrante y saliente a un servidor y filtrarlo basado en reglas definidas por el usuario para evitar que cualquier persona acceda al sistema. Utilizando Iptables puede definir reglas que sólo permitirán tráfico selectivo en su servidor. En este tutorial de Iptables, aprenderás a proteger tu aplicación web mediante Iptables.

¿Qué necesitas?

Antes de comenzar con el tutorial de Iptables, necesitará lo siguiente:

Si desesa obtener más información sobre los comandos SSH y SSH, sigue este tutorial.

¡Importante! Para los usuarios de RHEL / CentOS hay un servicio denominado firewallD que ya está instalado en estos sistemas operativos. Si desea utilizar Iptables, primero debes desactivarlo.

Fundamentos de Iptables

Todos los datos se envían en forma de paquetes a través de Internet. El kernel de Linux proporciona una interfaz que filtra los paquetes de tráfico entrante y saliente usando tablas de filtros de paquetes. Iptables es una aplicación de línea de comandos y un firewall de Linux que puedes configurar, mantener e inspeccionar estas tablas.

Pueden definirse varias tablas. Cada tabla puede contener múltiples cadenas. Una cadena no es más que un conjunto de reglas. Cada regla define qué hacer con el paquete si coincide con ese paquete. Cuando el paquete es emparejado, se le da un TARGET. Un objetivo puede ser otra cadena que coincida con o uno de los siguientes valores especiales:

  • ACCEPT: Significa que el paquete podrá pasar.
  • DROP: Significa que no se permitirá que el paquete pase.
  • RETURN: Significa omitir la cadena actual y volver a la siguiente regla de la cadena en la que fue llamado.

Para el alcance de este tutorial de iptables, vamos a trabajar con una de las tablas por defecto llamada filtro (filter). La tabla de filtros tiene tres cadenas (conjuntos de reglas).

  • INPUT – Esta cadena se utiliza para controlar los paquetes entrantes al servidor. Puede bloquear / permitir conexiones basadas en puerto, protocolo o dirección IP de origen.
  • FORWARD – Esta cadena se utiliza para filtrar los paquetes que entran al servidor pero que deben ser reenviados en otro lugar.
  • OUTPUT – Esta cadena se utiliza para filtrar los paquetes que salen del servidor.

Paso 1 – Instalación de Iptables Firewall de Linux

1. Instalación de Iptables

Iptables viene preinstalado en casi todas las distribuciones de Linux. Pero si no lo tienes instalado en el sistema Ubuntu / Debian, usa:

sudo apt-get update
sudo apt-get install iptables

2. Comprobación del estado actual de los iptables

Con este comando, puede comprobar el estado de su configuración actual de Iptables. Aquí se utiliza la opción -L para listar todas las reglas y la opción -v es para una lista más tediosa. Tenga en cuenta que estas opciones distinguen entre mayúsculas y minúsculas.

	
sudo iptables -L -v

Ejemplo:

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

Esta es la salida del comando anterior. Aquí, las tres cadenas se establecen en la política ACCEPT predeterminada. Actualmente no hay reglas para ninguna de las cadenas.

Para hacer más práctico este tutorial de Iptables, modificaremos la cadena INPUT para filtrar el tráfico entrante.

Paso 2 – Definición de reglas de cadena

Definir una regla significa añadirla a la lista (cadena). Aquí está el comando Iptables formateado con opciones regulares. No tenemos que especificar todos ellos.

sudo iptables -A  -i  -p  -s  --dport   -j

Aquí -A significa añadir. La cadena se refiere a la cadena en la que queremos añadir nuestras reglas. Interface es la interfaz de red en la que se desea filtrar el tráfico. Protocol se refiere al protocolo de la red de los paquetes que desea filtrar. También puede especificar el puerto, no el del puerto en el que desea filtrar el tráfico.

Para obtener información más detallada sobre el comando Iptables y sus opciones, puede consultar la página principal de Iptables.

1. Habilitar el tráfico en localhost

Queremos que todas las comunicaciones entre aplicaciones y bases de datos en el servidor continúen como de costumbre.

sudo iptables -A INPUT -i lo -j ACCEPT

Ejemplo:

Chain INPUT (policy ACCEPT 7 packets, 488 bytes)
pkts bytes target     prot opt in     out     source               destination         
0     0 ACCEPT     all  --  lo     any     anywhere             anywhere

-A se utiliza una opción para añadir la regla a la cadena INPUT, aceptar todas las conexiones en la interfaz lo. lo significa la interfaz de loopback. Se utiliza para todas las comunicaciones en el localhost, como las comunicaciones entre una base de datos y una aplicación web en la misma máquina.

2. Habilitación de conexiones en el puerto HTTP, SSH y SSL

Si queremos que nuestras conexiones regulares HTTP (puerto 80), https (puerto 443), ssh (puerto 22) continúen como de costumbre. Introduce los siguientes comandos para habilitarlos. En los comandos siguientes, hemos especificado el protocolo con la opción -p y el puerto correspondiente para cada protocolo con la opción -dport (puerto de destino).

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

Ahora se aceptarán todas las conexiones de protocolo TCP con puertos especificados.

3. Filtrado de paquetes basados en la fuente

Si desea aceptar o rechazar paquetes basados en la dirección IP de origen o en el intervalo de direcciones IP, puede especificarlo con la opción -s. Por ejemplo, para aceptar paquetes desde la dirección 192.168.1.3 –

sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

Puede eliminar paquetes de una dirección IP con un comando similar con la opción DROP.

sudo iptables -A INPUT -s 192.168.1.3 -j DROP

Si desea eliminar paquetes de un rango de direcciones IP, debe utilizar el módulo Iprange con la opción -m y especificar el intervalo de direcciones IP con -src-range.

sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

4. Eliminar el resto del tráfico

Nota: Es importante eliminar el resto del tráfico después de definir las reglas, ya que impide el acceso no autorizado a un servidor desde otros puertos abiertos.

sudo iptables -A INPUT -j DROP

Este comando descarta todo el tráfico entrante distinto de los puertos mencionados en los comandos anteriores. Puede comprobar su conjunto de reglas ahora con:

sudo iptables -L -v

5. Eliminación de reglas

Si desea eliminar todas las reglas y comenzar con una pizarra limpia, puede utilizar el comando flush.

	
sudo iptables -F

Este comando borra todas las reglas actuales. Si deseas eliminar una regla específica, puede hacerlo con la opción -D. En primer lugar, liste todas las reglas con números introduciendo el comando siguiente:

sudo iptables -L --line-numbers

A continuación, obtendrá una lista de reglas con números.

Chain INPUT (policy 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, especifique el número en la lista y la cadena de la regla. En nuestro caso, la cadena INPUT y el número 3.

sudo iptables -D INPUT 3

Paso 3 – Cambios persistentes

Las reglas de Iptables que hemos creado se guardan en la memoria. Eso significa que tenemos que redefinirlos en el reinicio. Para que estos cambios sean persistentes después del reinicio, utilice el siguiente comando en los sistemas Ubuntu / Debian:

sudo /sbin/iptables-save

Este comando guarda las reglas actuales en el archivo de configuración del sistema que se utiliza para reconfigurar las tablas en el momento del reinicio. Debe ejecutar este comando cada vez que realice cambios en las reglas. Para desactivar este cortafuegos, simplemente limpie todas las reglas y haga que los cambios sean persistentes.

sudo iptables -F
sudo /sbin/iptables-save

Conclusión

En este tutorial de Iptables, hemos utilizado el firewall de Iptables Linux para permitir solamente tráfico en puertos específicos. También nos hemos asegurado de que nuestras reglas se guardarán después del reinicio. Este firewall de Linux eliminará los paquetes no deseados, pero hay una advertencia aquí que Iptables puede gobernar solo el tráfico de ipv4. Si tu casilla de servidor virtual VPS ha habilitado la red ipv6, debe establecer diferentes reglas para ese tráfico con ip6tables.

Te recomendamos leer nuestro post sobre qué es un VPS.

Author
El autor

Gustavo B.

Gustavo es un apasionado por la creación de sitios web. Se enfoca en la aplicación de estrategias SEO en Hostinger para España y Latinoamérica, así como la creación de contenidos de alto nivel. Cuando no está aplicando nuevos trucos en WordPress lo puedes encontrar tocando la guitarra, viajando o tomando un curso online.