O
SMS Snort é um script Python que permite a coleta dos dados de alertas do
Snort logados no banco de dados MySQL para envio de SMS utilizando um telefone celular. Os detalhes dos alertas podem ser acessados via browser do telefone celular.
Pela limitação do número de caracteres que podem ser enviados por SMS (160 em 7 bits e 140 em 8 bits), o script também gera arquivos WMLs com os logs detalhados dos alertas.
A vantagem de usar o WML é que mesmo telefones mais antigos compatíveis somente com WAP podem visualizá-los.
Abaixo é mostrado um diagrama básico de funcionamento do SMS Snort:
Sequência de funcionamento:
- Snort grava informações de alertas no MySQL;
- SMS Snort coleta as informações de alertas no MySQL;
- As informações coletadas são convertidas para WML para acesso remoto pelo telefone celular;
- O SMS Snort controla o celular para envio do SMS;
- Um SMS é enviado para notificação do alerta;
- O usuário é notificado e pode consultar os detalhes do alertas através do browser do telefone;
- O servidor WEB entrega a página WML com os detalhes para o celular.
Instalação e configuração
Vamos baixar e descompactar o SMS Snort:
wget http://smssnort.googlecode.com/files/smssnort-0.2.tar.gz
tar xvzf smssnort-0.2.tar.gz
Antes de executá-los precisamos instalar dois módulos do Python. O primeiro é o "
pyserial", responsável pela interface serial (USB) com o telefone celular. O segundo é o "
MySQLdb" para interface do Python com o banco de dados MySQL.
Em distribuições
Linux baseadas no
Debian pode-se instalá-los com:
sudo apt-get install python-serial
$ sudo apt-get install python-MySQLdb
O script grava o timestamp da última consulta do banco de dados. Por isso é necessário criação de uma tabela. O arquivo "smssnort.sql" contém os comandos SQL para criação dessa tabela no banco de dados "snort". Para importar esse arquivo no MySQL pode-se usar (a partir do diretório do arquivo):
mysql -u root -p < smssnort.sql snort
(a senha de root do MySQL será requisitada)
Todos os parâmetros de configuração estão no arquivo "config.py". Os caminhos do log e do wml devem ser criados.
# MySQL
HOST = 'localhost'
USER = 'snort'
PASSWORD = 'snort'
DB = 'snort'
# Ajuste a prioridade dos alertas que serão enviados
# Nesse caso somente alertas de prioridade "> = 3" serão enviados
# Pode-se usar 1 (alto), 2 (médio) ou 3 (baixo)
PRIORITY = 3
# Caminho do log (não esquecer da '/' no final)
# Se o caminho não existir, deve ser criado!
LOG = '/var/log/smssnort/'
# Caminho do WML (não esquecer da '/' no final)
# Se o caminho não existir, deve ser criado!
WML = '/var/www/smssnort/'
# URL para acesso (não esquecer da '/' no final)
URL = 'http://seusite.com.br/smssnort/'
# Porta serial
PORT = '/dev/ttyACM0'
# Telefone(s) para envio do SMS
NUMBER = '01199991234'
Teste
Conecte o telefone na porta USB. O Linux deve reconhecer o telefone através do módulo ACM, ex: /dev/ttyACM0
Testei com telefones Motorola e Sony Ericsson e funcionou normalmente. Como os comandos AT para envio de SMS são padrão, deve funcionar com outros modelos também.
Obs.: Coloque o telefone em modo de modem.
Para rodar o script, primeiro torne-o executável:
chmod +x smssnort.py
E depois:
python smssnort.py
Ou simplesmente:
./smssnort.py
Dependendo da quantidade de alertas armazenados no MySQL é aconselhável, para o teste inicial, deixar a prioridade dos alertas como 1 (PRIORITY = 1) no arquivo de configuração.
O telefone celular que foi programado para receber o SMS (configurado anteriormente: NUMBER = '01199991234'), deve receber algo como:
"Snort detectou 2 alerta(s). Mais detalhes podem ser encontrados em: http://seusite.com.br/smssnort/log-200902182000.wml"
Ao acessar o link dos alertas através do próprio celular ou browser com capacidade de apresentar WML (o Firefox tem um complemento que funciona), deve ser mostrado algo como:
"Sensor:192.168.244.129 detectou: (portscan) Open Port [Prior.= 3] de 192.168.244.1 para 192.168.244.129 - 6 vez(es) em 2009-02-18 19:49:39"
Pode-se colocar o script na CRON para rodar automaticamente que acordo com a necessidade.
O script está bem comentado. É interessante entender o funcionamento do mesmo, até para futuras adaptações em outras aplicações.