Το προφίλ μας στο Google Plus
8

Οικιακός OpenBSD router, με DNSCrypt & resolving τοπικών FQDNs

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

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

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

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

Κοιτάξτε, απαντήσεις δεν έχουμε — εμείς απλά τα ερωτήματα θέτουμε :P Σημειώνουμε επίσης ότι παρόμοια συμπεριφορά και 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-1000 microFirewall, το οποίο αναμένεται από το Νοέμβριο του 2016.

Τελικά ο αναγνώστης μας αποφάσισε να γυρίσει την πλάτη στο pfSense και να στραφεί στο OpenBSD. Το σκεπτικό του ήταν ότι αφενός δεν τον ενδιαφέρουν τα πολλά features που έχει το pfSense, αφετέρου έψαχνε και μια δικαιολογία για να δοκιμάσει ένα λειτουργικό στο οποίο η ασφάλεια πάντα ήταν –και συνεχίζει να είναι– το άλφα και το ωμέγα. Όσον αφορά στο hardware για έναν OpenBSD-based home router, μια καλή επιλογή είναι το RCC-DFF 2220 της Netgate. Είναι μικρό, fanless, οικονομικό στην κατανάλωση και με σχετικά δυνατά χαρακτηριστικά (dual-core Intel Atom CPU, 2GB RAM, 2 gigabit Ethernet ports). Μπορείτε επιπρόσθετα να του προσθέσετε δίσκο SSD (δεν είναι απαραίτητος), ενώ για wireless συνδέσεις επιλέγετε είτε κάποιο από τα Access Points που προτείνει η Netgate είτε οποιοδήποτε άλλο της επιλογής σας. Να σημειώσουμε εξάλλου ότι μια εναλλακτική για hardware “χαμηλού προφίλ” αποτελούν τα APU2 boards της PC Engines.

Η παρουσίασή μας
Στη συνέχεια του παρόντος δείχνουμε, αναλυτικά και βήμα προς βήμα, πώς ρυθμίζουμε μια νέα εγκατάσταση του OpenBSD, ώστε το σύστημα να λειτουργεί ως firewall/router για ένα τοπικό δίκτυο. Στους πελάτες του θα παρέχει υπηρεσίες DHCP και DNS, ενώ θα μπορεί να κάνει και resolving τοπικών FQDNs (Fully Qualified Domain Names). Έτσι, αντί να γράφουμε τη διεύθυνση IP (π.χ., 192.168.42.195) ενός μηχανήματός μας στο οποίο θέλουμε να συνδεθούμε μέσω SSH, θα δίνουμε το πλήρες όνομά του εντός του 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 όσον αφορά στους πόρους συστήματος, άνετα μπορούμε να το έχουμε σε μηχανάκι με μόλις 64MB RAM. Μάλιστα ήδη διατηρούμε ένα VM παρόμοιων χαρακτηριστικών με guest OS το OpenBSD, σε ρόλο firewall/router για ένα από τα εικονικά μας εργαστήρια. Για τις ανάγκες της παρουσίασης που ακολουθεί εργαστήκαμε σε VMware VM με 64MB RAM, επεξεργαστή με δύο πυρήνες, δυναμικό δίσκο μεγέθους 16GB (το πραγματικό μέγεθος του αντίστοιχου αρχείου είναι μικρότερο από 700ΜΒ) και δύο network adapters: το WAN με NAT networking και το LAN με custom networking, ονόματι vmnet4. Οι πελάτες του OpenBSD firewall/router χρησιμοποιούσαν κι εκείνοι το vmnet4.

Λήψη κι εγκατάσταση
Δουλεύουμε με την τελευταία έκδοση του OpenBSD, η οποία από τις αρχές του Σεπτεμβρίου είναι η 6.0. Το firewall/router δεν πρόκειται να ‘χει πάνω από 4GB RAM, οπότε μεταξύ των εκδοχών 32bit κι 64bit, για επεξεργαστές Intel/AMD, επιλέγουμε την πρώτη. Αν φυσικά ο router σας πρόκειται να έχει 4GB RAM ή περισσότερα, στραφείτε στην εκδοχή 64bit. Σε κάθε περίπτωση, η σελίδα του download είναι στο

https://www.openbsd.org/ftp.html

κι εμείς κατεβάσαμε το ISO μας από το HTTP mirror στο Erlangen, στη διεύθυνση

http://openbsd.cs.fau.de/pub/OpenBSD

Όποιο κι αν είναι το mirror που θα επιλέξετε, μπείτε στο directory ονόματι 6.0, μετά σ’ εκείνο της αρχιτεκτονικής που σας ενδιαφέρει και κατεβάστε το επιθυμητό ISO image. Αν, π.χ., θέλετε το image για πλήρη offline εγκατάσταση, πάρτε το αρχείο install60.iso (226,3MB). Αν πάλι προτιμάτε μικρότερο image και κατά τη διάρκεια της εγκατάστασης να κατέβουν μόνο τα απαραίτητα πακέτα, πάρτε το αρχείο cd60.iso (7,3MB).

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

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

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

Σε μία και μόνο οθόνη κάνουμε τις πιο σημαντικές επιλογές για το νέο σύστημα που τώρα εγκαθιστούμε.

Σε μία και μόνο οθόνη κάνουμε τις πιο σημαντικές επιλογές για το νέο σύστημα που τώρα εγκαθιστούμε. Αρχικά πληκτρολογούμε ένα hostname για το μηχάνημα (hauptbahnhof) — και για την ακρίβεια θέλουμε να ισχύει για το WAN interface (1) της συσκευής. Το προαναφερθέν αντιστοιχεί στο em0 interface του OpenBSD. Το firewall/router που στήνουμε δεν θέλουμε να παίρνει δυναμικά διεύθυνση IP από το modem/router, οπότε του δίνουμε ένα IP που να έχει νόημα για το δίκτυο ακριβώς πίσω από τη συσκευή του ISP. Για το netmask αφήνουμε την προεπιλογή (2). Δεν επιθυμούμε δικτύωση IPv6 για το em0 κι αμέσως προχωράμε στη ρύθμιση του em1, το οποίο είναι το LAN interface του router μας (3). Το βαφτίζουμε με ένα hostname της επιλογής μας (husavik), του δίνουμε μια έγκυρη διεύθυνση εσωτερικού δικτύου και, τέλος, ως netmask αφήνουμε το προτεινόμενο. Παρατηρήστε ότι στο em1 του παραδείγματος δώσαμε τη διεύθυνση 172.16.164.250, επομένως αυτή θα είναι η διεύθυνση του router (ή αλλιώς του gateway) για τις συσκευές πίσω από το OpenBSD firewall/router. Με βάση και το netmask, οι διευθύνσεις που θα έχουν οι συσκευές θα είναι της μορφής 172.16.164.*. Για άλλη μια φορά, δεν θέλουμε δικτύωση IPv6 για το em1. Στη συνέχεια πληκτρολογούμε τη διεύθυνση IP που έχει το modem/router του ISP (4). Πρόκειται για τη διεύθυνση gateway που έως τώρα έβλεπαν οι συσκευές μας και για το συγκεκριμένο παράδειγμα είναι η 192.168.201.2. Μετά δίνουμε ένα επιθυμητό domain name για το δίκτυο που θα εξυπηρετεί το OpenBSD firewall/router (5). Είμαστε περήφανοι κάτοχοι του colder.xyz, οπότε αυτό ακριβώς πληκτρολογήσαμε. Δίνουμε επίσης και μια διεύθυνση IP για τον DNS server, στον οποίο θα καταφεύγει ο nameserver του OpenBSD κάθε φορά που δεν θα βρίσκει τη ζητούμενη πληροφορία στην cache του. Προς το παρόν μπορεί να χρησιμοποιεί το modem/router του ISP για τις ανάγκες του, γι’ αυτό κι εμείς πληκτρολογήσαμε τη διεύθυνση 192.168.201.2. Και μετά τα θέματα της δικτύωσης ορίζουμε ένα συνθηματικό (password) για το λογαριασμό του διαχειριστή συστήματος (6), δηλαδή για τον root (το δίνουμε δύο φορές, για λόγους ασφαλείας). Επειδή θέλουμε να συνδεόμαστε στο firewall/router απομακρυσμένα και μέσω SSH, φροντίζουμε από τώρα ώστε η υπηρεσία του OpenSSH να ‘ναι ενεργοποιημένη (7). Το router μας δεν χρειάζεται περιβάλλον γραφικών, οπότε στην ερώτηση περί X Window System απαντάμε αρνητικά. Επιλέγουμε τέλος να μη δημιουργήσουμε λογαριασμό απλού χρήστη, αφού μάλλον είναι περιττός για το συγκεκριμένο box.

Αν και το SSH login απευθείας στο λογαριασμό του root και με χρήση password δεν είναι ό,τι πιο ασφαλές, προς το παρόν το επιτρέπουμε. Λίγο αργότερα θα φροντίσουμε ώστε να 'ναι δυνατό μόνο το key-based authentication. Ανά πάσα στιγμή, εξάλλου, αν θέλουμε φτιάχνουμε κι ένα λογαριασμό απλού χρήστη κι απαγορεύουμε το SSH στο λογαριασμό του root -- μάλιστα ασχέτως της μεθόδου ταυτοποίησης.

Αν και το SSH login απευθείας στο λογαριασμό του root και με χρήση password δεν είναι ό,τι πιο ασφαλές, προς το παρόν το επιτρέπουμε. Λίγο αργότερα θα φροντίσουμε ώστε να ‘ναι δυνατό μόνο το key-based authentication. Ανά πάσα στιγμή, εξάλλου, αν θέλουμε φτιάχνουμε κι ένα λογαριασμό απλού χρήστη κι απαγορεύουμε το SSH στο λογαριασμό του root — μάλιστα ασχέτως της μεθόδου ταυτοποίησης.

Έφτασε η στιγμή για τη διαμόρφωση του ενός και μοναδικού δίσκου του συστήματος, καθώς και για τη διευθέτηση των κατατμήσεων πάνω του. Δίνουμε όλο το δίσκο στο OpenBSD (επιλογή whole) και δεχόμαστε την πρόταση του installer για αυτόματη διευθέτηση κατατμήσεων (επιλογή auto layout).

Έφτασε η στιγμή για τη διαμόρφωση του ενός και μοναδικού δίσκου του συστήματος, καθώς και για τη διευθέτηση των κατατμήσεων πάνω του. Δίνουμε όλο το δίσκο στο OpenBSD (επιλογή whole) και δεχόμαστε την πρόταση του installer για αυτόματη διευθέτηση κατατμήσεων (επιλογή auto layout).

Επιλογή σετ αρχείων που *δεν* θέλουμε να εγκατασταθούν. Για το firewall/router δεν χρειάζονται τα σετ περί παιχνιδιών ή παραθυρικού συστήματος X. Παρατηρήστε ότι για την αποεπιλογή δίνουμε μοτίβα που χωρίζονται με ένα κενό κι έχουν ως επίθεμα την παύλα. Προσέξτε εξάλλου και την τελευταία ερώτηση, για τις υπογραφές SHA256 που λείπουν. Αυτό είναι φυσιολογικό, πράγματι δεν περιλαμβάνονται στο δωρεάν ISO image που κατεβάσαμε, οπότε πληκτρολογήστε 'yes' (χωρίς τα εισαγωγικά) και πιέστε το [Enter] για να ξεκινήσει η εγκατάσταση.

Επιλογή σετ αρχείων που δεν θέλουμε να εγκατασταθούν. Για το firewall/router δεν χρειάζονται τα σετ περί παιχνιδιών ή παραθυρικού συστήματος X. Παρατηρήστε ότι για την αποεπιλογή δίνουμε μοτίβα που χωρίζονται με ένα κενό κι έχουν ως επίθεμα την παύλα. Προσέξτε εξάλλου και την τελευταία ερώτηση, για τις υπογραφές SHA256 που λείπουν. Αυτό είναι φυσιολογικό, πράγματι δεν περιλαμβάνονται στο δωρεάν ISO image που κατεβάσαμε, οπότε πληκτρολογήστε “yes” (χωρίς τα εισαγωγικά) και πιέστε το [Enter] για να ξεκινήσει η εγκατάσταση.

Πολύ σύντομα η εγκατάσταση των σετ ολοκληρώνεται, δεχόμεθα συγχαρητήρια και καλούμαστε να πληκτρολογήσουμε 'reboot' (χωρίς τα εισαγωγικά), προκειμένου ο υπολογιστής να εκκινήσει για πρώτη φορά στο ωραίο OpenBSD.

Πολύ σύντομα η εγκατάσταση των σετ ολοκληρώνεται, δεχόμεθα συγχαρητήρια και καλούμαστε να πληκτρολογήσουμε “reboot” (χωρίς τα εισαγωγικά), προκειμένου ο υπολογιστής να εκκινήσει για πρώτη φορά στο ωραίο OpenBSD.

Πρώτο boot στο ολοκαίνουργιο OpenBSD μας, το οποίο θα αποτελέσει τη βάση για το ασφαλέστατο firewall/router του τοπικού μας δικτύου. Παρεμπιπτόντως, πώς σας φαίνεται το FQDN του συστήματος;

Πρώτο boot στο ολοκαίνουργιο OpenBSD μας, το οποίο θα αποτελέσει τη βάση για το ασφαλέστατο firewall/router του τοπικού μας δικτύου. Παρεμπιπτόντως, πώς σας φαίνεται το FQDN του συστήματος;

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

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

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

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

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

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

Υπηρεσίες DHCP και DNS, με το dnsmasq
Η υπηρεσία DHCP είναι σχεδόν πάντα απαραίτητη στους routers, αφού όλες οι συσκευές-πελάτες καλό είναι να ‘χουν δυνατότητα για αυτόματη διευθυνσιοδότηση. Πιθανώς βέβαια να υπάρχουν και κάποιες εξ αυτών για τις οποίες θα θέλουμε στατικά IP. Ακόμη και τότε όμως καλό είναι να μην τους ορίζουμε τα IP χειροκίνητα, αλλά να τους τα αντιστοιχίζει ο DHCP server βάσει MAC address. Επίσης, σίγουρα οι συσκευές μας χρειάζονται όλες έναν nameserver, ο οποίος θα φροντίζει και θα μεταφράζει τα domain names σε IPs. Μετά την εγκατάσταση, το OpenBSD διαθέτει τόσο DHCP όσο και DNS server (τον unbound). Το θέμα είναι ότι δεν συνεργάζονται για το resolving των FQDNs που έχουν τα μηχανήματα του τοπικού δικτύου. Παράδειγμα: Αν ένα μηχάνημα έχει FQDN το einarben.colder.xyz, δεν μπορούμε από άλλο μηχάνημα να κάνουμε, π.χ., ping einarben.colder.xyz. Στη θέση του einarben.colder.xyz θα πρέπει να βάλουμε την αριθμητική διεύθυνση IP που έχει.

Ευτυχώς, αντί να χρησιμοποιήσουμε τους προκαθορισμένους DHCP και DNS servers, κάλλιστα μπορούμε να εγκαταστήσουμε τον dnsmasq: παρέχει υπηρεσίες DHCP αλλά και DNS, ενώ κάνει και resolving ονομάτων που έχουν αντιστοιχιστεί από τον DHCP. O dnsmasq δεν υπάρχει στη βασική εγκατάσταση του OpenBSD, οπότε θα καταφύγουμε στο εργαλείο pkg_add ώστε να φέρουμε το σχετικό πακέτο από το Internet και να το εγκαταστήσουμε. Με την ευκαιρία, στο αρχείο /root/.profile ας προσθέσουμε μια γραμμή που θα υποδεικνύει από πού θα κατεβαίνουν τα πακέτα:

# echo "export PKG_PATH=http://openbsd.cs.fau.de/pub/OpenBSD/6.0/packages/i386" >> .profile

Οι παρατηρητικοί θα προσέξατε ότι ξανά προτιμήσαμε τον mirror στο Erlangen. Παρεμπιπτόντως, ας σημειώσουμε ότι μια λίστα με τα διαθέσιμα mirrors θα βρείτε στο

https://www.openbsd.org/ftp.html

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

# export PKG_PATH=http://openbsd.cs.fau.de/pub/OpenBSD/6.0/packages/i386

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

# pkg_add dnsmasq
quirks-2.241 signed on 2016-07-29T15:39:09Z
quirks-2.241: ok
dnsmasq-2.76: 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.

# vi /etc/dnsmasq.conf

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

no-resolv
proxy-dnssec
server=127.0.0.1#40
listen-address=127.0.0.1,172.16.164.250
bind-interfaces

domain=colder.xyz
dhcp-range=172.16.164.100,172.16.164.125,12h

dhcp-host=00:0c:29:ec:27:8e,einarben,172.16.164.195,24h
dhcp-host=00:0c:29:71:71:b8,thesender,172.16.164.200,24h
dhcp-host=00:50:56:2b:5b:c8,ohsuse,172.16.164.205,24h
dhcp-host=00:50:56:2f:e5:78,osuse-vm,172.16.164.210,24h
dhcp-host=00:0c:29:cb:fa:4a,tweed,172.16.164.215,24h

dhcp-option=252,"\n"

Προσέξτε την οδηγία server, στην τρίτη γραμμή από πάνω, η οποία αφορά στο DNS-μέρος του dnsmasq: αν για το ερώτημα κάποιου πελάτη δεν υπάρχει απάντηση στην cache του dnsmasq, τότε ρωτά κάποια υπηρεσία που τρέχει τοπικά κι αφουγκράζεται για αιτήσεις από το port 40. Πρόκειται για το DNSCrypt, το οποίο δεν έχουμε εγκαταστήσει ακόμα αλλά θα το φροντίσουμε σε λίγο. Προσοχή χρειάζεται και η οδηγία listen-address, από κάτω. Όπως βλέπετε, το dnsmasq εξυπηρετεί πελάτες από το ίδιο το μηχάνημα (127.0.0.1), καθώς και πελάτες από το τοπικό δίκτυο (θυμηθείτε: το LAN interface στο μηχάνημά μας έχει για IP το 172.16.164.250). Κατά τα άλλα, οι διευθύνσεις IP που μοιράζει αυτόματα το DHCP-μέρος του dnsmasq, βρίσκονται εντός του διαστήματος 172.16.164.100-192.16.164.125 (26 στο πλήθος διαφορετικές συσκευές δεν είναι και λίγες για ένα οικιακό δίκτυο). Επίσης, πέντε συγκεκριμένοι πελάτες, δηλαδή πέντε μηχανήματα με συγκεκριμένα 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 συμπεριλαμβανομένου. Κατά τα αναμενόμενα, η εγκατάσταση του σχετικού πακέτου γίνεται με το εργαλείο pkg_add:

# pkg_add dnscrypt-proxy 
quirks-2.241 signed on 2016-07-29T15:39:09Z
dnscrypt-proxy-1.6.1p0:libltdl-2.4.2p1: ok
dnscrypt-proxy-1.6.1p0:libsodium-1.0.10: ok
dnscrypt-proxy-1.6.1p0:libexecinfo-0.3v0: ok
dnscrypt-proxy-1.6.1p0: ok
The following new rcscripts were installed: /etc/rc.d/dnscrypt_proxy
See rcctl(8) for details.
Look in /usr/local/share/doc/pkg-readmes for extra documentation.

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

# vi /etc/rc.conf.local

και τροποποιούμε τα περιεχόμενα του αρχείου ώστε να είναι όπως τα ακόλουθα:

dnscrypt_proxy_flags=-l /dev/null -R ns0.dnscrypt.is -a 127.0.0.1:40
pkg_scripts="dnsmasq dnscrypt_proxy"

Αποθηκεύουμε τις αλλαγές και προς το παρόν δεν ενεργοποιούμε το DNSCrypt. Όπως είναι φανερό από την πρώτη γραμμή του rc.conf.local, ο απομακρυσμένος DNSCrypt-aware nameserver που υποδείξαμε στο DNSCrypt είναι ο ns0.dnscrypt.is (εις το Reykjavik). Εννοείται ότι υπάρχει δυνατότητα καθορισμού διαφορετικού nameserver και μια λίστα με DNSCrypt resolvers θα βρείτε στο ακόλουθο URL:

https://github.com/jedisct1/dnscrypt-proxy/blob/master/dnscrypt-resolvers.csv

Παρατηρήστε, εξάλλου, ότι ο DNSCrypt ακούει για συνδέσεις από το localhost και συγκεκριμένα από το port 40. Πολύ ευχάριστη αυτή η σύμπτωση, ειδικά αν σκεφτεί κανείς ότι εκεί είπαμε στον dnsmasq να στέλνει τα αιτήματά του όταν δεν μπορεί να εξυπηρετήσει πελάτες κοιτάζοντας στην τοπική DNS cache. Ας φροντίσουμε ώστε και το ίδιο το λειτουργικό να χρησιμοποιεί τον 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. Πρέπει τώρα να ρυθμίσουμε και το firewall του router μας. Ουσιαστικά θα τροποποιήσουμε το αρχείο /etc/pf.conf. Δείτε τα περιεχόμενα του δικού μας:

theLAN="em1"

table <notReally> { 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)

block in quick on egress from <notReally> to any
block in quick inet6 all
block return out quick inet6 all
block return out quick log on egress from any to <notReally>
block return out quick log on egress proto { tcp udp } from any to any port 53
block in all

pass out quick inet keep state
pass in on $theLAN inet
pass in on egress inet proto tcp from any to (egress) port 22
pass in on $theLAN inet proto { tcp udp } from $theLAN to ! $theLAN port 53 rdr-to $theLAN

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

# reboot

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

Δοκιμές
Αυτή τη στιγμή έχουμε ένα ελαφρύ, ισχυρό κι εξαιρετικά ασφαλές OpenBSD-based firewall/router για το LAN μας. Οι πρώτες δοκιμές που οφείλουμε να κάνουμε ώστε να βεβαιωθούμε ότι δουλεύει, είναι να χρησιμοποιήσουμε ένα οποιοδήποτε μηχάνημα πίσω από τον ολοκαίνουργιο router, για πρόσβαση στο τοπικό δίκτυο και βεβαίως στο Internet. Από εκεί και πέρα, μια άλλη δοκιμή που δεν πρέπει να παραλείψουμε, αφορά στη χρήση του DNSCrypt. Στην περίπτωσή μας, για παράδειγμα, σε ένα μηχάνημα με Windows 10 που εξυπηρετούνταν από το firewall/router, ανοίξαμε τον Edge browser κι επισκεφτήκαμε τη διεύθυνση https://ipleak.net. Μετά από λίγα δευτερόλεπτα διαπιστώσαμε ότι ο DNS server που μας εξυπηρετούσε ήταν στην Ισλανδία — και το γεγονός αυτό είναι συνεπές με την οδηγία που έχουμε στο αρχείο /etc/rc.conf.local.

Με μια επίσκεψη στο http://ipleak.net διαπιστώνουμε ότι ο nameserver που χρησιμοποιούμε είναι στην Ισλανδία. Ακριβώς αυτό έχουμε ζητήσει με τη σχετική οδηγία στο /etc/rc.conf.local, η οποία λαμβάνεται υπόψη πριν από την ενεργοποίηση της υπηρεσίας του DNSCrypt.

Με μια επίσκεψη στο http://ipleak.net διαπιστώνουμε ότι ο nameserver που χρησιμοποιούμε είναι στην Ισλανδία. Ακριβώς αυτό έχουμε ζητήσει με τη σχετική οδηγία στο /etc/rc.conf.local, η οποία λαμβάνεται υπόψη πριν από την ενεργοποίηση της υπηρεσίας του DNSCrypt.

Τέλος, αξίζει να σκανάρουμε το WAN interface του firewall/router από έναν υπολογιστή που βρίσκεται πίσω από τον router του ISP. Δείτε το screenshot που ακολουθεί.

Σκανάρισμα του WAN interface του router μας από μηχάνημα με Kali Linux, το οποίο βρίσκεται εκτός του LAN που εξυπηρετεί ο router. Χρησιμοποιούμε το nmap μέσα από το front-end περιβάλλον που παρέχει το zenmap, και μόλις ολοκληρώσαμε μια σάρωση με βάση το προφίλ Intense scan plus UDP. Όπως διαπιστώνετε, ο router δεν αποκαλύπτει και πολλά για τον εαυτό του.

Σκανάρισμα του WAN interface του router μας από μηχάνημα με Kali Linux, το οποίο βρίσκεται εκτός του LAN που εξυπηρετεί ο router. Χρησιμοποιούμε το nmap μέσα από το front-end περιβάλλον που παρέχει το zenmap, και μόλις ολοκληρώσαμε μια σάρωση με βάση το προφίλ Intense scan plus UDP. Όπως διαπιστώνετε, ο router δεν αποκαλύπτει και πολλά για τον εαυτό του.

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

sndiod_flags=NO
apmd_flags="-A"

dnscrypt_proxy_flags=-l /dev/null -R ns0.dnscrypt.is -a 127.0.0.1:40
pkg_scripts="dnsmasq dnscrypt_proxy"

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

# /etc/rc.d/sndiod stop
# /etc/rc.d/apmd start

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

# vi /etc/fstab

και τροποποιήστε τη γραμμή με τις οδηγίες προσάρτησης του root partition. Για παράδειγμα, η σχετική γραμμή στο δικό μας fstab είχε ως εξής

4bda10c112e2f8ff.a / ffs rw 1 1

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

4bda10c112e2f8ff.a / ffs rw,noatime,softdep 1 1

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

8 Responses to “Οικιακός OpenBSD router, με DNSCrypt & resolving τοπικών FQDNs”

  1. hlias | 06/10/2016 at 13:59

    Καλησπερα σας και συγχαρητηρια για την πρωτοποριακη δουλεια σας.
    Θελω να σας ρωτησω σχετικα με το hardware του pfsense και openBSD,
    αυτες οι συσκευες ερχονται με εγκαταστημενα τα ΛΣ pfsense και openBSD;
    η τα εγκαθιστουμε εμεις;(κακα τα ψεματα για να χρησιμοποιησης τα 2 αυτα λειτουργικα συστηματα ως router χρειαζονται τα καταληλα hardware box τα παλια pc
    δεν νομιζω οτι ειναι λυσεις).
    Επισης γραψτε 2 κουβεντες για τον τροπο συνδιασμου του νεου router με το modem του παροχεα.
    ΕΥΧΑΡΙΣΤΩ>

    • subZraw | 06/10/2016 at 14:12

      Καλησπέρα Ηλία,
      Νομίζω ότι οι απαντήσεις στις ερωτήσεις σου εμπεριέχονται στο άρθρο.

  2. sec42bsafe | 08/10/2016 at 01:24

    Καλησπέρα,
    Εξαίρετο άρθρο !! Αναμένουμε κι άλλα τέτοιας ποιότητας και ενδιαφέροντος :)
    Ερώτηση εάν δεν θέλουμε να χρησιμοποιήσουμε καθόλου το Modem/Router του ISP απενεργοποιώντας το firewall έχεις να μας προτείνεις κάποιο dedicated vdsl/dsl Modem ?

    • subZraw | 08/10/2016 at 06:44

      Ενδιαφέρουσα ερώτηση! Από τη μεριά μου πάντως δεν έχω κάποια πρόταση. Προσωπικά, απλά κοιτάζω να απενεργοποιώ το firewall του modem/router — ή έστω να βάζω το δικό μου firewall/router στο DMZ.

  3. Captain_Harlock | 30/10/2016 at 21:27

    Καλησπέρα σας!!!! Για μία ακόμη φορά ένα εξαιρετικό άρθρο επάξιο των όσον διαβάζουμε στο Deltahacker.

    Αυτό που θα ήθελα να ρωτήσω όσον αφορά το OpenBSD είναι αν έχετε υπόψη σας κάποιο front-end που θα μπορούσε να χρησιμοποιηθεί για την παρουσίαση της τρέχουσας κατάστασης του firewall (διεργασίες cpu/memory κτλ) και την παρουσίαση στοιχείων που αφορούν το traffic, κατά αναλογία με το PFsense. Αυτό καθώς σκέφτομαι σοβαρά να αντικαταστήσω το Pfsense που τρέχω σε dedicated barebone μηχάνημα με το OpenBSD και θα με βοηθούσε η εμπειρία σας σε αυτό. Επίσης τι θα κέρδιζε πραγματικά με το OpenBSD έναντι του Pfsense;

    Ευχαριστώ!

  4. subZraw | 01/11/2016 at 22:18

    Καλησπέρα :)

    Ξεκινάω από το τελευταίο σου ερώτημα. Αν και το OpenBSD έχει τρομερά καλή φήμη στο θέμα της ασφάλειας, πιστεύω ότι είτε με το pfSense είτε με το OpenBSD θα είσαι το *ίδιο* ασφαλής. Το πλεονέκτημα του OpenBSD αφορά στις πολύ πιο χαμηλές του απαιτήσεις ως προς το hardware. Βέβαια αυτό το πληρώνεις, αφού δεν παρέχεται κάποιο web interface παρόμοιο μ’ εκείνο του pfSense. Γενικά, αν θέλεις να παρακολουθείς ζωντανά την κατάσταση του OpenBSD σου, καταφεύγεις σε εργαλεία για τη γραμμή εντολών όπως, π.χ., το vnstat.

  5. Captain_Harlock | 07/11/2016 at 20:23

    Καλησπέρα :). Διαβάζοντας για μία ακόμη φορά τα άρθρα που αφορούν το OpenBSD (από τα τεύχη 1 και 2) νομίζω πως κατέληξα σε αυτό το ΛΣ έναντι του PfSense/FreeBSD!

    Προμηθεύτηκα λοιπόν το “The Book of PF 3rd Edition” και οπλίστηκα με περισσή υπομονή :)

    Just wish me luck!!!!

    • subZraw | 09/11/2016 at 07:17

      Πάρα πολύ ωραία! Πιστεύω ότι ακριβώς επειδή το OpenBSD *δεν* έχει το πολύ καλό κι εύχρηστο webUI του pfSense, θα μάθεις περισσότερα και τελικά θα το διασκεδάσεις περισσότερο :)

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων