Rotacionamento de log do SURICATA no pfSense

Quem faz uso de IDS/IPS no pfSense provavelmente ja se deparou com, pelo menos, um dos problemas abaixo:

  • Depois de alguns dias a aba “Blocks” começa a demorar muito tempo para listar os bloqueios atuais. Isso porque se o seu firewall tiver muito trafego o arquivo block cresce muito e fica extremamente lento para gerar o relatório com os endereços atualmente bloqueados;
  • Se ativar o “Enable Packet Log” e/ou “Enable HTTP Log” o espaço em disco esgota muito rapido e só é possivel armazenar a copia do trafego de poucos dias;

Para solucionar esses dois problemas foi criado o script abaixo que, quando agendado no cron, rotaciona os arquivos gerados e os compacta. Apenas antes de executar o script crie o diretorio /var/log/suricata/sums/ onde são gerados os arquivos de checksum para possibilitar posterior verificação se os logs não foram alterados manualmente.

#!/bin/sh

DATA=`/bin/date +%Y-%m-%d`
ANO=`/bin/date +%Y`
MES=`/bin/date +%m`
DIA=`/bin/date +%d`

LS="/bin/ls"
WC="/usr/bin/wc"
MV="/bin/mv"
MKDIR="/bin/mkdir"
XZCMD="/usr/bin/xz -z -9 -e"
FIND="/usr/bin/find"

INITSCRIPT="/usr/local/etc/rc.d/suricata.sh"

SURICATADIR="/var/log/suricata"

SHA256="/sbin/sha256"

cd $SURICATADIR

$INITSCRIPT stop

for i in suricata_* ; do

	cd $SURICATADIR/$i
	
	ALERT_FILE=`$LS -1 alerts.log 2>/dev/null | $WC -l 2>/dev/null`

	HTTP_FILE=`$LS -1 http.log 2>/dev/null | $WC -l 2>/dev/null`

	STATS_FILE=`$LS -1 stats.log 2>/dev/null | $WC -l 2>/dev/null`

	SURICATA_FILE=`$LS -1 suricata.log 2>/dev/null | $WC -l 2>/dev/null` 

	BLOCK_FILE=`$LS -1 block.log 2>/dev/null | $WC -l 2>/dev/null`

	PCAP_FILE=`$LS -1 log.pcap* 2>/dev/null | $WC -l 2>/dev/null`

	if [ $ALERT_FILE -gt 0 ] ; then
		$MKDIR -p $ANO/$MES/$DIA/alerts
		$MV alerts.log $ANO/$MES/$DIA/alerts/alerts.log-$DATA
	fi

	if [ $HTTP_FILE -gt 0 ] ; then
		$MKDIR -p $ANO/$MES/$DIA/http
		$MV http.log $ANO/$MES/$DIA/http/http.log-$DATA
	fi

	if [ $STATS_FILE -gt 0 ] ; then
		$MKDIR -p $ANO/$MES/$DIA/stats
		$MV stats.log $ANO/$MES/$DIA/stats/stats.log-$DATA
	fi

	if [ $SURICATA_FILE -gt 0 ] ; then
		$MKDIR -p $ANO/$MES/$DIA/suricata
		$MV suricata.log $ANO/$MES/$DIA/suricata/suricata.log-$DATA
	fi

	if [ $BLOCK_FILE -gt 0 ] ; then
		$MKDIR -p $ANO/$MES/$DIA/block
		$MV block.log $ANO/$MES/$DIA/block/block.log-$DATA
	fi

	if [ $PCAP_FILE -gt 0 ] ; then
		$MKDIR -p $ANO/$MES/$DIA/pcap
		$MV log.pcap* $ANO/$MES/$DIA/pcap
	fi

done

$INITSCRIPT start

cd $SURICATADIR

for i in suricata_* ; do
        cd $SURICATADIR/$i
        $FIND $ANO/$MES/$DIA/ -type f -exec $SHA256 {} >> $SURICATADIR/sums/log-$i-$ANO-$MES-$DIA.sha256 \;
        $XZCMD $ANO/$MES/$DIA/alerts/* >/dev/null 2>/dev/null &
        $XZCMD $ANO/$MES/$DIA/http/* >/dev/null 2>/dev/null &
        $XZCMD $ANO/$MES/$DIA/stats/* >/dev/null 2>/dev/null &
        $XZCMD $ANO/$MES/$DIA/suricata/* >/dev/null 2>/dev/null &
        $XZCMD $ANO/$MES/$DIA/block/* >/dev/null 2>/dev/null &
        $XZCMD $ANO/$MES/$DIA/pcap/* >/dev/null 2>/dev/null &
done

 

 

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *