Com a crescente popularidade do cibercrime, há uma necessidade urgente de as empresas terem uma melhor proteção contra hackers. Um Sistema de Prevenção de Intrusões (IPS) é uma das melhores maneiras de se defender contra ataques de computador. Mas antes de procurar na internet por um IPS, experimente o Suricata.
Neste tutorial, você aprenderá como configurar um IPS Suricata totalmente funcional em um servidor Linux para proteger sua rede contra ameaças online.
Pronto? Continue lendo e comece a proteger sua rede!
Pré-requisitos
Este tutorial será uma demonstração prática. Se você deseja acompanhar, certifique-se de ter o seguinte:
- A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
- A non-root user with sudo privileges.
- Dependendo da configuração da sua rede e de como você pretende usar o Suricata, você pode precisar de mais ou menos CPU e RAM para o seu servidor. Em geral, quanto mais tráfego você planeja inspecionar, mais recursos você alocará para o Suricata. Em um ambiente de desenvolvimento, planeje usar pelo menos 2 CPUs e 8GB de RAM para começar, para que o Suricata possa realizar suas tarefas sem comprometer a qualidade do serviço para todos os usuários.
Instalando o Suricata e Adicionando o Repositório PPA
Suricata não vem instalado por padrão no Ubuntu, mas instalar o Suricata é semelhante à instalação de outros pacotes no seu sistema.
1. Execute o comando apt update
para atualizar os pacotes disponíveis no seu sistema.

2. Em seguida, execute o comando add-apt-repository
para adicionar o repositório PPA mantido pela Open Information Security Foundation (OISF). Ao adicionar o repositório PPA, você obterá a versão mais recente e estável do Suricata (ppa:oisf/suricata-stable
).

3. Execute novamente o comando sudo apt update
para carregar o repositório recém-adicionado do Suricata no índice de pacotes do seu sistema.
4. Agora, execute o comando sudo apt policy
para verificar se você adicionou corretamente o PPA do Suricata. Verifique se você vê o PPA do Suricata na lista, como mostrado abaixo, antes de instalar o Suricata

5. Execute o seguinte comando para instalar o suricata
no seu sistema.

6. Depois que a instalação for concluída, execute o comando systemctl status
abaixo para verificar o status
do serviço suricata
.
Abaixo, você pode ver que o serviço Suricata está ativo (em execução).

Configurando o Suricata
O pacote Suricata vem com um arquivo de configuração chamado suricata.yaml localizado no diretório /etc/suricata. Este arquivo de configuração tem muitas configurações diferentes para muitos outros casos de uso. Mas esteja ciente de que há algumas configurações no arquivo de configuração padrão que você precisa ajustar antes de usar o Suricata.
O modo padrão para o Suricata é o modo de Detecção de Intrusão (IDS), que registra, mas não descarta nenhum tráfego. Este modo é usado ao configurar e se familiarizar com o Suricata. Uma vez que você esteja mais confortável com o Suricata e entenda melhor os tipos de tráfego sobre os quais o Suricata o alertará, você pode optar por ativar o modo IPS.
O Suricata anexa um campo em seu formato JSON (community flow ID). O community flow ID é um campo de 8 bytes que permite correlacionar registros gerados por outras ferramentas. Esta característica é útil ao usar o Suricata em conjunto com outras ferramentas como Bro ou Elasticsearch.
1. Abra o arquivo /etc/suricata/suricata.yaml no seu editor de texto favorito.
Encontre uma linha que diz community-id: false e altere para community-id: true. Salve as alterações e saia do editor de texto.
Cada vez que você examinar eventos, verá o ID do fluxo da comunidade na saída JSON deles.

Em seguida, execute o seguinte comando para encontrar um dispositivo com uma rota padrão em seu sistema (route show default
). A bandeira -p
diz ao comando ip
para imprimir o dispositivo de forma legível para humanos, enquanto a bandeira -j
imprime a saída JSON.
O Suricata está configurado para capturar pacotes de qualquer interface de rede disponível por padrão. Mas você pode alterar esse comportamento e especificar uma interface para o Suricata ouvir quando ele é iniciado.
Como você pode ver abaixo, o parâmetro dev especifica a interface que o Suricata usará para capturar pacotes. Neste exemplo, a interface é eth0, mas sua interface pode ser diferente, como tun0, wlan0, e assim por diante.

Por fim, abra o arquivo de configuração /etc/suricata/suricata.yaml, localize o parâmetro interface sob a seção af-packet e modifique-o conforme necessário. Neste exemplo, eth0 é usado como a interface para capturar pacotes.
Salve as alterações, mas mantenha seu editor de texto aberto por enquanto.

Configurando o Recarregamento de Regras ao Vivo
Você configurou o Suricata, mas isso é apenas o começo da proteção da sua rede. Normalmente, você gostaria de adicionar regras imediatamente e recarregar automaticamente as regras. Como? O recurso de recarregamento de regras ao vivo do Suricata permite que você atualize as regras em tempo real. Como resultado, você não precisa reiniciar o Suricata manualmente para que as novas regras entrem em vigor.
Abra o arquivo /etc/suricata/suricata.yaml, copie/cole as seguintes diretivas no final do conteúdo do arquivo e salve as alterações. Essas diretivas permitem que você habilite o recurso de recarregamento de regras ao vivo.
Com essa configuração em vigor, quando você editar/atualizar seus conjuntos de regras, as alterações entrarão em vigor sem reiniciar o serviço do Suricata.

Agora execute o comando kill
abaixo para notificar o processo do seu Suricata ($(pidof suricata)
) para atualizar as regras sem reiniciar.
O comando envia um sinal definido pelo usuário (-usr2
) para o ID do processo especificado, então o Suricata executa automaticamente o seguinte:
- Carregar nova configuração para atualizar variáveis e valores de regras.
- Carregar novas regras
- Construir novo mecanismo de detecção
- Trocar os mecanismos de detecção antigos e novos
- Garantir que todos os threads estejam atualizados
- Liberar o mecanismo de detecção antigo
Atualizando Conjuntos de Regras do Suricata
O recurso de recarregamento de regras ao vivo está pronto, mas não servirá para nada a menos que você atualize seus conjuntos de regras. Por padrão, o pacote Suricata possui um conjunto de regras limitado que apenas detecta os protocolos de Internet mais comuns localizados no diretório /etc/suricata/rules.
Neste ponto, você receberá uma mensagem de erro Nenhum arquivo de regra corresponde ao padrão, semelhante à abaixo, sempre que tentar iniciar e usar o serviço Suricata. Essa mensagem de erro indica que não há conjuntos de regras para o Suricata usar.

Para corrigir esse erro, forneça arquivos de conjunto de regras para a sua instância do Suricata. Felizmente, o Suricata possui uma ferramenta chamada suricata-update
que o ajudará a obter mais conjuntos de regras de provedores terceirizados.
1. Execute o comando abaixo para obter uma atualização para a sua instância do Suricata.
Como você pode ver abaixo, a saída indica que o comando suricata-update
obteve as regras conectando-se a https://rules.emergingthreats.net/open/. Em seguida, salva as novas regras no diretório /var/lib/suricata/rules/.
A saída também imprime o seguinte:
- O número total (31737) de conjuntos de regras
- O número de regras ativadas (24355)
- O número de quantas foram adicionadas(31737)/removidas(0).

Em seguida, execute o comando abaixo para listar todos os provedores de conjuntos de regras (list-sources
).
O comando
suricata-update
obtém conjuntos de regras de muitos provedores, incluindo provedores gratuitos e comerciais.
Abaixo, você pode ver uma pequena parte da lista. Observe um nome de conjunto de regras do qual você deseja que o Suricata obtenha conjuntos de regras especificamente. Este tutorial obtém conjuntos de regras et/open para demonstração (passo três).

3. Execute o comando abaixo para buscar e incluir os conjuntos de regras et/open
no seu arquivo de regras do Suricata (enable-source
).

Por fim, execute novamente o comando suricata-update
para carregar o conjunto de regras recém-selecionado.
Validando a Configuração do Suricata
Você configurou o Suricata e até adicionou conjuntos de regras, então é hora de validar suas alterações e garantir que tudo funcione conforme o esperado. O pacote Suricata possui um serviço de validação embutido que permite visualizar quaisquer desvios da configuração atual.
Execute o comando suricata
abaixo para validar as alterações no arquivo de configuração do Suricata (-c /etc/suricata/suricata.yaml
). O comando também exibe todas as mensagens de validação (-v
).
A bandeira -T
indica ao Suricata para executar no modo “teste” e “top down”. Ambos os modos têm regras mais rigorosas para combinar pacotes e são menos propensos a gerar falsos positivos.
Como o Suricata é um firewall altamente configurável, o teste pode levar vários minutos para ser concluído. Se não houver erros, você verá uma saída semelhante à abaixo que mostra uma mensagem completa.

Se o seu arquivo de configuração tiver erros semelhantes ao abaixo, o Suricata imprimirá cada erro, indicando linhas específicas que causam problemas. Se você receber esses erros, corrija cada problema de configuração um por um até que a validação seja bem-sucedida.

Testando as Regras do Suricata
Agora que seus arquivos de configuração do Suricata foram validados, você pode executar o Suricata para verificar se eles estão funcionando corretamente. Você usará o Suricata para testar o ET Open (2100498) com o comando curl
para detectar atividades/tráfego suspeitos.
Neste momento, sua instância do Suricata possui mais de 30.000 regras que foram obtidas de vários conjuntos de regras. Portanto, um teste completo de todas as regras com suas explicações não caberá neste tutorial.
1. Execute o comando curl
abaixo para gerar algum tráfego/requisições/atividades HTTP a partir do site TestMyNIDS. O TestMyNIDS é um projeto de aprendizado eletrônico dedicado ao suporte de testes, validação e comparação de NIDS. O site fornece uma plataforma única para análise comparativa de NIDS e ferramentas relacionadas.
Você pode usar este site para testar qualquer atividade/tráfego suspeito e verificar se seu conjunto de regras configurado está funcionando conforme o esperado.
Os dados de resposta são projetados para acionar um falso alerta, simulando ser um usuário root Linux/Unix. E este usuário root está em um sistema que pode estar comprometido.

Em seguida, execute o comando grep
abaixo para examinar o arquivo fast.log
no diretório /var/log/suricata/ em busca de uma mensagem de alerta correspondente 2100498
. Este comando verifica o arquivo de log em busca de alertas de usuário.
Além do arquivo fast.log, outro arquivo de log para ficar de olho é o eve.log no mesmo diretório.
Você verá uma saída semelhante à abaixo, que mostra o endereço IPv4 público do seu sistema.

3. Agora, execute o comando jq
abaixo para examinar o arquivo eve.log. O arquivo eve.log também é usado para registrar eventos, mas em formato JSON (/var/log/suricata/eve.json
). São os arquivos eve.json e fast.log que você consultará para tráfego suspeito e tentativas bloqueadas. Uma vez encontrados, tome as medidas necessárias.
Abaixo, você pode ver “signature_id”: 2100498 na saída, que é o ID de assinatura de alerta especificado no comando.
Você também pode ver o “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” na saída, que é o ID de Fluxo Comunitário que você configurou no arquivo /etc/suricata/suricata.yaml.
Este community_id é útil ao usar o Suricata em conjunto com outras ferramentas como o Elasticsearch para obter uma pilha completa de “monitoramento de segurança” a um custo razoável.

Conclusão
Ao longo deste tutorial, você aprendeu como instalar e configurar o Suricata com conjuntos de regras para proteger sua rede. Você também passou pelo teste se as regras estão funcionando gerando tráfego em sua rede.
Neste ponto, o Suricata está funcionando perfeitamente com seu conjunto de regras personalizado para detectar atividades/tráfego suspeitos em sua rede.
Agora, por que não construir sobre esse conhecimento recém-descoberto? Talvez começar com a instalação e configuração do Suricata, Zeek, a pilha Elasticsearch para montar um conjunto completo de “monitoramento de segurança”?