systemd-resolved bloquear um nome de domínio

5

Usando systemd-resolved como bloquear, direcionar ou resolver um nome de domínio para um buraco negro ou um endereço em nenhum lugar. Pontos de bônus para subdomínios também.

Eu tentei um único domínio em /etc/hosts :

127.0.0.1 google.com
::1 google.com

Eu também tentei /etc/systemd/network/100-blocked.network :

[Match]
Name=wlp113s0

[Network]
Description="Just block the domain, and sub domains"
DNS=127.0.0.255
DNS=::1

[Resolve]
Domains=google.com

sudo systemd-resolve --status :

Link 3 (wlp113s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 127.0.0.255
                      ::1
                      2001:4888:3a:ff00:304:d::
                      2001:4888:39:ff00:308:d::

por exemplo, usando dnsmasq i:

server=192.168.43.1
address=/google.com/0.0.0.0
# a very long list of "address=/domain/0"

relacionado:

por jmunsch 03.11.2018 / 16:22

2 respostas

1

A adição de uma entrada para /etc/hosts deve funcionar e, nos meus testes, funcionou como esperado. Meus testes estão no Fedora Rawhide, com a versão systemd-239-9.git9f3aed1.fc30.x86_64, então é um snapshot muito recente do systemd, talvez versões mais antigas não funcionem da mesma forma que o esperado ...

Antes de adicionar a entrada a /etc/hosts :

1) consulta resolvectl:

$ resolvectl query google.com
google.com: 172.217.6.78

-- Information acquired via protocol DNS in 1.4ms.
-- Data is authenticated: no

2) ping:

$ ping -c1 google.com
PING google.com (172.217.6.78) 56(84) bytes of data.
64 bytes from sfo07s17-in-f78.1e100.net (172.217.6.78): icmp_seq=1 ttl=54 time=12.4 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.435/12.435/12.435/0.000 ms

3) curl:

$ curl http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

Depois de adicionar a entrada, nesse caso, /etc/hosts se parece com isto:

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 google.com
::1 google.com

Os testes mostraram que o bloqueio está funcionando:

1) consulta resolvectl:

$ resolvectl query google.com
google.com: 127.0.0.1
            ::1

-- Information acquired via protocol DNS in 1.8ms.
-- Data is authenticated: yes

2) ping:

$ ping -c1 google.com
PING google.com(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.613 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.613/0.613/0.613/0.000 ms

3) curl:

$ curl http://google.com
curl: (7) Failed to connect to google.com port 80: Connection refused

Então o bloco parece estar funcionando.

Eu esperava que isso funcionasse, já que isso foi levantado recentemente em uma edição registrada contra o systemd. O problema # 9718 falava sobre a adição de milhões de entradas a /etc/hosts , que tem um usecase e são domínios da lista negra, como como aqui.

Por favor, note que existem algumas partes móveis aqui, por isso é importante considerá-las durante a solução de problemas.

Meu /etc/systemd/resolved.conf não tem nenhuma configuração substituída, todas as entradas estão comentadas, a configuração de rede está usando systemd-networkd com DHCP e não substitui nenhuma delas.

A saída de resolvectl status inclui:

Global
       LLMNR setting: yes
MulticastDNS setting: yes
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no
Fallback DNS Servers: 8.8.8.8
                      8.8.4.4
                      2001:4860:4860::8888
                      2001:4860:4860::8844

Link 2 (ens33)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no

A configuração de /etc/resolv.conf está usando o resolvedor stub:

$ ls -l /etc/resolv.conf
lrwxrwxrwx. 1 root root 39 Nov  7 22:08 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
$ grep '^[^#]' /etc/resolv.conf
nameserver 127.0.0.53

O nsswitch.conf está configurado para usar nss-resolve (8) de acordo para a recomendação de sua página de manual:

$ grep ^hosts: /etc/nsswitch.conf
hosts:      files resolve [!UNAVAIL=return] dns myhostname

Se você ainda não conseguir fazê-lo funcionar, convém verificar essas configurações no sistema e confirmar se estão todas configuradas corretamente. Ou, pelo menos, poste sua configuração atual aqui (junto com a distribuição Linux e a versão systemd) para ajudar a diagnosticar por que ela pode não estar funcionando para você.

    
por 14.11.2018 / 11:19
0

Eu acho que para este propósito você pode modificar o seu /etc/nsswitch.conf . Param. O host neste arquivo mostra as origens que usa o systemd-resolved para obter o host pelo nome. Então você poderia modificá-lo assim: hosts: files [!NOTFOUND=return] dns .

files - Local files, such as /etc/hosts and /etc/passwd

dns - Internet Domain Name System

Nesse caso, systemd-resolved no início será usar /etc/hosts para obter o host pelo nome. A parte !NOTFOUND=return significa que, se o nome não for encontrado em /etc/hosts systemd-resolved, tentará resolvê-lo com dns .

    
por 10.11.2018 / 01:45