Configuración Mínima de Seguridad con Scripts Bash y Python
Por Qwen AI
Introducción
Este documento describe cómo configurar una seguridad mínima en un sistema Linux utilizando scripts escritos en Bash y Python. Las medidas incluyen:
- Configuración básica de un firewall con IPTables.
- Bloqueo de IPs sospechosas (anti-botnet).
- Protección contra escaneos de puertos.
- Configuración de políticas de red seguras.
Configuración Básica del Firewall con IPTables (Bash)
El siguiente script configura un firewall básico utilizando IPTables para permitir solo el tráfico necesario.
Script Bash:
#!/bin/bash # Limpiar todas las reglas existentes iptables -F iptables -X # Política por defecto: Denegar todo el tráfico entrante y saliente iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Permitir tráfico local (loopback) iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Permitir conexiones establecidas o relacionadas iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Permitir SSH (puerto 22) desde una IP específica (opcional) # Reemplaza "TU_IP" con tu dirección IP pública iptables -A INPUT -p tcp --dport 22 -s TU_IP -j ACCEPT # Permitir HTTP (puerto 80) y HTTPS (puerto 443) iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Registrar intentos de acceso no autorizados iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " # Guardar las reglas de IPTables iptables-save > /etc/iptables/rules.v4
Notas:
- Asegúrate de tener permisos de superusuario (`sudo`) para ejecutar este script.
- Si bloqueas accidentalmente el acceso SSH, puedes perder el control remoto del servidor.
Bloqueo de IPs Sospechosas (Anti-Botnet)
El siguiente script bloquea IPs sospechosas utilizando una lista negra predefinida.
Script Bash:
#!/bin/bash # Descargar una lista negra de IPs conocidas (por ejemplo, Emerging Threats) wget -q https://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt -O /tmp/blocked_ips.txt # Leer el archivo y bloquear cada IP while read -r ip; do if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then iptables -A INPUT -s "$ip" -j DROP echo "Bloqueada IP: $ip" fi done < /tmp/blocked_ips.txt # Guardar las reglas de IPTables iptables-save > /etc/iptables/rules.v4
Notas:
- La lista negra puede actualizarse periódicamente para mantenerse al día con nuevas amenazas.
- Puedes personalizar la fuente de la lista negra según tus necesidades.
Protección Contra Escaneos de Puertos (Python)
El siguiente script utiliza Python para monitorear intentos de escaneo de puertos y bloquear IPs sospechosas.
Script Python:
import os import time from collections import defaultdict # Diccionario para rastrear intentos de conexión por IP connection_attempts = defaultdict(int) # Umbral de intentos sospechosos THRESHOLD = 5 BLOCK_TIME = 60 # Tiempo en segundos para bloquear una IP def block_ip(ip): """Bloquea una IP usando IPTables.""" os.system(f"iptables -A INPUT -s {ip} -j DROP") print(f"Bloqueada IP sospechosa: {ip}") def monitor_logs(): """Monitorea los logs del sistema en busca de intentos de conexión.""" with open("/var/log/auth.log", "r") as log_file: log_file.seek(0, 2) # Ir al final del archivo while True: line = log_file.readline() if "Failed password" in line: ip = line.split("from ")[1].split(" port")[0] connection_attempts[ip] += 1 print(f"Intento de conexión desde: {ip} ({connection_attempts[ip]} intentos)") if connection_attempts[ip] >= THRESHOLD: block_ip(ip) time.sleep(BLOCK_TIME) connection_attempts[ip] = 0 # Reiniciar contador time.sleep(1) if __name__ == "__main__": monitor_logs()
Notas:
- Este script requiere acceso a los logs del sistema (`/var/log/auth.log`).
- Asegúrate de tener instalado Python y permisos de superusuario.
Configuración de Políticas de Red Seguras (Bash)
El siguiente script configura políticas adicionales para mejorar la seguridad de la red.
Script Bash:
#!/bin/bash # Deshabilitar el redireccionamiento IP echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # Habilitar protección contra SYN Flood echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Deshabilitar el reenvío de paquetes IPv4 echo 0 > /proc/sys/net/ipv4/ip_forward # Habilitar protección contra IP Spoofing for interface in $(ls /sys/class/net | grep -v lo); do echo 1 > /proc/sys/net/ipv4/conf/$interface/rp_filter done # Guardar cambios en sysctl.conf cat <<EOF >> /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.ip_forward = 0 EOF sysctl -p
Notas:
- Estas configuraciones mejoran la seguridad del sistema contra ataques comunes.
- Asegúrate de probar los cambios en un entorno seguro antes de aplicarlos en producción.
Conclusión
Este documento proporciona scripts básicos en Bash y Python para configurar una seguridad mínima en sistemas Linux. Recuerda que estas medidas son solo un punto de partida y deben complementarse con auditorías regulares, actualizaciones de software y mejores prácticas de seguridad.
Para más información, consulta la documentación oficial de IPTables y las recomendaciones de seguridad para tu distribución de Linux.