Como negar todas as comunicações entre nosso servidor e determinado domínio e seus subdomínios?

1

Digamos que não queremos que nosso servidor (qualquer programa em execução) fale com example.com (qualquer endereço IP em que esse nome DNS possa ser resolvido) e qualquer coisa como * .example.com etc. Ambas as solicitações de entrada provenientes desses domínios e solicitações de saída feitas por programas em execução em nosso servidor que tentam acessar os domínios proibidos devem ser bloqueadas. Qual é o caminho certo para configurar isso?

    
por Ivan 08.12.2015 / 17:31

3 respostas

1

Primeiro de tudo - repensar, trará mais problemas para você.

Você não pode usar DNS no firewall, resp. você não pode usar o DNS para verificar "Este IP pertence ao domínio?" por muitos motivos, o maior é o DNS recursivo não consistente. Você pode ter apenas um registro PTR para IP e esses registros são gerenciados com o proprietário do IP. Não são muitos os domínios que realmente são donos de seus IPs - eles apenas usam algum provedor de serviços como hospedagem compartilhada, provedor de nuvem e assim por diante - então se você tentar resolver IP para domínio, você obterá o provedor, não o domínio.

No exemplo, serverfault.com tem o IP 104.16.46.232. Mas quando você tentar detectar se esse IP pertence a serverfault.com, você falhará, porque esse IP pertence a CloudFlare.net e não há conexão entre CloudFlare.net e serverfault.com.

Se o seu domínio "não desejado" tiver sua própria sub-rede IP, você poderá usar a ferramenta whois para detectar a sub-rede atribuída e bloquear essa sub-rede. No caso do upper, você pode bloquear todo o CloudFlare, mas você vai bloquear todos que estiverem usando o CloudFlare, o que não é o que você quer.

A próxima maneira é invadir o DNS e roubar arquivos de zona para esse domínio (use o AXFR e tente inicializar a transferência de zona - veja esta questão no SuperUser ). Alguns servidores DNS enviarão o arquivo de zona inteira para qualquer um que perguntar, mas a maioria deles o enviará apenas para os servidores permitidos. Se você conseguir esse arquivo, poderá analisá-lo e detectar os IPs usados. Mas novamente - se isso é algum CDN ou hospedagem compartilhada, você irá bloquear qualquer coisa nesse servidor.

    
por 08.12.2015 / 17:43
1

Firewall ou DNS ou Proxy.

  • Você pode configurar seu firewall de perímetro e bloquear / bloquear todos os tráfegos de entrada / saída de e para os ips associados ao domínio. E, claro, você também pode fazer isso em cada firewall no nível do servidor. Você não disse que tipo de firewall você tem em sua rede. Algumas distribuições de firewall têm diferentes opções para alcançar algo semelhante. Mas você pode conseguir isso com o iptables em uma caixa linux. Por exemplo, o pfSense oferece a capacidade de criar alias e usá-lo em regras de firewall. Veja aqui: Bloqueio de sites.

  • Outra possibilidade é criar uma lista de ips consultando dns para o domínio, salvá-lo em um arquivo e alimentá-lo para o iptables / firwall a ser bloqueado. Um script personalizado pode ser usado para consultar e gerar a lista de IP e mantê-la atualizada.

  • Servidores DNS locais também podem ser usados para isso. Você pode configurar um encaminhador de dns ou um proxy dns e apontar o domínio para um ip falso ou um firewall ip, (tipo de falsificação de dns). Por exemplo, com software como dnsmasq é muito fácil apontar um domínio para um ip que você deseja. Isso só será efetivo se todas as suas consultas de DNS para sua rede forem encaminhadas para esse servidor de DNS e não tiverem permissão para enviar diretamente para a Internet. Bloqueio de servidores com dnsmasq

  • Outra possibilidade é usar servidor proxy ou filtro de conteúdo para bloquear o acesso a determinado domínio, o que também é fácil. O problema é que isso só funciona para o protocolo http ou https.

por 08.12.2015 / 17:58
0

Lembre-se de que a criação de "subdomínios" que serão resolvidos para todos os endereços IP possíveis (ou seja, 1.0.0.1.exemplo.com, 192.168.1.1.exemplo.com, 254.254.254.254.exemplo.com etc.) é um belo tarefa fácil, por isso é impossível bloquear totalmente as conexões de entrada sem ter algum tipo de lista finita de nomes de host.

Bloqueio de saída, por outro lado, pode ser muito simples - basta adicionar

127.0.0.1 example.com

para o arquivo de hosts (por exemplo, /etc/hosts ) ou um registro DNS curinga ( *.example.com A 127.0.0.1 ) para o servidor DNS local e será suficiente para bloquear as conexões de saída (desde que usem o nome de domínio para se conectar)

P.S. É possível bloquear conexões com determinados servidores físicos , usando algo como um banco de dados GeoIP para bloquear todos os IPs provenientes de determinados AS

    
por 08.12.2015 / 18:27

Tags