A continuación, se presentan una serie de scripts y conifguraciones diseñados para optimizar la administración de un sistema CentOS 7.9, centrándose en tareas comunes como monitoreo, gestión de red, despliegue de servicios y análisis de registros.
Monitoreo de Recursos del Sistema (Script: /root/info_sistema.sh)
Este script recopila y muestra información fundamental sobre el hardware del servidor, incluyendo el número de núcleos de CPU, la memoria RAM total y el espacio disponible en la partición raíz del disco.
#!/bin/bash
# Script para recopilar información esencial del sistema.
num_cpus=$(nproc)
memoria_total_mb=$(awk '/MemTotal/{print int($2/1024)}' /proc/meminfo) # Memoria total en MB
espacio_disco_raiz=$(df -h --output=size / | tail -n 1 | sed 's/G//') # Espacio del disco raíz en GB (aproximado)
echo "--- Detalles del Sistema ---"
echo " Núcleos de CPU: $num_cpus"
echo " Memoria RAM total: $memoria_total_mb MB"
echo " Espacio en disco de /: $espacio_disco_raiz GB"
echo "----------------------------"
Configuración de Permisos
Para que el script pueda ejecutarse, se deben asignar permisos de ejecución:
chmod +x /root/info_sistema.sh
Detección de Direcciones IP (Script: /root/verificar_ip.sh)
Este script identifica y muestra tanto la dirección IP local de la máquina como la dirección IP pública a través de la cual el servidor accede a Internet.
#!/bin/bash
# Identifica las direcciones IP de la máquina local.
ip_interna=$(ip -4 addr show | grep -oP 'inet\s+\K[\d.]+' | head -n 1)
ip_externa=$(curl -s checkip.amazonaws.com || wget -qO- ipinfo.io/ip)
echo "--- Direcciones IP Detectadas ---"
echo " IP interna (LAN): $ip_interna"
echo " IP pública (WAN): $ip_externa"
echo "-------------------------------"
Cnofiguración de Permisos
Asegúrese de que el script tenga permisos de ejecución:
chmod +x /root/verificar_ip.sh
Implementación de Nginx con Docker
Estos pasos detallan la instalación de Docker en CentOS y el despliegue de un contenedor Nginx que sirve una página web personalizada en un puerto específico.
# Paso 1: Instalar prerrequisitos necesarios para Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Paso 2: Añadir el repositorio oficial de Docker a la configuración de YUM
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Paso 3: Instalar los componentes principales de Docker (engine, CLI, containerd)
sudo yum install -y docker-ce docker-ce-cli containerd.io
# Paso 4: Iniciar el servicio Docker y configurarlo para que se inicie automáticamente
sudo systemctl start docker
sudo systemctl enable docker
# Paso 5: Crear un archivo HTML con contenido personalizado para Nginx
echo "¡Bienvenido! Este es el contenido servido por Nginx en Docker." | sudo tee /opt/pagina_nginx_personalizada.html > /dev/null
# Paso 6: Ejecutar un contenedor Nginx, mapeando el puerto 8088 del host al puerto 80 del contenedor,
# y montando el archivo HTML personalizado como la página principal de Nginx.
sudo docker run -d --name mi_servidor_web -p 8088:80 -v /opt/pagina_nginx_personalizada.html:/usr/share/nginx/html/index.html nginx
Verificación del Servicio Nginx
Para confirmar que el contenedor Nginx se ha iniciado correctamente y sirve el contenido personalizado:
curl http://127.0.0.1:8088
La salida debería mostrar el mensaje HTML personalizado.
Escaneo de Hosts Activos en una Subred (Script: /root/escaner_red.sh)
Este script realiza un escaneo de ping en una subred específica para identificar direcciones IP pares que están activas.
#!/bin/bash
# Escanea direcciones IP pares en una subred específica para detectar hosts activos.
subred_base="192.168.1" # Modifica esta variable para tu subred
echo "--- Escaneando hosts activos en $subred_base.x (solo IPs pares) ---"
for i in $(seq 2 2 254); do
direccion_completa="$subred_base.$i"
# Envía un solo paquete ICMP con un tiempo de espera de 1 segundo
if ping -c 1 -W 1 "$direccion_completa" &> /dev/null; then
echo " Host activo encontrado: $direccion_completa"
fi
done
echo "---------------------------------------------------------"
Configuración de Permisos
Asigne permisos de ejecución al script:
chmod +x /root/escaner_red.sh
Registro Automático de la Hora de Arrranque del Sistema
Esta configuración utiliza un servicio systemd para registrar la fecha y hora exactas en que el sistema se inicia, guardándolas en un archivo.
# Definición del servicio systemd para registrar el tiempo de arranque.
sudo cat > /etc/systemd/system/registrar_inicio.service <<eof after="network.target" de="" del="" description="Registra" el:="" execstart="/bin/bash" fecha="" hora="" inici="" inicio="" la="" se="" sistema="" type="oneshot" y=""> /root/registro_inicio.log'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
# Habilitar el nuevo servicio para que se ejecute en cada arranque.
sudo systemctl enable registrar_inicio.service
</eof>
Verificación del Registro de Arranque
Después de reiniciar el sistema, puede verificar el contenido del archivo /root/registro_inicio.log:
cat /root/registro_inicio.log
Configuración del Firewall iptables
Estos pasos configuran el firewall iptables, deshabilitando primero firewalld para evitar conflictos, e insertando una regla para permitir el tráfico en el puerto 8088.
# Paso 1: Detener y deshabilitar el servicio Firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# Paso 2: Instalar el paquete de servicios de iptables, si no está presente
sudo yum install -y iptables-services
# Paso 3: Iniciar y habilitar los servicios de iptables para que persistan
sudo systemctl start iptables
sudo systemctl enable iptables
# Paso 4: Añadir una regla para permitir el tráfico TCP entrante en el puerto 8088
sudo iptables -I INPUT -p tcp --dport 8088 -j ACCEPT
# Paso 5: Guardar las reglas actuales de iptables para que se carguen en futuros reinicios
sudo service iptables save
Verificación de la Regla de Firewall
Para comprobar que la regla se ha añadido correctamente:
sudo iptables -L -n | grep 8088
Análisis de Registros de Seguridad (Script: /root/analizar_seguridad.sh)
Este script está diseñado para analizar un archivo de registro de seguridad, como /var/log/secure, para identificar y contar los intentos fallidos de inicio de sesión por dirección IP.
#!/bin/bash
# Script para analizar intentos de inicio de sesión fallidos en un archivo de registro.
ruta_log="/var/log/secure" # Ruta estándar para los logs de seguridad en CentOS
echo "--- Análisis de Intentos Fallidos de Inicio de Sesión ---"
echo " IP Remota | Fallos"
echo "--------------------------------------------------------"
# Procesa el archivo de log para extraer IPs y contar las ocurrencias de "Failed password"
grep "Failed password" "$ruta_log" | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | while read -r cuenta direccion; do
printf " %-18s | %s\n" "$direccion" "$cuenta"
done
echo "--------------------------------------------------------"
Configuración de Permisos
Asigne permisos de ejecución al script:
chmod +x /root/analizar_seguridad.sh
Uso del Script
-
Si su archivo de log está comprimido, descomprímalo primero. Por ejemplo:
sudo unzip /root/secure.zip -d /var/log/ -
Ejecute el script:
/root/analizar_seguridad.sh -
La salida esperada tendrá un formato similar a este: ``` IP Remota | Fallos
192.168.1.10 | 15 10.0.0.5 | 8
Verificación Global de Todas las Tareas
Para confirmar el éxito de todas las configuraciones y scripts, siga estos pasos:
- Ejecute los scripts de monitoreo y red:
/root/info_sistema.shy/root/verificar_ip.shpara revisar sus salidas. - Acceda a
http://127.0.0.1:8088desde un navegador o concurlpara validar el contenedor Nginx. - Reinicie el sistema y verifique el contenido de
/root/registro_inicio.log. - Utilice
sudo iptables -L -ny filtre por el puerto 8088 para confirmar la regla del firewall. - Descomprima cualquier log de seguridad necesario (ej.
sudo unzip /root/secure.zip -d /var/log/) y luego ejecute/root/analizar_seguridad.shpara verificar los resultados del análisis.