Po co to?
Pi-Hole, jego zapytania, są standardowo jak i w innych systemach przesyłane w postaci zwykłego tekstu. To umożliwia nie tylko podsłuchanie tego jaką komunikację prowadzimy z Internecie czy jakie strony odwiedzamy, ale także pozwala na manipulację naszymi zapytaniami. Mogą być nam po prostu podsuwane fałszywe strony, wyglądające jak oryginalne lecz służące do wykradania danych, także naszych danych osobowych czy naszych pieniędzy. Aby temu zapobiec można skorzystać z szyfrowania zapytań DNS za pomocą protokołu HTTPS.
W tym opisie opierałem się na sprawdzonej przez siebie osobiście instalacji i uruchomieniu protokołu HTTPS do serwerów DNS firmy Cloudflare. Wybór tego dostawcy jest podyktowany jego polityką obsługi wyszukiwań DNS. Cloudflare przechowuje nasze wyszukiwania tylko 24 h, nigdy ich nie odsprzedaje i nie umożliwia ani sam nie targetuje reklam pod nasze wyszukiwania. Jest to pewne minimum prywatności w wirtualnym świecie.
Konfiguracja DNS-over-HTTPS
Ponieważ wcześniej opisywałem i u siebie także wdrożyłem instalację Pi-Hole na Ubuntu Server LTS, teraz też w tym opisie będę się odwoływał do tego rozwiązania.
Instalacja cloudflared
Dla 64-bitowego Ubuntu Server instalacja tego demona polega na uruchomienia z terminala kilku poleceń:
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64
następnie po pobraniu tego pakietu z GitHuba:
sudo cp ./cloudflared-linux-arm64 /usr/local/bin/cloudflared
kopiujemy całość wskazaną ścieżką i w następnym poleceniu zmieniamy jego atrybut na wykonywalny:
sudo chmod +x /usr/local/bin/cloudflared
Konfigurowanie i uruchomienie demona cloudflared
Przede wszystkim musimy stworzyć nowego użytkownika, to on będzie on uruchamiał clouflared, a nie root – dla bezpieczeństwa.
sudo useradd -s /usr/sbin/nologin -r -M cloudflared
Kolejno tworzymy plik konfiguracyjny dla uruchomienia cloudflared:
sudo nano /etc/default/cloudflared
W treści pliku musi się znaleźć:
# Args for cloudflared, using Cloudflare DNS CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Proszę zwrócić uwagę na wybrany port dla demona. Nie może ów port podlegać w naszej sieci jak i routerze jakimś restrykcjom.
Po utworzeniu pliku konfiguracyjnego i binarnego należy zmienić uprawnienie do tych plików, aby użytkownik cloudflared miał do nich dostęp.
sudo chown cloudflared:cloudflared /etc/default/cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared
Jeszcze utworzymy odpowiedni skrypt kontrolujący demona i umożliwiający jego start w trakcie uruchamiania systemu.
sudo nano /etc/systemd/system/cloudflared.service
Skrypt powinien wyglądać jak poniżej:
[Unit] Description=cloudflared DNS over HTTPS proxy After=syslog.target network-online.target [Service] Type=simple User=cloudflared EnvironmentFile=/etc/default/cloudflared ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
Teraz włączamy systemd demona i jego uruchamianie podczas startu:
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared
Sprawdzenie działania
Za pomocą polecenia dig możemy sprawdzić działanie:
pi@raspberrypi:~ $ dig @127.0.0.1 -p 5053 main.tk
Wynik powinien wyglądać jak ten poniżej:
; <<>> DiG 9.16.1-Ubuntu <<>> @127.0.0.1 -p 5053 main.tk ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15217 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;main.tk. IN A ;; ANSWER SECTION: main.tk. 300 IN A 104.21.42.177 main.tk. 300 IN A 172.67.207.14 ;; Query time: 39 msec ;; SERVER: 127.0.0.1#5053(127.0.0.1) ;; WHEN: nie sty 16 18:07:27 UTC 2022 ;; MSG SIZE rcvd: 82
Ustawienia w interfejsie Pi-Hole
Musimy jeszcze zmienić odpytywanie zewnętrznego serwera DNS na Cloudflare po porcie 5053.

To już wszystko, zapraszam do sprawdzenia innych wpisów poradnika.