Εμπιστευόσαστε την ασφάλεια του τοπικού σας δικτύου στο modem/router που έχετε πάρει από τον ISP; Αν η απάντηση που δίνετε στο ερώτημα είναι το πολύ μουδιασμένα καταφατική, τότε βρισκόσαστε στο σωστό μέρος.

Αφορμή για το παρόν άρθρο αποτέλεσε email που είχαμε λάβει αρκετό καιρό πριν από αναγνώστη και φίλο, ο οποίος τα τελευταία χρόνια ζει κι εργάζεται στο εξωτερικό. Δεν πρόκειται για μεμονωμένο περιστατικό, μας έγραφε, αλλά μάλλον για τάση: τα modem/routers που παρέχουν οι ISPs είναι περισσότερο modems, παρά οτιδήποτε άλλο. Ακόμη και στις περιπτώσεις που ο κάτοχος έχει δυνατότητα για τροποποίηση των κανόνων του firewall, ρυθμίσεις port forwarding, DMZ κ.λπ., η απλοϊκή λογική του web dashboard που διαθέτει η συσκευή μόνο εμπιστοσύνη δεν εμπνέει.

Δεν χρειάζεται να συζητήσουμε πολύ ώστε να καταλάβουμε γιατί οι υποψιασμένοι χρήστες τέτοιων modems αναζητούν εναλλακτικές λύσεις. Αρκεί μόνο ν’ αναφέρουμε ότι οι εν λόγω συσκευές αναβαθμίζονται αυτόματα, χωρίς να υπάρχει επιλογή για απενεργοποίηση της συγκεκριμένης δυνατότητας. Αμέσως αμέσως, λοιπόν, γεννώνται μερικά άβολα ερωτήματα:

  • Πόσα προβλήματα διορθώνει ένα update και πόσα νέα εισάγει;
  • Πόσο εμπιστευόμαστε τους υπευθύνους για τα updates;
  • Οι όποιες ρυθμίσεις/αλλαγές έχουμε κάνει, συνεχίζουν άραγε να ισχύουν και μετά από κάθε αυτόματη αναβάθμιση;
  • Μήπως μετά από αναβάθμιση η συσκευή αποκτά δυνατότητες που βολεύουν τον ISP και τους συνεργάτες του, παραβιάζουν όμως την ιδιωτικότητά μας;

Η αλήθεια είναι ότι, εμείς τουλάχιστον, απόλυτες απαντήσεις δεν έχουμε. Σίγουρα όμως μπορούμε να θέτουμε ερωτήματα, ενώ δεν σας κρύβουμε ότι προβληματιζόμαστε και λίγο. Σημειώνουμε επίσης ότι παρόμοια συμπεριφορά και features έχουν και τα modems που δίνουν κι ελληνικοί ISPs.

Η λύση που σκέφτηκε ο φίλος μας είναι ν’ αναλάβει ο ίδιος την ασφάλεια του οικιακού του δικτύου. Πιο συγκεκριμένα, αποφάσισε να στήσει ένα δικό του firewall/router ακριβώς πίσω από το modem, και μάλιστα να απενεργοποιήσει εντελώς το firewall που έχει το προαναφερθέν. Όλες οι συσκευές του (desktop, game console, laptop, smartphones, tablet, Chromecast, εκτυπωτής/σαρωτής και δεν συμμαζεύεται) θα βρίσκονται πίσω από το νέο firewall/router και θα προστατεύονται απ’ αυτό. Έτσι, ο ISP θα μπορεί να κάνει ό,τι θέλει με το modem του, τη στιγμή που ο πελάτης δεν θα μπορούσε να νοιαστεί λιγότερο. Κι αν ο ISP αποφασίσει να μάθει τι παίζει στο τοπικό δίκτυο του πελάτη, το πολύ πολύ να δει έναν αποφασισμένο router να του επιστρέφει ένα βλοσυρό βλέμμα. Το μόνο κακό που ίσως μπορέσει να κάνει ο ISP –άθελά του, εννοείται– είναι να εφαρμόσει ελαττωματικό firmware upgrade και να αχρηστεύσει το modem του πελάτη. Αυτό δεν το αναφέρουμε ως θεωρητικό ενδεχόμενο: Έχει συμβεί τουλάχιστον στον αναγνώστη μας και η λύση σε μια τέτοια περίπτωση είναι τηλέφωνο στο tech support, προσευχόμενος να πέσεις σε υπάλληλο που καταλαβαίνει δυο-τρεις αγγλικές λέξεις μπας και βγάλεις άκρη και σου στείλουν νέο router γρήγορα. (Το πιθανότερο είναι ν’ ακούσεις κάτι σαν “ein Kollege wird Sie am Montag anrufen” ή ακόμα και κάτι που θα μοιάζει με “a samstarfsmaður mun hringja í þig á Mánudagur”. Αλλά εντάξει, κάποια στιγμή θα σου στείλουν νέα συσκευή.)

Λειτουργικό σύστημα και hardware

Για το OS του firewall/router αρχικά προτείναμε στον φίλο το pfSense, το οποίο χρησιμοποιούμε για πολύ καιρό και το εμπιστευόμαστε. Ο ευκολότερος τρόπος για να έχεις pfSense, είναι να το εγκαταστήσεις σε ένα PC που σου περισσεύει. Μετά όμως ίσως υπάρξουν θέματα με τον θόρυβο, ο λογαριασμός του ηλεκτρικού θα ‘ναι κάπως αυξημένος, κατά περίπτωση υπάρχει το ζήτημα της διαχείρισης χώρου – για να μην αναφερθούμε και στο χαμηλό WAF. Σε σχετική εξάλλου ιστοσελίδα του επίσημου δικτυακού τόπου του pfSense, παρατίθενται συγκεκριμένες προτάσεις εξειδικευμένου hardware. Καλή επιλογή για ένα οικιακό δίκτυο φαίνεται ν’ αποτελεί το SG-1100 Firewall Appliance, υπογραμμίζουμε ωστόσο ότι δεν το έχουμε δοκιμάσει.

Τελικά ο αναγνώστης μας αποφάσισε να γυρίσει την πλάτη στο pfSense και να στραφεί στο OpenBSD. Το σκεπτικό του ήταν ότι αφενός δεν τον ενδιαφέρουν τα πολλά features που έχει το pfSense, αφετέρου έψαχνε και μια δικαιολογία για να δοκιμάσει ένα λειτουργικό στο οποίο η ασφάλεια πάντα ήταν –και συνεχίζει να είναι– το άλφα και το ωμέγα. Όσον αφορά στο hardware για έναν OpenBSD-based home router, μια καλή επιλογή είναι η πλατφόρμα APU2 της PC Engines.

Η παρουσίασή μας

Στη συνέχεια του παρόντος δείχνουμε, αναλυτικά και βήμα προς βήμα, πώς ρυθμίζουμε μια νέα εγκατάσταση του OpenBSD, ώστε το σύστημα να λειτουργεί ως firewall/router για ένα τοπικό δίκτυο. Στους πελάτες του θα παρέχει υπηρεσίες DHCP και DNS, ενώ θα μπορεί να κάνει και resolving τοπικών hostnames και FQDNs (Fully Qualified Domain Names). Έτσι, αντί να γράφουμε τη διεύθυνση IP (π.χ., 172.16.59.195) ενός μηχανήματός μας στο οποίο θέλουμε να συνδεθούμε μέσω SSH, θα δίνουμε το hostname ή το πλήρες όνομά του εντός του domain (π.χ., einarben.colder.xyz, όπου υποθέσαμε ότι το hostname του απομακρυσμένου μηχανήματος είναι einarben και το domain είναι το colder.xyz). Ο nameserver του OpenBSD box θα είναι caching. Τις διευθύνσεις IP που δεν έχει ήδη στην cache θα τις ζητά από μια τοπική υπηρεσία που γνωρίζει το πρωτόκολλο DNSCrypt (έξτρα ασφάλεια). Το τοπικό δίκτυο, τέλος, θα προστατεύεται από το ικανότατο pf firewall.

Θεωρούμε εξάλλου ότι το hardware στο οποίο φιλοξενείται το OpenBSD έχει δύο κάρτες Ethernet: η μία για τη σύνδεση στο modem του ISP (WAN port), η άλλη για τη σύνδεση των πελατών (LAN port). Βεβαίως, στο LAN port θα έχουμε συνδεδεμένο κάποιο switch ή/και κάποιο wireless Access Point. Το θέμα είναι ότι, τελικά, οι συσκευές μας θα φτάνουν στον DIY router μέσω του LAN port – κι αυτό ακριβώς θέλουμε.

Χάρη στις ιδιαίτερα χαμηλές απαιτήσεις που έχει το OpenBSD όσον αφορά στους πόρους συστήματος, άνετα μπορούμε να το έχουμε σε μηχανάκι με μόλις 256MB RAM. (Ένα Raspberry Pi 3 Model B+ έχει 1024MB RAM!) Μάλιστα ήδη διατηρούμε ένα VM παρόμοιων χαρακτηριστικών με guest OS το OpenBSD, σε ρόλο firewall/router για ένα από τα εικονικά μας εργαστήρια. Για τις ανάγκες της παρουσίασης που ακολουθεί εργαστήκαμε με ένα VMware VM το οποίο είχε 256MB RAM, επεξεργαστή με δύο πυρήνες, δυναμικό δίσκο μεγέθους 16GB (το πραγματικό μέγεθος του αντίστοιχου αρχείου ήταν πολύ μικρότερο) και δύο network adapters: τον WAN με bridged networking και τον LAN με τοπικό (custom) networking.

Λήψη κι εγκατάσταση

Δουλεύουμε με την τελευταία έκδοση του OpenBSD, η οποία από τα τέλη του Απριλίου είναι η 6.5. Το firewall/router δεν πρόκειται να ‘χει πάνω από 4GB RAM, οπότε μεταξύ των εκδοχών 32bit κι 64bit, για επεξεργαστές Intel/AMD, επιλέγουμε την πρώτη. Αν φυσικά ο router σας πρόκειται να έχει 4GB RAM ή περισσότερα, π.χ., επειδή θα αναλάβει και πρόσθετα χρέη, στραφείτε στην εκδοχή 64bit. Σε κάθε περίπτωση, η σελίδα του download είναι στο https://www.openbsd.org/ftp.html κι εμείς κατεβάσαμε το ISO μας από το HTTP mirror στο Erlangen, στη διεύθυνση http://ftp.fau.de/pub/OpenBSD.

Όποιο κι αν είναι το mirror που θα επιλέξετε, μπείτε στο directory ονόματι 6.5, μετά σ’ εκείνο της αρχιτεκτονικής που σας ενδιαφέρει (π.χ., i386 ή amd64) και κατεβάστε το επιθυμητό ISO image. Αν, π.χ., θέλετε το image για πλήρη offline εγκατάσταση, πάρτε το αρχείο install65.iso (368MB). Αν πάλι προτιμάτε μικρότερο image και κατά τη διάρκεια της εγκατάστασης να κατέβουν μόνο τα απαραίτητα package sets, πάρτε το αρχείο cd65.iso (8,6MB).

Για την ίδια τη διαδικασία της εγκατάστασης του OpenBSD δεν χρειάζεται να πούμε πολλά, αφού ολοκληρώνεται εύκολα και με αποδοχή όλων σχεδόν των προεπιλογών (στις σχετικές ερωτήσεις απλά πατάμε το πλήκτρο [Enter]). Δείτε μερικά χαρακτηριστικά screenshots που για λόγους πληρότητας παραθέτουμε, διαβάστε και τις αντίστοιχες περιγραφές.

Ο installer του OpenBSD τρέχει σε περιβάλλον κονσόλας κειμένου και προχωρά απευθύνοντάς μας μια σειρά από ερωτήσεις.Ο installer του OpenBSD τρέχει σε περιβάλλον κονσόλας κειμένου και προχωρά απευθύνοντάς μας μια σειρά από ερωτήσεις. Εδώ βλέπουμε την πρώτη ερώτηση, αμέσως μετά την εκκίνησή του. Επειδή πρόκειται για καθαρή εγκατάσταση, μεταξύ των Install, Upgrade, Autoinstall και Shell, επιλέγουμε την πρώτη λειτουργία: απλά πατάμε το πλήκτρο [Ι] και μετά το [Enter].

Ρυθμίσεις δικτύωσης για τα δύο network interfaces του μηχανήματος.Ρυθμίσεις δικτύωσης για τα δύο network interfaces του μηχανήματος. Αρχικά πληκτρολογούμε το επιθυμητό hostname του router μας, το οποίο θα καταλήξει να είναι το hostname του WAN interface (1). Αυτό είναι το interface (vic0) που επικοινωνεί με το modem/router του ISP. Προτιμήσαμε στατικό IP για το WAN και, για το τοπικό δίκτυο των δοκιμών μας, η διεύθυνση 192.168.1.1 ήταν μια χαρά (2). Σημειώστε πως το LAN interface του modem/router, μπροστά από το OpenBSD box, είχε τη διεύθυνση 192.168.1.254. Μετά το WAN σειρά έχει το LAN interface (vic1) του υπό εγκατάσταση router. Για το εν λόγω interface επιλέξαμε το hauptbahnhof ως hostname, ενώ του αποδώσαμε και την αριθμητική διεύθυνση 172.16.59.254 (3). Αυτή θα είναι η διεύθυνση του router για όλα τα μηχανήματα πίσω από το OpenBSD, τα οποία θα παίρνουν διευθύνσεις της μορφής 172.16.59.*. Η διεύθυνση εξάλλου του προκαθορισμένου router για το ίδιο το OpenBSD είναι το IP που έχει το LAN interface του ISP modem/router (4), και στο πλαίσιο της παρουσίασής μας είναι το 192.168.1.254. Μένει τέλος να πληκτρολογήσουμε ένα domain name (colder.xyz) για τους πελάτες του OpenBSD router, καθώς και την αριθμητική διεύθυνση ενός name server που θα μπορεί να χρησιμοποιεί ο τελευταίος (5). Παρατηρήστε ότι στραφήκαμε στον δημοφιλέστατο name server της Google, με IP το 8.8.8.8.

Καθορισμός password για τον root κι αυτόματη εκκίνηση της υπηρεσίας SSH. Παρατηρήστε επίσης ότι στην ερώτηση περί χρήσης του X Window System απαντήσαμε αρνητικά, αφού δεν έχει λόγο ύπαρξης στον router που φτιάχνουμε. Επιλέξαμε, επίσης, να μη δημιουργήσουμε ένα λογαριασμού απλού χρήστη. Ακριβώς γι' αυτό επιτρέψαμε τα SSH logins στο λογαριασμό του root.Καθορισμός password για τον root κι αυτόματη εκκίνηση της υπηρεσίας SSH. Παρατηρήστε επίσης ότι στην ερώτηση περί χρήσης του X Window System απαντήσαμε αρνητικά, αφού δεν έχει λόγο ύπαρξης στον router που φτιάχνουμε. Επιλέξαμε, επίσης, να μη δημιουργήσουμε ένα λογαριασμού απλού χρήστη. Ακριβώς γι’ αυτό επιτρέψαμε τα SSH logins στο λογαριασμό του root.

Στον installer του OpenBSD λέμε να χρησιμοποιήσει εξ ολοκλήρου το ένα και μοναδικό δίσκο του συστήματος, ενώ δεχόμαστε και το προτεινόμενο layout για τις κατατμήσεις.Ο ένας και μοναδικός δίσκος στο σύστημα της παρουσίασής μας είναι ο wd0, στον installer του OpenBSD λέμε να τον χρησιμοποιήσει εξ ολοκλήρου, δεχόμαστε και το προτεινόμενο layout για τις κατατμήσεις.

Τα sets στα οποία αναφέρεται o installer του OpenBSD δεν είναι παρά συμπιεσμένα πακέτα με συλλογές λογισμικού.Τα sets στα οποία αναφέρεται o installer του OpenBSD δεν είναι παρά συμπιεσμένα πακέτα με συλλογές λογισμικού. Προηγουμένως είχαμε κατεβάσει το μικρότερο ISO image για την εγκατάσταση του λειτουργικού, το cd65.iso, το οποίο δεν περιέχει κάποιο set. Γι’ αυτό και τώρα λέμε στον installer να τα κατεβάσει από το Ιnternet, χωρίς χρήση proxy. Πιο συγκεκριμένα, θα πάρουμε τα sets από τον HTTP server στη διεύθυνση http://ftp.fau.de (Πανεπιστήμιο του Erlangen) κι από το προκαθορισμένο directory (pub/OpenBSD/6.5/i386). Επειδή εξάλλου ενδιαφερόμαστε για τη δημιουργία ενός μικρού κι απλού router, λέμε στον installer να μην κατεβάσει το set με τα παιχνίδια, ούτε και τα sets που αφορούν στο παραθυρικό σύστημα X Window.

Μετά τη λήψη, την αποσυμπίεση και την εγκατάσταση των απαραίτητων sets, ο installer ρωτά ξανά για την τοποθεσία (θέση) πρόσθετων sets. Από τη στιγμή που έχουμε ήδη ό,τι χρειαζόμαστε, απλά πατάμε το πλήκτρο [Enter].Μετά τη λήψη, την αποσυμπίεση και την εγκατάσταση των απαραίτητων sets, ο installer ρωτά ξανά για την τοποθεσία (θέση) πρόσθετων sets. Από τη στιγμή που έχουμε ήδη ό,τι χρειαζόμαστε, απλά πατάμε το πλήκτρο [Enter].

Η εγκατάσταση του OpenBSD μόλις ολοκληρώθηκε επιτυχώς και τώρα δεν έχουμε παρά να επανεκκινήσουμε τον υπολογιστή.*Η εγκατάσταση του OpenBSD μόλις ολοκληρώθηκε επιτυχώς και τώρα δεν έχουμε παρά να επανεκκινήσουμε τον υπολογιστή.

Πρώτη εκκίνηση του ολοκαίνουργιου συστήματος. Μπορούμε τώρα να κάνουμε login στο λογαριασμό του root από την κονσόλα ή ακόμη και να συνδεθούμε απομακρυσμένα σ' αυτόν, μέσω SSH.Πρώτη εκκίνηση του ολοκαίνουργιου συστήματος. Μπορούμε τώρα να κάνουμε login στο λογαριασμό του root από την κονσόλα ή ακόμη και να συνδεθούμε απομακρυσμένα σ’ αυτόν, μέσω SSH.

Εύκολες κι ασφαλείς συνδέσεις, έλεγχος δικτύωσης

Πρώτο μέλημά μας μετά την εγκατάσταση του OpenBSD είναι τα passwordless SSH logins από άλλο μηχάνημα του τοπικού δικτύου. Για το τι ακριβώς εννοούμε αλλά και για το πώς επιτυγχάνονται τα προαναφερθέντα logins, διαβάστε το σχετικό άρθρο. Η δικτύωση του OpenBSD box λογικά πρέπει να ‘ναι σωστά ρυθμισμένη κι αυτό μπορούμε να το διαπιστώσουμε, π.χ., με ένα ping στο google.com. Προαιρετικά, αξίζει να ρίξουμε μια ματιά σε ορισμένα αρχεία όπου βρίσκονται παράμετροι κι επιλογές περί δικτύωσης. Δείτε το screenshot που ακολουθεί, διαβάστε και τη συνοδευτική περιγραφή.

Γρήγορος έλεγχος των παραμέτρων δικτύωσης.Οι επιλογές δικτύωσης που κάναμε κατά το στάδιο της εγκατάστασης του OpenBSD, βρίσκονται όλες αποθηκευμένες στα αρχεία απλού κειμένου hostname.vic0, hostname.vic1, mygate, resolv.conf, hosts και myname – όλα εντός του καταλόγου /etc. Αναλυτικότερα, στα hostname.vic0 και hostname.vic1 βρίσκουμε τη διεύθυνση IP και το netmask καθενός εκ των vic0 (1) και vic1 (2) interfaces. Στη δική σας εγκατάσταση τα εν λόγω interfaces ίσως ονομάζονται διαφορετικά, οπότε και τα αντίστοιχα αρχεία θα ονομάζονται διαφορετικά. Αν, π.χ., έχετε τα interfaces em0 και em1, τότε θα έχετε και τα αρχεία hostname.em0 και hostname.em1 αντίστοιχα. Στο δε αρχείο mygate είναι η διεύθυνση της πύλης, δηλαδή του LAN interface που έχει το modem/router του ISP μας (3). Στο resolv.conf μεταξύ άλλων βλέπουμε τη διεύθυνση IP του nameserver που χρησιμοποιεί το OpenBSD (4). Στο αρχείο hosts υπάρχουν αντιστοιχίσεις μεταξύ των IP που έχουν τα vic0, vic1, καθώς και των FQDNs και hostnames (5). Τέλος, στο αρχείο myname είναι το FQDN του WAN interface, δηλαδή του vic0 (6).

Πριν συνεχίσουμε οφείλουμε να ενεργοποιήσουμε το IP forwarding για τον router μας, ώστε να επιτρέπεται η προώθηση δικτυακών πακέτων μεταξύ network interfaces. Αρκεί να πληκτρολογήσουμε

echo "net.inet.ip.forwarding=1" > /etc/sysctl.conf

και το IP forwarding θα ενεργοποιείται κατά την εκκίνηση του συστήματος. Δεν είναι ενεργοποιημένο τώρα, όμως σε λίγο που θα θέλουμε να δούμε αν όλα είναι εντάξει θα κάνουμε και μια επανεκκίνηση.

Υπηρεσίες DHCP και DNS, με το dnsmasq

Η υπηρεσία DHCP είναι σχεδόν πάντα απαραίτητη στους routers, αφού όλες οι συσκευές-πελάτες καλό είναι να ‘χουν δυνατότητα για αυτόματη διευθυνσιοδότηση. Πιθανώς βέβαια να υπάρχουν και κάποιες εξ αυτών για τις οποίες θα θέλουμε στατικά IP. Ακόμη και τότε όμως καλό είναι να μην τους ορίζουμε τα IP χειροκίνητα, αλλά να τους τα αντιστοιχίζει ο DHCP server βάσει MAC address. Επίσης, σίγουρα οι συσκευές μας χρειάζονται όλες έναν nameserver, ο οποίος θα φροντίζει και θα μεταφράζει τα domain names σε IPs. Για όλα τα προηγούμενα επιλέγουμε να εγκαταστήσουμε τον dnsmasq, αφού α) παρέχει υπηρεσίες DHCP, β) παρέχει υπηρεσίες DNS, και γ) κάνει resolving των ονομάτων που έχουν αντιστοιχιστεί στους clients μέσω DHCP. O dnsmasq δεν υπάρχει στη βασική εγκατάσταση του OpenBSD, οπότε θα καταφύγουμε στο εργαλείο pkg_add ώστε να φέρουμε το σχετικό πακέτο από το Internet και να το εγκαταστήσουμε. Με την ευκαιρία, στο αρχείο /root/.profile ας προσθέσουμε μια γραμμή που θα υποδεικνύει από πού θα κατεβαίνουν τα πακέτα:

echo "export PKG_PATH=http://ftp.fau.de/pub/OpenBSD/6.5/packages/i386" >> ~/.profile

Οι παρατηρητικοί θα προσέξατε ότι και πάλι προτιμήσαμε το mirror στο Erlangen. Η λίστα με τα διαθέσιμα mirrors είναι στη σελίδα download που επισκεφθήκαμε προηγουμένως, για τη λήψη του OpenBSD. Σε κάθε περίπτωση, κατά τον ορισμό package mirror προσέξτε την έκδοση του λειτουργικού (για εμάς 6.5), καθώς και την αρχιτεκτονική που έχετε εγκαταστήσει (για εμάς i386). Προκειμένου να ληφθεί άμεσα υπόψη η τιμή της μεταβλητής PKG_PATH, στο τερματικό μας δίνουμε:

export PKG_PATH=http://ftp.fau.de/pub/OpenBSD/6.5/packages/i386

Για την εγκατάσταση του πακέτου dnsmasq, γράφουμε:

pkg_add dnsmasq

Αποτέλεσμα:

quirks-3.124 signed on 2019-04-15T13:18:28Z
quirks-3.124: ok
dnsmasq-2.80: ok
The following new rcscripts were installed: /etc/rc.d/dnsmasq
See rcctl(8) for details.

Τέλεια. Τώρα, το αρχείο ρυθμίσεων που θέλουμε είναι το /etc/dnsmasq.conf και πριν το πειράξουμε ας κρατήσουμε ένα αντίγραφό του:

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

Για την τροποποίηση του /etc/dnsmasq.conf υπάρχει το vi. Αν ο συγκεκριμένος editor δεν είναι του γούστου σας, εγκαταστήστε το nano με το εργαλείο pkg_add. Ας ανοίξουμε το αρχείο /etc/dnsmasq.conf:

vi /etc/dnsmasq.conf

Προτείνουμε να σβήσετε όλες τις γραμμές του αρχείου ρυθμίσεων και να ξεκινήσετε με ένα απλό setup. Δείτε, π.χ., τα περιεχόμενα που έχει το /etc/dnsmasq.conf στον δικό μας OpenBSD router:

no-resolv
proxy-dnssec
server=127.0.0.1#5300
listen-address=127.0.0.1,172.16.59.254
bind-interfaces

dhcp-option=252,"\n"

domain=colder.xyz
dhcp-range=172.16.59.100,172.16.59.253,12h

dhcp-host=00:0c:29:3b:a8:6f,nvault,172.16.59.10,24h
dhcp-host=00:0c:29:ab:4f:c3,bolungarvik,172.16.59.11,24h

Προσέξτε την οδηγία server, στην τρίτη γραμμή από πάνω, η οποία αφορά στο DNS-μέρος του dnsmasq: αν για το ερώτημα κάποιου πελάτη δεν υπάρχει απάντηση στην cache του dnsmasq, τότε ρωτά κάποια υπηρεσία που τρέχει τοπικά κι αφουγκράζεται για αιτήσεις πελατών από το port 5300. Πρόκειται για το DNSCrypt –ακριβέστερα για έναν κατάλληλο πελάτη του DNSCrypt–, το οποίο δεν έχουμε εγκαταστήσει ακόμα αλλά θα το φροντίσουμε σε λίγο. Προσοχή χρειάζεται και η οδηγία listen-address, από κάτω. Όπως βλέπετε, το dnsmasq εξυπηρετεί πελάτες από το ίδιο το μηχάνημα (127.0.0.1), καθώς και πελάτες από το τοπικό δίκτυο (θυμηθείτε: το LAN interface στο μηχάνημά μας έχει για IP το 172.16.59.254). Κατά τα άλλα, οι διευθύνσεις IP που μοιράζει αυτόματα το DHCP-μέρος του dnsmasq βρίσκονται εντός του διαστήματος 172.16.59.100-192.16.59.253 (154 στο πλήθος διαφορετικές συσκευές μάλλον είναι αρκετές για ένα οικιακό δίκτυο, δεν συμφωνείτε;). Επίσης, δύο συγκεκριμένοι πελάτες, δηλαδή δύο μηχανήματα με συγκεκριμένα MAC addresses, παίρνουν πάντα τις ίδιες διευθύνσεις IP. Υπογραμμίζουμε ότι οι δύο αυτές διευθύνσεις βρίσκονται εκτός του διαστήματος των διευθύνσεων που μοιράζονται δυναμικά. Με βάση τα περιεχόμενα του dnsmasq.conf που μόλις παραθέσαμε, τροποποιήστε αναλόγως το δικό σας. Διαβάστε αν θέλετε και τα σχόλια στο πρωτότυπο configuration file, δηλαδή στο dnsmasq.conf.orig.

Αφού τελειώσουμε με τις αλλαγές και τις αποθηκεύσουμε, οφείλουμε να πράξουμε τα δέοντα ώστε η υπηρεσία να ξεκινά αυτόματα κατά την εκκίνηση του OpenBSD. Προς τούτο, δημιουργούμε το νέο αρχείο /etc/rc.conf.local και του προσθέτουμε μία μόνο γραμμή:

echo 'pkg_scripts="dnsmasq"' > /etc/rc.conf.local

(προσοχή στα απλά και στα διπλά εισαγωγικά). Δεν θα ενεργοποιήσουμε ακόμα το dnsmasq. Έχουμε να φροντίσουμε για το DNSCrypt και φυσικά να ορίσουμε τους κατάλληλους κανόνες στο firewall.

Ενίσχυση privacy με το DNSCrypt

Το DNSCrypt είναι ένα πρωτόκολλο για την ταυτοποίηση των συνδέσεων μεταξύ DNS client και DNS server, καθιστώντας αδύνατες τις επιθέσεις DNS spoofing. Με χρήση κρυπτογραφίας και ψηφιακών υπογραφών αφενός διασφαλίζεται ότι οι απαντήσεις προέρχονται πράγματι από τον επιλεγμένο nameserver, αφετέρου ότι δεν έχουν τροποποιηθεί στην πορεία. Υλοποιήσεις πελατών που γνωρίζουν το DNSCrypt διατίθενται για διάφορα λειτουργικά συστήματα, του OpenBSD συμπεριλαμβανομένου. Ο client που θέλουμε είναι ο dnscrypt-proxy και, κατά τα αναμενόμενα, η εγκατάστασή του γίνεται με το εργαλείο pkg_add:

pkg_add dnscrypt-proxy

Αποτέλεσμα:

quirks-3.124 signed on 2019-04-15T13:18:28Z
dnscrypt-proxy-2.0.19: ok
The following new rcscripts were installed: /etc/rc.d/dnscrypt_proxy
See rcctl(8) for details.
New and changed readme(s):
    /usr/local/share/doc/pkg-readmes/dnscrypt-proxy

Οι ρυθμίσεις του dnscrypt-proxy συγκεντρώνονται στο αρχείο /etc/dnscrypt-proxy.toml. Το ανοίγουμε, εντοπίζουμε τη γραμμή

listen_addresses = ['127.0.0.1:53', '[::1]:53']

και την αλλάζουμε ώστε το port που χρησιμοποιεί το dnscrypt-proxy να είναι το 5300:

listen_addresses = ['127.0.0.1:5300', '[::1]:5300']

Ανοίγουμε στη συνέχεια το /etc/rc.conf.local με τον text editor της προτίμησής μας

vi /etc/rc.conf.local

και το τροποποιούμε ελαφρώς, ώστε η μία και μοναδική γραμμή που περιλαμβάνει να είναι ως ακολούθως:

pkg_scripts="dnsmasq dnscrypt_proxy"

(Προσοχή στο όνομα της υπηρεσίας του dnscrypt-proxy, το οποίο στη θέση της παύλας έχει κάτω παύλα, δηλαδή τον χαρακτήρα underscore.) Αποθηκεύουμε τις αλλαγές και προς το παρόν δεν ενεργοποιούμε κάποια υπηρεσία. Φροντίζουμε όμως ώστε το ίδιο το λειτουργικό να χρησιμοποιεί τον dnsmasq. Απλά ανοίγουμε το αρχείο /etc/resolv.conf προς επεξεργασία και φροντίζουμε ώστε τα περιεχόμενά του να μοιάζουν με τα ακόλουθα:

search colder.xyz
nameserver 127.0.0.1
lookup file bind

Για τα DNS lookups, η τελευταία γραμμή λέει ότι πρώτα πρέπει να ελέγχεται το αρχείο /etc/hosts και μετά ο nameserver. Και ποιος είν’ αυτός; Μα, εκείνος που αναφέρεται στη γραμμή από πάνω και χρησιμοποιεί το προκαθορισμένο port (το 53), δηλαδή ο dnsmasq.

Ρύθμιση firewall

Έως αυτή τη στιγμή έχουμε φροντίσει για DHCP και DNS (dnsmasq), ενώ το resolving των διευθύνσεων που δεν βρίσκονται στην cache του nameserver επιτυγχάνεται μέσω του πρωτοκόλλου DNSCrypt και με τη βοήθεια του client ονόματι dnscrypt-proxy. Πρέπει τώρα να ρυθμίσουμε και το pf, το firewall του router μας. Ουσιαστικά θα τροποποιήσουμε το αρχείο /etc/pf.conf. Δείτε τα περιεχόμενα του δικού μας:

lan = "vic1"

table <martians> { 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 \
    172.16.0.0/12 192.0.0.0/24 192.0.2.0/24 224.0.0.0/3 \
    192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 \
    203.0.113.0/24 }

set block-policy drop
set loginterface egress
set skip on lo0

match in all scrub (no-df random-id max-mss 1440)
match out on egress inet from !(egress:network) to any nat-to (egress:0)

antispoof quick for { egress $lan }

block in quick on egress from <martians> to any
block return out quick on egress from any to <martians>
block all

pass out quick inet
pass in on { $lan } inet

Η περιγραφή των κανόνων του pf ξεφεύγει από τους σκοπούς του παρόντος. Το καλό πάντως με το συντακτικό του pf είναι ότι επιτρέπει τη δημιουργία κανόνων οι οποίοι διαβάζονται σχετικά εύκολα. Μπορείτε βεβαίως να μελετήστε το επίσημο PF User’s Guide και ειδικά την ενότητα Example rulesets / Building a router. Από εκεί άλλωστε πήραμε κι εμείς το σύνολο των κανόνων που μόλις παραθέσαμε.

Πριν οτιδήποτε άλλο, αξίζει στο σημείο αυτό να κάνουμε μια επανεκκίνηση του συστήματος:

reboot

Λογικά, μετά κι απ’ αυτό, όλες οι υπηρεσίες που παρέχει το firewall/router θα πρέπει να είναι ενεργές κι εκείνο πανέτοιμο για να εξυπηρετεί πελάτες συνδεδεμένους στο LAN interface.

Δοκιμές

Αυτή τη στιγμή έχουμε ένα ελαφρύ, ισχυρό κι εξαιρετικά ασφαλές OpenBSD-based firewall/router για το LAN μας. Οι πρώτες δοκιμές που οφείλουμε να κάνουμε ώστε να βεβαιωθούμε ότι δουλεύει, είναι να χρησιμοποιήσουμε ένα οποιοδήποτε μηχάνημα πίσω από τον ολοκαίνουργιο router για πρόσβαση στο τοπικό δίκτυο και βεβαίως στο Internet. Από εκεί και πέρα, μια άλλη δοκιμή που δεν πρέπει να παραλείψουμε αφορά στο DNSCrypt. Στην περίπτωσή μας, για παράδειγμα, σε ένα μηχάνημα με Mac OS X πίσω από το firewall/router ανοίξαμε τον Brave browser κι επισκεφτήκαμε το site του DNS leak test. Εκεί ζητήσαμε να γίνει το λεγόμενο Extended test. Μετά από λίγα δευτερόλεπτα διαπιστώσαμε ότι οι DNS servers που μας εξυπηρετούν δεν έχουν καμία σχέση με εκείνους του ISP μας – κι αυτό ήταν ακριβώς ό,τι περιμέναμε (και θέλαμε).

Η λίστα με τους nameservers που εξυπηρετούν ένα μηχάνημα πίσω από τον OpenBSD router μας.Η λίστα με τους nameservers που εξυπηρετούν ένα μηχάνημα με Mac OS X, πίσω από τον OpenBSD router μας. Χάρη στο dnscrypt-proxy, το οποίο γνωρίζει περί DNSCrypt και τρέχει στον OpenBSD router, η επικοινωνία με καθέναν από αυτούς τους nameservers είναι ασφαλέστατη και οι επιθέσεις DNS spoofing είναι πρακτικά αδύνατες.

Μια άλλη δοκιμή που αξίζει να κάνουμε είναι να δούμε αν οι αντιστοιχίσεις συγκεκριμένων IP σε συγκεκριμένα MAC addresses δουλεύουν. Τέλος, καλό είναι να ελέγξουμε αν είναι δυνατό το resolving FQDNs και hostnames εντός του τοπικού domain που εξυπηρετεί το DNS-μέρος του dnsmasq. Κατά τους ελέγχους μας, για παράδειγμα, διαπιστώσαμε ότι από το VM με hostname το nvault μπορούσαμε να κάνουμε απευθείας ping το VM με FQDN το bolungarvik.colder.xyz, χωρίς φυσικά να δώσουμε το IP του. Το ping δούλευε και με το hostname μόνο, δηλαδή με το bolungarvik μόνο.

Βελτιώσεις

Θα συμφωνήσετε φανταζόμαστε ότι ένας router δεν χρειάζεται υποσύστημα ήχου. Καλό είναι επίσης να κάνει κι εξοικονόμηση ενέργειας – αν και όποτε μπορεί, φυσικά. Η απενεργοποίηση του sound daemon και η ενεργοποίηση του power management daemon γίνονται με τις κατάλληλες προσθήκες στο αρχείο /etc/rc.conf.local. Δείτε το πλήρες περιεχόμενο του δικού μας:

sndiod_flags=NO
apmd_flags="-A"

pkg_scripts="dnsmasq dnscrypt_proxy"

Με τις δύο πρώτες γραμμές διασφαλίζουμε ότι κατά την εκκίνηση του OpenBSD δεν θα ξεκινά ο sound daemon, θα ενεργοποιείται όμως η υπηρεσία εξοικονόμησης ενέργειας. Προκειμένου να ληφθούν άμεσα υπόψη οι δύο νέες οδηγίες στο /etc/rc.conf.local, χωρίς να επανεκκινήσουμε το λειτουργικό, γράφουμε

rcctl stop sndiod

και βεβαίως

rcctl start apmd

Τέλος, στην περίπτωση που έχετε εγκαταστήσει το OpenBSD σε flash drive καλό είναι να ελαχιστοποιήσετε τις εγγραφές επί αυτού. Ανοίξτε το αρχείο /etc/fstab με τον editor της προτίμησής σας και τροποποιήστε τη γραμμή με τις οδηγίες προσάρτησης του root partition. Για παράδειγμα, η σχετική γραμμή στο δικό μας fstab είχε ως εξής

852f2d3ea7b966f4.a / ffs rw 1 1

και την αλλάξαμε σε

852f2d3ea7b966f4.a / ffs rw,noatime,softdep 1 1

Οι νέες παράμετροι για την προσάρτηση λαμβάνονται υπόψη από την επόμενη επανεκκίνηση του λειτουργικού συστήματος.

Σας άρεσε το post; Αν ναι μπορείτε να στηρίξετε το ðhacker, χωρίς κατ’ ανάγκη να ξοδέψετε χρήματα.