Sistema di firewall avanzato per Debian/Ubuntu con policy DROP, logging PCAP separato, analisi intelligente del traffico e interfaccia CLI di gestione.
- ✅ Policy DROP di default su INPUT/OUTPUT
- ✅ Protezioni avanzate: SYN flood, port scan, brute force SSH
- ✅ Logging separato INPUT/OUTPUT in formato PCAP con ulogd2
- ✅ Retention automatica 30 giorni / 1GB con logrotate
- ✅ CLI Python per gestione regole
- ✅ Analisi intelligente traffico con threat scoring
- ✅ Avvio automatico con systemd
- ✅ Conforme OWASP/NIST security best practices
Script bash di inizializzazione firewall con regole di sicurezza.
Protezioni implementate:
- SYN flood protection (max 10 conn/sec)
- Port scan detection (max 15 porte/min)
- SSH brute force protection (max 4 tentativi/min)
- ICMP flood protection (max 5 ping/sec)
- Protezione contro NULL packets, XMAS packets, pacchetti frammentati
- Anti-spoofing (martian packets)
Interfaccia CLI Python per gestione firewall.
Funzionalità:
- Aggiunta/rimozione regole INPUT/OUTPUT
- Listing regole con numerazione
- Analisi traffico bloccato
- Threat scoring e identificazione anomalie
- Statistiche firewall
- Persistenza regole
Analizzatore avanzato traffico PCAP con machine learning-like scoring.
Analisi:
- Calcolo threat score (0-100) per ogni IP
- Classificazione minacce: Critical/High/Medium/Low
- Identificazione pattern attacco: Port Scan, SYN Flood, Service Attack
- Raccomandazioni automatiche
Logging separato INPUT/OUTPUT con stack PCAP ottimizzati.
Avvio automatico firewall all'boot del sistema.
- Debian 10+ o Ubuntu 18.04+
- Accesso root (sudo)
- Connessione internet per installazione pacchetti
# 1. Scarica i file
git clone <repository-url>
cd firewall-system
# 2. Rendi eseguibili gli script
chmod +x install.sh firewall-init.sh firewall-manager.py traffic-analyzer.py
# 3. Esegui installazione
sudo ./install.shLo script di installazione:
- Installa dipendenze (iptables, ulogd2, tcpdump, etc.)
- Configura ulogd2 per logging PCAP
- Installa gli script di gestione
- Configura logrotate per retention
- Crea e abilita systemd service
- Inizializza il firewall (dopo conferma)
# Installa dipendenze
sudo apt update
sudo apt install -y iptables iptables-persistent ulogd2 python3 tcpdump logrotate
# Copia script
sudo cp firewall-init.sh /usr/local/sbin/
sudo cp firewall-manager.py /usr/local/bin/firewall-manager
sudo cp traffic-analyzer.py /usr/local/bin/traffic-analyzer
sudo chmod +x /usr/local/sbin/firewall-init.sh
sudo chmod +x /usr/local/bin/firewall-manager
sudo chmod +x /usr/local/bin/traffic-analyzer
# Configura ulogd2
sudo cp ulogd.conf /etc/ulogd.conf
sudo mkdir -p /var/log/ulogd
sudo systemctl restart ulogd2
# Configura logrotate
sudo cp firewall-pcap-logrotate /etc/logrotate.d/firewall-pcap
# Installa systemd service
sudo cp firewall.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable firewall.service
# Inizializza firewall
sudo /usr/local/sbin/firewall-init.sh# Mostra aiuto completo
firewall-manager --help
# Lista tutte le regole
firewall-manager --list
# Lista regole di una chain specifica
firewall-manager --list INPUT
firewall-manager --list OUTPUT
# Mostra statistiche firewall
firewall-manager --stats# Apri porta 8080 TCP
sudo firewall-manager --add-input 8080
# Apri porta 53 UDP (DNS)
sudo firewall-manager --add-input 53 --protocol udp
# Apri porta 22 solo da IP specifico
sudo firewall-manager --add-input 22 --source 192.168.1.10 --comment "SSH da admin"
# Apri porta 3000 con commento
sudo firewall-manager --add-input 3000 --comment "Node.js app"# Consenti connessioni verso porta 3306 (MySQL remoto)
sudo firewall-manager --add-output 3306
# Consenti connessioni SMTP verso IP specifico
sudo firewall-manager --add-output 587 --dest 203.0.113.10 --comment "SMTP server"
# Consenti Redis su localhost
sudo firewall-manager --add-output 6379 --dest 127.0.0.1# Lista regole con numerazione
firewall-manager --list INPUT
# Rimuovi regola numero 5 da INPUT
sudo firewall-manager --remove INPUT 5
# Rimuovi regola numero 3 da OUTPUT
sudo firewall-manager --remove OUTPUT 3# Analizza traffico ultima ora
sudo firewall-manager --analyze
# Analizza traffico ultime 24 ore
sudo firewall-manager --analyze 24
# Mostra minacce con score >= 30 (default)
sudo firewall-manager --threats
# Mostra solo minacce critiche (score >= 70)
sudo firewall-manager --threats 70
# Analisi dettagliata con script dedicato
sudo traffic-analyzer /var/log/ulogd/input_dropped.pcap
# Genera report JSON
sudo traffic-analyzer /var/log/ulogd/input_dropped.pcap --json# Stato firewall
sudo systemctl status firewall
# Riavvia firewall
sudo systemctl restart firewall
# Stop firewall (regole rimangono attive per sicurezza)
sudo systemctl stop firewall
# Ricarica regole salvate
sudo systemctl reload firewall
# Disabilita avvio automatico
sudo systemctl disable firewall# Apri porte web
sudo firewall-manager --add-input 80 --comment "HTTP"
sudo firewall-manager --add-input 443 --comment "HTTPS"
# Verifica regole
firewall-manager --list INPUT# Consenti connessioni MySQL verso server specifico
sudo firewall-manager --add-output 3306 --dest 10.0.1.50 --comment "MySQL prod"
# Verifica
firewall-manager --list OUTPUT# Mostra minacce in tempo reale
sudo firewall-manager --threats 50
# Analisi dettagliata
sudo traffic-analyzer
# Blocca IP attaccante (se necessario)
# Nota: il traffico è già bloccato, questa è una protezione aggiuntiva
sudo iptables -I INPUT 1 -s 203.0.113.100 -j DROP
sudo firewall-manager --save# Esempio: Jenkins su porta 8080 solo da rete aziendale
sudo firewall-manager --add-input 8080 --source 192.168.1.0/24 --comment "Jenkins rete interna"Il sistema assegna uno score 0-100 a ogni IP basandosi su:
| Score | Livello | Significato | Azione |
|---|---|---|---|
| 80-100 | 🔴 CRITICO | Attacco attivo confermato | Blocco immediato |
| 60-79 | 🟠 ALTO | Comportamento molto sospetto | Monitoraggio stretto |
| 40-59 | 🟡 MEDIO | Attività anomala | Verifica legittimità |
| 20-39 | 🟢 BASSO | Leggera anomalia | Osservazione |
| 0-19 | ⚪ MINIMO | Traffico normale | Nessuna azione |
Fattori che aumentano lo score:
- Volume pacchetti elevato
- Scanning multiplo porte
- Targeting porte comunemente attaccate (RDP, Telnet, SQL)
- Pattern SYN flood
- Protocolli multipli (potenziale reconnaissance)
/etc/firewall/
├── iptables.rules # Regole firewall salvate
└── custom_rules.conf # Regole personalizzate persistenti
/var/log/ulogd/
├── input_dropped.pcap # Traffico INPUT bloccato
├── output_dropped.pcap # Traffico OUTPUT bloccato
└── ulogd.log # Log daemon ulogd2
/usr/local/sbin/
└── firewall-init.sh # Script inizializzazione
/usr/local/bin/
├── firewall-manager # CLI gestione
└── traffic-analyzer # Analizzatore traffico
/etc/systemd/system/
└── firewall.service # Systemd unit
/etc/logrotate.d/
└── firewall-pcap # Configurazione rotazione log
- Defense in Depth: Protezioni multiple livelli
- Fail Secure: Policy DROP di default
- Least Privilege: Solo traffico necessario consentito
- Audit & Logging: Logging completo traffico bloccato
- Rate Limiting: Protezione flood attacks
- Input Validation: Validazione rigorosa IP/porte/protocolli
- ✅ SYN Flood Protection
- ✅ Port Scan Detection
- ✅ SSH Brute Force Protection
- ✅ ICMP Flood Protection
- ✅ Invalid Packet Dropping
- ✅ NULL/XMAS Packet Filtering
- ✅ Anti-Spoofing (Martian Packets)
- ✅ Fragment Attack Protection
# Verifica permessi corretti
ls -la /etc/firewall/
# Dovrebbe mostrare: drwx------ (700)
ls -la /etc/firewall/iptables.rules
# Dovrebbe mostrare: -rw------- (600)Causa: Policy DROP senza regola SSH o SSH bloccato per brute force
Soluzione:
# Da console fisica o IPMI
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
sudo firewall-manager --save
# Oppure ripristina regole precedenti
sudo iptables-restore < /etc/firewall/iptables.rules.backupCausa: Porta non aperta
Soluzione:
# Identifica porta necessaria
sudo netstat -tulpn | grep <servizio>
# Apri porta
sudo firewall-manager --add-input <PORTA> --comment "Nome servizio"Causa: Traffico elevato o attacco in corso
Soluzione:
# Forza rotazione immediata
sudo logrotate -f /etc/logrotate.d/firewall-pcap
# Analizza traffico per identificare fonte
sudo traffic-analyzer
# Riduci retention se necessario
sudo nano /etc/logrotate.d/firewall-pcap
# Modifica: rotate 30 -> rotate 7Verifica:
# Status service
sudo systemctl status ulogd2
# Verifica configurazione
sudo ulogd -d -c /etc/ulogd.conf
# Controlla permessi
ls -la /var/log/ulogd/
# Riavvia service
sudo systemctl restart ulogd2Causa: Regole troppo numerose o logging eccessivo
Soluzione:
# Conta regole attive
sudo iptables -L INPUT | wc -l
sudo iptables -L OUTPUT | wc -l
# Ottimizza: metti regole più frequenti in cima
# Considera ridurre --nflog-threshold in firewall-init.sh# Statistiche rapide
sudo firewall-manager --stats
# Verifica minacce
sudo firewall-manager --threats
# Spazio disco log
du -sh /var/log/ulogd/# Analisi traffico settimanale
sudo firewall-manager --analyze 168
# Report dettagliato
sudo traffic-analyzer --json
# Verifica servizi attivi
sudo ss -tulpn
# Review regole custom
cat /etc/firewall/custom_rules.conf# Audit completo regole
sudo iptables-save > /tmp/firewall-audit-$(date +%Y%m).txt
# Cleanup log vecchi
sudo find /var/log/ulogd -name "*.pcap.*.gz" -mtime +60 -delete
# Update sistema
sudo apt update && sudo apt upgrade -y# Backup manuale
sudo iptables-save > ~/firewall-backup-$(date +%Y%m%d).txt
# Backup automatico (crontab)
0 2 * * * /usr/sbin/iptables-save > /backup/firewall-$(date +\%Y\%m\%d).txt# Restore da backup
sudo iptables-restore < ~/firewall-backup-20250115.txt
# Oppure usa il manager
sudo firewall-manager --restoreSe il firewall blocca tutto e perdi accesso:
- Da console fisica/IPMI:
# Flush tutte le regole (TEMPORANEO)
sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT- Ripristina stato precedente:
sudo iptables-restore < /etc/firewall/iptables.rules.backup- Riavvia servizio firewall:
sudo systemctl restart firewallPer segnalare bug o contribuire al progetto, apri una issue su GitHub con:
- Descrizione problema
- Output comandi:
iptables -L -n -v,systemctl status firewall,dmesg | tail - Versione sistema:
lsb_release -a
Questo progetto è rilasciato sotto licenza MIT.
Questo sistema di firewall è fornito "as is" senza garanzie. È responsabilità dell'utente testare in ambienti non-produzione prima del deploy. Assicurati sempre di avere accesso fisico o out-of-band al server prima di attivare policy DROP.
Versione: 1.0
Ultimo aggiornamento: Ottobre 2025
Compatibilità: Debian 10+, Ubuntu 18.04+