Advanced Bash Apache IDS part1

21/07/2006 by - Apache, Bash, Linux

Esistono innumerevoli sistemi IDS, molti a pagamento, molti con funzionalità totalmente inutili, alcuni troppo “permissivi” e proporzionalmente altri troppo “aggressivi”.
In questo articolo, primo di una lunga serie tempo permettendo, cerco di mostrarvi le tecniche per costruirsi le basi per mettere in piedi un IDS casalingo utilizzando gli strumenti che bash ci offre.

Potrebbe essere un ottimo esercizio mirato ad affinare le tecniche di scripting bash, vi ricordo che potet raggiungere lo stesso obiettivo con altri linguaggi stile php / perl ma quasi sicuramente otterrete a parità di risultati un utilizzo più massiccii in termini di cpu.

Iniziamo con il postprocessing dell’analisi del file access.log di apache con l’opzione “combined”

Lo scopo è avere a portata di mano una utility che ci permetta al volo di capire quali determinati IP hanno effettuato richieste verso il nostro sito.

awk '{print $1}' /var/log/apache/access.log

Possiamo contare il numero di hits totale

awk '{print $1}' /var/log/apache/access.log|wc -l

e passare a qualcosa di più utile: ordinamento e conteggio

awk '{print $1}' /var/log/apache/access.log|
sort|uniq -c|sort

Sono bastati un paio di comandi per fare qualcosa che via php/perl (senza usare CPAN!) vi sarebbe costato qualche ciclo… ora togliamo anche le “” virgolette che contornano l’indirizzo IP

awk '{print $1}' /var/log/apache/access.log|
sort|uniq -c|sort|sed s/\"//g

Se volessimo sapere quante sono in tutto le richieste e ip unici aggiungiamo un awk

awk '{print $1}' /var/log/apache/access.log|
sort|uniq -c|sort|sed s/\"//g|
awk '{print $0;tot+=1;sum+=$1}
END {print "HITS: "sum "|IP: " tot}'

Lo script è “corto” quanto basta per essere ancora scritto a video e richiamato via history e relativo !ID_CMD. Ovviamente ha le sue limitazioni in quanto la funzionalità è relativa ai settaggi del vostro logrotate. Nel prossimo articolo inserirò il metodo per potere parsare solo gli ultimi X minuti del file access.log e rendere lo script più performante nella sintassi

./hits ARG1



Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.