Laboratorio di Configurazione e Gestione di Reti Locali

Esercizio Port Knocking


Cronologico Percorso di conversazione 
  • From: Giorgio Raineri < >
  • To:
  • Subject: Esercizio Port Knocking
  • Date: Tue, 24 Apr 2018 16:52:47 +0200

Salve professore,

Ho provato a scrivere il set di regole di iptables necessarie per realizzare il Port Knocking sulla rete del Laboratorio Lab5-nf-bis, importabili tramite iptables-restore su un router qualsiasi:

le regole sono impostate tutte nella custom chain KNOCK, alla quale vengono inviati tutti i pacchetti che il router deve forwardare, senza limitazioni specifiche (andando a fungere da firewall per connessioni originate da qualsiasi a qualsiasi altra sottorete), per modificarne il funzionamento basta modificare le regole in forward (e/o in input se si vuole "proteggere" anche il router stesso) affinché inoltrino i pacchetti di interesse verso la chain KNOCK. 

La chain KNOCK utilizza altre due chain, KNOCK-1 e KNOCK-2, per gestire la transizione "in avanti" degli stati intermedi, e svariati match di tipo filter con tre tabelle (STEP-0, STEP-1 e STEP-2) per regolare il comportamento nei vari stati.

Le regole presenti nel file di configurazione bloccano tutto il tipo di traffico derivato da connessioni nuove, tranne quello ICMP, e una volta effettuata la sequenza corretta di port-knocking, permettono nuove connessioni di qualsiasi protocollo verso qualsiasi destinazione per un tempo di 60 secondi (permettendo quelle in stato ESTABLISHED e RELATED anche oltre tale limite).

La sequenza di porte a cui inviare un pacchetto TCP per ottenere l'accesso è 2302 -> 26000 -> 666, ad ogni altro pacchetto ricevuto in qualsiasi stato intermedio, il sistema rileva l'errore e torna allo stato precedente (senza utilizzare timeout, basandosi sul fatto che un port scanner non è limitato dal tempo ma dal numero di tentativi che deve effettuare).

Ho allegato anche uno script shell chiamato knock.sh che utilizza nmap per generare 3 pacchetti TCP nella giusta sequenza senza retries, basta lanciarlo passando come argomenti l'indirizzo di destinazione e poi le tre porte da utilizzare, tutto separato da spazi (ad esempio "knock.sh 8.0.0.2 2302 26000 666").

Ho effettuato dei test sul laboratorio 5 aggiungendo le regole di iptables a "router" e tentando di collegarmi da r2 ai server web della DMZ e viceversa, sembrerebbe funzionare tutto correttamente.

Allego script di configurazione di iptables e script shell per il port-knocking per sapere se la realizzazione sia corretta o meno.

Giorgio Raineri
#!/bin/bash
host=$1
shift
for port in "$@"
do
	nmap -PN -p $port --max-retries 0 -n $host
done 

Attachment: knock-knock.conf
Description: Binary data



  • Esercizio Port Knocking, Giorgio Raineri

Archivio con motore MhonArc 2.6.16.

§