PHP Classes

File: ipset/manager.sh

Recommend this page to a friend!
  Packages of Moises Espindola   Sentinela   ipset/manager.sh   Download  
File: ipset/manager.sh
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Sentinela
Linux protection tools with Web dashboard panel
Author: By
Last change:
Date: 6 days ago
Size: 6,155 bytes
 

Contents

Class file image Download
#!/usr/bin/env bash #============================================================================= # Sentinela ? Intelligent Linux Security Framework # ipset/manager.sh ? Gestión centralizada de ipsets #============================================================================= # # Administra todos los ipsets usados por Sentinela. # Crea, destruye, lista y limpia sets. # # Ipsets: # SENTINELA_TRUSTED - IPs de administración (timeout 86400s) # SENTINELA_BLACKLIST - IPs maliciosas (timeout BAN_TIME) # SENTINELA_DDOS - Atacantes DDoS (timeout DDOS_BAN_TIME) # SENTINELA_REPUTATION - Redes maliciosas externas (timeout 86400s) # SENTINELA_HONEY - IPs que cayeron en honeypots (timeout 3600s) #============================================================================= # shellcheck source=lib/common.sh source "${SENTINELA_DIR}/lib/common.sh" #============================================================================= # Configuración de ipsets #============================================================================= declare -A IPSETS IPSETS=( ["SENTINELA_TRUSTED"]="hash:ip 86400" ["SENTINELA_BLACKLIST"]="hash:ip ${BAN_TIME}" ["SENTINELA_DDOS"]="hash:ip ${DDOS_BAN_TIME:-600}" ["SENTINELA_REPUTATION"]="hash:net 86400" ["SENTINELA_HONEY"]="hash:ip 3600" ) #============================================================================= # Crear todos los ipsets #============================================================================= ipset_create_all() { for set_name in "${!IPSETS[@]}"; do local type_timeout="${IPSETS[$set_name]}" local type="${type_timeout% *}" local timeout="${type_timeout#* }" if ! ${IPSET} list "${set_name}" &>/dev/null; then log_info "Creando ipset ${set_name} (${type}, timeout: ${timeout}s)" ${IPSET} create "${set_name}" "${type}" timeout "${timeout}" 2>/dev/null || { # Si falla, destruir y recrear ${IPSET} destroy "${set_name}" 2>/dev/null || true ${IPSET} create "${set_name}" "${type}" timeout "${timeout}" } else log_debug "Ipset ${set_name} ya existe" fi done } #============================================================================= # Destruir todos los ipsets #============================================================================= ipset_destroy_all() { for set_name in "${!IPSETS[@]}"; do if ${IPSET} list "${set_name}" &>/dev/null; then log_info "Destruyendo ipset ${set_name}" ${IPSET} destroy "${set_name}" 2>/dev/null || true fi done } #============================================================================= # Flush (limpiar) todos los ipsets #============================================================================= ipset_flush_all() { for set_name in "${!IPSETS[@]}"; do if ${IPSET} list "${set_name}" &>/dev/null; then log_info "Limpiando ipset ${set_name}" ${IPSET} flush "${set_name}" 2>/dev/null || true fi done } #============================================================================= # Listar todos los ipsets con conteo de entradas #============================================================================= ipset_list_all() { echo "??? Ipsets activos ???" echo for set_name in "${!IPSETS[@]}"; do if ${IPSET} list "${set_name}" &>/dev/null; then local entries entries=$(${IPSET} list "${set_name}" 2>/dev/null | grep -cE '^[0-9]' || true) local type_timeout="${IPSETS[$set_name]}" printf " ? %-25s %s\n" "${set_name}" "${entries} entradas" else printf " ? %-25s %s\n" "${set_name}" "no existe" fi done echo } #============================================================================= # Mostrar miembros de un ipset específico #============================================================================= ipset_show() { local set_name="$1" if ! ${IPSET} list "${set_name}" &>/dev/null; then log_error "Ipset ${set_name} no existe" return 1 fi echo "Ipset: ${set_name}" echo "??????????????????????????????????????" ${IPSET} list "${set_name}" | grep -E '^[0-9]' | while IFS= read -r line; do local entry timeout entry=$(echo "${line}" | awk '{print $1}') timeout=$(echo "${line}" | awk '{print $2}') if [[ "${timeout}" == "0" ]]; then echo " ${entry} [permanente]" else echo " ${entry} [${timeout}s]" fi done local total total=$(${IPSET} list "${set_name}" | grep -cE '^[0-9]' || true) echo "Total: ${total} entradas" echo } #============================================================================= # Salvar ipsets a archivo (para persistencia en boot) #============================================================================= ipset_save() { local output="${1:-${BACKUP_DIR}/ipsets.backup}" mkdir -p "${BACKUP_DIR}" log_info "Guardando ipsets en: ${output}" if ${IPSET} save > "${output}" 2>/dev/null; then log_info "Ipsets guardados exitosamente ($(wc -c < "${output}") bytes)" return 0 else log_error "Fallo al guardar ipsets" return 1 fi } #============================================================================= # Restaurar ipsets desde archivo #============================================================================= ipset_restore() { local input="${1:-${BACKUP_DIR}/ipsets.backup}" if [[ ! -f "${input}" ]]; then log_error "Archivo de ipsets no encontrado: ${input}" return 1 fi log_info "Restaurando ipsets desde: ${input}" if ${IPSET} restore < "${input}" 2>/dev/null; then log_info "Ipsets restaurados exitosamente" return 0 else log_error "Fallo al restaurar ipsets (puede que algunos sets ya existan)" return 1 fi }