Manten seguro tu servidor con IPTABLES

Tu servidor se encuentra seguro? o es una puerta abierta por la que todos pueden entrar y salir?
Enseguida te muestro una manera muy sencilla para implementar reglas de seguridad en tu sistema GNU/Linux para poner una capa de seguridad al sistema y evitar que entren intrusos y roben información valiosa o delicada.

Iptables es un módulo del núcleo de Linux que se encarga de filtrar los paquetes de red a través de reglas

Para lograr esta capa de seguridad vamos a usar el firewall de GNU/Linux llamado “iptables”, si bien existen alternativas más amigables y simples como “ufw” o “firewalld” en este caso vamos a usar “iptables” de una manera muy simple que no requieres de conocimientos avanzados ni mucha experiencia en la terminal, solo vamos a manejar reglas de entrada y reglas de salida.

Primero vamos a crear un archivo que será el script de las reglas del firewall (yo usaré nano como editor de texto).
nano /home/firewall.rules
Dentro del archivo crearemos las reglas predeterminadas, estas reglas limpiaran toda configuración y harán permanentes conexiones ya establecidas y relacionadas para evitar desconexiones:

iptables -Z ; iptables -F ; iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Ahora si enseguida vamos a poner nuestras reglas personalizadas (ojo, vamos a trabajar con la metodología de primero bloquear todo y posteriormente ir permitiendo el tráfico que si queremos) así que arriba ya bloqueamos todo lo de entrada y salida y ahora vamos a ir permitiendo lo que dejaremos entrar al sistema:

# Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 22 (SSH) del servidor :
iptables -A INPUT -s 192.168.0.0/24 --dport 22 -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 5432 (psql) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 5432 -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 80 (HTTP) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 80 -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 443 (HTTPS) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 22 -j ACCEPT
#Regla para responder ping desde la red 192.168.0.0/24 al servidor:
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.0.0/24 -j ACCEPT
#Regla para bloquear todo el trafico desde la IP 192.168.0.200 al servidor:
iptables -A INPUT -s 192.168.0.200 -j DROP

Ahora vamos a crear las reglas para el tráfico de salida:

#Regla para permitir todo el trafico del seridor hacia la IP 192.168.0.1:
iptables -A OUTPUT -d 192.168.0.1 -j ACCEPT
#Regla para bloquear todo el trafico desde el servidor hacia la IP 192.168.0.200:
iptables -A OUTPUT -d 192.168.0.200 -j DROP
#Regla para bloquear el tráfico del puerto 22 (SSH) hacia la IP 192.168.0.2:
iptables -A OUTPUT -d 192.168.0.2 --dport 22 -j DROP
#Regla para permitir todo el tráfico restante:
iptables -A OUTPUT -d 0.0.0.0/0 -j ACCEPT

Hasta ahora no hemos hecho ningún cambio, solo vamos a guardar este archivo y queda de la siguiente manera:

iptables -Z ; iptables -F ; iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 22 (SSH) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 22 -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 5432 (psql) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 5432 -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 80 (HTTP) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 80 -j ACCEPT
#Regla para permitir trafico desde la red 192.168.0.0/24 al puerto 443 (HTTPS) del servidor:
iptables -A INPUT -s 192.168.0.0/24 --dport 22 -j ACCEPT
#Regla para responder ping desde la red 192.168.0.0/24 al servidor:
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.0.0/24 -j ACCEPT
#Regla para bloquear todo el trafico desde la IP 192.168.0.200 al servidor:
iptables -A INPUT -s 192.168.0.200 -j DROP
#Regla para permitir todo el trafico del seridor hacia la IP 192.168.0.1:
iptables -A OUTPUT -d 192.168.0.1 -j ACCEPT
#Regla para bloquear todo el trafico desde el servidor hacia la IP 192.168.0.200:
iptables -A OUTPUT -d 192.168.0.200 -j DROP
#Regla para bloquear el tráfico del puerto 22 (SSH) hacia la IP 192.168.0.2:
iptables -A OUTPUT -d 192.168.0.2 --dport 22 -j DROP
#Regla para permitir todo el tráfico restante:
iptables -A OUTPUT -d 0.0.0.0/0 -j ACCEPT

Ahora vamos a crear otro archivo que eliminará todas las reglas y dejará abierto el firewall:
nano /home/firewall-off.rules
Y pegamos lo siguiente en el archivo y lo guardamos:

iptables -Z ; iptables -F ; iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Hay que darle los permisos de ejecución a los dos archivos :
chmod +x /home/firewall.rules
chmod +x /home/firewall-off.rules

Ahora ya tenemos dos archivos, uno que activa las reglas de firewall (firewall.rules) y otro que deja el firewall desactivado (firewall-off.rules) que usaremos por si necesitamos quitar las reglas de manera rápida, como para hacer pruebas o descartar problemas de comunicación o si llegas a pensar que activaste una regla que te impide acceder lo vamos a usar.
Cada archivo se ejecuta usando:
sudo sh firewall.rules
sudo sh firewall-off.rules

Por lo que ahora si, dale gas y activa tu firewall, en caso de que algo falle, ejecuta el archivo firewall-off y revisa nuevamente tus reglas, si estás accediendo por SSH al servidor asegurate de no bloquear tu comunicación SSH (ya me ha pasado) porque tendrías que ir físicamente al servidor para corregir tu burrada.

Por último vamos a hacer que el firewall se active desde arranque con permisos de root usando la herramienta de CRON ejecutando:
su
crontab -e

y escribes la siguiente linea en el editor de texto y lo guardas:
@reboot sudo sh /home/firewall.rules
Ahora puedes hacer las pruebas que necesites para validar que tu configuración es correcta y solo se permiten las redes o IPs que tu quieres hacia los puertos que tu definas, otra cosa más: no elimines los archivos que creamos.

Te acabo de mostrar una manera simple de agregar esa capa de seguridad a un sistema GNU/Linux por lo que te aseguro que tu sistema estará más protegido y mejor administrado de esta manera, sin embargo las reglas de iptables pueden irse haciendo más y más complejas como tu lo requieras y puede convivir con diferentes segmentos de redes, si llegas a tener una duda házmelo saber y aprendemos juntos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *