Pihole ως DNSSEC - Βελτιωμένη Ασφάλεια χωρίς Trackers σε Container


Το άρθρο αυτό αποτελεί μέρος της σειράς Raspberry Pi Server, υποστηριζόμενο από την επίσημη αντιπροσωπία του Raspberry Pi στην Ελλάδα, το nettop.gr το οποίο με προμήθευσε με το Raspberry Pi 5 ώστε να δημιουργήσω περισσότερο περιεχόμενο για τις δυνατότητες και τα Project που μπορούν να τρέξουν self-hosted πάνω στο Raspberry Pi στα Ελληνικά. Ευχαριστώ πάρα πολύ το nettop.gr για την υποστήριξη!!!


Ενισχύστε την Ασφάλεια σας με χρήση του Pihole ως DNSSEC χωρίς Trackers σε Container

Στην ψηφιακή εποχή όπου ζούμε, οι επιθέσεις και η συλλογή δεδομένων βρίσκονται παντού. Σε όσα περισσότερα “layers” ασφαλιζόμαστε, τόσο περισσότερο ασφαλείς είμαστε κι εμείς οι ίδιοι αλλά και τα δεδομένα μας. Ιδιαίτερα στον business κόσμο όπου τόσο οι διεθνείς κανονισμοί αλλά και οι πιστοποιήσεις όπως ISO27001 απαιτούν όλο και πιο αυστηρά μέτρα, η προσθήκη ενός φίλτρου σε επίπεδο DNS θα μπορούσε να θωρακίσει επιπλέον τις ψηφιακές υποδομές ενός Οργανισμού, φιλτράροντας περιεχόμενο που ενδεχομένως να προέρχεται από κακόβουλες ιστοσελίδες, διαφημίσεις και trackers. Με αυτό τον τρόπο, βελτιώνουμε την ασφάλεια και την ιδιωτικότητά μας.

Σε αυτό τον οδηγό, θα στήσουμε τον δικό μας “διαμεσολαβητή” ως DNS, με υποστήριξη μάλιστα DNSSEC, με στόχο:

  • Να φιλτράρεται πιθανό κακόβουλο περιεχόμενο του διαδικτύου,
  • Να αποκλείονται επικίνδυνες ιστοσελίδες,
  • Να αποκλείεται ενδεχομένως βλαβερό περιεχόμενο οπού βρίσκεται μέσα σε ιστοσελίδες, με την μορφή διαφημίσεων ή trackers,
  • Να αποκλείονται κακόβουλες διαφημίσεις αλλά και πιθανοί trackers που έχουν ως στόχο να συλλέξουν ψηφιακά αποτυπώματα.

Για να επιτευχθούν οι παραπάνω στόχοι, θα χρησιμοποιήσουμε το Pihole ως ένα container για ευκολότερη υιοθέτηση στο δίκτυό μας. Από την στιγμή που εγκαταστήσουμε σε κάποια συσκευή του δικτύου μας (ή μέσω του VPN μας) το Pihole, τότε θα μπορούμε πολύ εύκολα απλά καλώντας την IP του συστήματος αυτού ως DNS είτε από τον router είτε από κάθε συσκευή, να αποκλείουμε επικίνδυνες διαφημίσεις και trackers.


Σε αυτό το σημείο, θα πρέπει να ευχαριστήσω ιδιαιτέρως την Ελισάβετ Κωνσταντοπούλου όπου μου δάνεισε το iPhone της για τα πειράματα οπού απαιτούνταν για τις ανάγκες αυτού του οδηγού.


Ο οδηγός αυτός λειτουργεί σε όλα τα συστήματα όπου υποστηρίζονται Containers, εκτός των Raspberry Pi;

Φυσικά, μιας και είναι σε μορφή Container, ο οδηγός αυτός μπορεί να εφαρμοστεί σε κάθε υπολογιστή οπού μπορεί να διαχειριστεί containers.

Σε ποια Container Engines ο οδηγός έχει δοκιμαστεί ως προς την συμβατότητά του;

Για όποιον θέλει να μάθει τι είναι το Docker, οπού αποτελεί την μεγάλη “ναυαρχίδα” των Containers, υπάρχει ήδη στο Linux-User.gr ένας πολύ αναλυτικός οδηγός: , οπού εμπεριέχει αναλυτικότερες πληροφορίες σχετικά με τις τεχνολογίες αυτές.

Ας ξεκινήσουμε:

Η διαδικασία είναι εξαιρετικά πολύ απλή μιας και έχω ετοιμάσει docker-compose.yml αρχείο, όπως είχαμε δει και στο Access Point Docker Container ή στο Jellyfin αλλά και στο Wireguard.

Αυτό που έχουμε να κάνουμε είναι να δημιουργούμε έναν φάκελο, όπου μέσα σε αυτόν, δημιουργούμε ένα αρχείο με όνομα docker-compose.yml:

nano docker-compose.yml

Και κάνουμε copy-paste το παρακάτω:

version: "3"

# Περισσότερες Πληροφορίες θα βρείτε στο https://github.com/pi-hole/docker-pi-hole/ και https://docs.pi-hole.net/

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      #- "67:67/udp" # Χρήσιμη μόνο αν σκοπεύουμε να χρησιμοποιήσουμε το Pihole ως DHCP , εκτός πεδίου ορισμού του συγκεκριμένου οδηγού
      - "5353:80/tcp" # Το pihole θα δουλεύει ως http στην πόρτα 5353 και θα είναι διαθέσιμο - μπορούμε να βάλουμε reverse proxy για χρήση tls σε https
    environment:
      TZ: 'Europe/Athens'
      WEBPASSWORD: 'ΕΝΑΣ_ΔΥΝΑΤΟΣ_ΚΩΔΙΚΟΣ'
    # Τα volumes όπου θα αποθηκεύονται τα δεδομένα ώστε να μένουν σταθερά στις μελλοντικές ενημερώσεις του pihole
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    #https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    #cap_add:
     #- NET_ADMIN # Και αυτά για χρήση ως DHCP αν επιθυμείτε
    restart: unless-stopped

Kαι δημιουργούμε το container δίνοντας από τερματικό: (ενώ βρισκόμαστε στον φάκελο όπου βρίσκεται το docker-compose.yml):

docker-compose up 

Όλες οι διαχειρίσεις πραγματοποιείται χρησιμοποιώντας το τερματικό ή αλλαγές στο docker-compose.yml και έπειτα παραδοσιακά τρέχοντας:

docker-compose down
docker-compose up 

Αφού φτιάξουμε το Container

Το pihole θα ξεκινήσει να λειτουργεί κανονικά και είναι προσβάσιμο από οποιαδήποτε συσκευή διαθέτει έναν browser, μέσω της θύρας 5353.

Στην περίπτωσή μου, η IP του server μου είναι η 192.168.1.210.

Συνεπώς, από browser δίνω:

http://Η_ΙΡ_ΣΟΥ:5353/admin

http://192.168.1.210:5353/admin

Αν έχετε ορίσει reverse proxy έτσι ώστε να έχετε TLS και https, δίνουμε το αντίστοιχο link όπου έχει οριστεί (θα δείξουμε παρακάτω πώς μπορεί να γίνει αυτό).

Στην περίπτωση μου, έδωσα https://pihole.v.flix/

Έπειτα, πληκτρολογούμε τον κωδικό πρόσβασης όπου ορίσαμε στο docker-compose.yml έτσι ώστε να κάνουμε login στην υπηρεσία.
Αφού κάνουμε login, η αρχική οθόνη του Pihole θα μοιάζει κάπως έτσι:

Τα δεδομένα των γραφικών παραστάσεων ενδεχομένως να μην δείχνουν κάποια κίνηση, αν στο privacy έχει απενεργοποιηθεί η καταγραφή ( θα δούμε παρακάτω πώς να το ενεργοποιήσουμε).

Η αρχική οθόνη του Pihole είναι αρκετά κατατοπιστική και μας δίνει τις παρακάτω πληροφορίες:

  • Τον αριθμό των αιτημάτων όπου πραγματοποιήθηκαν προς το pihole καθώς και τον αριθμό των συνδεδεμένων συσκευών,
  • Τον αριθμό των αιτημάτων όπου αποκλείστηκαν από το Pihole,
  • Το ποσοστό αιτημάτων όπου αποκλείστηκε,
  • Τις λίστες με τα domain όπου χρησιμοποιούνται για αποκλεισμούς.

Όπως ενδεχομένως παρατηρείτε, ορισμένες φορές τα στατιστικά αυτά buggάρουν και εμφανίζουν λανθασμένες τιμές. Σε κάθε περίπτωση, δεν επηρεάζουν την ομαλή λειτουργία του Pihole στο να φιλτράρει περιεχόμενο.

Το Pihole μας σε αυτό το σημείο είναι έτοιμο να αποκλείσει κακόβουλες διαφημίσεις και trackers.

Το μόνο που έχετε να κάνετε είναι να δηλώσετε ως DNS το Pihole στις συσκευές σας, έτσι ώστε να χρησιμοποιούν το Pihole ως DNS.

Αλλαγή DNS στον Router:

Ο ορισμός του Pihole ως DNS σε επίπεδο Router αποτελεί συνήθως την βέλτιστη λύση, διότι όλες οι συσκευές που θα συνδέονται σε αυτόν, τυπικά θα παίρνουν αυτόματα ως DNS το Pihole. Η διαδικασία αλλάζει από Router σε Router, ωστόσο ενδεικτικά θα αφήσω ένα screenshot από τον δικό μου Router (ΗΑ35) οπού η ρύθμιση αυτή βρίσκεται εντός των ρυθμίσεων του DHCP:

Αλλαγή DNS σε GNU/Linux:

Από τον network manager, ορίζουμε τον custom DNS στο πεδίο DNS:

Aξίζει να επισημανθεί πως καλό θα ήταν να θέσουμε και εναλλακτικό κάποιον άλλον DNS σε περίπτωση όπου το pihole μας δεν είναι διαθέσιμο, π.χ., με κόμμα μπορούμε να δηλώσουμε επιπλέον και το DNS της Cloudflare ως 1.1.1.1 .

Αλλαγή DNS σε Android:

Στις Ρυθμίσεις/Δίκτυα & Διαδίκτυo/Διαδίκτυο, επιλέγουμε το Access Point όπου θέλουμε και επιλέγουμε Τροποποίηση.

Και ορίζουμε ως DNS 1 τον DNS όπου θέλουμε!

Αλλαγή DNS σε iOS:

Σε αυτό το σημείο πρέπει να επισημανθεί πώς από iOS 16 και άνω, για να λειτουργήσει το Pihole, θα πρέπει να έχουμε ενεργοποιήσει το DNSSEC στο Pihole μας.
Σε iOS μέχρι έκδοση 15 (δοκιμασμένο με iPhone SE πρώτης γενιάς), το Pihole λειτουργεί κανονικά και σε σκέτο DNS.

Έπειτα, στις ρυθμίσεις του iOS για Wifi, επιλέγουμε Configure DNS από Automatic σε Manual και προσθαφαιρούμε τους DNS servers όπου επιθυμούμε.

Αλλαγή DNS σε Windows:

Στις Ρυθμίσεις του δικτύου όπου είμαστε συνδεδεμένοι, επιλέγουμε στο Εκχώρηση διακομιστή DNS και το ορίζουμε από Αυτόματα (DHCP) σε Μη αυτόματα. Έπειτα, προσθέτουμε τον DNS όπου επιθυμούμε.

Περαιτέρω Ρυθμίσεις στο Pihole

Το Pihole προσφέρει μία πληθώρα δυνατοτήτων όπου μπορούν να κλιμακώσουν ακόμη περισσότερο τις λειτουργίες του. Θα δείξουμε παρακάτω ενδεικτικά τις σημαντικότερες όσο αφορά σε επίπεδο DNS. Ρυθμίσεις που αφορούν την χρήση του Pihole ως DHCP, βρίσκονται εκτός πεδίου έρευνας του συγκεκριμένου οδηγού.

Παραμετροποίηση των logs όπου θα διατηρεί το Pihole:

To Pihole by-default καταγράφει τα πάντα.
Αυτό το χαρακτηριστικό μπορεί να είναι αρκετά χρήσιμο στις Εταιρείες όπου θέλουν να έχουν εικόνα σχετικά με ποιες πιθανώς κακόβουλες ιστοσελίδες ενδέχεται να έρχονται σε επαφή οι υποδομές τους έτσι ώστε να προσθέτουν περαιτέρω αποκλεισμούς.

Ωστόσο, για προσωπική χρήση, είτε για χρήση σε ένα ξενοδοχείο/καφετέριες, όπου η ιδιωτικότητα κρίνεται σημαντική, μπορούμε πολύ εύκολα από τα Settings στην καρτέλα Privacy να απενεργοποιήσουμε ή να ορίσουμε σε τι βαθμό θα καταγράφονται οι κινήσεις και οι αποκλεισμοί των ιστοσελίδων όπου επισκέπτονται οι χρήστες.

Παραμετροποίηση του Pihole ώστε να χρησιμοποιεί προκαθορισμένους DNS servers.

To Pihole μπορεί να λειτουργεί σαν DNS, ωστόσο στην πραγματικότητα προωθεί τα αιτήματα σε άλλους DNS και έπειτα “φιλτράρει” από διαφημίσεις και trackers αποκλείοντας βάση των λιστών όπου του έχουν οριστεί, τα κακόβουλα/ανεπιθύμητα περιεχόμενα.
Στην καρτέλα DNS των Settings, μπορούμε να ορίσουμε τους DNS όπου επιθυμούμε να χρησιμοποιεί το Pihole. Στην περίπτωση μου έχω ορίσει της Cloudflare, ωστόσο όπως διακρίνουμε, στις επιλογές Custom 1,2,3 κλπ., μπορούμε να ορίσουμε κάποιον δικό μας DNS όπου μπορεί να λειτουργεί στην εταιρεία, σπίτι ή κάποιον άλλο provider όπου δεν έρχεται ενσωματωμένος στο Pihole.

Ενεργοποίηση DNSSEC

To DNSSEC (Domain Name System Security Extensions) αποτελεί ένα σύνολο πρωτοκόλλων ασφαλείας που έχουν ως στόχο να ασφαλίσουν το DNS. Στο DNSSEC, αντί να δίνονται απαντήσεις απλώς σε ερωτήματα DNS, το DNSSEC διασφαλίζει ότι οι πληροφορίες που παρέχονται είναι αξιόπιστες και δεν έχουν τροποποιηθεί. Έτσι, αυτό προστατεύει τους χρήστες από επιθέσεις που στοχεύουν στην παραπλάνηση μέσω ψευδών ή αλλοιωμένων απαντήσεων DNS, όπως το DNS cache poisoning και το spoofing.

Η ενεργοποίησή του στο Pihole μπορεί να γίνει εξαιρετικά εύκολα μέσα από την καρτέλα DNS των Settings, βάζοντας απλά ένα τικ στο Use DNSSEC.
Όπως αναφέρθηκε και από πάνω, το DNSSEC κρίνεται απαραίτητο ιδιαίτερα για τις iOS Based συσκευές, ωστόσο είναι ωφέλιμο να υιοθετηθεί σε όλες τις περιπτώσεις για μεγαλύτερη ασφάλεια, ιδιαίτερα σε business χώρους.

Android και DNSSEC

Επιπλέον, στο Android σε ορισμένες εκδόσεις εταιρειών, υπάρχει μία τροποποίηση όπου το ορίζει ως Private DNS και χρησιμοποιεί DNSSEC από την Google, σε περίπτωση όπου διαπιστώσετε ότι το Pihole δεν λειτουργεί, ενδεχομένως να πρέπει να το εντοπίσετε και να το ορίσετε ως Off.

Αλλαγή θέματος / χρώματος στο Pihole

Στην καρτέλα Web Interface των Settings του Pihole, μπορείτε να βρείτε μία πληθώρα από θέματα όπου μπορείτε να επιλέξετε για το Pihole σας ώστε να είναι πιο όμορφο ή λιγότερο φωτεινό στα μάτια σας. Ενδεικτικά, θα ορίσω ένα dark theme.

Αντίγραφα Ασφαλείας και Επαναφορά

Όπως έχω αναφέρει σε σχεδόν όλους τους οδηγούς μου ως Υπεύθυνος Κυβερνοασφάλειας, τα αντίγραφα ασφαλείας κρίνονται απαραίτητα σε όλες τις περιπτώσεις έτσι ώστε να μην χρειαστεί να ξαναστήσουμε τις ρυθμίσεις μας από την αρχή σε περίπτωση κάποιας πιθανής διακοπής επιχειρησιακής συνέχειας. Ωστόσο, θα πρέπει να επαναλάβουμε πώς τα αντίγραφα ασφαλείας θα πρέπει να δοκιμάζονται ως προς την λειτουργικότητά τους ανά τακτά χρονικά διαστήματα, έτσι ώστε να διαπιστώνεται η λειτουργικότητά τους, μέσω από προγραμματισμένης χρήσης τους για επαναφορά.

Προσθήκη επιπλέον λιστών αποκλεισμού στο Pihole

H συγκεκριμένη λειτουργία κρίνεται επιπρόσθετα χρήσιμη για τις επιχειρήσεις όπου ορίζουν Πολιτικές Ασφαλείας με μη επιτρεπτές ιστοσελίδες. Οι IT Administrators μπορούν να δημιουργήσουν τις δικές τους λίστες και έπειτα να τις προσθέσουν από εκεί μέσα από την επιλογή Adlists.

Εσωτερικά Custom Domains για χρήση στις υπηρεσίες μας

Σε πολλούς οδηγούς ενδεχομένως να έχετε παρατηρήσει ότι χρησιμοποιώ ένα τοπικό domain v.flix/ . Αυτό το domain, αν και δεν λέει κάτι στον έξω κόσμο, εντός του δικτύου μου λέει πολλά. Πιο συγκεκριμένα, σε αυτό το domain δουλεύουν όλες οι selfhosted υπηρεσίες όπου τρέχω και σας δείχνω στην σειρά Raspberry Pi Server Series.

Για να λειτουργήσει ο Reverse Proxy, στην πραγματικότητα έχω επιλέξει την επιλογή Local DNS και έχω προσθέσει το domain v.flix να ανταποκρίνεται στην IP μου, δηλαδή, 192.168.1.210

CNAME

Επειδή τρέχω μία πληθώρα υπηρεσιών, για παράδειγμα, από jellyfin στο movies.v.flix και το pihole στο pihole.v.flix , έχω ορίσει διάφορα CNAMES όπως μπορείτε να δείτε από εδώ:

Στην πραγματικότητα, τα CNAMES είναι τα “μπροστά” μέρη από ένα domain της μορφής:

[κάτι].domain_name.com

Reverse Proxy για χρήση TLS με https στο Pihole

Το Pihole πρόκειται για μία κρίσιμη υπηρεσία όπου θα τρέχει εντός ενός οργανισμού ή οικιακού δικτύου, συνεπώς, θα πρέπει να προστατευτεί η ακεραιότητα του. Χρησιμοποιώντας το Pihole από http κάποιος κακόβουλος όπου παρακολουθεί το δίκτυο, θα μπορούσε να καταγράψει για παράδειγμα τον κωδικό πρόσβασης μας στο Pihole.
Για να αποφευχθεί αυτό, μπορούμε να χρησιμοποιήσουμε έναν reverse Proxy ώστε να βγαίνει εκτός το Pihole μόνο ως https με TLS.

Σε αυτό τον οδηγό θα χρησιμοποιήσουμε το Caddy για να το επιτύχουμε αυτό:
Προσθέτουμε στο Caddyfile:

pihole.v.flix {
    tls internal
    encode zstd gzip
    redir / /admin{uri}
    reverse_proxy 172.17.0.1:5353
}

Και για τους υπόλοιπους Reverse Proxies, η διαδικασία είναι αρκετά παρόμοια. Στην πραγματικότητα, το point είναι να οριστεί η ΙΡ και πόρτα όπου τρέχει το Pihole καθώς και να κάνει ανακατεύθυνση στο /admin, όπως δείξαμε και από πάνω όσο ήταν σκέτη ΙΡ ως http.Σύντομος οδηγός εγκατάστασης caddy2 server, reverse proxy και αυτόματο ssl στο raspberry
Προσοχή: Αν δεν προστεθεί το /admin, θα έχετε Error 403 Forbidden.

Χρήση του Pihole στο VPN μας;

Στον επόμενο οδηγό της σειράς Raspberry Pi Server, θα δούμε πώς μπορούμε να δημιουργήσουμε ως docker-container το δικό μας wireguard με GUI από wg-easy, παρέα με ένα Pihole. :slight_smile:

Μείνετε συντονισμένοι και έρχονται πολλά ακόμη selfhosted άρθρα :).

4 «Μου αρέσει»

Αυτό σημαίνει ότι κάτι δεν πάει καλά με τον container.
Που δεν είναι πανάκεια για κάθε τύπου εφαρμογή, ειδικώτερα lightweight σαν το pihole.
Τα στατιστικά του pihole -non containerized- ουδέποτε buggάρουν. Και είναι log traceable ανά πάσα ώρα και στιγμή το πως συμπεριφέρεται η εφαρμογή.

Σφόδρα αμφισβητήσιμο.
Εσύ πως ακριβώς το διαπίστωσες;
Το iOS v. 16, 17, 18 -παράδειγμα χρήση spotify ή flipboard- τρυπώνει μιά χαρά και οι διαφημίσεις δεν σταματούν με τίποτα.
Και όταν λέω με τίποτα εννοώ αυτό ακριβώς που γράφω. Ούτε με addition of targeted regex.
Ξέρω τι κάνω και που ψάχνω και ας μην είναι η κυβερνοασφάλεια ο τομέας μου.

Και τέλος, pihole χωρίς unbound, είναι χωριάτικη χωρίς φέτα.

  1. Δεν ξέρω για το spotify, πάντως το traffic περνάει από το Pihole και φιλτράρεται. Έχω κλειστό IPv6, φαντάζομαι θα το έχεις κλείσει κι εσύ.

Σε iOS 16+ όταν μου έβλεπε το Pihole ως απλό DNS, το έκανε παράκαμψη και συνδεόταν σε κάποιο DNSSEC όπου είχε ορίσει η Apple.
Όταν ενεργοποιήθηκε το DNSSEC, περνούσε κανονικά το traffic και μάλιστα μου λειτουργούσαν και τα local DNS κανονικά. Και μέσω VPN το ίδιο (είναι το επόμενο άρθρο).

Σε iOS 15 όπου είναι το iPhone SE μου, λειτουργεί και με απλό DNS.

Τώρα σε εφαρμογές δεν ξέρω για να παρακάμψουν τέτοιες μορφές τι κάνουν, πάντως σε browser που έκανα τις δοκιμές, όλα έδειχναν να δουλεύουν.

Θα ανέβει σε συμπληρωματικό έξτρα άρθρο για να προστεθεί και η φέτα (κι εγώ με unbound το έχω).

Βεβαίως είναι κλειστό το ipv6. Παντού.
Και εδώ που τα λέμε, ανάθεμα αν καταλαβαίνω που χρειάζεται σήμερα. Μελλοντικά, ποιός ξέρει;

Συμφωνώ για τον browser του iOS. Δεν παρακάμπτει το dns. Αλλά είναι σιχτήρι να σηκώνεις browser για να παίξεις spotify.
Δεν ισχύει για τα apps που χρησιμοποιώ.
Γατόνια οι devs.

Από όσο βλέπω, οι εφαρμογές ανεξάρτητα έχουν δικαίωμα να παρακάμψουν το DNS που δέχεται η συσκευή
https://www.reddit.com/r/pihole/comments/l69exz/ios_14_apps_bypassing_pihole_using_encrypted_dns/

1 «Μου αρέσει»

Ναι έτσι είναι.
Παλιότερα έπαιξα με την 853 και νόμιζα ότι χτύπησα jackpot.
Πόσο λάθος ήμουν;

Αν και σπάνια αναζητώ την παρέα του iPhone για μουσική (δεδομένης της χρήσης του tower για αυτή τη δουλειά, όπου δεν υπάρχουν τέτοια θέματα), ομολογώ ότι με ιντρίγκαρε αυτή η συζήτηση. Ισως το Σ/Κ δοκιμάσω να βγάλω τα μάτια του router & του pihole. Θα ρίξω και κανα δυό firewall rules.
Αν βρω κάτι ενδιαφέρον θα επανέλθω. Αν δεν έχω στο ενδιάμεσο διαλύσει τα πάντα :rofl:

2 «Μου αρέσει»