Proteja o MikroTik contra força bruta no SSH e Winbox com address-list em estágios, port knocking, bloqueio de port scan e DNS aberto.

Para que serve

Basta um MikroTik ter IP público para começar a receber, em minutos, tentativas de login no SSH, no Winbox e no Telnet, além de varreduras de portas e consultas DNS usadas em ataques de amplificação. Este artigo mostra como proteger o MikroTik contra força bruta e esses ataques automatizados no RouterOS 7, usando address-lists com tempo de expiração, port knocking para esconder o gerenciamento e regras de detecção de varredura. Ele complementa o artigo «Firewall do MikroTik: regras base de filter e raw comentadas (RouterOS 7)» desta categoria, que deve estar aplicado antes.

A melhor proteção é não expor. Se o Winbox e o SSH só aceitam conexões pela VPN (artigo de WireGuard no RouterOS 7), não há força bruta a combater. As técnicas abaixo são para quando você precisa de alguma exposição ou quer uma camada extra.

Pré-requisitos

  • Firewall base aplicado, com a lista de interfaces WAN e a regra raw que descarta a lista_negra.
  • Safe Mode ativo durante as mudanças (Ctrl+X) e uma rota de recuperação (MAC-Winbox pela LAN ou console da VM no Proxmox).
  • Exemplo: SSH na porta 22, Winbox na 8291, VPN administrativa em 10.8.0.0/24.

Passo 1: proteger SSH e Winbox com bloqueio em estágios

A ideia é contar novas conexões vindas do mesmo IP em pouco tempo. Cada nova conexão promove o IP para um estágio seguinte; quem passar do terceiro estágio vai para a lista_negra por um dia. Um administrador que erra a senha uma ou duas vezes não é bloqueado. As regras vão na chain input, antes da regra que aceita o serviço:

/ip firewall filter
add chain=input action=add-src-to-address-list address-list=lista_negra address-list-timeout=1d \
    connection-state=new protocol=tcp dst-port=22,8291 src-address-list=bf_estagio3 \
    in-interface-list=WAN comment="BF: 4a tentativa -> lista negra"
add chain=input action=add-src-to-address-list address-list=bf_estagio3 address-list-timeout=1m \
    connection-state=new protocol=tcp dst-port=22,8291 src-address-list=bf_estagio2 in-interface-list=WAN
add chain=input action=add-src-to-address-list address-list=bf_estagio2 address-list-timeout=1m \
    connection-state=new protocol=tcp dst-port=22,8291 src-address-list=bf_estagio1 in-interface-list=WAN
add chain=input action=add-src-to-address-list address-list=bf_estagio1 address-list-timeout=1m \
    connection-state=new protocol=tcp dst-port=22,8291 in-interface-list=WAN comment="BF: 1a tentativa"

A ordem é proposital: de baixo para cima no fluxo lógico, mas de cima para baixo na tabela, para que um IP só avance um estágio por conexão. Mova o bloco para logo depois da regra established,related com place-before ou arrastando no Winbox. Como o raw descarta quem está na lista_negra, o bloqueio não gasta CPU depois de aplicado.

Inclua os seus IPs fixos e a VPN numa lista de exceção, para nunca bloquear a si mesmo:

/ip firewall address-list add list=admin_permitidos address=10.8.0.0/24
/ip firewall filter add chain=input action=accept src-address-list=admin_permitidos \
    place-before=[find comment="BF: 4a tentativa -> lista negra"] comment="admin nunca e bloqueado"

Passo 2: esconder o gerenciamento com port knocking

No port knocking, as portas de gerenciamento ficam fechadas para todos. Só quem "bate" numa sequência secreta de portas, na ordem certa e dentro de um prazo curto, entra numa lista temporária de liberados. Exemplo com a sequência 7001 → 7002 → 7003 (escolha números próprios):

/ip firewall filter
add chain=input action=add-src-to-address-list address-list=knock1 address-list-timeout=15s \
    protocol=tcp dst-port=7001 in-interface-list=WAN comment="PK: batida 1"
add chain=input action=add-src-to-address-list address-list=knock2 address-list-timeout=15s \
    protocol=tcp dst-port=7002 src-address-list=knock1 in-interface-list=WAN comment="PK: batida 2"
add chain=input action=add-src-to-address-list address-list=admin_liberado address-list-timeout=1h \
    protocol=tcp dst-port=7003 src-address-list=knock2 in-interface-list=WAN comment="PK: batida 3 libera por 1h"
add chain=input action=accept protocol=tcp dst-port=22,8291 src-address-list=admin_liberado comment="PK: acesso liberado"

Essas regras precisam ficar antes do drop final da chain input. As batidas em si são descartadas pelo drop final (o cliente não recebe resposta), mas a regra de lista já registrou o IP.

Para bater, do seu computador:

# Linux/macOS (com nmap instalado)
for p in 7001 7002 7003; do nmap -Pn --max-retries 0 -p $p 203.0.113.19; done

# Windows PowerShell
7001,7002,7003 | ForEach-Object { Test-NetConnection 203.0.113.19 -Port $_ -WarningAction SilentlyContinue | Out-Null }

Depois disso, abra o Winbox normalmente pelo IP público durante uma hora. Lembre que o port knocking é "segurança por obscuridade": quem enxerga o seu tráfego pode descobrir a sequência. Use junto com senha forte e, de preferência, só como acesso de emergência.

Passo 3: detectar varredura de portas

O RouterOS tem um detector de port scan (psd) que pontua conexões para muitas portas diferentes em pouco tempo:

/ip firewall filter
add chain=input action=add-src-to-address-list address-list=lista_negra address-list-timeout=1d \
    protocol=tcp psd=21,3s,3,1 in-interface-list=WAN comment="SCAN: varredura de portas"

Uma armadilha simples também funciona bem: qualquer conexão a uma porta que você nunca usa, como 23 (Telnet) ou 3389 (RDP no próprio roteador), coloca o IP na lista negra:

add chain=input action=add-src-to-address-list address-list=lista_negra address-list-timeout=1d \
    protocol=tcp dst-port=23,3389,445,1433 in-interface-list=WAN comment="ARMADILHA: portas que ninguem deveria tentar"

Cuidado ao aplicar armadilhas a portas que você publica por dst-nat: as regras acima estão na chain input, que só vê tráfego destinado ao roteador, então não interferem nos redirecionamentos.

Passo 4: fechar DNS e outros amplificadores

Se o roteador atende DNS para a LAN, garanta que a porta 53 não responde na WAN. Com o firewall base (drop final na input) isso já acontece; se você ainda não aplicou o drop final, adicione:

/ip firewall filter
add chain=input action=drop protocol=udp dst-port=53 in-interface-list=WAN comment="DNS fechado na WAN"
add chain=input action=drop protocol=tcp dst-port=53 in-interface-list=WAN

Faça o mesmo raciocínio para SNMP (161/udp) e para o servidor de bandwidth-test (2000/tcp) se estiverem ativos.

Passo 5: limitar novas conexões por IP

Para serviços publicados (por exemplo, um site por dst-nat), dá para limitar quantas conexões simultâneas um único IP abre, contendo robôs e pequenos floods:

/ip firewall filter
add chain=forward action=drop protocol=tcp dst-port=443 connection-limit=100,32 \
    in-interface-list=WAN comment="limite de 100 conexoes por IP no HTTPS publicado"

Ataques volumétricos de verdade não são resolvidos no roteador: eles são tratados pela proteção AntiDDoS da rede. Veja também o artigo sobre ataques DDoS na categoria de rede.

Como saber se funcionou

  1. /ip firewall address-list print where list=lista_negra mostra IPs entrando com tempo restante (coluna timeout).
  2. /ip firewall raw print stats: o contador da regra da lista negra sobe, mostrando que o descarte acontece antes da filter.
  3. Teste o port knocking de fora: sem bater, nmap -Pn -p 8291 IP mostra filtered; após a sequência, a porta aparece open para o seu IP.
  4. Teste o DNS de fora: dig @IP_PUBLICO exemplo.com.br deve dar timeout.

Problemas comuns

  • Eu mesmo fui bloqueado: entre pelo console ou MAC-Winbox e remova: /ip firewall address-list remove [find list=lista_negra address=SEU_IP]. Depois, coloque o seu IP em admin_permitidos.
  • Port knocking não libera: a sequência demorou mais que o timeout, saiu de outro IP (celular trocando de rede, CGNAT) ou as regras estão depois do drop final.
  • Lista negra enorme e roteador lento: confirme que o descarte está na raw, não na filter, e reduza o timeout para algumas horas.
  • Usuários de um mesmo escritório bloqueados juntos: todos saem pelo mesmo IP. Coloque esse IP na lista de exceção.

Perguntas frequentes

Trocar a porta do SSH e do Winbox basta contra força bruta?

Diminui o volume de tentativas automáticas, mas um scan completo encontra a porta nova. Combine com as listas acima ou, melhor, feche o acesso pela VPN.

Address-list com timeout some depois de reiniciar?

Sim, entradas dinâmicas (com timeout) são perdidas no reboot. Para bloqueios permanentes, adicione o endereço manualmente, sem timeout.

Posso usar listas públicas de IPs maliciosos?

Pode, importando-as periodicamente por script com /tool fetch. Escolha fontes confiáveis e mantenha o descarte na raw para não pesar na CPU.

Leitura complementar

Precisa de ajuda?

Se suspeitar que o seu MikroTik já foi invadido (usuários desconhecidos, scripts ou agendamentos que você não criou, proxy ativado), abra um ticket na Área do Cliente e veja também o artigo sobre suspeita de invasão na categoria de segurança.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também