Cosa fa#
Implementa regole ACL di rete su Linux con iptables e ufw per filtrare traffico per IP, porta e protocollo — equivalente Linux delle Router ACL Cisco descritte in Gibson Cap 3.
Questo lab riguarda le ACL di rete (filtraggio pacchetti). Non confondere con lab-linux-acl-dac.md che riguarda le ACL sui file (setfacl/getfacl — permessi filesystem).
TL;DR#
ACL Router (Cisco) ←→ iptables/ufw (Linux)
Filtrano su: IP + porta + protocollo
Possono bloccare: inbound / outbound / entrambi| Tool | Dove | Note |
|---|---|---|
| iptables | Linux kernel | Potente, sintassi verbosa |
| ufw | Linux | Frontend semplificato per iptables |
| Cisco ACL | Router Cisco | Stessa logica, sintassi diversa |
Stessa regola — tre sintassi#
Obiettivo: bloccare HTTPS in ingresso (porta 443 TCP)
# iptables
iptables -A INPUT -p tcp --dport 443 -j DROP
# ufw
ufw deny in 443/tcp
# Cisco ACL
access-list 100 deny tcp any any eq 443Tutte e tre filtrano su: IP + porta + protocollo — Gibson Cap 3, pag. 147.
Fase 1 — Setup ambiente#
Task 1.1 — Verifica Ubuntu Server attivo
- VM Ubuntu Server su UTM:
192.168.64.3 ping 192.168.64.3dal Mac- Come sai che hai finito: risponde al ping
- VM Ubuntu Server su UTM:
Task 1.2 — Verifica stato ufw
sudo ufw status verbose- Come sai che hai finito: vedi lo stato (active/inactive) e le regole esistenti
Fase 2 — ACL base con ufw#
Task 2.1 — Blocca una porta in ingresso
sudo ufw deny in 23/tcp # blocca Telnet sudo ufw status numbered- Come sai che hai finito: regola visibile nella lista numerata
Task 2.2 — Blocca traffico da un IP specifico
sudo ufw deny from 192.168.64.200 # blocca Kali sudo ufw status numbered- Come sai che hai finito: regola visibile; dal Kali non riesci a pingare
Task 2.3 — Permetti solo SSH da un IP specifico
sudo ufw allow from 192.168.64.1 to any port 22 sudo ufw deny 22 sudo ufw status numbered- Come sai che hai finito: SSH funziona dal Mac (192.168.64.1), non da altri IP
Task 2.4 — Rimuovi una regola
sudo ufw status numbered sudo ufw delete [numero]- Come sai che hai finito: regola sparita dalla lista
Fase 3 — ACL con iptables (sintassi Cisco-like)#
Task 3.1 — Blocca una subnet intera
# blocca tutto il traffico dalla subnet 192.168.2.0/24 sudo iptables -A INPUT -s 192.168.2.0/24 -j DROP sudo iptables -L INPUT -v --line-numbers- Equivalente Cisco:
access-list 100 deny ip 192.168.2.0 0.0.0.255 any
- Equivalente Cisco:
Task 3.2 — Blocca porta in uscita
# blocca connessioni HTTP in uscita sudo iptables -A OUTPUT -p tcp --dport 80 -j DROP # verifica: curl http://example.com → dovrebbe fallire curl -m 5 http://example.com- Come sai che hai finito: curl fallisce con timeout
Task 3.3 — Ripristina (flush regole)
sudo iptables -F # flush tutte le regole sudo iptables -L INPUT # verifica lista vuota
Fase 4 — Confronto inbound vs outbound#
Gibson: "you can choose to block incoming traffic, outgoing traffic, or both"
# Blocca solo INGRESSO su porta 443
sudo ufw deny in 443/tcp
# Blocca solo USCITA su porta 443
sudo ufw deny out 443/tcp
# Blocca entrambi
sudo ufw deny 443/tcp- Task 4.1 — Testa la differenza
- Blocca solo OUTPUT 80 → puoi ricevere connessioni HTTP ma non aprire siti web
- Blocca solo INPUT 80 → puoi aprire siti web ma nessuno raggiunge il tuo server HTTP
- Come sai che hai finito: comportamento asimmetrico verificato
Fase 5 — Struttura completa: 5 elementi di una regola ACL#
Gibson: Permission + Protocol + Source + Destination + Port
# Struttura iptables — tutti e 5 gli elementi:
# iptables -A [chain] -p [protocol] -s [source] -d [destination] --dport [port] -j [ACCEPT|DROP]
# Esempio completo: permetti HTTPS da qualsiasi IP al web server
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 192.168.64.3 --dport 443 -j ACCEPT
# Blocca tutto il resto — IP = TCP + UDP + ICMP
iptables -A INPUT -j DROPTask 5.1 — Scrivi una ACL completa per un web server Obiettivo: permetti solo HTTP (80) e HTTPS (443) in ingresso, blocca tutto il resto
sudo iptables -F # flush regole esistenti sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH (per non bloccarti fuori) sudo iptables -A INPUT -j DROP # deny any any — blocca tutto il resto sudo iptables -L INPUT -v --line-numbers- Come sai che hai finito: curl su porta 80/443 funziona, su porta 8080 no
Task 5.2 — Differenza tra protocollo IP, TCP, UDP
# TCP blocca solo TCP sudo iptables -A INPUT -p tcp --dport 53 -j DROP # UDP blocca solo UDP sudo iptables -A INPUT -p udp --dport 53 -j DROP # IP blocca entrambi — equivalente DENY IP any any di Cisco sudo iptables -A INPUT -p all -j DROPDNS usa sia TCP 53 (zone transfer) che UDP 53 (query normali) — per bloccarlo completamente serve bloccare entrambi o usare
-p all.
Scenario Reale#
Un Blue Team analyst riceve alert: traffico anomalo dalla subnet Sales (192.168.1.0/24) verso la subnet Accounting (192.168.5.0/24) su porta 445 (SMB). Possibile lateral movement. Risposta immediata: ACL sul router per bloccare quella comunicazione mentre si indaga.
# Cisco — blocca Sales → Accounting su SMB
access-list 110 deny tcp 192.168.1.0 0.0.0.255 192.168.5.0 0.0.0.255 eq 445
access-list 110 permit ip any any
# Linux equivalente
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.5.0/24 -p tcp --dport 445 -j DROPLa regola FORWARD è quella giusta quando Linux fa da router tra due subnet — INPUT è solo per traffico diretto al server stesso.
Risorse#
man ufw— documentazione completaman iptables— documentazione completa- Gibson SY0-701 Cap 3 — Router ACLs
Collegato a#
- cap-03-security-architecture — teoria Router ACL Gibson
- [[[TODO] lab-linux-acl-dac|lab-linux-acl-dac]] — ACL filesystem (diverso da questo lab)


