Mudanças entre as edições de "Firewall Servidores Mikrotik"

De Wiki BPF
Ir para navegação Ir para pesquisar
 
(14 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
== 1. Introdução ==
 
== 1. Introdução ==
 +
 
O objetivo desse documento é descrever um padrão de firewall para proteção de servidores (aplicações) em roteadores mikrotik, baseado em /'''ip firewall filter''', adotando um modelo mais simples de gerenciar suas regras. O conceito principal é negar por aplicação, ou seja, cada servidor (aplicação) possui sua própria chain e apenas os serviços necessários são abertos, utilizando um drop para cada aplicação individual.
 
O objetivo desse documento é descrever um padrão de firewall para proteção de servidores (aplicações) em roteadores mikrotik, baseado em /'''ip firewall filter''', adotando um modelo mais simples de gerenciar suas regras. O conceito principal é negar por aplicação, ou seja, cada servidor (aplicação) possui sua própria chain e apenas os serviços necessários são abertos, utilizando um drop para cada aplicação individual.
  
 
== 2. Conceito do Firewall por CHAIN ==
 
== 2. Conceito do Firewall por CHAIN ==
Por padrão do mikrotik o firewall dele é ACCEPT, ou seja, ele não irá negar o trafego por padrão como normalmente os firewalls no mercado realizam, sendo assim precisamos realizar uma regra de DROP, o mais comum é fazer um DROP GERAL no final, com este tipo de configuração o DROP afeta o ambiente completo, sendo muito comum acabar o DROP ser desabilitado em momento de problema e nunca mais ser habilitado novamente (é raro mas acontece sempre kkkk), assim foi pensado em realizar o firewall por CHAIN, ou seja, cada servidor (aplicação) possui seu firewall independente, ou seja, o que é feito na chain de um servidor não impacta no outro, cada servidor possui seu drop, isolando as regras e deixando mais facil a gerencia com ambiente com bastante aplicações, para isto é utilizado JUMP e CHAIN, basicamente é criado uma CHAIN com nome da aplicação onde tudo que for em destino ao IP da aplicação desejada irá redirecionar para aquela CHAIN onde ela irá liberar as portas necessárias e o restante irá bloquear.  
+
 
 +
Por padrão do mikrotik o firewall dele é ACCEPT, ou seja, ele não irá negar o trafego por padrão como normalmente os firewalls no mercado realizam, sendo assim precisamos realizar uma regra de DROP, o mais comum é fazer um DROP GERAL no final, com este tipo de configuração o DROP afeta o ambiente completo, sendo muito comum acabar o DROP ser desabilitado em momento de problema e nunca mais ser habilitado novamente (é raro mas acontece sempre kkkk), assim foi pensado em realizar o firewall por CHAIN, ou seja, cada servidor (aplicação) possui seu firewall independente, ou seja, o que é feito na chain de um servidor não impacta no outro, cada servidor possui seu drop, isolando as regras e deixando mais facil a gerencia com ambiente com bastante aplicações, para isto é utilizado JUMP e CHAIN, basicamente é criado uma CHAIN com nome da aplicação onde tudo que for em destino ao IP da aplicação desejada irá redirecionar para aquela CHAIN onde ela irá liberar as portas necessárias e o restante irá bloquear.
  
 
O fluxo do trafego é pensado em aplicações que necessitam estar publicadas para internet ou somente para endereços específicos, então o trafego no geral vem da WAN do mikrotik e assim utilizando /'''ip firewall filter''' irá realizar filtros individuais para cada servidor sendo FORWARD pois o tráfego passa por ele e de INPUT para endereços públicos no próprio roteador, por exemplo endereço de acesso do equipamento.
 
O fluxo do trafego é pensado em aplicações que necessitam estar publicadas para internet ou somente para endereços específicos, então o trafego no geral vem da WAN do mikrotik e assim utilizando /'''ip firewall filter''' irá realizar filtros individuais para cada servidor sendo FORWARD pois o tráfego passa por ele e de INPUT para endereços públicos no próprio roteador, por exemplo endereço de acesso do equipamento.
[[Arquivo:Topologia-fw-server-mk.png|borda|esquerda|semmoldura]]
 
  
=== 3. Regras de Firewall IPv4 ===
+
[[Arquivo:Topologia-fw-server-mk.png|borda|semmoldura|alt=|centro]]
 +
 
 +
== 3. Regras de Firewall IPv4 ==
 +
 
 +
=== 3.1 Address list Redes Confiaveis ===
 +
 
 
A <code>address-list REDES_CONFIAVEIS</code> é utilizada para identificar '''redes e endereços IP que possuem permissão administrativa''', como acessos de NOC, VPN, jump server ou redes internas confiáveis.
 
A <code>address-list REDES_CONFIAVEIS</code> é utilizada para identificar '''redes e endereços IP que possuem permissão administrativa''', como acessos de NOC, VPN, jump server ou redes internas confiáveis.
  
 
Todas as regras de gestão e administração do firewall fazem referência a esta lista, evitando a necessidade de repetir IPs diretamente nas regras.
 
Todas as regras de gestão e administração do firewall fazem referência a esta lista, evitando a necessidade de repetir IPs diretamente nas regras.
----📌 Conceito
+
 
 +
----
 +
 
 +
📌 '''Conceito'''
  
 
A <code>REDES_CONFIAVEIS</code> deve conter '''apenas origens confiáveis''', pois qualquer endereço incluído nela poderá:
 
A <code>REDES_CONFIAVEIS</code> deve conter '''apenas origens confiáveis''', pois qualquer endereço incluído nela poderá:
Linha 18: Linha 27:
 
* Ignorar regras específicas de servidores
 
* Ignorar regras específicas de servidores
 
* Ter prioridade no fluxo do firewall
 
* Ter prioridade no fluxo do firewall
 +
 
⚠️ '''Nunca adicione IPs públicos ou redes desconhecidas''' a esta lista.
 
⚠️ '''Nunca adicione IPs públicos ou redes desconhecidas''' a esta lista.
----🧩 Tipos de endereços recomendados
+
 
 +
----
 +
 
 +
🧩 '''Tipos de endereços recomendados'''
  
 
Normalmente, a lista pode conter:
 
Normalmente, a lista pode conter:
Linha 27: Linha 40:
 
* Jump servers
 
* Jump servers
 
* Hosts de administração
 
* Hosts de administração
 +
 
Exemplos comuns:
 
Exemplos comuns:
 
* <code>192.168.0.0/16</code>
 
* <code>192.168.0.0/16</code>
Linha 33: Linha 47:
 
* IP público fixo do escritório
 
* IP público fixo do escritório
 
* IP de saída da VPN
 
* IP de saída da VPN
* Evite utilizar redes muito amplas, tente deixar o mais restrito possível, evite usar a RFC1918 inteira.
+
 
----🔧 Criação da Address-List
+
*Evite utilizar redes muito amplas, tente deixar o mais restrito possível, evite usar a RFC1918 inteira.*
 +
 
 +
----
 +
 
 +
🔧 '''Criação da Address-List'''
  
 
'''Exemplo básico'''
 
'''Exemplo básico'''
<code>/ip firewall address-list
+
<pre>
add list=REDES_CONFIAVEIS address=192.168.0.0/16 comment="Rede interna"
+
/ip firewall address-list
add list=REDES_CONFIAVEIS address=10.0.0.0/8 comment="Rede privada"
+
add list=REDES_CONFIAVEIS address=192.168.0.0/16 comment="Rede interna"
add list=REDES_CONFIAVEIS address=200.200.200.10 comment="IP fixo NOC"</code>
+
add list=REDES_CONFIAVEIS address=10.0.0.0/8 comment="Rede privada"
----🔐 Uso com VPN
+
add list=REDES_CONFIAVEIS address=200.200.200.10 comment="IP fixo NOC"
 +
</pre>
 +
 
 +
----
 +
 
 +
🔐 '''Uso com VPN'''
  
 
Caso exista VPN, é recomendado adicionar '''apenas a rede da VPN''', e não endereços individuais:
 
Caso exista VPN, é recomendado adicionar '''apenas a rede da VPN''', e não endereços individuais:
<code>/ip firewall address-list
+
<pre>
add list=REDES_CONFIAVEIS address=10.99.0.0/24 comment="Rede VPN Administrativa"</code>
+
/ip firewall address-list
 +
add list=REDES_CONFIAVEIS address=10.99.0.0/24 comment="Rede VPN Administrativa"
 +
</pre>
 
Isso facilita manutenção e crescimento futuro.
 
Isso facilita manutenção e crescimento futuro.
----🛡️ Boas práticas
+
 
 +
----
 +
 
 +
🛡️ '''Boas práticas'''
 
* Utilize '''comentários claros''' em cada entrada
 
* Utilize '''comentários claros''' em cada entrada
 
* Revise periodicamente a lista
 
* Revise periodicamente a lista
 
* Remova IPs temporários após uso
 
* Remova IPs temporários após uso
 
* Evite listas muito amplas sem necessidade
 
* Evite listas muito amplas sem necessidade
----⚠️ Impacto no Firewall
+
 
 +
----
 +
 
 +
⚠️ '''Impacto no Firewall'''
  
 
Qualquer tráfego originado de endereços presentes na <code>REDES_CONFIAVEIS</code>:
 
Qualquer tráfego originado de endereços presentes na <code>REDES_CONFIAVEIS</code>:
Linha 58: Linha 89:
 
* Terá acesso aos serviços administrativos
 
* Terá acesso aos serviços administrativos
 
* Não passará pelas regras específicas de servidores
 
* Não passará pelas regras específicas de servidores
 +
 
Por isso, esta lista deve ser tratada como '''zona de alta confiança'''.
 
Por isso, esta lista deve ser tratada como '''zona de alta confiança'''.
----📝 Observação Final
+
 
 +
----
 +
 
 +
📝 '''Observação Final'''
  
 
A correta definição da <code>REDES_CONFIAVEIS</code> é fundamental para a segurança do ambiente.
 
A correta definição da <code>REDES_CONFIAVEIS</code> é fundamental para a segurança do ambiente.
Linha 68: Linha 103:
  
 
=== 3.2 Conexões estabelecidas ===
 
=== 3.2 Conexões estabelecidas ===
 +
 
Estas regras devem estar sempre no início do firewall, garantindo o funcionamento correto das sessões já criadas.
 
Estas regras devem estar sempre no início do firewall, garantindo o funcionamento correto das sessões já criadas.
  
<code>ip firewall filter  
+
<pre>
 +
/ip firewall filter
 +
add chain=input connection-state=established,related action=accept comment="ACEITA CONEXÕES ESTABELECIDAS"
 +
add chain=forward connection-state=established,related action=accept comment="ACEITA CONEXÕES ESTABELECIDAS"
 +
</pre>
  
add chain=input connection-state=established,related action=accept \
 
    comment="ACEITA CONEXÕES ESTABELECIDAS"
 
 
add chain=forward connection-state=established,related action=accept \
 
    comment="ACEITA CONEXÕES ESTABELECIDAS"</code>
 
 
'''Objetivo'''
 
'''Objetivo'''
 
* Manter conexões ativas
 
* Manter conexões ativas
Linha 83: Linha 118:
  
 
=== 3.3 Conexões de redes confiáveis ===
 
=== 3.3 Conexões de redes confiáveis ===
 +
 
Este bloco centraliza o tratamento de redes internas, VPNs ou endereços administrativos.
 
Este bloco centraliza o tratamento de redes internas, VPNs ou endereços administrativos.
  
Todo tráfego originado dessas redes é aceito diretamente no <code>'''forward''' e no '''input'''</code>, sem passar pelas regras específicas de servidores, somente tenha cuidado com o que libera, evite liberar por exemplo seu prefixo completo de IPv4, libere IPs específicos, como /32, a partir do momento que você libera o seu bloco completo seu usuário final, uma maquina comprometida dentro da infraestrutura pode acessar aquela aplicação que muita das vezes pode não ser o necessário.  
+
Todo tráfego originado dessas redes é aceito diretamente no <code>'''forward'''</code> e no <code>'''input'''</code>, sem passar pelas regras específicas de servidores, somente tenha cuidado com o que libera, evite liberar por exemplo seu prefixo completo de IPv4, libere IPs específicos, como /32, a partir do momento que você libera o seu bloco completo seu usuário final, uma maquina comprometida dentro da infraestrutura pode acessar aquela aplicação que muita das vezes pode não ser o necessário.
<code>add action=jump chain=forward src-address-list=REDES_CONFIAVEIS \
 
    jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"</code>
 
  
<code>add action=jump chain=input src-address-list=REDES_CONFIAVEIS \
+
<pre>
    jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
+
/ip firewall filter
+
add action=jump chain=forward src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
add action=accept chain=REDES_CONFIAVEIS</code>
+
add action=jump chain=input src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
 +
add action=accept chain=REDES_CONFIAVEIS
 +
</pre>
  
=== Objetivo ===
+
'''Objetivo'''
 
* Facilitar administração
 
* Facilitar administração
 
* Evitar repetição de regras
 
* Evitar repetição de regras
Linha 100: Linha 136:
  
 
=== 3.4 Regra para INPUT ===
 
=== 3.4 Regra para INPUT ===
 +
 
Estas regras controlam o acesso ao próprio roteador ou a endereços de gestão publicados.
 
Estas regras controlam o acesso ao próprio roteador ou a endereços de gestão publicados.
  
Somente redes previamente autorizadas podem acessar serviços administrativos, como winbox e ssh. Além de você ter o '''/ip service''' o bloqueio de ips de acesso ao bloquear no service o mikrotik ainda continua respondendo a porta, ele não bloqueia a porta e sim quem pode acessa-la, diferentemente do firewall que o roteador parará de escutar a porta para IPs fora da range liberada.
+
Somente redes previamente autorizadas podem acessar serviços administrativos, como winbox e ssh. Além de você ter o <code>/ip service</code> o bloqueio de ips de acesso ao bloquear no service o mikrotik ainda continua respondendo a porta, ele não bloqueia a porta e sim quem pode acessa-la, diferentemente do firewall que o roteador parará de escutar a porta para IPs fora da range liberada.
 +
 
 +
As redes liberadas para acesso do seu roteador devem estar na address list <code>REDES_CONFIAVEIS</code>, antes de aplicar valide que esteja a rede na sua address list.
  
As redes liberadas para acesso do seu roteador devem estar na address list '''REDES_CONFIAVEIS''', antes de aplicar valide que esteja a rede na sua address list.
+
<pre>
<code>add action=jump chain=input dst-address=X.X.X.X jump-target=CE-DMZ \
+
/ip firewall filter
    comment="CE-DMZ INPUT"
+
add action=jump chain=input dst-address=X.X.X.X jump-target=CE-DMZ comment="CE-DMZ INPUT"
+
add action=accept chain=CE-DMZ protocol=tcp dst-port=22,8291 src-address-list=REDES_CONFIAVEIS
add action=accept chain=CE-DMZ protocol=tcp dst-port=22,8291 \
+
add action=accept chain=CE-DMZ protocol=udp dst-port=22,8291 src-address-list=REDES_CONFIAVEIS
    src-address-list=REDES_CONFIAVEIS
+
add action=accept chain=CE-DMZ protocol=icmp
+
add action=drop chain=CE-DMZ
add action=accept chain=CE-DMZ protocol=udp dst-port=22,8291 \
+
</pre>
    src-address-list=REDES_CONFIAVEIS
 
 
add action=accept chain=CE-DMZ protocol=icmp
 
 
add action=drop chain=CE-DMZ</code>
 
  
=== Objetivo ===
+
'''Objetivo'''
 
* Proteger serviços administrativos
 
* Proteger serviços administrativos
 
* Restringir acesso por origem
 
* Restringir acesso por origem
Linha 124: Linha 158:
  
 
=== 3.5 Aplicação de exemplo (ZABBIX/GRAFANA) ===
 
=== 3.5 Aplicação de exemplo (ZABBIX/GRAFANA) ===
 +
 
Regras dedicadas ao servidor Zabbix, permitindo apenas os serviços necessários para acesso e operação.
 
Regras dedicadas ao servidor Zabbix, permitindo apenas os serviços necessários para acesso e operação.
  
 
Qualquer outro tráfego destinado a este servidor é descartado.
 
Qualquer outro tráfego destinado a este servidor é descartado.
<code>add action=jump chain=forward dst-address=X.X.X.X jump-target=Zabbix \
 
    comment="ZABBIX SERVER"
 
 
add action=accept chain=Zabbix protocol=tcp dst-port=80,443,3000
 
 
add action=accept chain=Zabbix protocol=icmp
 
 
add action=drop chain=Zabbix</code>
 
  
=== Objetivo ===
+
<pre>
 +
/ip firewall filter
 +
add action=jump chain=forward dst-address=X.X.X.X jump-target=Zabbix comment="ZABBIX SERVER"
 +
add action=accept chain=Zabbix protocol=tcp dst-port=80,443,3000
 +
add action=accept chain=Zabbix protocol=icmp
 +
add action=drop chain=Zabbix
 +
</pre>
 +
 
 +
'''Objetivo'''
 
* Limitar exposição do servidor
 
* Limitar exposição do servidor
 
* Bloquear portas não utilizadas
 
* Bloquear portas não utilizadas
 
* Manter o controle isolado por aplicação
 
* Manter o controle isolado por aplicação
* Desta forma somente liberamos a porta 80,443 e 3000 para internet (so libere para internet se realmente precisar acessar externo e não possa acessar via VPN por exemplo), evite o máximo aplicações publicas caso não existe 100% da necessidade, desta forma somente as portas necessárias ficariam abertas, por exemplo o SSH estaria fechado para todos neste caso, exceto para REDES_CONFIAVEIS
 
  
=== '''3.6. Aplicação de exemplo (DNS)''' ===
+
*Desta forma somente liberamos a porta 80,443 e 3000 para internet (so libere para internet se realmente precisar acessar externo e não possa acessar via VPN por exemplo), evite o máximo aplicações publicas caso não existe 100% da necessidade, desta forma somente as portas necessárias ficariam abertas, por exemplo o SSH estaria fechado para todos neste caso, exceto para REDES_CONFIAVEIS*
 +
 
 +
=== 3.6. Aplicação de exemplo (DNS) ===
 +
 
 
Somente endereços presentes na <code>RESOLVE-DNS</code> conseguem consultar o DNS.
 
Somente endereços presentes na <code>RESOLVE-DNS</code> conseguem consultar o DNS.
  
Linha 150: Linha 187:
 
* Blocos IPv4 públicos dos clientes
 
* Blocos IPv4 públicos dos clientes
 
* Rede de CGNAT (<code>100.64.0.0/10</code>) por padrão tente fazer as requisições para seu servidor de DNS não passar por CGNAT, com exemplo com exceção no PBR.
 
* Rede de CGNAT (<code>100.64.0.0/10</code>) por padrão tente fazer as requisições para seu servidor de DNS não passar por CGNAT, com exemplo com exceção no PBR.
----🔧 Address-List <code>RESOLVE-DNS</code>
 
  
 +
----
 +
 +
🔧 '''Address-List <code>RESOLVE-DNS</code>'''
 +
 +
<pre>
 
/ip firewall address-list
 
/ip firewall address-list
 
 
add list=RESOLVE-DNS address=100.64.0.0/10 comment="CGNAT clientes"
 
add list=RESOLVE-DNS address=100.64.0.0/10 comment="CGNAT clientes"
 +
add list=RESOLVE-DNS address=187.45.120.0/24 comment="Cliente ISP A"
 +
add list=RESOLVE-DNS address=200.200.200.0/22 comment="Meu bloco"
 +
</pre>
  
add list=RESOLVE-DNS address=187.45.120.0/24 comment="Cliente ISP A"
+
----
  
add list=RESOLVE-DNS address=200.200.200.0/22 comment="Meu bloco"
+
🔐 '''Regras de Firewall – DNS Anycast'''
----🔐 Regras de Firewall – DNS Anycast
 
  
 
Os IPs Anycast utilizados são:
 
Os IPs Anycast utilizados são:
 
* <code>200.200.200.1</code> – Primário
 
* <code>200.200.200.1</code> – Primário
 
* <code>200.200.200.2</code> – Secundário
 
* <code>200.200.200.2</code> – Secundário
 +
 
Todo tráfego destinado a esses IPs é tratado na chain <code>DNS</code>.
 
Todo tráfego destinado a esses IPs é tratado na chain <code>DNS</code>.
  
 +
<pre>
 
/ip firewall filter
 
/ip firewall filter
 
 
add chain=forward dst-address=200.200.200.1 action=jump jump-target=DNS comment="DNS PRIMARIO"
 
add chain=forward dst-address=200.200.200.1 action=jump jump-target=DNS comment="DNS PRIMARIO"
 
 
add chain=forward dst-address=200.200.200.2 action=jump jump-target=DNS comment="DNS SECUNDARIO"
 
add chain=forward dst-address=200.200.200.2 action=jump jump-target=DNS comment="DNS SECUNDARIO"
 
 
add chain=DNS protocol=icmp action=accept comment="ICMP DNS"
 
add chain=DNS protocol=icmp action=accept comment="ICMP DNS"
 
 
add chain=DNS protocol=udp dst-port=53 src-address-list=RESOLVE-DNS action=accept comment="DNS UDP autorizado"
 
add chain=DNS protocol=udp dst-port=53 src-address-list=RESOLVE-DNS action=accept comment="DNS UDP autorizado"
 +
add chain=DNS action=drop comment="DROP DNS NAO AUTORIZADO"
 +
</pre>
  
add chain=DNS action=drop comment="DROP DNS NAO AUTORIZADO"
+
----
  
----🛡️ Boas práticas
+
🛡️ '''Boas práticas'''
 
* Nunca permitir DNS sem <code>address-list</code>
 
* Nunca permitir DNS sem <code>address-list</code>
 
* Separar lista de DNS de listas administrativas
 
* Separar lista de DNS de listas administrativas
Linha 184: Linha 226:
 
* Revisar blocos removidos ou inativos
 
* Revisar blocos removidos ou inativos
 
* Evitar liberar <code>0.0.0.0/0</code>
 
* Evitar liberar <code>0.0.0.0/0</code>
----📝 Observação
+
 
 +
----
 +
 
 +
📝 '''Observação'''
  
 
A <code>RESOLVE-DNS</code> '''autoriza apenas resolução de nomes''', não acesso administrativo.
 
A <code>RESOLVE-DNS</code> '''autoriza apenas resolução de nomes''', não acesso administrativo.
Linha 192: Linha 237:
 
* Controle por cliente
 
* Controle por cliente
 
* Segurança contra abuso e amplificação
 
* Segurança contra abuso e amplificação
 +
 +
== 4. Regras de Firewall IPv6  ==
 +
 +
O firewall IPv6 segue exatamente o mesmo conceito do IPv4, utilizando isolamento por aplicação através de chains dedicadas, evitando drops globais e mantendo o controle individual por serviço.
 +
 +
A principal diferença é apenas o uso de <code>/ipv6 firewall filter</code> e endereços IPv6 /128 para hosts, sempre tenha firewall IPv6 para as suas aplicações também.
 +
 +
=== 4.1 Conexões estabelecidas ===
 +
 +
Estas regras devem ficar no início do firewall IPv6, garantindo o funcionamento correto das conexões já existentes.
 +
 +
<pre>
 +
/ipv6 firewall filter
 +
add chain=forward connection-state=established,related action=accept comment="CONEXOES ESTABELECIDAS/RELACIONADAS"
 +
</pre>
 +
 +
'''Objetivo'''
 +
* Manter sessões ativas
 +
* Evitar reprocessamento desnecessário
 +
* Garantir estabilidade dos serviços IPv6
 +
 +
=== 4.2 Redes Confiáveis (IPv6) ===
 +
 +
Assim como no IPv4, a address-list <code>REDES_CONFIAVEIS</code> centraliza origens administrativas também no IPv6.
 +
 +
Todo tráfego originado dessas redes é aceito diretamente no <code>forward</code> e no <code>input</code>.
 +
 +
<pre>
 +
/ipv6 firewall filter
 +
add action=jump chain=forward src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
 +
add action=jump chain=input src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
 +
add action=accept chain=REDES_CONFIAVEIS
 +
</pre>
 +
 +
'''Objetivo'''
 +
* Centralizar acessos administrativos
 +
* Evitar repetição de regras
 +
* Facilitar manutenção do firewall IPv6
 +
 +
⚠️ *Evite adicionar prefixos IPv6 muito amplos (/32, /29). Sempre que possível, utilize o menor tamanho de prefixo possível ou prefixos bem definidos.*
 +
 +
=== 4.3 Regra de INPUT – DMZ IPv6 ===
 +
 +
Estas regras controlam o acesso a endereços IPv6 de gestão publicados no próprio roteador.
 +
 +
Somente origens presentes na <code>REDES_CONFIAVEIS</code> conseguem acessar serviços administrativos.
 +
 +
<pre>
 +
/ipv6 firewall filter
 +
add action=jump chain=input comment=CE-DMZ dst-address=2804:XXXX:1::1/128 jump-target=CE-DMZ
 +
add action=accept chain=CE-DMZ dst-port=22,8291 protocol=tcp src-address-list=REDES_CONFIAVEIS
 +
add action=drop chain=CE-DMZ
 +
</pre>
 +
 +
'''Objetivo'''
 +
* Proteger o acesso administrativo IPv6
 +
* Restringir por origem confiável
 +
* Bloquear tentativas não autorizadas
 +
 +
=== 4.4 Aplicação de exemplo – DNS IPv6 ===
 +
 +
Neste cenário, os servidores DNS IPv6 são protegidos por uma chain dedicada (<code>DNS</code>).
 +
 +
Somente endereços presentes na address-list <code>RESOLVE-DNS</code> podem realizar consultas.
 +
 +
Os IPs utilizados são:
 +
* <code>2804:XXXX:2::4</code> – Primário
 +
* <code>2804:XXXX:4::5</code> – Secundário
 +
 +
<pre>
 +
/ipv6 firewall filter
 +
add action=jump chain=forward comment="DNS PRIMARIO" dst-address=2804:XXXX:2::4/128 jump-target=DNS
 +
add action=jump chain=forward comment="DNS SECUNDARIO" dst-address=2804:XXXX:2::5/128 jump-target=DNS
 +
add action=accept chain=DNS protocol=icmp
 +
add action=accept chain=DNS dst-port=53 protocol=udp src-address-list=RESOLVE-DNS
 +
add action=drop chain=DNS
 +
</pre>
 +
 +
'''Objetivo'''
 +
* Evitar DNS aberto em IPv6
 +
* Controlar resolução por origem
 +
* Prevenir abuso e amplificação
 +
'''📝 Observação Final (IPv6)'''
 +
 +
O firewall IPv6 não deve ser tratado como opcional. Todo serviço publicado em IPv4 caso tenha IPv6 também necessita de firewall, visto que o IPv6 é possível disponibilizar acesso via ssh, amplificações e etc, IPv6 é o protocolo padrão da internet!
 +
 +
== 5. Conclusão ==
 +
 +
Este padrão de firewall por chain permite facilitar a gerencia das regras e garantir uma gerencia facilitada, evitando o problema de desabilitar o DROP geral de firewall que sempre ocorre em momentos de problema e acaba ficando dias sem estar habilitado ou até mesmo nunca mais habilitado novamente. A ideia é realizar um padrão de firewall onde garantimos segurança e gerencia facilitada.
 +
 +
== 6. Sobre mim ==
 +
 +
Este é meu primeiro publicado, em caso de qualquer erro ou sugestão de melhoria aceito com gratidão, caso tenha duvida e queira tirar duvidas sobre o firewall pode entrar em contato comigo:
 +
 +
Telefone (whatsapp): 19 987601686
 +
 +
e-mail: vitor.sandino@version2.com.br

Edição atual tal como às 16h25min de 19 de janeiro de 2026

1. Introdução

O objetivo desse documento é descrever um padrão de firewall para proteção de servidores (aplicações) em roteadores mikrotik, baseado em /ip firewall filter, adotando um modelo mais simples de gerenciar suas regras. O conceito principal é negar por aplicação, ou seja, cada servidor (aplicação) possui sua própria chain e apenas os serviços necessários são abertos, utilizando um drop para cada aplicação individual.

2. Conceito do Firewall por CHAIN

Por padrão do mikrotik o firewall dele é ACCEPT, ou seja, ele não irá negar o trafego por padrão como normalmente os firewalls no mercado realizam, sendo assim precisamos realizar uma regra de DROP, o mais comum é fazer um DROP GERAL no final, com este tipo de configuração o DROP afeta o ambiente completo, sendo muito comum acabar o DROP ser desabilitado em momento de problema e nunca mais ser habilitado novamente (é raro mas acontece sempre kkkk), assim foi pensado em realizar o firewall por CHAIN, ou seja, cada servidor (aplicação) possui seu firewall independente, ou seja, o que é feito na chain de um servidor não impacta no outro, cada servidor possui seu drop, isolando as regras e deixando mais facil a gerencia com ambiente com bastante aplicações, para isto é utilizado JUMP e CHAIN, basicamente é criado uma CHAIN com nome da aplicação onde tudo que for em destino ao IP da aplicação desejada irá redirecionar para aquela CHAIN onde ela irá liberar as portas necessárias e o restante irá bloquear.

O fluxo do trafego é pensado em aplicações que necessitam estar publicadas para internet ou somente para endereços específicos, então o trafego no geral vem da WAN do mikrotik e assim utilizando /ip firewall filter irá realizar filtros individuais para cada servidor sendo FORWARD pois o tráfego passa por ele e de INPUT para endereços públicos no próprio roteador, por exemplo endereço de acesso do equipamento.

3. Regras de Firewall IPv4

3.1 Address list Redes Confiaveis

A address-list REDES_CONFIAVEIS é utilizada para identificar redes e endereços IP que possuem permissão administrativa, como acessos de NOC, VPN, jump server ou redes internas confiáveis.

Todas as regras de gestão e administração do firewall fazem referência a esta lista, evitando a necessidade de repetir IPs diretamente nas regras.


📌 Conceito

A REDES_CONFIAVEIS deve conter apenas origens confiáveis, pois qualquer endereço incluído nela poderá:

  • Acessar serviços administrativos
  • Ignorar regras específicas de servidores
  • Ter prioridade no fluxo do firewall

⚠️ Nunca adicione IPs públicos ou redes desconhecidas a esta lista.


🧩 Tipos de endereços recomendados

Normalmente, a lista pode conter:

  • Redes internas (LAN / DC)
  • Endereços de VPN
  • IPs fixos do NOC
  • Jump servers
  • Hosts de administração

Exemplos comuns:

  • 192.168.0.0/16
  • 10.0.0.0/8
  • 172.16.0.0/12
  • IP público fixo do escritório
  • IP de saída da VPN
  • Evite utilizar redes muito amplas, tente deixar o mais restrito possível, evite usar a RFC1918 inteira.*

🔧 Criação da Address-List

Exemplo básico

/ip firewall address-list
add list=REDES_CONFIAVEIS address=192.168.0.0/16 comment="Rede interna"
add list=REDES_CONFIAVEIS address=10.0.0.0/8 comment="Rede privada"
add list=REDES_CONFIAVEIS address=200.200.200.10 comment="IP fixo NOC"

🔐 Uso com VPN

Caso exista VPN, é recomendado adicionar apenas a rede da VPN, e não endereços individuais:

/ip firewall address-list
add list=REDES_CONFIAVEIS address=10.99.0.0/24 comment="Rede VPN Administrativa"

Isso facilita manutenção e crescimento futuro.


🛡️ Boas práticas

  • Utilize comentários claros em cada entrada
  • Revise periodicamente a lista
  • Remova IPs temporários após uso
  • Evite listas muito amplas sem necessidade

⚠️ Impacto no Firewall

Qualquer tráfego originado de endereços presentes na REDES_CONFIAVEIS:

  • Será aceito diretamente nas regras de forward e no input
  • Terá acesso aos serviços administrativos
  • Não passará pelas regras específicas de servidores

Por isso, esta lista deve ser tratada como zona de alta confiança.


📝 Observação Final

A correta definição da REDES_CONFIAVEIS é fundamental para a segurança do ambiente.

Um erro nesta lista pode resultar em exposição administrativa indevida.

Sempre valide os endereços antes de adicioná-los.

3.2 Conexões estabelecidas

Estas regras devem estar sempre no início do firewall, garantindo o funcionamento correto das sessões já criadas.

/ip firewall filter
add chain=input connection-state=established,related action=accept comment="ACEITA CONEXÕES ESTABELECIDAS"
add chain=forward connection-state=established,related action=accept comment="ACEITA CONEXÕES ESTABELECIDAS"

Objetivo

  • Manter conexões ativas
  • Evitar reprocessamento de pacotes
  • Garantir estabilidade dos serviços

3.3 Conexões de redes confiáveis

Este bloco centraliza o tratamento de redes internas, VPNs ou endereços administrativos.

Todo tráfego originado dessas redes é aceito diretamente no forward e no input, sem passar pelas regras específicas de servidores, somente tenha cuidado com o que libera, evite liberar por exemplo seu prefixo completo de IPv4, libere IPs específicos, como /32, a partir do momento que você libera o seu bloco completo seu usuário final, uma maquina comprometida dentro da infraestrutura pode acessar aquela aplicação que muita das vezes pode não ser o necessário.

/ip firewall filter
add action=jump chain=forward src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
add action=jump chain=input src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
add action=accept chain=REDES_CONFIAVEIS

Objetivo

  • Facilitar administração
  • Evitar repetição de regras
  • Padronizar acessos de gestão

3.4 Regra para INPUT

Estas regras controlam o acesso ao próprio roteador ou a endereços de gestão publicados.

Somente redes previamente autorizadas podem acessar serviços administrativos, como winbox e ssh. Além de você ter o /ip service o bloqueio de ips de acesso ao bloquear no service o mikrotik ainda continua respondendo a porta, ele não bloqueia a porta e sim quem pode acessa-la, diferentemente do firewall que o roteador parará de escutar a porta para IPs fora da range liberada.

As redes liberadas para acesso do seu roteador devem estar na address list REDES_CONFIAVEIS, antes de aplicar valide que esteja a rede na sua address list.

/ip firewall filter
add action=jump chain=input dst-address=X.X.X.X jump-target=CE-DMZ comment="CE-DMZ INPUT"
add action=accept chain=CE-DMZ protocol=tcp dst-port=22,8291 src-address-list=REDES_CONFIAVEIS
add action=accept chain=CE-DMZ protocol=udp dst-port=22,8291 src-address-list=REDES_CONFIAVEIS
add action=accept chain=CE-DMZ protocol=icmp
add action=drop chain=CE-DMZ

Objetivo

  • Proteger serviços administrativos
  • Restringir acesso por origem
  • Impedir tentativas não autorizadas

3.5 Aplicação de exemplo (ZABBIX/GRAFANA)

Regras dedicadas ao servidor Zabbix, permitindo apenas os serviços necessários para acesso e operação.

Qualquer outro tráfego destinado a este servidor é descartado.

/ip firewall filter
add action=jump chain=forward dst-address=X.X.X.X jump-target=Zabbix comment="ZABBIX SERVER"
add action=accept chain=Zabbix protocol=tcp dst-port=80,443,3000
add action=accept chain=Zabbix protocol=icmp
add action=drop chain=Zabbix

Objetivo

  • Limitar exposição do servidor
  • Bloquear portas não utilizadas
  • Manter o controle isolado por aplicação
  • Desta forma somente liberamos a porta 80,443 e 3000 para internet (so libere para internet se realmente precisar acessar externo e não possa acessar via VPN por exemplo), evite o máximo aplicações publicas caso não existe 100% da necessidade, desta forma somente as portas necessárias ficariam abertas, por exemplo o SSH estaria fechado para todos neste caso, exceto para REDES_CONFIAVEIS*

3.6. Aplicação de exemplo (DNS)

Somente endereços presentes na RESOLVE-DNS conseguem consultar o DNS.

Qualquer outra origem é descartada, evitando DNS aberto e abusos.

A lista normalmente contém:

  • Blocos IPv4 públicos dos clientes
  • Rede de CGNAT (100.64.0.0/10) por padrão tente fazer as requisições para seu servidor de DNS não passar por CGNAT, com exemplo com exceção no PBR.

🔧 Address-List RESOLVE-DNS

/ip firewall address-list
add list=RESOLVE-DNS address=100.64.0.0/10 comment="CGNAT clientes"
add list=RESOLVE-DNS address=187.45.120.0/24 comment="Cliente ISP A"
add list=RESOLVE-DNS address=200.200.200.0/22 comment="Meu bloco"

🔐 Regras de Firewall – DNS Anycast

Os IPs Anycast utilizados são:

  • 200.200.200.1 – Primário
  • 200.200.200.2 – Secundário

Todo tráfego destinado a esses IPs é tratado na chain DNS.

/ip firewall filter
add chain=forward dst-address=200.200.200.1 action=jump jump-target=DNS comment="DNS PRIMARIO"
add chain=forward dst-address=200.200.200.2 action=jump jump-target=DNS comment="DNS SECUNDARIO"
add chain=DNS protocol=icmp action=accept comment="ICMP DNS"
add chain=DNS protocol=udp dst-port=53 src-address-list=RESOLVE-DNS action=accept comment="DNS UDP autorizado"
add chain=DNS action=drop comment="DROP DNS NAO AUTORIZADO"

🛡️ Boas práticas

  • Nunca permitir DNS sem address-list
  • Separar lista de DNS de listas administrativas
  • Manter comentários claros por cliente
  • Revisar blocos removidos ou inativos
  • Evitar liberar 0.0.0.0/0

📝 Observação

A RESOLVE-DNS autoriza apenas resolução de nomes, não acesso administrativo.

Este modelo garante:

  • DNS fechado
  • Controle por cliente
  • Segurança contra abuso e amplificação

4. Regras de Firewall IPv6

O firewall IPv6 segue exatamente o mesmo conceito do IPv4, utilizando isolamento por aplicação através de chains dedicadas, evitando drops globais e mantendo o controle individual por serviço.

A principal diferença é apenas o uso de /ipv6 firewall filter e endereços IPv6 /128 para hosts, sempre tenha firewall IPv6 para as suas aplicações também.

4.1 Conexões estabelecidas

Estas regras devem ficar no início do firewall IPv6, garantindo o funcionamento correto das conexões já existentes.

/ipv6 firewall filter
add chain=forward connection-state=established,related action=accept comment="CONEXOES ESTABELECIDAS/RELACIONADAS"

Objetivo

  • Manter sessões ativas
  • Evitar reprocessamento desnecessário
  • Garantir estabilidade dos serviços IPv6

4.2 Redes Confiáveis (IPv6)

Assim como no IPv4, a address-list REDES_CONFIAVEIS centraliza origens administrativas também no IPv6.

Todo tráfego originado dessas redes é aceito diretamente no forward e no input.

/ipv6 firewall filter
add action=jump chain=forward src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
add action=jump chain=input src-address-list=REDES_CONFIAVEIS jump-target=REDES_CONFIAVEIS comment="REDES CONFIAVEIS"
add action=accept chain=REDES_CONFIAVEIS

Objetivo

  • Centralizar acessos administrativos
  • Evitar repetição de regras
  • Facilitar manutenção do firewall IPv6

⚠️ *Evite adicionar prefixos IPv6 muito amplos (/32, /29). Sempre que possível, utilize o menor tamanho de prefixo possível ou prefixos bem definidos.*

4.3 Regra de INPUT – DMZ IPv6

Estas regras controlam o acesso a endereços IPv6 de gestão publicados no próprio roteador.

Somente origens presentes na REDES_CONFIAVEIS conseguem acessar serviços administrativos.

/ipv6 firewall filter
add action=jump chain=input comment=CE-DMZ dst-address=2804:XXXX:1::1/128 jump-target=CE-DMZ
add action=accept chain=CE-DMZ dst-port=22,8291 protocol=tcp src-address-list=REDES_CONFIAVEIS
add action=drop chain=CE-DMZ

Objetivo

  • Proteger o acesso administrativo IPv6
  • Restringir por origem confiável
  • Bloquear tentativas não autorizadas

4.4 Aplicação de exemplo – DNS IPv6

Neste cenário, os servidores DNS IPv6 são protegidos por uma chain dedicada (DNS).

Somente endereços presentes na address-list RESOLVE-DNS podem realizar consultas.

Os IPs utilizados são:

  • 2804:XXXX:2::4 – Primário
  • 2804:XXXX:4::5 – Secundário
/ipv6 firewall filter
add action=jump chain=forward comment="DNS PRIMARIO" dst-address=2804:XXXX:2::4/128 jump-target=DNS
add action=jump chain=forward comment="DNS SECUNDARIO" dst-address=2804:XXXX:2::5/128 jump-target=DNS
add action=accept chain=DNS protocol=icmp
add action=accept chain=DNS dst-port=53 protocol=udp src-address-list=RESOLVE-DNS
add action=drop chain=DNS

Objetivo

  • Evitar DNS aberto em IPv6
  • Controlar resolução por origem
  • Prevenir abuso e amplificação

📝 Observação Final (IPv6)

O firewall IPv6 não deve ser tratado como opcional. Todo serviço publicado em IPv4 caso tenha IPv6 também necessita de firewall, visto que o IPv6 é possível disponibilizar acesso via ssh, amplificações e etc, IPv6 é o protocolo padrão da internet!

5. Conclusão

Este padrão de firewall por chain permite facilitar a gerencia das regras e garantir uma gerencia facilitada, evitando o problema de desabilitar o DROP geral de firewall que sempre ocorre em momentos de problema e acaba ficando dias sem estar habilitado ou até mesmo nunca mais habilitado novamente. A ideia é realizar um padrão de firewall onde garantimos segurança e gerencia facilitada.

6. Sobre mim

Este é meu primeiro publicado, em caso de qualquer erro ou sugestão de melhoria aceito com gratidão, caso tenha duvida e queira tirar duvidas sobre o firewall pode entrar em contato comigo:

Telefone (whatsapp): 19 987601686

e-mail: vitor.sandino@version2.com.br