ids.alfacom.it/extracted_idf/create_known_attackers.sql
marco370 0bfe3258b5 Saved progress at the end of the loop
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 1c71ce6e-1a3e-4f53-bb5d-77cdd22b8ea3
2025-11-11 09:15:10 +00:00

84 lines
3.7 KiB
SQL

-- File SQL per la creazione della tabella known_attackers
-- Ottimizzata per gestire traffico di rete di un router con 2000+ utenti e traffico datacenter
-- Eliminazione della tabella se esiste (commenta questa riga per evitare la cancellazione dei dati esistenti)
-- DROP TABLE IF EXISTS known_attackers;
-- Creazione della tabella known_attackers
CREATE TABLE IF NOT EXISTS known_attackers (
id INT AUTO_INCREMENT PRIMARY KEY,
ip_address VARCHAR(45) NOT NULL COMMENT 'Indirizzo IP del potenziale attaccante (supporta IPv4 e IPv6)',
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Prima volta che l\'IP è stato rilevato',
last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Ultima volta che l\'IP è stato rilevato',
attack_count INT DEFAULT 1 COMMENT 'Numero di volte che l\'IP è stato rilevato come anomalo',
risk_level VARCHAR(20) DEFAULT 'MEDIO' COMMENT 'Livello di rischio: BASSO, MEDIO, ALTO, CRITICO',
ports_used TEXT COMMENT 'Elenco delle porte utilizzate, separate da virgole',
attack_patterns TEXT COMMENT 'Pattern di attacco rilevati',
network_segment VARCHAR(50) DEFAULT NULL COMMENT 'Segmento di rete di appartenenza dell\'IP',
is_blocked TINYINT(1) DEFAULT 0 COMMENT 'Flag che indica se l\'IP è attualmente bloccato',
notes TEXT DEFAULT NULL COMMENT 'Note e commenti aggiuntivi',
last_update_user VARCHAR(50) DEFAULT 'sistema' COMMENT 'Utente che ha effettuato l\'ultimo aggiornamento',
-- Indici per migliorare le prestazioni
UNIQUE KEY unique_ip (ip_address),
INDEX idx_risk_level (risk_level),
INDEX idx_last_seen (last_seen),
INDEX idx_is_blocked (is_blocked)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Tabella che tiene traccia degli IP con comportamenti anomali';
-- Creazione di una vista per gli IP ad alto rischio
CREATE OR REPLACE VIEW high_risk_attackers AS
SELECT * FROM known_attackers
WHERE risk_level IN ('ALTO', 'CRITICO')
ORDER BY last_seen DESC;
-- Creazione di una vista per statistiche aggregate
CREATE OR REPLACE VIEW attacker_stats AS
SELECT
risk_level,
COUNT(*) AS num_attackers,
MIN(first_seen) AS earliest_detection,
MAX(last_seen) AS latest_detection,
SUM(attack_count) AS total_attacks,
AVG(attack_count) AS avg_attacks_per_ip
FROM known_attackers
GROUP BY risk_level
ORDER BY
CASE
WHEN risk_level = 'CRITICO' THEN 1
WHEN risk_level = 'ALTO' THEN 2
WHEN risk_level = 'MEDIO' THEN 3
WHEN risk_level = 'BASSO' THEN 4
ELSE 5
END;
-- Creazione di un trigger per aggiornare automaticamente il campo ports_used
DELIMITER //
CREATE TRIGGER IF NOT EXISTS update_ports_used
BEFORE UPDATE ON known_attackers
FOR EACH ROW
BEGIN
IF NEW.ports_used IS NULL AND NEW.ports_used <> OLD.ports_used THEN
SET NEW.ports_used = OLD.ports_used;
END IF;
END //
DELIMITER ;
-- Creazione di una procedura per pulizia dati vecchi
DELIMITER //
CREATE PROCEDURE IF NOT EXISTS cleanup_old_attackers(IN days_threshold INT)
BEGIN
-- Elimina record vecchi con rischio BASSO che non sono stati visti recentemente
DELETE FROM known_attackers
WHERE risk_level = 'BASSO'
AND last_seen < DATE_SUB(NOW(), INTERVAL days_threshold DAY);
SELECT CONCAT('Rimossi ', ROW_COUNT(), ' record vecchi.') AS message;
END //
DELIMITER ;
-- Commento finale:
-- Questa tabella è progettata per gestire grandi volumi di traffico di rete.
-- Per mantenere la tabella gestibile nel tempo, eseguire periodicamente:
-- CALL cleanup_old_attackers(30); -- Rimuove record a basso rischio vecchi di 30+ giorni