next   previous   contents

Parsing dei Syslog

 Il primo meccanismo di rilevamento e' il riconoscimento delle sequenze per mezzo dell'analisi dei log di sistema. Questo metodo e' forse il meno complesso da implementare vista la semplicita' con cui le informazioni possono essere estratti dai file usando tool quali tail e grep. Ad esempio viene utilizzato nel prototipo in perl di Martin Krzywinski. Ovviamente questa soluzione non e' la piu' indicata per un server con un traffico elevato, visto il largo consumo di risorse che richiederebbe.
 Un'implementazione robusta deve quindi evitare assolutamente simili soluzioni, cercando invece di analizzare in tempo reale i diversi pacchetti in arrivo.
 Per loggare i vari tentativi di connessione con iptables, viene utilizzato il comando successivo ( si considere l'ipotesi di controllare le porte tcp dalla 7000 alla 7255 ) :

iptables -A INPUT -p tcp --dport 7000:7255 -j LOG

 Con questo meccanismo il server monitora continuamente il log del firewall ad intervalli regolari, parsando ogni nuova linea alla ricerca di specifici campi “chiave”.
 Come nel caso del prototipo in perl i campi di interesse potrebbero venire definiti per mezzo di una lista di espressioni regolari che saranno applicate ad ogni nuova linea dei log :

interface = REGEXP
protocol = REGEXP
ipserver = REGEXP
ipclient = REGEXP
port = REGEXP

 Ad esempio definendo la regexp port = DPT=([0-9]+), quando il demone leggera' dai log la linea [...] DPT=7702 [...] verra' assegnato il valore 7702 a port.

 Nei file di log potrebbero pero' esistere diverse linee inutili ai fini del portknocking, e sarebbe uno spreco inutile di tempo e risorse parsarle per intero. Una soluzione per superare il problema potrebbe essere quella di fare in modo che tutte le linee di interesse abbiano qualcosa che permetta di distinguerle dalle altre, in maniera inequivocabile.
 Per marcare queste linee si potrebbe ad esempio ricorrere all'opzione --log-prefix di iptables, che permette di aggiungere la stringa specificata, come prefisso alle linee dei log generate dalla regola:

iptables -A INPUT -p tcp --dport 7000:7255 -j LOG --log-prefix "portknock"

 A questo punto se una linea non presenta il prefisso voluto, potra' essere scartata in quanto non di interesse ai fini del portknocking.
 Infine, nel caso le porte da monitorare fossero distribuite su piu' intervalli non contigui, e' possibile ricorrere alla direttiva -mport, come nell'esempio successivo :

iptables -A INPUT -p tcp -mport --ports 7000:7100,7800:7955 -j LOG --log-prefix "portknock"


next   previous   contents