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