Arquivo de zona grande para bind9: bloqueio de anúncios

5

Eu estava usando com sucesso um arquivo de zona pequeno (20.000 entradas) com bind9 servidor, mas hoje meu provedor de dados enviou uma atualização que causou arquivo de zona para se tornar 300.000 entradas maiores (30Mb +).

O problema é que o servidor não inicia com este arquivo de zona. O named-checkconf não relataria erros. Não há mensagens de log disponíveis (ou não consegui registrá-las corretamente).

Gostaria de saber se bind9 é capaz de manipular arquivos de configuração grandes e, se sim, como corrigi-lo. Se não, gostaria de saber se existem soluções alternativas para este problema. Talvez seja possível armazenar entradas em um banco de dados?

O arquivo de zona que estou tentando usar pode ser baixado em aqui .

Atualização:

service bind9 status mostrou algumas informações que podem ser relevantes:

adjusted limit on open files from 4096 to 1048576
found 1 CPU, using 1 worker thread
using 1 UDP listener per interface
using up to 4096 sockets
loading configuration from '/etc/bind/named.conf'

Não sei bem como interpretar ou usar essas informações ... Alguma idéia? Também não consegui encontrar onde bind9 logs estão localizados: /var/log/ não tem bind9 entradas. Alguém pode me dizer onde eles estão localizados no Debian Jessie?

    
por Kolyunya 07.01.2016 / 12:14

1 resposta

7

Eu vi o seu arquivo de zona: parece ser uma lista de mais de 350k domínios, no momento, onde é definido o servidor BIND local como o mestre. Os domínios estão com o seguinte formato:

zone "xxxx.com" { type master; notify no; file "null.zone.file"; };

De acordo com os requisitos de memória, eu diria que você pode precisar de cerca de 40MB-80MB de RAM livre para isso, já que as tabelas de domínio são carregadas na memória. (embora eu me sentiria mais confortável com pelo menos 200MB)

A menos que o servidor esteja severamente restrito na RAM, parece um pouco improvável, mas pode acontecer.

Eu também notei que existem sublinhados ("_") no nome de vários domínios. Ter sublinhados no DNS RR quebra um par de RFCs (RFC 952 e RFC 1123), e você precisa adicionar à seção de opções BIND a diretiva:

check-names master ignore;

Quanto ao formato e método usados para os domínios da lista negra. A partir da versão 9.8, o BIND suporta o que é conhecido como Zonas de Política de Resposta (RPZ), que foram criadas especificamente para domínios de lista negra.

Vários provedores de listas negras (comerciais) seguem hoje esse formato. (Eu mesmo uso o RPZ no trabalho e em casa).

Usar RPZ deve fazer mais sentido e também significa uma carga mais leve e, como tal, se você está pagando o serviço, eu aconselho você a entrar em contato com seu fornecedor para saber como usá-lo. O formato RPZ também suporta, em certa medida, curingas, o que significaria um arquivo de lista negra muito menor.

Uma alternativa é também processar o arquivo com um script para alterá-lo para o formato RPZ.

Vou deixar aqui links relevantes sobre RPZ e provedores oficiais de RPZ:

link

e um tutorial sobre como configurar o RPZ:

link

Como você deve ter notado, com a configuração atual, você também terá muitos arquivos abertos; daí eu recomendo novamente usando RPZ.

Para lidar com mais arquivos abertos, em grandes servidores de e-mail, DNS ou HTTP, os limites costumam ser aumentados.

A situação não é tão ruim quanto costumava ser com kernels mais antigos, mas mesmo assim eu recomendo aumentar os limites.

Edite /etc/sysctl.conf e modifique / adicione a diretiva fs.file-max para o limite global de arquivos abertos:

fs.file-max=500000

Para aplicar o novo limite de arquivo sem reinicializar, você precisa executar:

sudo sysctl -p

E para os limites de arquivos por processo, edite /etc/security/limits.conf :

* - nofile 400000

Para aplicar os limites de arquivo por processo, faça logout e login ou execute:

sudo ulimit -n 400000

Depois de aumentar esses dois limites, você precisa reiniciar o BIND:

sudo service bind9 restart

Para converter seu arquivo para o formato RPZ, você executa:

cat bind | tr -d \"  | awk ' { print $2" CNAME ." } ' > /etc/bind/rpz.db

O script converterá as entradas no seguinte formato:

zeus.developershed.com CNAME .
zeusclicks.com CNAME .
zintext.com CNAME .

Adicione na seção de opções de nome:

response-policy { zone "rpz"; };

Crie a declaração da zona RPZ:

zone "rpz" {
  type master;
  file "/etc/bind/rpz.db";
};

Adicione ao início do arquivo /etc/bind/rpz.db :

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                          2         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL

@       IN      NS      your_dns_fqdn.

Desconfigure o seu arquivo DNS e reinicie seu servidor BIND. Evidentemente, o arquivo RPZ pode ser otimizado com curingas e muito mais curto, mas mesmo sem essa otimização, agora você não precisará de tantos arquivos abertos.

Como para consultar os registros BIND / DNS, eles estão juntos com os logs do sistema em /var/log/syslog com a tag named . Você pode usar o comando:

sudo grep named /var/log/syslog
    
por 07.01.2016 / 15:08