Eu reuni documentação suficiente para fazer algo funcionar. A solução envolve informar ao snort para efetuar log no syslog e, em seguida, configurar o syslog-ng para acionar o tráfego snort syslog para executar o shellscript fornecido. Tendo snort spooling para o disco, ou a execução de scripts, não é ideal para cargas de alto tráfego, por isso esteja avisado. Se você configurar o snort para apenas alertar sobre determinado tráfego para manter a carga baixa, você deve estar bem. Configurar e depurar o syslog-ng pode ser uma pita, então incluí os bits necessários para que isso funcione. Basta adicioná-los ao final do arquivo syslog-ng.conf. Espero que isso ajude mais alguém. Como nota, o syslog está registrando 3 cópias de cada mensagem por algum motivo. Não faço ideia do porquê.
Eu usei algumas das informações aqui: link
/etc/snort/snort.conf - configure snort to log to syslog
------------------------------------------------------------
# syslog
output alert_syslog: LOG_LOCAL6 LOG_ALERT
/etc/syslog/syslog-ng.conf - setup filters/destinations for alerts
------------------------------------------------------------
# snort filter - this only pays attention to syslog messages sent by the 'snort' program
filter f_snort
{
facility(local6) and match("snort" value ("PROGRAM"));
};
# optionally, this would send the snort message to a remote host running a syslog listener.
# I was running tcpdump to debug the whole setup so I use UDP protocol here so the
# message is just blasted out over the ether without needing to actually have a syslog
# listener setup anywhere
destination d_net
{
udp("10.10.10.1" port(514) log_fifo_size(1000) template(t_snort));
};
# this one sends the syslog message consisting of priority,time_in_seconds,host and syslog meesage.
#
destination d_prog
{
program("/root/bin/snort_script" template("<$PRI>$UNIXTIME $HOST $MSGONLY\n") );
};
# ..or use a pipe if you don't want syslog running scripts
destination d_prog_pipe
{
pipe("/root/bin/syslog-pipe" template("<$PRI>$DATE $HOST $MSGONLY\n") );
};
# finally, log the message out the snort parsing mechanism
log
{
source(s_src);
filter(f_snort);
destination(d_prog);
#destination(d_net);
};
/root/bin/snort_script
------------------------------------------------------------
#!/bin/bash
while read line; do
echo "$line" >> /tmp/snort.log
done