Redistribuir rotas nulas com roteamento dinâmico OSPF
Prezados,
Estou com uma dúvida quanto à (re)distribuição de rotas nulas com roteamento dinâmico OSPF. Para fins elucidativos, apresento o hipotético diagrama abaixo.
Código :
[Operadora]-----[srv-fw]-----[rtr-1]-----[rtr-2]-----[rtr-3]-----[rtr-4]
srv-fw = FreeBSD 8.2-STABLE + OpenOSPFd
rtr-* = RB800/ROS5.11
Meu objetivo é adicionar, em um único roteador ([srv-fw]), uma ou mais rotas nulas, e que estas rotas nulas sejam propagadas para todos os demais roteadores da rede ([rtr-*]). Entretanto, eu não quero criar um único blackhole server, e sim que cada roteador tenham essas rotas nulas (re)distribuídas, para que ataques, provenientes dos usuários da rede interna, sejam neutralizados na origem[1], o que é o mais recomendado.
Um único blackhole server, neste caso, não é apropriado, pois caso um cliente conectado no [rtr-4] disparasse um ataque, eu teria degradação dos enlaces entre [rtr-4] e [srv-fw], até que a rota fosse "diluída cosmicamente" (hehe) no buraco negro.
De certa forma, eu quero é fazer algo como o RTBH (Remotely-Triggered Black Hole) da Cisco. Mas como a rede é híbrida quanto à diversidade de tecnologias, a ideia é fazer a (re)distribuição de rotas nulas usando um protocolo que seja comum a todos os roteadores dessa rede, e de maneira autônoma, usando o OSPF do RouterOS e o OpenOSPFd do FreeBSD.
Tudo bem que eu poderia fazer um script[2] usando Python + Paramiko, entrar em cada roteador via SSH, e adicionar/editar/excluir rotas nulas. Também poderia fazer um script dentros do ROS, para obter via requisição HTTP (fetching) a tabela de rotas nulas, exportas do servidor FreeBSD exportada por um webservice. Mas se existe uma forma menos hercúlia, como a (re)distribuição de rotas nulas com roteamento dinâmico OSPF, ficará bem mais fácil e elegante :)
Resumindo, eu quero é poder criar rotas nulas em [srv-fw], como route add 66.150.14.111/32 127.0.0.1 -reject, e que todos os roteadores que rodam OSPF, também recebam essa rota nula. Isso não acontece, mesmo (re)distribuindo rotas estáticas. Rotas nulas não são propagadas. As demais rotas são perfeitamente propagadas.
Caso isso acontecesse, teriamos então, diversos blackhole servers distribuídos, com diluição de rotas nulas no primeiro salto após a origem. A degradação ficaria em first mile/nexthop, na perspectiva de um ataque com origem em um cliente/estação da rede.
Adiciono abaixo porções de configuração do OpenOSPFd, rodando no FreeBSD e o OSPF do RouterOS.
Código :
srv-fw# grep -i distr /usr/local/etc/ospfd.conf
redistribute default
redistribute static
redistribute connected
Código :
[**********@rtr-4] > /routing ospf instance export
/routing ospf instance
set default disabled=no distribute-default=never in-filter=ospf-in metric-bgp=auto metric-connected=20 metric-default=1 metric-other-ospf=auto metric-rip=20 \
metric-static=20 name=default out-filter=ospf-out redistribute-bgp=no redistribute-connected=as-type-1 redistribute-other-ospf=as-type-1 redistribute-rip=no \
redistribute-static=no router-id=***.***.***.**
Agradeço desde já por qualquer ajuda.
[1] http://eng.registro.br/pipermail/gte...ne/032962.html
[2] https://under-linux.org/f143/registrando-log-149969/
Saudações,
Trober
Re: Redistribuir rotas nulas com roteamento dinâmico OSPF
boa noite amigo, nao sabia deste blackhole server muito interessante esta lendo no wiki, se vc ter material ai para da uma estudada fico agradecido
abraco
Re: Redistribuir rotas nulas com roteamento dinâmico OSPF
Citação:
Postado originalmente por
demattos
...nao sabia deste blackhole server muito interessante esta lendo no wiki, se vc ter material ai para da uma estudada fico agradecido...
Boa noite demattos :)
Não tenho um material pronto aqui, mas não me é problema fazer breve comentários sobre rotas nulas.
Apontar rotas para um lugar nulo é uma forma computacionalmente mais econômica do que filtrar usando firewall. Supondo que você está usando FreeBSD, você pode criar uma rota nula[1] com negação implícita (blackhole) ou explícita (reject), conforme abaixo:
Código :
route add 200.200.200.1/32 127.0.0.1 -blackhole
Código :
route add 200.200.200.1/32 127.0.0.1 -reject
Com blackhole, a negação é silenciosa. Com reject, a negação é explicita, com retorno do código 12 (Destination Host Unreachable), conforme descreve o RFC792[2].
Da mesma forma, pode ser feita com MikroTik RouterOS, conforme um outro tópico[3] e o exemplos abaixo:
Código :
/ip route rule add action=drop disabled=no dst-address=200.200.200.1/32
Código :
/ip route rule add action=unreachable disabled=no dst-address=200.200.200.1/32
Com drop, a negação é silenciosa. Com unreachable, a negação é explicita, com retorno do código 12 (Destination Host Unreachable), conforme descreve o RFC792[2].
Enfim, não fiz o melhor dos materiais, mas espero ter ajudado você :)
[1] https://www.dan.me.uk/blog/2009/05/2...ng-in-freebsd/
[2] http://www.ietf.org/rfc/rfc792.txt
[3] https://under-linux.org/f212/rotas-n...07/#post586176
Saudações,
Trober
Re: Redistribuir rotas nulas com roteamento dinâmico OSPF
Citação:
Postado originalmente por
demattos
...se vc ter material ai para da uma estudada fico agradecido
Boa noite.
Envio um material[1], não muito novo (é de 2005) da Cisco, sobre blackhole.
[1] http://www.cisco.com/web/about/secur.../blackhole.pdf
Saudações,
Trober
Re: Redistribuir rotas nulas com roteamento dinâmico OSPF
Citação:
Postado originalmente por
trober
Resumindo, eu quero é poder criar rotas nulas em [srv-fw], como route add 66.150.14.111/32 127.0.0.1 -reject, e que todos os roteadores que rodam OSPF, também recebam essa rota nula. Isso não acontece, mesmo (re)distribuindo rotas estáticas. Rotas nulas não são propagadas. As demais rotas são perfeitamente propagadas.
Boa noite a todos.
De forma não muito elegante, consegui implementar um "servidor distribuidor de buraco negro", para rotas indesejadas, com propagação para todos os roteadores de uma rede com roteamento dinâmico OSPF.
O código que segue usa como exemplo dois destinos que estão sob ataque, sendo a rede 6.6.6.0/30 e 7.7.7.0/24. Os atacantes são usuários da sua própria rede.
A primeira porção de código refere-se ao servidor "mestre", que distribuirá as rotas que serão neutralizadas. A estratégia consiste em distribuir rotas estáticas, somente na RB "mestre" ([rtr-blackhole-master]), como "type 2".
Em todas as demais RBs, marcar como blackhole qualquer rota OSPF do tipo "external type 2". O cara que implementar isso, precisa ter a mais monstruosa certeza, maior que o Cosmos inteiro, que não fará uso de qualquer rota produtiva com "type 2".
Código :
########## [rtr-blackhole-master]
### Bridge que recebe apontamento de rotas mortas.
/interface bridge add disabled=no name=blackhole
### Definir que rotas estaticas serao redistribuidas como tipo 2.
/routing ospf instance set default redistribute-static=as-type-2
### Repita quantas vezes for, para cada rota que deseja declarar como morta.
/ip route add disabled=no dst-address=6.6.6.0/30 gateway=blackhole
/ip route add disabled=no dst-address=7.7.7.0/24 gateway=blackhole
Agora o código que deve ser executado em todas as RBs da rede, exceto rtr-blackhole-server.
Código :
########## [rtr-N]
### Sendo para 'N', toda e qualquer RB da rede, com OSPF, exceto [rtr-blackhole-server].
/routing filter add action=accept chain=ospf-in disabled=no ospf-type=external-type-2 set-type=blackhole
Funciona, isso é fato. Entretanto, é muito mais elegante trabalhar com Communities[1] em BGP. Essa "adaptação técnica", de contar que só terá anúncios "type 1" na rede, é arriscado, por mais bem descrita tal "feature braçal", na documentação da rede.
[1] http://wiki.mikrotik.com/wiki/Manual...Filter_Example
Saudações,
Trober