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 pesquisar 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 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 do Suricata recém-adicionado 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. Certifique-se de ver o PPA do Suricata na lista, conforme mostrado abaixo, antes de instalar o Suricata.

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

6. Após a conclusão da instalação, 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 possui muitas configurações diferentes para muitos outros casos de uso. Mas observe 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ões (IDS), que registra, mas não descarta nenhum tráfego. Este modo é usado ao configurar e se familiarizar com o Suricata. Quando estiver mais confortável com o Suricata e entender melhor os tipos de tráfego sobre os quais o Suricata o alertará, você pode optar por ativar o modo IPS.
O Suricata adiciona um campo em seu formato JSON (identificação de fluxo da comunidade). A identificação de fluxo da comunidade é um campo de 8 bytes que permite correlacionar registros gerados por outras ferramentas. Este recurso é útil ao usar o Suricata em conjunto com outras ferramentas como Bro ou Elasticsearch.
1. Abra o arquivo /etc/suricata/suricata.yaml em 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 de 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 flag -p
diz ao comando ip
para imprimir o dispositivo de forma legível para humanos, enquanto a flag -j
imprime a saída JSON.
O Suricata está configurado para farejar pacotes de qualquer interface de rede disponível por padrão. Mas você pode mudar esse comportamento e especificar uma interface para o Suricata escutar quando ele iniciar.
Como você vê abaixo, o parâmetro dev especifica a interface que o Suricata usará para farejar pacotes. Nesta demonstração, 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. Nesta demonstração, eth0 é usada como a interface para farejar 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 para proteger 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 enquanto elas estão em uso. Como resultado, você não precisa reiniciar manualmente o Suricata para que as novas regras entrem em vigor.
Abra o arquivo /etc/suricata/suricata.yaml, copie/colecione as seguintes diretivas ao 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, ao editar/atualizar seus conjuntos de regras, as mudanças terão efeito sem reiniciar o serviço do Suricata.

Agora execute o comando kill
abaixo para notificar o processo do 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 o seguinte automaticamente:
- Carregar nova configuração para atualizar variáveis e valores de regras.
- Carregar novas regras
- Construir novo mecanismo de detecção
- Substituir 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 detecta apenas os protocolos de Internet mais comuns localizados no diretório /etc/suricata/rules.
Neste ponto, você receberá uma mensagem de erro Nenhum arquivo de regras corresponde ao padrão, como a abaixo, sempre que tentar iniciar e usar o seu serviço Suricata. Esta 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 instância do Suricata. Felizmente, o Suricata possui uma ferramenta chamada suricata-update
que o ajudará a buscar mais conjuntos de regras de provedores de terceiros.
1. Execute o comando abaixo para obter uma atualização para sua instância do Suricata.
Como você pode ver abaixo, a saída indica que o comando suricata-update
buscou as regras conectando-se a https://rules.emergingthreats.net/open/. Em seguida, o comando 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 que estão habilitadas (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
busca 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 busque conjuntos de regras especificamente. Este tutorial busca 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
em suas regras do Suricata.

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 do Suricata possui um serviço de validação integrado que permite ver qualquer desvio 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 flag -T
diz ao Suricata para executar no modo “teste” e “top down”. Ambos os modos têm regras mais rígidas para a correspondência de 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 aos abaixo, o Suricata imprimirá cada erro, indicando linhas específicas que estão causando 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 os seus arquivos de configuração do Suricata estão validados, você pode executar o Suricata para ver 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 o Suricata obteve de diversos 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/solicitações HTTP/atividades do site TestMyNIDS. O TestMyNIDS é um projeto de e-learning dedicado a apoiar 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 para ver se seu conjunto de regras configurado está funcionando como esperado.
Os dados de resposta são projetados para disparar um alerta falso fingindo ser um usuário root do Linux/Unix. E este root do usuário 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 para alerta 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ê vai consultar para tráfego suspeito e tentativas bloqueadas. Quando encontrado, tome as medidas necessárias.
Abaixo, você pode ver “signature_id”: 2100498 na saída, que é o ID de assinatura de alerta que você especificou no comando.
Você também pode ver o “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” na saída, que é o ID de Fluxo da Comunidade que você configurou no arquivo /etc/suricata/suricata.yaml.
Este community_id é útil quando você usa o Suricata em conjunto com outras ferramentas como o Elasticsearch para obter um “conjunto de monitoramento de segurança” completo a um custo razoavelmente baixo.

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 por testes para verificar se os conjuntos de 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 com este novo conhecimento? Talvez começar com a instalação e configuração do Suricata, Zeek, o conjunto Elasticsearch para configurar uma “pilha de monitoramento de segurança” completa?