Skip to main content
  1. Lab-blue/

[TODO] Lab - Router ACL con iptables/ufw

·5 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

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.

Note

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
ToolDoveNote
iptablesLinux kernelPotente, sintassi verbosa
ufwLinuxFrontend semplificato per iptables
Cisco ACLRouter CiscoStessa 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 443

Tutte 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.3 dal Mac
    • Come sai che hai finito: risponde al ping
  • 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
  • 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 DROP
  • Task 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 DROP

    DNS 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 DROP

La regola FORWARD è quella giusta quando Linux fa da router tra due subnet — INPUT è solo per traffico diretto al server stesso.


Risorse
#

  • man ufw — documentazione completa
  • man 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)

Related