Por que firewall no CCR e obrigatorio

Muito ISP brasileiro ainda opera CCR de borda com firewall padrao de fabrica — porque acha que BGP full-table ja “se protege”. Isso e um erro caro:

As 10 regras abaixo sao um minimo defensavel, testado em dezenas de ISPs. Copie, adapte para o seu range, teste em lab e aplique.

Chain input: acesso e anti-brute-force

Regra 1
Aceitar conexoes estabelecidas / relacionadas

Deixe o conntrack fazer o trabalho pesado. Pacotes de sessoes ja aceitas entram direto, sem reavaliar.

Regra 2
Dropar invalid imediatamente

Pacotes com estado invalid (fora de sequencia, SYN para conn fechada) nunca tem caso de uso legitimo. Dropar cedo.

Regra 3
Aceitar ICMP com rate-limit

Ping e util para voce, mas flood ICMP e abuso. Aceite ICMP com limit de 10 pps.

Regra 4
Acesso administrativo so de management VLAN + anti-brute-force

Winbox, SSH e API aceitos apenas de uma address-list chamada mgmt. Tentativas de fora caem em address-list progressivo ssh-bruteforce-stage1 -> stage2 -> stage3 -> blacklist.

Chain forward: fasttrack, conntrack, anti-bogons

Regra 5
FastTrack para conexoes estabelecidas

A regra mais importante para performance. Marcar conexoes estabelecidas com action=fasttrack-connection pula conntrack nos pacotes seguintes — ganho de 2-3x em throughput no mesmo hardware.

Regra 6
Dropar invalid e bogons

Pacotes com IPs privados chegando da WAN (bogons) sao sempre ataques ou erros de configuracao. Address-list estatica com as RFC1918 + TEST-NET + multicast + carrier-grade NAT, dropada em forward.

Regra 7
Liberar trafego do seu range para qualquer destino

Se voce opera um range publico proprio (ex: 203.0.113.0/24), libere esse range saindo e dropando todo o resto. Simples e efetivo para evitar IP spoofing.

Chain NAT: masquerade e port-forward seguro

Regra 8
Masquerade so para faixas privadas saindo pela WAN

Evite o classico out-interface=ether1 action=masquerade generico. Filtre por source para nao mascarar trafego publico de clientes ja com IP valido.

Regra 9
Port-forward seguro com address-list

Se expuser um servico (ex: servidor radius), restrinja src-address-list ao publico autorizado. DST-NAT sem filtro de origem e um conviteara scan massivo.

Raw table: protecao contra DDoS

Regra 10
Raw prerouting dropando lixo antes do conntrack

A joia da coroa. Em /ip firewall raw, drope bogons, SYN-flood detectado, fragments e pacotes de UDP amplification (DNS, NTP, memcached) vindo de fora para destinos nao-autorizados. Isso nao passa por conntrack, protegendo o CCR em DDoS volumetrico.

Exemplos praticos de regras raw:

Address-list: geo-blocking simples

Se o seu ISP so atende cliente brasileiro, nao faz sentido aceitar trafego de entrada de paises que sao origem recorrente de ataques. Mantenha uma address-list atualizada via script /tool fetch que baixa um feed publico de paises bloqueados e aplica em raw:

atualizar-geoblock.rsc
# Atualiza address-list "geoblock-cn" com prefixos da CN
# Use um feed confiavel do seu IX ou do proprio RIPE
:local feed "https://www.ipdeny.com/ipblocks/data/countries/cn.zone"

/ip firewall address-list remove [find where list="geoblock-cn"]

/tool fetch url=$feed dst-path=cn.zone

:local content [/file get cn.zone contents]
# (implementacao simplificada; para producao use /import em loop)

:foreach cidr in=[:toarray $content] do={
  :if ([:len $cidr] > 0) do={
    /ip firewall address-list add list="geoblock-cn" address=$cidr comment="CN auto-update"
  }
}

:log info "[GEO] Address-list geoblock-cn atualizada"

Script .rsc completo

O script abaixo monta as 10 regras descritas + bogon list + address-list de management. Edite as duas variaveis no topo antes de importar:

firewall-isp-padrao.rsc
# ====================================================================
# firewall-isp-padrao.rsc - 10 regras essenciais para CCR de ISP
# Mevlox Distribuidora - distribuidora.mevlox.com.br
# ====================================================================

# === EDITE AQUI antes de importar ===
:local mgmtNet "10.100.0.0/24"        # Rede de management (Winbox/SSH/API)
:local meuRange "203.0.113.0/24"      # Seu bloco publico (anti-spoof)

# === Interface lists ===
/interface list add name=WAN
/interface list add name=LAN
/interface list add name=MGMT
# (Adicione membros com /interface list member add ...)

# === Address-lists estaticas ===
/ip firewall address-list
add list=mgmt address=$mgmtNet comment="Management authorized"
add list=bogons address=0.0.0.0/8 comment="Current network"
add list=bogons address=10.0.0.0/8 comment="RFC1918"
add list=bogons address=100.64.0.0/10 comment="CGN RFC6598"
add list=bogons address=127.0.0.0/8 comment="Loopback"
add list=bogons address=169.254.0.0/16 comment="Link-local"
add list=bogons address=172.16.0.0/12 comment="RFC1918"
add list=bogons address=192.0.0.0/24 comment="IETF"
add list=bogons address=192.0.2.0/24 comment="TEST-NET-1"
add list=bogons address=192.168.0.0/16 comment="RFC1918"
add list=bogons address=198.18.0.0/15 comment="Benchmark"
add list=bogons address=198.51.100.0/24 comment="TEST-NET-2"
add list=bogons address=203.0.113.0/24 comment="TEST-NET-3"
add list=bogons address=224.0.0.0/4 comment="Multicast"
add list=bogons address=240.0.0.0/4 comment="Reserved"

# ====================================================================
# CHAIN INPUT (trafego destinado ao proprio router)
# ====================================================================

/ip firewall filter

# REGRA 1: accept established/related
add chain=input action=accept connection-state=established,related \
  comment="[01] Established/Related"

# REGRA 2: drop invalid
add chain=input action=drop connection-state=invalid \
  comment="[02] Drop invalid"

# REGRA 3: accept ICMP com rate-limit
add chain=input action=accept protocol=icmp limit=10,5:packet \
  comment="[03] ICMP rate-limited"

# REGRA 4a: Anti-brute-force (escalonamento progressivo em address-list)
add chain=input action=drop src-address-list=ssh-blacklist protocol=tcp \
  dst-port=22,8291,8728 comment="[04a] Drop blacklisted"

add chain=input action=add-src-to-address-list address-list=ssh-blacklist \
  address-list-timeout=1w src-address-list=ssh-stage3 \
  protocol=tcp dst-port=22,8291,8728 connection-state=new \
  comment="[04b] Stage3 -> blacklist"

add chain=input action=add-src-to-address-list address-list=ssh-stage3 \
  address-list-timeout=1m src-address-list=ssh-stage2 \
  protocol=tcp dst-port=22,8291,8728 connection-state=new \
  comment="[04c] Stage2 -> stage3"

add chain=input action=add-src-to-address-list address-list=ssh-stage2 \
  address-list-timeout=1m src-address-list=ssh-stage1 \
  protocol=tcp dst-port=22,8291,8728 connection-state=new \
  comment="[04d] Stage1 -> stage2"

add chain=input action=add-src-to-address-list address-list=ssh-stage1 \
  address-list-timeout=1m protocol=tcp dst-port=22,8291,8728 \
  connection-state=new comment="[04e] Novo -> stage1"

# REGRA 4: accept management de mgmt list
add chain=input action=accept src-address-list=mgmt \
  comment="[04] Accept management"

# Drop tudo restante da WAN
add chain=input action=drop in-interface-list=WAN \
  comment="[INPUT] Drop others from WAN"

# ====================================================================
# CHAIN FORWARD (trafego passando pelo router)
# ====================================================================

# REGRA 5: fasttrack para conexoes established
add chain=forward action=fasttrack-connection connection-state=established,related \
  comment="[05] FastTrack"

# accept established,related (mesmo com fasttrack)
add chain=forward action=accept connection-state=established,related \
  comment="[FWD] Established/Related"

# REGRA 6: drop invalid e bogons
add chain=forward action=drop connection-state=invalid \
  comment="[06a] Drop invalid"

add chain=forward action=drop src-address-list=bogons in-interface-list=WAN \
  comment="[06b] Drop bogons from WAN"

# REGRA 7: anti-spoof (so meu range pode sair)
add chain=forward action=drop src-address=$meuRange in-interface-list=WAN \
  comment="[07a] Anti-spoof meu range na WAN"

# ====================================================================
# CHAIN NAT
# ====================================================================

/ip firewall nat

# REGRA 8: masquerade so para faixas privadas
add chain=srcnat action=masquerade out-interface-list=WAN \
  src-address-list=bogons comment="[08] Masquerade only private"

# REGRA 9: port-forward com address-list restritiva (exemplo RADIUS)
# add chain=dstnat action=dst-nat to-addresses=10.0.0.10 to-ports=1812 \
#   protocol=udp dst-port=1812 src-address-list=radius-authorized \
#   comment="[09] RADIUS port-forward"

# ====================================================================
# RAW TABLE (antes do conntrack - antiDDoS pesado)
# ====================================================================

/ip firewall raw

# REGRA 10: drop bogons no prerouting (antes do conntrack)
add chain=prerouting action=drop src-address-list=bogons in-interface-list=WAN \
  comment="[10a] Raw drop bogons from WAN"

# Rate-limit ICMP externo
add chain=prerouting action=drop protocol=icmp in-interface-list=WAN \
  limit=10000,5000:packet comment="[10b] Raw limit ICMP"

# Drop refletores UDP conhecidos (DNS, NTP, memcached, chargen)
add chain=prerouting action=drop protocol=udp in-interface-list=WAN \
  dst-port=19,53,123,161,389,1900,11211 \
  comment="[10c] Raw drop UDP amplifiers"

# Drop fragmented packets pequenos (TCP ataque classico)
add chain=prerouting action=drop protocol=tcp tcp-flags=fin,syn \
  comment="[10d] Raw drop invalid TCP flags"

add chain=prerouting action=drop protocol=tcp tcp-flags=syn,rst \
  comment="[10e] Raw drop invalid TCP flags"

:log info "[FIREWALL] Regras padrao ISP aplicadas com sucesso"
# === FIM ===

Para baixar esse script pronto e outros para PPPoE, WireGuard, IPsec e mais, visite nossa biblioteca de scripts.

Mevlox Distribuidora

Mais scripts RouterOS prontos

Biblioteca com 15+ scripts .rsc testados em producao: PPPoE, WireGuard, IPsec, VLAN, QoS, hardening e muito mais.

Ver biblioteca de scripts Voltar ao Blog