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.
Lobo Telemático, orgullosamente santacrucense.