Σ
ίγουρα όλοι έχουμε βρεθεί σε μία κατάσταση να έχουμε
διάφορα στικάκια στις τσέπες του μπουφάν μας, στην
τσάντα μας, από εδώ και από εκεί, μόνο και μόνο για να
έχουμε μαζί μας κάποια χρήσιμα αρχεία της εταιρείας μας. Η
λύση, φυσικά, είναι το πολύ εύκολο στήσιμο ενός file server,
και η «έκθεσή» του στο internet. Ναι, αλλά οι κωδικοί ή τα
hashes (όταν μιλάμε για SMB), καθώς και τα ίδια τα αρχεία,
είναι έρμαιο στα χέρια των ενδιάμεσων κόμβων απ’ όπου δια-
κινούνται τα πακέτα μας για να φτάσουν στον προορισμό
τους. Δεν θα ήταν καλύτερα εάν υπήρχε η δυνατότητα να νιώ-
θουμε σαν να βρισκόμασταν στην ίδια την εταιρεία μας με το
laptop μας και να το είχαμε «κουμπώσει» στον router; Με αυ-
τόν τον τρόπο θα είχαμε πρόσβαση σε όλα τα μηχανήματα
στο δίκτυο και γενικά θα ήταν σαν να ήμασταν εκεί! Αυτό το
lab έχει σκοπό να μας λύσει τα χέρια σε πολλές περιπτώσεις,
όπως στο να μπορούμε να διορθώσουμε προβλήματα στο δί-
κτυο της εταιρείας μας από την άνεση του σπιτιού μας. Νομί-
ζω ότι είναι ενδιαφέρον :-). Πάμε να δούμε όμως κάποια βασι-
κά πράγματα για το OpenVPN προτού προχωρήσουμε.
Το OpenVPN τρέχει στο user space, σε αντίθεση με άλλες
λύσεις του είδους, όπως το iPSec και PPTP, που δραστηριο-
ποιούνται στο kernel space. Αυτό το καθιστά ελαφρώς πιο αρ-
γό και πιο απαιτητικό σε επεξεργαστή, ταυτόχρονα όμως το
κάνει αρκετά πιο portable και πιο εύκολο στη ρύθμιση και τη
διαχείρισή του. Το πρόγραμμα το εγκαθιστούμε πανεύκολα
με μία μόνο εντολή: yum install openvpn για Fedoroειδή ή
apt-get install openvpn για Debian και τα παράγωγά του. Αξί-
ζει να σημειώσουμε εδώ ότι έχουμε το ίδιο εκτελέσιμο και για
server και για client. Αυτό σημαίνει ότι στον υπολογιστή μας,
καθώς και στον server, θα εκτελέσουμε την ίδια εντολή εγκα-
τάστασης. Το μόνο που θα διαφέρει είναι τα αρχεία ρυθμίσε-
ων που θα δημιουργήσουμε σε λίγο. Επίσης, στον κατάλογο
/usr/share/doc/openvpn* θα βρούμε αρκετή τεκμηρίωση, κα-
θώς και κάποια sample configuration files. Ήρθε η ώρα όμως
να ρυθμίσουμε τον server μας.
Ρύθμιση του Server
Ο server υποτίθεται ότι είναι μέσα στην εταιρεία μας και ότι
τρέχει Linux. Τα δύο άκρα του VPN μπορούν να συνδεθούν με
δύο τρόπους. Ο ένας είναι το Ethernet bridging (tap interface,
layer 2 encapsulation) και ο άλλος είναι με routing (tun
interface, layer 3 encapsulation). Εμείς στο παράδειγμά μας
θα χρησιμοποιήσουμε το δεύτερο, καθώς είναι αρκετά πιο
εύκολος στο στήσιμο και πιο συνηθισμένος, αφού είναι κατάλ-
ληλος για τις περισσότερες περιπτώσεις. Όσο για το
authentication, και εδώ έχουμε αρκετές επιλογές, μερικές εκ
των οποίων είναι με preshared secret key, με PKi ή με δικό
μας σκριπτάκι. Εμείς πάλι θα επιλέξουμε τον πιο συνηθισμένο
και ασφαλή τρόπο, με PKi. Θα ξεκινήσουμε λοιπόν να δημι-
ουργούμε τα κλειδιά μας. Καλό είναι όποιος δεν έχει εξοικεί-
ωση με την έννοια του PKi να συμβουλευτεί τη Wikipedia, αλ-
λιώς στο πρώτο στάδιο, που είναι η δημιουργία των κλειδιών,
δεν θα αντιλαμβάνεται τι κάνουμε. Παρ’ όλα αυτά, μπορεί να
ακολουθήσει κατά βήμα τις οδηγίες και θα έχει ένα λειτουργι-
κότατο VPN! Επίσης, πρέπει να πούμε πως οτιδήποτε κάνου-
με από εδώ και πέρα, θα το κάνουμε σαν root, καθώς μόνο ο
υπερχρήστης μπορεί να δημιουργεί δικτυακά interfaces, τα
οποία χρειάζεται το OpenVPN.
cp -r /usr/share/openvpn/easy-rsa/2.0/
/etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
nano vars
Τώρα αντιγράψαμε τα πολύ χρήσιμα σκριπτάκια που μας
παρέχει το πακέτο εγκατάστασης του OpenVPN για τη δημι-
ουργία των κλειδιών μας, γλιτώνοντάς μας από πολύ κόπο,
μια και αυτά δημιουργούνται με το openSSL. Μετά ανοίγουμε
το αρχείο vars και αλλάζουμε τις τιμές KEY_COUNTRY,
KEY_PROViNCE, KEY_CiTY, KEY_ORG και KEY_EMAiL σύμ-
φωνα με τις προτιμήσεις μας, προσέχοντας να μην αφήσουμε
καμία τιμή κενή. Αφού τελειώσουμε, κλείνουμε τον editor σώ-
ζοντας το αρχείο και εκτελούμε τα παρακάτω.
. vars
./clean-all
./build-ca
Εδώ, πρώτα κάναμε source το αρχείο vars, με σκοπό οι με-
ταβλητές του να περάσουν στο shell μας ώστε να χρησιμοποι-
ηθούν από τα scripts που θα εκτελέσουμε μετά. Ύστερα, κα-
θαρίσαμε τον κατάλογο keys από τυχόν προηγούμενα κλειδιά
και μετά δημιουργήσαμε στον κατάλογο keys το αυτοϋπογε-
γραμμένο πιστοποιητικό και το ιδιωτικό κλειδί του certification
authority μας, ονόματι ca.key. Προσοχή σε αυτό το αρχείο,
διότι σε αυτό στηρίζεται όλη η ασφάλεια του tunnel μας, οπό-
τε καλό θα ήταν, αφού τελειώσουμε όλη τη διαδικασία του
lab, να το αποθηκεύσουμε κάπου ασφαλώς και εκτός δικτύ-
ου. Συνεχίζουμε τη διαδικασία δημιουργώντας τα κλειδιά του
server μας, δίνοντάς τους το προφανές πρόθεμα “server”.
./build-key-server server
Σε αυτήν τη διαδικασία δημιουργείται ένα ιδιωτικό κλειδί
(server.key), καθώς και μία αίτηση για υπογραφή του αντίστοι-
χου δημόσιου κλειδιού (server.csr) από το certification
authority μας. Στα prompt που θα βγάλει η εντολή πατάμε
enter για να αποδεχτούμε τις μεταβλητές που εισαγάγαμε
προηγούμενους στο αρχείο vars, εκτός από δύο, τις οποίες
πρέπει να συμπληρώσουμε εκείνη τη στιγμή. Επίσης, απαντά-
με δύο φορές με “y” στο ερώτημα για υπογραφή του κλειδι-
ού. Συνεχίζουμε με τη δημιουργία των κλειδιών του client και
επαναλαμβάνουμε τη διαδικασία τόσες φορές, όσοι είναι οι
clients που επιθυμούμε να συνδέονται στο δίκτυο της εταιρεί-
ας μας.
./build-key client1
Τέλος, πρέπει να δημιουργήσουμε ένα κλειδί Diffie
Hellman, διαδικασία η οποία μπορεί να διαρκέσει μερικά λε-
πτά.
./build-dh
Του Χριστόδουλου Λαμπρινού <chris-lamprinos@hotmail.com>
Linux Labs - VPN Tunneling
Βλέπουμε στην πράξη τα πολλαπλά οφέλη που μας
προσφέρει το παντοδύναμο OpenVPN, δίνοντάς μας
τη δυνατότητα να χτίζουμε διάφορων ειδών tunnel.
Εργαλεία:
OpenVPN
Δυσκολία:
URL:
http://openvpn.net
Τεκμηρίωση
Linux Inside
64
Ο Χριστόδουλος περνάει την ώρα του προσπαθώντας να μάθει LInux.
OpenVPN