Vamos apresentar aqui uma configuração do Suricata em modo Host IPS. Dessa forma, usando essa configuração, o leitor poderá usar o suricata para proteger uma máquina que hospeda um serviço ou para proteger máquinas de usuários.
Neste tutorial vamos usar o suricata em modo IPS atuando no modo NFQUEUE. Dessa forma, os pacotes são enviados para o suricata e então podem ser bloqueados ou permitidos.
Vamos iniciar o tutorial criando uma regra para testes. No entanto, o leitor pode usar as regras prontas do Suricata e alterar o campo alert para drop para fazer com que o suricata passe a descartar pacotes que atendam a alguma regra de ataque.
Estamos supondo o mesmo cenário e a mesma configuração do suricata criada no post anterior: https://simplificandoredes.com/instalar-suricata-linux/
Esse tutorial é parte do Curso de Suricata em Linux.
Artigo 1: Instalar Suricata Linux
Artigo 2: Suricata em Host IPS
Artigo 3: Suricata em Network IPS
Link para o curso de Suricata no youtube:
Criar uma regra para o IPs
Vamos criar uma regra customizada. Assim, temos como objetivo bloquear qualquer tentativa de conexão para qualquer porta que não for a porta 80.
Estamos simulando que desejamos proteger um servidor WEB de possiveis scans por outras portas TCP.
Nesse caso, vamos criar um arquivo de regra chamado “redes.rules”. Além disso, vamos criar esse arquivo “redes.rules” dentro de “/etc/suricata/rules/”.
Para isso, vamos usar o comando abaixo para criar e editar o arquivo “redes.rules”.
sudo gedit /etc/suricata/rules/redes.rules
Em seguida, vamos inserir a regra abaixo:
drop tcp any any -> $HOME_NET !80 (msg:"TCP Scan ?"; flow:from_client;flags:S; sid:992002087;rev:1;)
Essa regra diz “ Vamos descartar pacotes que vierem de qualquer origem e vindo de qualquer porta para nossa rede interna e que não seja para a porta 80.” Além disso, vamos criar um log do bloqueio com a mensagem “TCP Scan ?“. E vamos analisar o flow que vem do cliente e que tenha o flag tcp = SYN.”
Vamos especificar abaixo os principais campos dessa regra.
“drop” Significa que vamos descartar os pacotes que atendam a essa regra.
“tcp “ Estamos focando a regra no protocolo de camada de transporte TCP.
“any any” Nesse caso, o primeiro “any” se refere a qualquer IP de origem e o segundo “any” se refere a qualquer porta de origem. Portanto, “any any “ idica qualquer IP e qualquer porta.
“->” Nesse caso, estamos usando a direção do tráfego. Ou seja, estamos supondo um tráfego que vem da origem “any any“.
“$HOME_NET “ Aqui temos as redes que pertencem ao nosso Home Net descrito no arquivo “suricata.yaml”
“!80” = Não porta 80. Ou seja, qualquer tráfego que esteja indo para qualquer porta que não seja a 80.
“msg:”TCP Scan ?” A mensagem que vai aparecer os logs do suricata
“flow:from_client;flags:S” Vamos analisar o flow que vem do cliente e que tenha o flag tcp = SYN.”
“sid:992002087” A identificação para a regra que acabamos de criar. Cuidado para não usar o mesmo sid de outra regra do seu suricata.
“rev:1” A versão de sua regra.
Inserindo a nova regra no Suricata
Vamos entrar em “/etc/suricata/suricata.yaml”
sudo nano /etc/suricata/suricata.yaml
Verifique se sua rede está na “$HOME_NET “.
Agora, vamos adicionar o caminho para a nova regra que terminamos de criar na sessão anterior. Portanto, vamos até o final do arquivo e vamos procurar a linha “rule-files” e vamos inseir a linha abaixo.
- /etc/suricata/rules/redes.rules
sudo nano /etc/default/ufw
Transformando o suricata em host IPS
Agora vamos levantar o Suricata em modo IPS. Para isso, vamos parar o processo do suricata que estiver rodando na máquina com o comando abaixo.
sudo service suricata stop
Ou
sudo systemctl stop suricata.service
Agora, vamos alterar a forma de inicialização do processo do suricata. Para isso vamos usar o comando abaixo para abrir o editor.
sudo systemctl edit suricata.service
Em seguida vamos inserir as linhas abaixo.
[Service]
ExecStart=
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid -q 0
Type=simple
As linhas fazem com que inicialmente a configuração do serviço (ExecStart=) e em seguida, inicia uma nova forma de iniciar o serviço (ExecStart=). A opção “Type=simple” permite o gerenciamento do systemd ao suricata.
A linha “ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml –pidfile /run/suricata.pid -q 0 ” vai executar o serviço do suricata em modo IPS. Para isso, usamos a opção “ -q -0“. Dessa forma, estamos informando ao suricata que usaremos o modo NFQUEUE.
Agora, vamos reiniciar o suricata. Para isso podemos usar o comando abaixo:
sudo service suricata start
Ou
sudo systemctl start suricata.service
Enviando o tráfego para o NFQUEUE do Suricata
Agora que configuramos o suricata para funcionar como IPS, precisamos criar regras no firewall para enviar o tráfego para o NFQUEUE do Suricata. Para isso, vamos alterar o arquivo “before.rules” do UFW.
sudo nano /etc/ufw/before.rules
-I INPUT -j NFQUEUE
-I OUTPUT -j NFQUEUE
OBS. Caso você opte por utilizar outro firewall, lembre-se de redirecionar o tráfego para o NFQUEUE do Suricata
Agora vamos editar o arquivo ”/etc/default/ufw”· Na maioria dos casos a política de INPUT está configurada como DROP por default. Assim, vamos altear essa política para accept por padrão. Consequentemente estamos dizendo ao firewall que o que não for bloqueado pelo NFQUEUE do Suricata terá permissão de ACCEPT.
sudo nano /etc/default/ufw
ACCEPT
sudo nano /etc/default/ufw
OBS. Essa é apenas uma sugestão de configuração de firewall. No entanto, você pode configurar o seu firewall obedecendo a política que achar mais adequada. E lembre-se de direcionar o tráfego para o NFQUEUE do Suricata.
Agora vamos reiniciar o firewall UFW usando os comandos abaixo.
sudo ufw disable
sudo nano /etc/default/ufw
sudo ufw enable
Testando o IPS do Suricata
Agora vamos abrir duas portas na máquina protegida com o suricata. Para isso, vamos usar o comando netcat e vamos abrir a porta 80 e a porta 21. A porta 80 é usada em servidores WEB para o protocolo HTTP e a porta 21 é usada pelo protocolo FTP.
Vamos usar os comandos abaixo para abrir as portas 80 e 21. Sugiro que abra um terminal para cada um dos comandos.
sudo nc -vln 80
Agora vamos abrir outro terminal ou outra aba de terminal e digitar o comando abaixo.
sudo nc -vln 21
OBs. Estamos usando o comando netcat para abrir as portas 80 e 21. No entanto, o leitor pode instalar um servidor WEB link para vídeo aula aqui e instalar um servidor FTP link para videoaula aqui.
Testando o acesso com o nmap
Agora vamos usar o nmap na outra máquina para simular uma varredura de portas contra a máquina que estamos protegendo. Nesse caso, esperamos que apenas a porta 80 apareça como aberta nos resultados do nmap.
Caso não tenha o nmap instalado temos um post explicando os passos aqui.
NMAP : Identificar a versão de um serviço
NMAP: Mapeamento de portas TCP e UDP
Agora, dentro da máquina cliente que está na mesma rede interna da máquina que está protegida com o suricata, vamos usar o comando abaixo
sudo nmap -p 80,21 -sS 192.168.11.24
Nesse caso estamos especificando que queremos fazer uma varredura nas portas 80 e 21 da máquina alvo do suricata que tem o IP 192.168.11.24.
Podemos observar que aporta 80 está aberta “open” e a porta 21 está como filtrada “filtered”. O termo “filtered” é usado para identificar portas que não responderam a varredura do nmap.
Verificando os logs no suricata.
Agora vamos para a máquina do suricata e vamos abrir o arquivo de logs. Para isso, vamos usar o comando abaixo:
cat /var/log/suricata/fast.log
Podemos ver o resultado do log de bloqueio na figura abaixo.
Desabilitando a regra e testando o scan
Agora vamos desabilitar a regra que inserimos no suricata e vamos refazer o scan com o nmap. Para isso vamos editar novamente o arquivo de regras abaixo e comentar com “#” a regra que inserimos.
sudo nano /etc/suricata/rules/redes.rules
Em seguida, vamos fazer o suricata ignorar a regra. Para isso vamos inserir “#” na frente da regra:
#drop tcp any any -> $HOME_NET !80 (msg:"TCP Scan ?"; flow:from_client;flags:S; sid:992002087;rev:1;)
Depois disso vamos salvar.
Em seguida vamos reiniciar as regras do suricata com o comando abaixo.
sudo kill -USR2 $(pidof suricata)
Agora vamos refazer o scan do nmap na máquina cliente.
sudo nmap -p 80,21 -sS 192.168.11.24
Podemos observar que o resultado do scan apresenta as portas 21 e 80 como abertas.
Finalmente, apresentamos nesse tutorial uma configuração de Suricata em modo Host IPS. Em futuros tutoriais, vamos apresentar o Suricata em modo IPS de rede. Ou Network IPS (NIPS). Além disso, pretendemos apresentar formas diferentes de apresentar de forma gráfica os logs do Suricata.
Esse tutorial é parte do Curso de Suricata em Linux.
Artigo 1: Instalar Suricata Linux
Artigo 2: Suricata em Host IPS
Artigo 3: Suricata em Network IPS