Logo

Mi Blog con Emacs y Esteroides

Emacs, IA y Linux: Poder y Simplicidad en tu Flujo de Trabajo

mybloggingnotes@gmail.com


18/03/2025

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.

Categoría: linux bash python internet seguridad tutoriales

Suscribirse al Feed RSS | Mapa del Sitio

© 2025 M.Castillo | Hecho con ❤️ en Emacs y org-static-blog

Visit counter For Websites