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