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

OpenVPN σε Ubuntu Server – επικαιροποιημένος οδηγός

Ανήκουμε στους φανατικούς υποστηρικτές του privacy στο Διαδίκτυο. Όχι τόσο επειδή, σώνει και καλά, έχουμε σημαντικά πράγματα για να κρύβουμε. Απλά, πιστεύουμε ότι όποιος επιθυμεί να κινείται μακριά από τα αδιάκριτα βλέμματα δικαιούται να ‘χει αυτή την επιλογή. Σε διαφορετική περίπτωση το Διαδίκτυο γίνεται ένα εξαιρετικά αφιλόξενο μέρος — για να μην πούμε απάνθρωπο.

Μια από τις πλέον αποτελεσματικές λύσεις για τη διασφάλιση του ιδιωτικού απορρήτου (privacy) στο Διαδίκτυο παρέχεται από την τεχνολογία των Virtual Private Networks γενικότερα και του OpenVPN ειδικότερα. Αναλυτικά για το OpenVPN γράψαμε για πρώτη φορά σε σχετικό άρθρο στο deltaHacker 007, όπου δείξαμε πώς στήνουμε έναν OpenVPN server σε περιβάλλον Ubuntu Server 11.10. Στο παρόν άρθρο δεν θα παρουσιάσουμε ξανά το OpenVPN. Αν δεν γνωρίζετε περί τίνος πρόκειται, διαβάστε την εισαγωγή του προαναφερθέντος άρθρου. Επίσης, σε αυτό το OpenVPN usage demo μπορείτε να παρακολουθήσετε και μια άλλη, ενδιαφέρουσα εφαρμογή του OpenVPN, εκτός από τη διασφάλιση του privacy: Πρόσβαση σε περιεχόμενο που υπόκειται σε τεχνητούς περιορισμούς.

Μετά το πρώτο άρθρο περί OpenVPN στο τεύχος 007 ακολούθησαν άλλα δύο, τα οποία αμφότερα δημοσιεύσαμε εδώ, στο site του περιοδικού. Στο ένα εξ αυτών δείχνουμε τη ρύθμιση του OpenVPN σε περιβάλλον FreeBSD και στο άλλο τη μετατροπή ενός Raspberry Pi, που τρέχει το Raspbian, σε OpenVPN server.

Κρίνοντας από το feedback που μας δίνετε εσείς, οι αναγνώστες του deltaHacker, καταλαβαίνουμε ότι πολλοί βρίσκουν τουλάχιστον γοητευτική την ιδέα ενός OpenVPN server. Αρκετοί, μάλιστα, στο όνομα του OpenVPN βρήκαν την τέλεια δικαιολογία για την αγορά του δικού τους VPS. (Τους καταλαβαίνουμε.) Όμως από κάποια στιγμή και μετά αρχίσαμε να λαμβάνουμε emails που φανέρωναν ότι σε νεότερες εκδόσεις του OpenVPN έχουν υπεισέλθει συγκεκριμένες αλλαγές, με αποτέλεσμα οι οδηγίες μας να μην ισχύουν πλέον κατά γράμμα. Βρήκαμε το χρόνο, ψάξαμε το θέμα και διαπιστώσαμε ότι, πράγματι, έτσι έχει η κατάσταση. Στο άρθρο που τώρα διαβάζετε, λοιπόν, παραθέτουμε ανανεωμένες, αναλυτικές οδηγίες για το στήσιμο OpenVPN σε περιβάλλον Ubuntu Server.

Στο πρώτο, σύντομο μέρος του άρθρου, δείχνουμε πώς εργαζόμαστε κάτω από Ubuntu Server 12.04 LTS (κωδική ονομασία “Precise Pangolin”). Πρόκειται για την πλέον πρόσφατη έκδοση του Ubuntu Server για την οποία η Canonical παρέχει μακρόπνοη, πενταετή υποστήριξη (εξ ου και το LTS, από το Long-Term Support). Την έκδοση αυτή προτείνουμε σε όσους σκοπεύουν να στήσουν ένα σταθερό σύστημα –εικονικό ή φυσικό δεν έχει σημασία– που θα κρατήσουν για πολύ καιρό. Σημειώστε ότι το 12.04 LTS κυκλοφόρησε περί τα τέλη του Απριλίου του 2012 και θα υποστηρίζεται επισήμως περίπου ως τα τέλη του Απριλίου του 2017.

Στο δεύτερο, εκτενέστερο μέρος του άρθρου, δείχνουμε αναλυτικά τη ρύθμιση του OpenVPN σε περιβάλλον Ubuntu Server 13.10 (κωδική ονομασία “Saucy Salamander”). Η έκδοση 13.10 του Ubuntu κυκλοφόρησε τον Οκτώβριο του 2013 και η Canonical την υποστηρίζει για 9 μήνες, δηλαδή έως τον Ιούλιο του 2014. Περιλαμβάνει δε την έκδοση 2.3 του OpenVPN η οποία, σε σχέση με τη 2.2 και προγενέστερες που συναντάμε σε παλαιότερες εκδόσεις του Ubuntu, εισάγει αρκετές βελτιώσεις. Κρίναμε σκόπιμο να παρουσιάσουμε αναλυτικά τις οδηγίες για το στήσιμο του OpenVPN στο Ubuntu Server 13.10. Κατά πάσα πιθανότητα, οι ίδιες ακριβώς οδηγίες θα ισχύουν και για την επόμενη έκδοση του Ubuntu, τη 14.04 (κωδική ονομασία “Trusty Tahr”, κυκλοφορεί λίγο μετά τα μέσα του Απριλίου 2014). Περιττό επίσης ν’ αναφέρουμε ότι οι οδηγίες μας μεταφέρονται (σχετικά) εύκολα και σε άλλες διανομές Linux, με ελάχιστο ή ακόμη και καθόλου κόπο.

Για το υπόλοιπο του άρθρου υποθέτουμε ότι έχετε ήδη εγκαταστήσει την επιθυμητή έκδοση του Ubuntu Server, σε φυσικό ή εικονικό υπολογιστή ή σε κάποιο VPS.

Ενημέρωση 22/04/2014: Η έκδοση 14.04 LTS του Ubuntu έχει ήδη κυκλοφορήσει και στην πρώτη ευκαιρία θα ενημερώσουμε σχετικά τον παρόντα οδηγό.

Ενημέρωση 14/05/2014: Ο παρών οδηγός ενημερώθηκε ώστε να ισχύει και για το Ubuntu Server 14.04 LTS. Οι οδηγίες εγκατάστασης και ρύθμισης είναι παρόμοιες με την περίπτωση του 13.10, εκτός από δυο-τρεις διαφοροποιήσεις. Οι σχετικές επισημάνσεις για το 14.04 LTS έχουν εισαχθεί στα κατάλληλα σημεία της ροής του 2ου μέρους.

Μέρος 1 — OpenVPN 2.2 σε Ubuntu Server 12.04 LTS
Μπορείτε ν’ ακολουθήσετε τις οδηγίες για το Raspbian, σχεδόν κατά γράμμα. Ουσιαστικά, μόνο στο βήμα 2 θα χρειαστεί ν’ αποκλίνετε *λίγο* από τον οδηγό. Αναλυτικότερα, μετά την τροποποίηση του αρχείου vars ο αναγνώστης παροτρύνεται να το “τρέξει”, ώστε να ανατεθούν τιμές στις εμπλεκόμενες μεταβλητές. Αν το κάνετε, δίνοντας

source ./vars

θα πάρετε το ακόλουθο μήνυμα λάθους:

**************************************************************
  No /etc/openvpn/easy-rsa/openssl.cnf file could be found
  Further invocations will fail
**************************************************************

Δεν υπάρχει θέμα, απλά ανοίξτε το αρχείο whichopensslcnf με το nano

nano whichopensslcnf

κι αφαιρέστε τις παρουσίες του ακόλουθου string:

[[:alnum:]]

Μετά τις αλλαγές, τα περιεχόμενα του script θα πρέπει να ‘ναι τα ακόλουθα:

#!/bin/sh

cnf="$1/openssl.cnf"

if [ "$OPENSSL" ]; then
        if $OPENSSL version | grep -E "0\.9\.6?" > /dev/null; then
                cnf="$1/openssl-0.9.6.cnf"
        elif $OPENSSL version | grep -E "0\.9\.8?" > /dev/null; then
                cnf="$1/openssl-0.9.8.cnf"
        elif $OPENSSL version | grep -E "1\.0\.[[:digit:]]" > /dev/null; then
                cnf="$1/openssl-1.0.0.cnf"
        else
                cnf="$1/openssl.cnf"
        fi
fi

echo $cnf

if [ ! -r $cnf ]; then
    echo "**************************************************************" >&2
    echo "  No $cnf file could be found" >&2
    echo "  Further invocations will fail" >&2
    echo "**************************************************************" >&2
fi

exit 0

Αποθηκεύστε, τρέξτε ξανά το vars με

source ./vars

και συνεχίστε τον οδηγό κανονικά.

Μέρος 2 — OpenVPN 2.3 σε Ubuntu Server 13.10 και 14.04 LTS
Παραθέτουμε τα βήματα που θα ακολουθήσουμε:

Βήμα 01 — Προετοιμασία συστήματος
Συνδεόμαστε στον server, π.χ., μέσω SSH, κι ανανεώνουμε τα repositories του Ubuntu μας με ένα

sub0@delta:~$ sudo apt-get update

Προχωράμε στην αναβάθμιση λειτουργικού κι εφαρμογών πληκτρολογώντας

sub0@delta:~$ sudo apt-get dist-upgrade

Αν αναβαθμιστεί ο πυρήνας, τότε κάνουμε και μια επανεκκίνηση του συστήματος. Προσοχή: Το στάδιο της ενημέρωσης/αναβάθμισης είναι ιδιαίτερα σημαντικό, αν μη τι άλλο διότι ενδέχεται να διορθωθούν προβλήματα που αφορούν στην ασφάλεια. Για παράδειγμα, τις μέρες που γραφόταν το παρόν κείμενο γινόταν μεγάλος ντόρος για το λεγόμενο Heartbleed bug της βιβλιοθήκης OpenSSL, την οποία, μεταξύ άλλων εφαρμογών, χρησιμοποιεί και το OpenVPN. Περνάμε τώρα στην εγκατάσταση α) του πακέτου με το OpenVPN, β) του πακέτου easy-rsa, που περιλαμβάνει βολικά scripts για τη δημιουργία της υποδομής PKI (βλ. παρακάτω), καθώς και γ) του dnsmasq, ο οποίος θα εκτελεί χρέη nameserver για τους πελάτες του OpenVPN server:

sub0@delta:~$ sudo apt-get -y install openvpn easy-rsa dnsmasq

Όλα καλά.

(λίστα με τα βήματα)

Βήμα 02 — Δημιουργία κύριου πιστοποιητικού & ιδιωτικού κλειδιού για την Αρχή Πιστοποίησης
Το πιο σημαντικό –θα λέγαμε και το πιο δύσκολο– στάδιο για το στήσιμο ενός OpenVPN server, είναι η δημιουργία μιας αντίστοιχης υποδομής δημοσίου κλειδιού (Public Key Infrastructure ή απλά PKI). Η υποδομή αυτή αποτελείται από τα ακόλουθα:

  • Ένα πιστοποιητικό ή αλλιώς δημόσιο κλειδί (certificate ή public key), καθώς κι ένα ιδιωτικό κλειδί (private key) για τον OpenVPN server.
  • Ένα πιστοποιητικό καθώς κι ένα ιδιωτικό κλειδί για κάθε client.
  • Ένα κύριο πιστοποιητικό (master certificate) καθώς κι ένα ιδιωτικό κλειδί για την Αρχή Πιστοποίησης (Certificate Authority ή απλά CA). Το ιδιωτικό κλειδί της CA χρησιμεύει για την υπογραφή των πιστοποιητικών του OpenVPN server αλλά και των πελατών του.

Ξεκινώντας μ’ αυτό το τελευταίο, κάτω από το /etc/openvpn φτιάχνουμε πρώτα τον κατάλογο easy-rsa:

sub0@delta:~$ sudo mkdir /etc/openvpn/easy-rsa

Εκεί αντιγράφουμε όλα τα περιεχόμενα του καταλόγου /usr/share/easy-rsa:

sub0@delta:~$ sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa

Ανοίγουμε με έναν text editor, όπως, π.χ., το nano, το αρχείο /etc/openvpn/easy-rsa/vars:

sub0@delta:~$ sudo nano /etc/openvpn/easy-rsa/vars

Προς το τέλος του, τροποποιούμε κατάλληλα ορισμένες μεταβλητές που εμπλέκονται στη δημιουργία των πιστοποιητικών. Δείτε, π.χ., τις αλλαγές που κάναμε εμείς:

export KEY_COUNTRY="GR"
export KEY_PROVINCE="Central Macedonia"
export KEY_CITY="Thessaloniki"
export KEY_ORG="Parabing Creations"
export KEY_EMAIL="nobody@parabing.com"
export KEY_CN=VPNsRUS
export KEY_NAME=VPNsRUS
export KEY_OU=Parabing

Αποθηκεύουμε κι εγκαταλείπουμε τον editor. (Στο nano, π.χ., δίνουμε [CTRL+O], [Enter] και μετά [CTRL+X].) Μπαίνουμε στο λογαριασμό του χρήστη root και παράγουμε το πιστοποιητικό αλλά και το ιδιωτικό κλειδί της CA, ως ακολούθως:

sub0@delta:~$ sudo su
root@delta:/home/sub0# cd /etc/openvpn/easy-rsa
root@delta:/etc/openvpn/easy-rsa# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
root@delta:/etc/openvpn/easy-rsa# sh clean-all
root@delta:/etc/openvpn/easy-rsa# sh build-ca
Generating a 1024 bit RSA private key
...++++++
................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GR]:
State or Province Name (full name) [Central Macedonia]:
Locality Name (eg, city) [Thessaloniki]:
Organization Name (eg, company) [Parabing Creations]:
Organizational Unit Name (eg, section) [Parabing]:
Common Name (eg, your name or your server's hostname) [VPNsRUS]:
Name [VPNsRUS]:
Email Address [nobody@parabing.com]:
root@delta:/etc/openvpn/easy-rsa#

Επισήμανση για το 14.04 LTS. Επιχειρώντας να εκτελέσετε το script ονόματι build-ca, είναι πιθανό να πάρετε ένα μήνυμα λάθους σαν αυτό:

error on line 198 of /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
140281818904224:error:0E065068:configuration file routines:
STR_COPY:variable has no value:conf_def.c:618:line 198

Προκειμένου να το αντιμετωπίσετε κι έτσι το build-ca να εκτελεστεί χωρίς προβλήματα, πληκτρολογήστε, διαδοχικά:

root@delta:/etc/openvpn/easy-rsa# echo "export KEY_ALTNAMES=\"VPNsRUS\"" >> vars
root@delta:/etc/openvpn/easy-rsa# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
root@delta:/etc/openvpn/easy-rsa# sh clean-all
root@delta:/etc/openvpn/easy-rsa# sh build-ca

Επειδή πριν λίγο τροποποιήσαμε το αρχείο vars, σε όλες τις ερωτήσεις του build-ca αφήσαμε τις προεπιλογές πατώντας, απλά, το [Enter]. Το πιστοποιητικό που μόλις φτιάξαμε είναι το αρχείο keys/ca.crt, ενώ το ιδιωτικό κλειδί είναι το αρχείο keys/ca.key. Περιττό να σημειώσουμε ότι το προαναφερθέν σε καμία περίπτωση δεν πρέπει να διαρρεύσει.

(λίστα με τα βήματα)

Βήμα 03 — Πιστοποιητικό & ιδιωτικό κλειδί για τον server
Παραμένοντας στο λογαριασμό του root, πληκτρολογούμε την ακόλουθη εντολή (στη θέση του “delta”, που είναι το hostname του δικού μας box, μπορείτε φυσικά να βάλετε κάποιο άλλο όνομα):

root@delta:/etc/openvpn/easy-rsa# sh build-key-server delta
Generating a 1024 bit RSA private key
....++++++
...++++++
writing new private key to 'delta.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GR]:
State or Province Name (full name) [Central Macedonia]:
Locality Name (eg, city) [Thessaloniki]:
Organization Name (eg, company) [Parabing Creations]:
Organizational Unit Name (eg, section) [Parabing]:
Common Name (eg, your name or your server's hostname) [delta]:
Name [VPNsRUS]:deltaVPN
Email Address [nobody@parabing.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'GR'
stateOrProvinceName   :PRINTABLE:'Central Macedonia'
localityName          :PRINTABLE:'Thessaloniki'
organizationName      :PRINTABLE:'Parabing Creations'
organizationalUnitName:PRINTABLE:'Parabing'
commonName            :PRINTABLE:'delta'
name                  :PRINTABLE:'deltaVPN'
emailAddress          :IA5STRING:'nobody@parabing.com'
Certificate is to be certified until Apr  7 08:06:02 2024 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
root@delta:/etc/openvpn/easy-rsa#

Παρατηρήστε ότι σε όλες τις ερωτήσεις αφήσαμε τις προεπιλογές, αν και σ’ αυτή με το “Name” δεν κρατηθήκαμε και δώσαμε την τιμή “deltaVPN”. Μια τέτοια κίνηση, πάντως, είναι ξεκάθαρα προαιρετική. Μόλις το script ολοκλήρωσε την εργασία του, το πιστοποιητικό του OpenVPN server ήταν το αρχείο keys/delta.crt (υπογεγραμμένο από το ιδιωτικό της CA) και το ιδιωτικό του κλειδί ήταν το αρχείο keys/delta.key.

(λίστα με τα βήματα)

Βήμα 04 — Παράμετροι Diffie-Hellman, τακτοποίηση κλειδιών
Η ασφαλής ανταλλαγή κλειδιών μέσω ενός επισφαλούς καναλιού επικοινωνίας επιτυγχάνεται χάρη σε μια γνωστή τεχνική η οποία εμπλέκει τις λεγόμενες παραμέτρους Diffie-Hellman. Η δημιουργία των παραμέτρων ξεκινά έτσι:

root@delta:/etc/openvpn/easy-rsa# sh build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......................+.....................................+..
...........................+..+.....................+...........
..............................................+.................
.......................+........................................
................................................+...............
.......................................++*++*++*
root@delta:/etc/openvpn/easy-rsa#

Τα πιστοποιητικά, τα κλειδιά και το αρχείο με τις παραμέτρους Diffie-Hellman που ως τώρα έχουμε δημιουργήσει, βρίσκονται όλα τους μέσα στον κατάλογο /etc/openvpn/easy-rsa/keys. Πρόκειται για πέντε στο πλήθος αρχεία και για τη δική μας περίπτωση είναι τα ακόλουθα:

  1. ca.crt – το κύριο πιστοποιητικό της Αρχής Πιστοποίησης (CA)
  2. ca.key – το ιδιωτικό κλειδί της CA
  3. delta.crt – το πιστοποιητικό του OpenVPN server
  4. delta.key – το ιδιωτικό κλειδί του OpenVPN server
  5. dh1024.pem – το αρχείο παραμέτρων Diffie-Hellman

Επισήμανση για το 14.04 LTS. Το αρχείο παραμέτρων Diffie-Hellman είναι το dh2048.pem.

Βεβαίως, το πιστοποιητικό και το ιδιωτικό κλειδί του δικού σας OpenVPN server είναι πολύ πιθανό να έχουν διαφορετικά ονόματα. Όλα τα αρχεία που μόλις αναφέραμε *εκτός* από το ca.key, αντιγράφουμε στον κατάλογο /etc/openvpn:

root@delta:/etc/openvpn/easy-rsa# cd keys
root@delta:/etc/openvpn/easy-rsa/keys# cp ca.crt delta.crt delta.key dh1024.pem /etc/openvpn
root@delta:/etc/openvpn/easy-rsa/keys# cd ..
root@delta:/etc/openvpn/easy-rsa#

Επισήμανση για το 14.04 LTS. Σύμφωνα και με την προηγούμενη επισήμανση, το αρχείο παραμέτρων Diffie-Hellman είναι το dh2048.pem και συνεπώς στο cp πρέπει να αντικαταστήσουμε το dh1024.pem με το dh2048.pem.

(λίστα με τα βήματα)

Βήμα 05 — Πιστοποιητικά & ιδιωτικά κλειδιά για τους πελάτες, τακτοποίηση κλειδιών
Ας υποθέσουμε ότι θέλουμε να συνδεόμαστε στον OpenVPN server από το laptop μας — ένα πολύ συνηθισμένο σενάριο. Οφείλουμε να δημιουργήσουμε ένα ιδιωτικό κλειδί κι ένα πιστοποιητικό για το laptop. Το script που χρειαζόμαστε ονομάζεται build-key και βρίσκεται μέσα στον κατάλογο /etc/openvpn/easy-rsa:

root@delta:/etc/openvpn/easy-rsa# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
root@delta:/etc/openvpn/easy-rsa# ./build-key laptop
Generating a 1024 bit RSA private key
.......................................++++++
...................................................................................................++++++
writing new private key to 'laptop.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GR]:
State or Province Name (full name) [Central Macedonia]:
Locality Name (eg, city) [Thessaloniki]:
Organization Name (eg, company) [Parabing Creations]:
Organizational Unit Name (eg, section) [Parabing]:
Common Name (eg, your name or your server's hostname) [laptop]:
Name [VPNsRUS]:
Email Address [nobody@parabing.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'GR'
stateOrProvinceName   :PRINTABLE:'Central Macedonia'
localityName          :PRINTABLE:'Thessaloniki'
organizationName      :PRINTABLE:'Parabing Creations'
organizationalUnitName:PRINTABLE:'Parabing'
commonName            :PRINTABLE:'laptop'
name                  :PRINTABLE:'VPNsRUS'
emailAddress          :IA5STRING:'nobody@parabing.com'
Certificate is to be certified until Apr  7 18:00:51 2024 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
root@delta:/etc/openvpn/easy-rsa#

Όπως βλέπετε στο παράδειγμά μας, για το κλειδί και για το πιστοποιητικό επιλέξαμε το βασικό όνομα “laptop”. Εννοείται ότι εσείς μπορείτε να χρησιμοποιήσετε όποιο άλλο όνομα θέλετε. Στις δε ερωτήσεις του build-key, αφήσαμε τις προεπιλογές. Το script έφτιαξε ένα πιστοποιητικό (laptop.crt) κι ένα ιδιωτικό κλειδί (laptop.key) για τον client, τα οποία κι αποθήκευσε μέσα στον κατάλογο /etc/openvpn/easy-rsa/keys. Αντιγράφουμε στη συνέχεια α) το πιστοποιητικό της CA (ca.crt), β) το πιστοποιητικό του laptop (laptop.crt) και γ) το ιδιωτικό κλειδί του laptop (laptop.key) μέσα σε κάποιον άλλον κατάλογο, βολικό για τη μετέπειτα (ασφαλή) μεταφορά των τριών αυτών αρχείων στον client. Στο πλαίσιο της παρουσίασής μας, δημιουργούμε τον κατάλογο “ovpn-client” μέσα στο home directory του απλού μας χρήστη (sub0) κι αντιγράφουμε εκεί:

root@delta:/etc/openvpn/easy-rsa# mkdir /home/sub0/ovpn-client
root@delta:/etc/openvpn/easy-rsa# cd keys
root@delta:/etc/openvpn/easy-rsa/keys# cp ca.crt laptop.crt laptop.key /home/sub0/ovpn-client
root@delta:/etc/openvpn/easy-rsa/keys# chown -R sub0:sub0 /home/sub0/ovpn-client
root@delta:/etc/openvpn/easy-rsa/keys# cd ..
root@delta:/etc/openvpn/easy-rsa#

Τα αρχεία ca.crt, laptop.crt και laptop.key μπορούμε να τα χρησιμοποιήσουμε σε περισσότερα από ένα μηχανήματα (πελάτες), αρκεί να είναι δικά μας και φυσικά να τα έχουμε στον πλήρη έλεγχό μας. Ακόμα καλύτερα, εργαζόμαστε αναλόγως ώστε να δημιουργήσουμε περισσότερα από ένα σετ κλειδιών, για περισσότερους από έναν πελάτες.

(λίστα με τα βήματα)

Βήμα 06 — Ρύθμιση OpenVPN server
Σε πολύ λίγο ο OpenVPN server μας θα είναι πλήρως λειτουργικός. Μένει μόνο να φτιάξουμε ένα βασικό αρχείο ρυθμίσεων, το οποίο θα βρίσκεται στον κατάλογο /etc/openvpn. Το εν λόγω αρχείο επιτρέπεται να ‘χει όποιο όνομα θέλουμε, η κατάληξή του όμως πρέπει να ‘ναι η “.conf”. Υπάρχει ένα υπόδειγμα αρχείου ρυθμίσεων, συμπιεσμένο μέσα στον κατάλογο /usr/share/doc/openvpn/examples/sample-config-files. Είναι ακριβώς ό,τι χρειαζόμαστε:

root@delta:/etc/openvpn/easy-rsa# cd /etc/openvpn
root@delta:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
root@delta:/etc/openvpn# gunzip -d server.conf.gz
root@delta:/etc/openvpn# mv server.conf delta.conf
root@delta:/etc/openvpn#

Όπως βλέπετε, μετονομάσαμε το αρχείο server.conf σε delta.conf. Μπορείτε βεβαίως να του αφήσετε το ίδιο όνομα ή να του δώσετε κάποιο άλλο. Όπως και να ‘χει, ανοίγουμε τώρα το αρχείο ρυθμίσεων με έναν text editor

root@delta:/etc/openvpn# nano delta.conf

και φροντίζουμε για τις ακόλουθες τροποποιήσεις.

  • Εντοπίζουμε τις γραμμές
    cert server.crt
    key server.key
    

    και τις αλλάζουμε ώστε να περιλαμβάνουν τα ονόματα που δώσαμε στο πιστοποιητικό και στο ιδιωτικό κλειδί του server. Για παράδειγμα, οι αντίστοιχες γραμμές στο δικό μας αρχείο ρυθμίσεων είναι αυτές:

    cert delta.crt
    key delta.key
    
  • Αν τρέχουμε Ubuntu Server 14.04 LTS, τότε εντοπίζουμε τη γραμμή
    dh dh1024.pem
    

    και την αλλάζουμε σε

    dh dh2048.pem
    
  • Μεταβαίνουμε στο τέλος του αρχείου ρυθμίσεων και προσθέτουμε δύο νέες γραμμές:
    push "redirect-gateway def1"
    push "dhcp-option DNS 10.8.0.1"
    

Χάρη στις δύο τελευταίες οδηγίες, ο OpenVPN server επιβάλλει στους clients να έχουν εκείνον ως default gateway, καθώς και να χρησιμοποιούν τον nameserver που αυτός τους προτείνει. Χρειάζεται βέβαια λίγη ακόμη δουλειά ώστε να λειτουργούν όλα όπως πρέπει — και σε πολύ λίγο όλα θα είναι τακτοποιημένα. Προς το παρόν, σημειώνουμε ότι μ’ αυτές τις κινήσεις οι clients δεν θα έχουν απλά πρόσβαση στο τοπικό δίκτυο, μέσα στο οποίο βρίσκεται ο server. Πολύ περισσότερο, όλη η δικτυακή κίνηση των πελατών θα δρομολογείται μέσω του OpenVPN server, ταξιδεύοντας από και προς αυτόν κρυπτογραφημένη. Επίσης, τα DNS queries δεν θα εξυπηρετούνται από τους nameservers του εκάστοτε ISP ή access point, αλλά θα τα διαχειρίζεται με ασφάλεια ο nameserver που προτείνει ο OpenVPN server. Προφανώς, κατ’ αυτόν τον τρόπο αποφεύγουμε τα λεγόμενα DNS leaks.

Αποθηκεύουμε τις αλλαγές, εγκαταλείπουμε τον editor κι ενεργοποιούμε τον OpenVPN server ως ακολούθως:

root@delta:/etc/openvpn# service openvpn start

Εξ ορισμού, ο OpenVPN server ακούει για αιτήσεις πελατών στο port 1194/UDP. Έτσι, ένας τρόπος για να βεβαιωθείτε ότι ο server σας λειτουργεί, είναι να χρησιμοποιήσετε το εργαλείο netstat ως ακολούθως:

root@delta:/etc/openvpn# netstat -anup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:54149           0.0.0.0:*                           555/dhclient
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           3024/openvpn
udp        0      0 0.0.0.0:53              0.0.0.0:*                           2756/dnsmasq
udp        0      0 0.0.0.0:68              0.0.0.0:*                           555/dhclient
udp6       0      0 :::60622                :::*                                555/dhclient
udp6       0      0 :::53                   :::*                                2756/dnsmasq

Εναλλακτικά, μπορείτε πάντα να δώσετε ένα

root@delta:/etc/openvpn# service openvpn status
 * VPN 'delta' is running
root@delta:/etc/openvpn#

Όπως βλέπετε κι εσείς, ως εδώ όλα βαίνουν ομαλά. Πριν όμως πετύχουμε την πρώτη, απομακρυσμένη σύνδεσή μας στον OpenVPN server, έχουμε ακόμη λίγη δουλειά.

(λίστα με τα βήματα)

Βήμα 07 — Ρύθμιση DNS server, για τους OpenVPN clients
Θέλουμε το box με τον OpenVPN server να εκτελεί *και* χρέη nameserver για τους OpenVPN clients. Ακριβώς γι’ αυτό εγκαταστήσαμε, στο βήμα 01, το πακέτο dnsmasq. Ανοίγουμε τώρα με το nano το αρχείο ρυθμίσεών του

root@delta:/etc/openvpn# nano /etc/dnsmasq.conf

κι αλλάζουμε τη γραμμή

#listen-address=

σε

listen-address=127.0.0.1, 10.8.0.1

Επίσης, από τ’ αριστερά της γραμμής

#bind-interfaces

βγάζουμε το σύμβολο #, επομένως η γραμμή γίνεται

bind-interfaces

Αποθηκεύουμε τις αλλαγές στο /etc/dnsmasq.conf, βγαίνουμε από το nano κι επανεκκινούμε την υπηρεσία dnsmasq:

root@delta:/etc/openvpn# service dnsmasq restart
 * Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
root@delta:/etc/openvpn#

Χάρη στις τροποποιήσεις στο /etc/dnsmasq.conf που μόλις κάναμε, διασφαλίσαμε ότι ο nameserver του dnsmasq αφουγκράζεται για αιτήσεις πελατών μόνο από τα lo (loopback) και tun0 interfaces του box. Το δε tun0 interface το χρησιμοποιεί ο OpenVPN server, προκειμένου να εγκαθιδρύει κρυπτογραφημένα κανάλια επικοινωνίας με τους πελάτες του. Αν θέλετε, επαληθεύστε ότι ο dnsmasq ακούει μόνο από τα δύο προαναφερθέντα interfaces και μόνον αυτά:

root@delta:/etc/openvpn# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:7c:a5:66
          inet addr:10.10.10.235  Bcast:10.10.10.255  Mask:255.255.255.0
...
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
...
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
...
root@delta:/etc/openvpn# netstat -anup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:57219           0.0.0.0:*                           638/dhclient
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           911/openvpn
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1385/dnsmasq
udp        0      0 10.8.0.1:53             0.0.0.0:*                           1385/dnsmasq
udp        0      0 0.0.0.0:68              0.0.0.0:*                           638/dhclient
udp6       0      0 :::39148                :::*                                638/dhclient
root@delta:/etc/openvpn#

Όλα καλά.

(λίστα με τα βήματα)

Βήμα 08 — Λειτουργικότητα router και κανόνες για το iptables
Το box μας πρέπει να λειτουργεί ως router για τους OpenVPN clients, οπότε είναι απαραίτητο να ενεργοποιήσουμε το IP forwarding. Από τον λογαριασμό του root, αρκεί να πληκτρολογήσουμε

root@delta:/etc/openvpn# echo "1" > /proc/sys/net/ipv4/ip_forward

Φυσικά, το IP forwarding θέλουμε να ενεργοποιείται και κάθε φορά που φορτώνει το λειτουργικό. Ακριβώς γι’ αυτό ανοίγουμε το αρχείο /etc/sysctl.conf με το nano κι από τ’ αριστερά της γραμμής

#net.ipv4.ip_forward=1

βγάζουμε τον χαρακτήρα #:

net.ipv4.ip_forward=1

Για άλλη μια φορά, αποθηκεύουμε την αλλαγή κι εγκαταλείπουμε τον editor. Σειρά έχουν ορισμένοι απαραίτητοι κανόνες για το iptables. Προς το παρόν τους πληκτρολογούμε έναν προς έναν:

root@delta:/etc/openvpn# iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
root@delta:/etc/openvpn# iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
root@delta:/etc/openvpn# iptables -A FORWARD -j REJECT
root@delta:/etc/openvpn# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
root@delta:/etc/openvpn#

Βεβαίως, οι κανόνες θέλουμε να ενεργοποιούνται κάθε φορά που ξεκινά το λειτουργικό. Τους προσθέτουμε, λοιπόν, στο τέλος του αρχείου /etc/rc.local — αλλά πριν την τελευταία γραμμή (exit 0). Δείτε, π.χ., με τι μοιάζει το δικό μας rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

service dnsmasq restart

exit 0

Παρατηρήστε τη γραμμή

service dnsmasq restart

πριν από την τελευταία. Ο λόγος που την έχουμε βάλει είναι απλός: Κατά την εκκίνηση του Ubuntu το dnsmasq επιχειρεί να ξεκινήσει *πριν* ακόμα δημιουργηθεί το tun device (από την υπηρεσία openvpn), με αποτέλεσμα να αποτυγχάνει. Στο τέλος λοιπόν της εκκίνησης του λειτουργικού κι αφού έχει ήδη δημιουργηθεί το tun device, τότε που διαβάζεται το αρχείο /etc/rc.local είναι μια καλή ευκαιρία να επανεκκινούμε το dnsmasq.

(λίστα με τα βήματα)

Βήμα 09 — Ρύθμιση OpenVPN client
Στον κατάλογο που προηγουμένως, στο βήμα 05, μεταφέραμε τα αρχεία ca.crt, laptop.crt και laptop.key για τον client, πρέπει να φτιάξουμε κι ένα κατάλληλα διαμορφωμένο αρχείο ρυθμίσεων. Ένα υπόδειγμα υπάρχει στον κατάλογο /usr/share/doc/openvpn/examples/sample-config-files.

root@delta:/etc/openvpn# exit
exit
sub0@delta:~$ cd ~/ovpn-client
sub0@delta:~/ovpn-client$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .
sub0@delta:~/ovpn-client$

Στο αρχείο client.conf θα κάνουμε μερικές αλλαγές. Το ανοίγουμε με το nano κι εντοπίζουμε τη γραμμή

remote my-server-1 1194

Στη θέση του my-server-1 βάζουμε το δημόσιο IP που έχει ο router μπροστά από το Ubuntu box. Για να το βρούμε, αρκεί να είμαστε εντός LAN και να επισκεφτούμε ένα site σαν το http://whatip.com. Εναλλακτικά, σε μια κονσόλα του Ubuntu πληκτρολογούμε

sub0@delta:~/ovpn-client$ curl ifconfig.me

Βεβαίως, επειδή το IP αυτό κατά πάσα πιθανότητα είναι δυναμικό κι ενδέχεται ν’ αλλάξει ανά πάσα στιγμή, είναι προτιμότερο να καταφύγουμε σε μια δωρεάν υπηρεσία σαν αυτή στο http://noip.com, ώστε ν’ αντιστοιχίσουμε ένα domain name στο IP που παίρνουμε από τον ISP μας. Έτσι, αντί να βάλουμε το δημόσιο IP του router στη θέση του my-server-1, μπορούμε να βάλουμε ένα πλήρες domain σαν το homelan.dnsalias.net και η παραπάνω γραμμή να γίνει σαν αυτή:

remote homelan.dnsalias.net 1194

Αν πάντως δουλεύουμε σε κάποιο VPS τότε η κατάσταση με τη διεύθυνση IP θα ‘ναι εντελώς διαφορετική, αφού κατά 99% θα διαθέτουμε ήδη στατικό, δημόσιο IP.

Σημειώστε εξάλλου ότι αυτό το 1194, στα δεξιά της οδηγίας “remote”, είναι το προκαθορισμένο port που χρησιμοποιεί ο OpenVPN server. Μόνος λόγος για να τ’ αλλάξουμε εδώ είναι αν έχουμε ήδη ορίσει κάποιο άλλο port στο configuration file του server. Δύο άλλες γραμμές του client.conf που ίσως χρειαστεί να πειράξουμε, είναι οι ακόλουθες:

cert client.crt
key client.key

Στο παράδειγμά μας, το πιστοποιητικό και το ιδιωτικό κλειδί του client είναι τα αρχεία laptop.crt και laptop.key αντίστοιχα. Έτσι, οι δύο παραπάνω γραμμές γίνονται

cert laptop.crt
key laptop.key

Αποθηκεύουμε τις αλλαγές κι εγκαταλείπουμε το nano. Όλον τον κατάλογο ovpn-client πρέπει να μεταφέρουμε στον client (π.χ., στο laptop). Ένας ασφαλής τρόπος είναι μέσω secure copy (scp) ή μέσω FTP πάνω από SSH (SFTP). Υπάρχει βέβαια και η παλιά, καλή χειροκίνητη μέθοδος που εμπλέκει κάποιο φορητό μέσω αποθήκευσης, όπως, π.χ., ένα USB thumb drive.

(λίστα με τα βήματα)

Βήμα 10 — Σύνδεση στον server κι έλεγχοι ορθής λειτουργίας
Έφτασε η ώρα να δούμε πώς συνδεόμαστε στον OpenVPN server του Ubuntu μας. Παίρνουμε τέσσερις περιπτώσεις οικογενειών λειτουργικών συστημάτων για τον client: Linux, Windows, OS X και iOS/Android (αν και πρόκειται για διαφορετικά OSes, υπάρχει ένας άριστος client που διατίθεται και για τα δύο). Σε κάθε περίπτωση, προκειμένου να επιτευχθεί η σύνδεση πρέπει να είμαστε εκτός του LAN στο οποίο βρίσκεται το Ubuntu.

Επίσης, αν μπροστά του υπάρχει κάποιο router/firewall, τότε οφείλουμε να έχουμε σε ισχύ τον κατάλληλο κανόνα port forwarding. Ο κανόνας αυτός έχει την ακόλουθη, γενική μορφή:

Εισερχόμενα πακέτα UDP στο port 1194 του firewall, στέλνε τα να χαρείς στο port 1194/UDP του μηχανήματος με το τάδε IP,

όπου βεβαίως το “τάδε IP” είναι είναι αυτό που έχει το Internet-facing network interface του Ubuntu Server (το eth0, στην πλειονότητα των περιπτώσεων).

Ακόμη και σε VPS να δουλεύετε, έχετε υπόψη ότι ορισμένοι IaaS providers έχουν firewalls μπροστά από τα VMs που παρέχουν στους πελάτες. Στο screenshot χρησιμοποιούμε το web front-end της GreenQloud, προκειμένου ν' ανοίξουμε το port 1194/UDP για το instance που φιλοξενεί τον OpenVPN server μας.

Linux. Αν στη διανομή είναι εγκατεστημένο το πακέτο OpenVPN, δεν χρειάζεται τίποτε άλλο. Ανοίγουμε ένα τερματικό, μεταβαίνουμε στον κατάλογο όπου είναι αποθηκευμένα τα αρχεία client.conf, ca.crt, laptop.crt και laptop.key, κι από το λογαριασμό του root ή με το sudo δίνουμε κάτι σαν

$ sudo /usr/sbin/openvpn --config client.conf

Για να διακόψουμε τη σύνδεση προς τον OpenVPN server, στο τερματικό όπου έχουμε τρέξει το openvpn πατάμε το συνδυασμό πλήκτρων [CTRL+C].

Windows. Μια δωρεάν εφαρμογή που μπορούμε να χρησιμοποιούμε για τις συνδέσεις μας είναι το λεγόμενο OpenVPN Desktop Client, το οποίο κατεβάζουμε από τον επίσημο δικτυακό τόπο του OpenVPN πρότζεκτ. Το αρχείο client.conf είναι απαραίτητο να το μετονομάσουμε σε client.ovpn (και είναι καλή ιδέα να ρυθμίσετε τα Windows ώστε να δείχνουν τις επεκτάσεις *όλων* των αρχείων). Μετά θα το δώσουμε στο OpenVPN Desktop Client κι εκείνο θα φτιάξει το αντίστοιχο προφίλ σύνδεσης. Μια εναλλακτική, εμπορική λύση για Windows, είναι το Viscosity (βλ. περίπτωση OS X).

OS X. Ένας δωρεάν client για το OpenVPN είναι το tunnelblick. Παλαιότερα είχαμε βρει κάποια ενοχλητικά bugs στο πρόγραμμα, οπότε έκτοτε χρησιμοποιούμε το επί πληρωμή Viscosity (κοστίζει 9 δολάρια). Στο Viscosity αρκεί να δώσουμε το αρχείο client.conf –πρέπει να βρίσκεται μέσα στον φάκελο με τα ca.crt, laptop.crt, laptop.key– και το προγραμματάκι αμέσως θα προσθέσει ένα νέο entry στη λίστα με τα διαθέσιμα προφίλ σύνδεσης. Επιλέγοντάς το συνδεόμαστε απευθείας στον αντίστοιχο OpenVPN server.

Από το αγαπημένο μας laptop, με τον αγαπημένο μας client, όποτε βρισκόμαστε σε 'εχθρικό δίκτυο' συνεχίζουμε να βγαίνουμε στο Internet χωρίς το παραμικρό άγχος. Κι αυτό γιατί φροντίζουμε πρώτα να συνδεόμαστε στον αγαπημένο μας OpenVPN server, ο οποίος στεγάζεται σ' ένα datacenter κάπου έξω από την αγαπημένη μας πρωτεύουσα στον πλανήτη.

iOS/Android. Για smartphone ή tablet με iOS ή Android, μια άριστη εφαρμογή σύνδεσης είναι το OpenVPN connect. Θα το βρείτε στο App Store της Apple, όπως επίσης και στο Google play.

Μετά την πρώτη σύνδεση στον ολόδικό μας OpenVPN server, μια καλή ιδέα είναι να επισκεφτούμε έναν δικτυακό τόπο όπως το whatip.com και να δούμε τη δημόσια IP με την οποία βγαίνουμε στο Internet. Αν όλα είναι καλά με τη σύνδεσή μας, η διεύθυνση αυτή θα πρέπει να ‘ναι διαφορετική από αυτή που μας έχει δώσει ο ISP μας. Τώρα, αν θέλουμε να ελέγξουμε για DNS leaks μπορούμε να πάμε μια βόλτα από το dnsleaktest.com και να κάνουμε το Standard ή το Extended test. Σε κάθε περίπτωση, οι nameservers που θα δούμε δεν πρέπει να ‘ναι αυτοί που χρησιμοποιούμε όταν *δεν* είμαστε συνδεδεμένοι στον OpenVPN server.

Τη διεύθυνση IP του DNS server που μας εξυπηρετεί μπορούμε να τη μάθουμε κι από τη γραμμή εντολών. Στο παράδειγμα είμαστε στο Terminal του OS X κι από την έξοδο του εργαλείου dig διαπιστώνουμε ότι τα DNS requests απαντώνται από την πλευρά του OpenVPN server. Ακριβώς ό,τι θέλουμε, δηλαδή, ώστε να μην έχουμε τα λεγόμενα DNS leaks.

Τέλος, κατά την προετοιμασία του OpenVPN server κάναμε αρκετές δουλειές. Κάποιες από αυτές, όπως το IP forwarding και οι κανόνες για το iptables, δεν έχουν άμεσε σχέση με τον server αλλά πρέπει να γίνονται σωστά κάθε φορά που το λειτουργικό ξεκινά. Ακόμα, λοιπόν, κι αν έχουμε ήδη πραγματοποιήσει τις πρώτες, επιτυχημένες μας συνδέσεις στον OpenVPN server, στο σημείο αυτό προτείνεται να κάνουμε ένα reboot στο Ubuntu κι αφού φορτώσει να επιχειρήσουμε ξανά σύνδεση. Σε περίπτωση που αντιμετωπίσουμε κάποιο πρόβλημα, αξίζει να ελέγξουμε αν οι υπηρεσίες dnsmasq και openvpn έχουν ξεκινήσει, αν το IP forwarding είναι ενεργοποιημένο, καθώς κι αν οι απαραίτητοι κανόνες για το iptables έχουν εφαρμοστεί.

Χαρείτε ασφαλέστατες, ξέγνοιαστες συνδέσεις στον OpenVPN server σας, απ’ όπου κι αν βγαίνετε στο Internet ;)

(λίστα με τα βήματα)

40 Responses to “OpenVPN σε Ubuntu Server – επικαιροποιημένος οδηγός”

  1. orestis46 | 14/04/2014 at 16:52

    Μιας και είναι πρόσφατο το θέμα:
    https://community.openvpn.net/openvpn/wiki/heartbleed
    http://docs.openvpn.net/important-security-notice-regarding-heartbleed-vulnerability/
    http://falstaff.agner.ch/2014/04/11/heartbleed-test-for-openvpn/

  2. orestis46 | 14/04/2014 at 18:10

    Dead Code, ignore: http://falstaff.agner.ch/2014/04/11/heartbleed-test-for-openvpn/

  3. Tassos | 20/04/2014 at 15:59

    Στο βήμα 1 & 5 που μας βγάζει “A challenge password []: ”
    εκεί δε βάζουμε τίποτα;
    Για ποιο λόγο όμως είναι; (εγώ δεν έβαλα τίποτα, αν πρέπει να βάλω κάποιο κωδικό πείτε μου παρακαλώ).

    • Tassos | 20/04/2014 at 16:57

      Επίσης σε Ubuntu server 14.04 LTS υπάρχουν προβλήματα, για λίγο πριν αλλά και στο βήμα 7 του οδηγού.
      Τι εννοώ;
      Όταν δίνω :

      :~# netstat -anup
      udp 0.0.0.0:68
      udp 0 0.0.0.0:34040
      udp6 0 :::30264
      ( συμπιεσμένα τα αποτελέσματα, αλλά βοηθούν νομίζω..)

      όπως και επίσης :

      :~# service openvpn status
      * VPN ‘myvpn’ is not running

      και από ότι καταλαβαίνω είναι λόγο του port 1194 UDP, που υπό κανονικές συνθήκες θα έπρεπε να είχε ανοίξει από μεριάς server ( γιατί από modem/router έκανα το απαραίτητο open ;) )

      Και στο Βήμα 7 :
      :~# service dnsmasg start
      dnsmasg: unrecognized service
      γιατί; ( ενώ έχω κάνει κανονικά εγκατάσταση το dnsmasg )

      Βασικά με την παρακάτω εντολή ίσος καταλαβαίνουμε περισσότερα ;) :
      :~# sudo /etc/init.d/dnsmasq restart
      * Restarting DNS forwarder and DHCP server dnsmasq
      dnsmasq: failed to create listening socket for 10.8.0.1: Cannot assign requested address
      [fail]
      και βασικά από το ifconfig που δείχνεις, εγώ έχω μόνο : eth0 και lo το tun0
      δε το βλέπω πουθενά ( θα έπρεπε να είχε δημιουργηθεί ; ), εκεί και μόνο εκεί πάντως
      βλέπω ( από εσένα ) το 10.8.0.1 .

      Νομίζω δε γίνεται να προχωρήσω παρακάτω.. :/

      • Tassos | 21/04/2014 at 22:02

        Sorry για τα τόσα double post, αλλά προσπαθώ όχι μόνο να βρω λύση για εμένα, αλλά να βοηθήσω και άλλους. Anyway, μήπως τελικά ακόμη έκδοση για 14.04 ( και λογικό είναι, ακόμη δε βγήκε σχεδόν ) δεν υποστηρίζεται από το OpenVpn ;
        Βλέποντας αυτό : https://openvpn.net/index.php/access-server/download-openvpn-as-sw/113.html?osfamily=Ubuntu

        • subZraw | 21/04/2014 at 22:07

          Μια χαρά παίζει το OpenVPN στο Ubuntu 14.04. Σε προηγούμενό σου post, λίγο παραπάνω, έχεις κάποια τυπογραφικά στις εντολές που δίνεις. Να υποθέσω ότι έτσι ακριβώς τις έχεις πληκτρολογήσει; Πάντως άλλοι δεν έχουν θέμα με τον οδηγό, ωστόσο σύντομα θα τον ενημερώσουμε ώστε να αφορά *και* στην έκδοση 14.04 του Ubuntu. Υπομονή λοιπόν :)

  4. Tassos | 22/04/2014 at 01:25

    Ωραία σε 13.10 έπαιξε μια χαρά o παραπάνω οδηγός, όπως τα λες φίλε, το μόνο που με παραξένεψε είναι αυτό : http://pastebin.com/raw.php?i=9GWsXm1c
    απλώς τώρα, για να συνδεθεί κάποιος στον vpn απλώς χρειάζεται αυτά τα αρχεία που κάναμε για τον client, όχι κάποιον κωδικό ή username ; ( γιατί σε κάποιους οδηγούς βλέπω και passwords και ιστορίες…σε εμάς μόνο τα αρχεία αυτά χρειάζονται.. ; )

    Όσο για τις εντολές… εφόσον σας δίνω το αποτέλεσμα, το λάθος μπορεί να είναι εδώ μόνο.. :/ ( δε καταλαβαίνω.. τέλος πάντων). Ευχαριστώ πολύ πάντως για την απάντηση ( αν και δε μου είπατε λίγο για το “A challenge password []: ” τι παίζει.. ).

    Πάντως ακολούθησα τα ίδια βήματα κατά μεγάλη μπορώ να πω ακρίβεια στον 14.04 LTS και δε ξέρω γιατί ( πάντα υπάρχει και το ανθρώπινο λάθος βέβαια ) αλλά δεν έπαιξε ( αναφέρω παραπάνω τα προβλήματα.. ) ενώ σε 13.10 προχώρησε το πράγματα ομαλά μέχρι το τέλος ( αν και ακόμη δεν έκανα το απαραίτητο test για να δω αν πήγαν όντως όλα καλά ) .

    Πάντως ναι θα είναι πολύ καλό να ανανεωθεί και για 14.04 που είναι LTS έκδοση και μπράβο σας για αυτό που το είπατε και ο ίδιος εξ αρχής.

    Ευχαριστώ πολύ! :)

    • subZraw | 14/05/2014 at 13:48

      Γεια χαρά :) Ο οδηγός έχει ανανεωθεί και τώρα τα βήματα ισχύουν *και* για το Ubuntu Server 14.04 LTS.

  5. grider | 31/05/2014 at 02:25

    Κατάφερα να εγκαταστήσω τον server σε ubuntu instance με 14.04 LTS χωρίς κανένα απολύτως πρόβλημα!Ωστόσο οι clients μπορεί και να με ταλαιπώρησαν περισσότερο!Τελικά κατάφερα να τους εγκαταστήσω σε ubuntu(μέσα σε Vbox) και στα Windows,αλλά σύνδεση γιοκ.Στα ubuntu απλά δεν συνδέονται και στα windows πετάνε και σφάλματα.Να δοκιμάσω να βγάλω τις ρυθμίσεις για router να δοκιμάσω έτσι για αρχή;Ή δεν παίζει ρόλο;
    Επίσης στο σημείο που ζητείται ένα πεδίο με κωδικό(αυτό που αναφέρει και ο φίλος απο πάνω),έβαλα έναν κωδικό,ο οποίος όμως δεν μου ζητήθηκε πουθενά.
    Αυτή είναι η έξοδος της κονσόλας στα windows: http://pastebin.com/apRkfEMf
    Θα συνεχίσω να το ψάχνω μήπως βγάλω ακρη αλλά αν μπορείτε να με διαφωτίσετε απο που να ξεκινήσω θα σας είμαι ευγνώμων!Ευχαριστώ!

    • subZraw | 01/06/2014 at 20:20

      Καλησπέρα φίλε μου — και καλό μήνα να έχουμε!

      Προστατεύοντας το ιδιωτικό κλειδί του OpenVPN server με password, τότε κάθε φορά που ξεκινά η υπηρεσία θα πρέπει να ζητείται το εν λόγω password. Κάτι ανάλογο θα πρέπει να συμβαίνει κι όταν προστατεύουμε με password το ιδιωτικό κλειδί ενός OpenVPN client. Η λογική μου αυτό υποδεικνύει, ωστόσο οφείλω να σημειώσω πως δεν έχω δοκιμάσει να προστατεύσω τα υπό συζήτηση ιδιωτικά κλειδιά με passwords.

      Μιας κι απ’ ό,τι καταλαβαίνω πρώτη φορά ασχολείσαι με τον κόσμο του OpenVPN, προτείνω –για αρχή τουλάχιστον– ν’ ακολουθήσεις τον οδηγό κατά γράμμα. Κάνε λοιπόν τις δοκιμές σου, πρόσεξε για τυχόντα μηνύματα λάθους στο τερματικό και προσπάθησε και πάλι. (Α, και φρόντισε σε παρακαλώ ώστε ο OpenVPN server να μη μπλοκάρεται από κάποιο firewall.)

      • lubuntu | 16/06/2014 at 08:34

        ξέρω ότι η ερώτηση μου είναι λίγο χαζή αλλά θα την κάνω, θα μπορούσε να δουλέψει το openvpn σε visualbox ή χρειάζεται ξεχωριστό μηχάνημα ?

        • subZraw | 16/06/2014 at 09:14

          Βεβαίως και μπορεί. Φτιάξε, π.χ., ένα VM με Ubuntu Server κι εγκατέστησε το OpenVPN εκεί. Απλά, φρόντισε να δώσεις στο VM bridged networking, ώστε να “βλέπει” απευθείας τον router του τοπικού δικτύου (αυτόν δηλαδή που βλέπει και το host computer).

  6. nkoasidis | 12/07/2014 at 22:44

    Καλησπέρα Χρήστο έχω κάνει το install του openvpn server ακριβώς όπως έχει δοθεί.Κανένα πρόβλημα συνδεσής από win7,linux,xp.βλέπω και το μέσα μου δίκτυο(εσωτερικούς servers,clients).Το πρόβλημα είναι από wn8, συνδέεται κανονικά στον openvpn server φαίνεται επίσης ότι το internet βγαίνει μέσα από τον vpn server αλλά δεν βλέπω τους εσωτερικούς μου server και clients.Εχω δοκιμάσει και σε 2 win8 clients Χρήστο αλλά πάλι το ίδιο.Καμία ιδέα τι μπορεί να φταίει.

    • subZraw | 13/07/2014 at 00:11

      Επίσης καλησπέρα :)
      Καταλαβαίνω ότι *μόνο* στα Windows 8 έχεις πρόβλημα, αλλά δυστυχώς δεν έχω κάποιο Windows 8 box/VM για να κάνω καμιά δοκιμή :/ Ό,τι και να σου πω, λοιπόν, θα είναι απλή υπόθεση. Το μυαλό μου πάει στο firewall των Windows 8 — αλλά και πάλι δεν μπορώ να ξέρω. Μια ερώτηση: Από τη στιγμή που συνδέεσαι στον OpenVPN server από Windows 8, μπορείς να “δεις” έστω κι ένα μηχάνημα του (απομακρυσμένου) τοπικού δικτύου με ένα απλό ping;

  7. nkoasidis | 14/07/2014 at 10:15

    Χρήστο καλημέρα το βρήκα το πρόβλημα είναι ότι για win8 χρειάζεται να τρέξεις το openvpn ως administrator credentials ειδάλως δεν δημιουργεί τα routes.Ναι μεν συνδεέσαι αλλά επειδή δεν φτιάχνονται τα routes δεν μπορεί να δρομολογήσει πακέτα στο εσωτερικό δίκτυο.Δοκιμασμένο σε 3 win8 pc.Οπότε οκ και από Win8 clients.

    • subZraw | 14/07/2014 at 12:47

      Α, πάρα πολύ ωραία :) Φαντάζομαι τώρα ότι και στα Windows 7 το ίδιο θα ισχύει, απλά ο λογαριασμός από τον οποίο έκανα τις δοκιμές μου έχει δικαιώματα administrator. Ευχαριστούμε για το tip, πάντως!

  8. desore | 06/09/2014 at 16:22

    Ακολούθησα τον οδηγό κατά βήμα(ubuntu 14.04 σε vps), αλλά έχω πρόβλημα. Ενώ έχω επιτυχή σύνδεση με το openvpn , μετά δεν μου ανοίγει τις σελίδες, ξανακοίταξα όλα τα βήματα και κυρίως το κομμάτι του dns και όλα φαίνονται σωστά. Τι να κάνω ? Να ποστάρω κάτι ? π.χ. οι κανόνες iptables http://pastebin.com/9sr0gsSD
    όταν κάνω netstat -anup έχω αυτό

    udp 0 0 0.0.0.0:1194 0.0.0.0:* –
    udp 0 0 127.0.0.1:53 0.0.0.0:* –
    udp 0 0 10.8.0.1:53 0.0.0.0:*

    • subZraw | 06/09/2014 at 17:58

      Βεβαιώσου ότι το subnet στο οποίο ανήκει ο OpenVPN server είναι διαφορετικό από το subnet στο οποίο ανήκει ο client (οι διευθύνσεις που “παίζουν” σε καθένα από τα δίκτυα πρέπει να έχουν διαφορετική μορφή, για να το πω απλουστευμένα).

      • desore | 06/09/2014 at 23:16

        βασικά δεν ξέρω τι ακριβώς εννοείς. Έχω
        στο tun0 στο vps έχει 10.8.0.1 Mask:255.255.255.255
        και ο client όταν συνδέομαι στα windows 10.8.0.6 Mask:255.255.255.252 ( τελειώνει σε 2)
        (στον λαπτοπ από το οποίο προσπαθώ να κάνω την σύνδεση έχω
        192.168.1.κατι με subnet 255.255.255.0)
        Πρέπει να πειράξω κάτι από αυτά ?

        • subZraw | 07/09/2014 at 08:23

          Σημείωσε το IP που έχει το μηχάνημα με το OpenVPN (όχι το IP του tun interface) και το IP που έχει ο client. Είναι της ίδιας μορφής; (π.χ., 192.168.1.*)

          Επίσης, δες και τη συζήτηση με τον @nkoasidis, λίγο πιο πάνω: Κατά πάσα πιθανότητα θα πρέπει να τρέξεις τον client με δικαιώματα Administrator.

          • desore | 07/09/2014 at 09:31

            λοιπόν αυτά είναι : ο vps βγαίνει στο ιντερνετ με μια ip 199.196.κατι.κατι. Το VPS έχει εσωτερική ip 172.16.100.κάτι ενώ ο υπολογιστής μου 192.168.1.κάτι.Άρα διαφορετικά
            Όσο για τα διακαιώματα administrator το openvpn πάντα όταν το ανοίγω μου ζητάει δικαιώματα και πατάω ναι.

  9. Pavlos | 01/11/2014 at 22:11

    Παω να στησω ενα openvpn server και μολις πληκτρολογο μου εμφανιζει γιατι δεν μπορω να το εγκαταστησω?

  10. Pavlos | 02/11/2014 at 15:11

    Οταν παω να συνδεθω απο τα windows στο openvpn server δεν συνδεεται και εμφανιζει τα εξης:

    Sun Nov 02 15:05:26 2014 Warning: cannot open –log file: C:\Program Files\OpenVPN\log\client.log: Access is denied. (errno=5)
    Sun Nov 02 15:05:26 2014 OpenVPN 2.3.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on Jun 5 2014
    Sun Nov 02 15:05:26 2014 library versions: OpenSSL 1.0.1h 5 Jun 2014, LZO 2.05
    Sun Nov 02 15:05:26 2014 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
    Sun Nov 02 15:05:26 2014 Need hold release from management interface, waiting…
    Sun Nov 02 15:05:26 2014 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
    Sun Nov 02 15:05:26 2014 MANAGEMENT: CMD ‘state on’
    Sun Nov 02 15:05:26 2014 MANAGEMENT: CMD ‘log all on’
    Sun Nov 02 15:05:26 2014 MANAGEMENT: CMD ‘hold off’
    Sun Nov 02 15:05:26 2014 MANAGEMENT: CMD ‘hold release’
    Sun Nov 02 15:05:27 2014 Socket Buffers: R=[65536->65536] S=[65536->65536]
    Sun Nov 02 15:05:27 2014 MANAGEMENT: >STATE:1414933527,RESOLVE,,,
    Sun Nov 02 15:05:27 2014 UDPv4 link local: [undef]
    Sun Nov 02 15:05:27 2014 UDPv4 link remote: [AF_INET]45.123.60.105:1194
    Sun Nov 02 15:05:27 2014 MANAGEMENT: >STATE:1414933527,WAIT,,,
    Sun Nov 02 15:05:27 2014 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
    Sun Nov 02 15:05:29 2014 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
    Sun Nov 02 15:05:33 2014 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)

  11. t13 | 09/12/2014 at 00:54

    Γεια και απο μενα, ακολουθησα τα παραπανω βηματα αλλα μου προεκυψαν καποια θεματακια…
    Αρχικα δεν μπρουσα να εγκαταστησω το client.ovpn στo Windows Laptop me OpenVpnClient
    χτυπαγε το τερματικο (δεν εκτελουνταν σωστα η router.exe με τα ορισματα της) το ελυσα αυτο δινοντας δικαιωματα διαχειρηστη στα openvpn-gui.exe , openvpnserv.exe , openvpn.exe . Αλλα τωρα συνδεομαι σαν λαν με τον σερβερ μου αλλα δε μου δινει internet..
    Στον Ubuntu 14.04 Server mou trexei ufw οποτε προσθεσα κανονα #ufw allow 1194
    -tipota
    τον απενενεργοποιησα αλλα και παλι τα ιδια…
    κατι ισως εχω κανει λαθος…
    Καμια Βοηθεια ;
    :)

  12. grider | 19/02/2015 at 19:21

    Λοιπόν ακολούθησα κατα γράμμα τον οδηγό και κατάφερα να στήσω κανονικά τον server και ο client συνδέεται κανονικά αλλά βγαίνει στο δίκτυο με ip την οικιακή κ όχι του VPS.Ωστόσο με το που έκανα τις ρυθμίσεις ip forwarding,ενώ ο client συνδέεται στο vpn(initialization sequence completed) δεν μπορεί με τίποτα να βγει στο δίκτυο.Έκανα κ ping στο 8.8.8.8 χωρίς αποτέλεσμα οπότε δεν νομίζω να φταίει κάτι σχετικό με dns.Παραθέτω τα αποτελέσματα κάποιων εντολών που δείχνουν την κατάσταση στο VPS μου μήπως μπορέσει κάποιος κ βγάλει άκρη: http://pastebin.com/QxG80S98
    Το VPS τρέχει ubuntu 12.04.5 και openvpn v.2.2.1

  13. orestis46 | 19/02/2015 at 20:20

    Το eth0 στο οποίο καθορίζεις σαν το εξερχόμενο interface για να γίνει το NAT απο τους clients του subnet (10.8.0.0/24), δεν βλέπω να έχει IPv4 διεύθυνση παρά μόνο IPv6. Αντίθετα βλέπω το eth1 να έχει public ipv4 address, επομένως θα άλλλαζα το NAT statement σε πρώτη φάση….δοκίμασε μετά ένα ping απο τον client σε 8.8.8.8 πχ να δείς αν έχεις network connectivity.

    • grider | 19/02/2015 at 20:59

      ΘΕ-ΟΣ!Μου διέφυγε εντελώς!όλα δουλεύουν κομπλέ!Ευχαριστώ!

  14. Captain_Harlock | 03/04/2015 at 22:18

    Αντί για curl ifconfig.me μπορείτε να χρησιμοποιήσετε το “curl ipgetter.net” ή το “curl ipgetter.info”. :)

    • subZraw | 05/04/2015 at 08:44

      Thanks! Κι αν δεν απατώμαι, τα ipgetter.* επιστρέφουν γρηγορότερα το αποτέλεσμα :)

  15. lightheart | 09/04/2015 at 15:43

    Ακολουθώ κατά γράμμα τον οδηγό σε VPS και όταν φτάνω στο σημείο
    service openvpn status παίρνω απάντηση
    * VPN ‘lgtvps’ is not running
    Τι κάνω λάθος?

    • subZraw | 11/04/2015 at 16:26

      Γεια χαρά,
      Θα βοηθούσε αν ανέβαζες κάπου (π.χ., στο Pastebin) το log file του OpenVPN server (/var/log/syslog).

  16. lubuntu | 27/01/2016 at 09:37

    καλημέρα τι ενέργειες θα πρέπει να κάνω ούστε να μπορέσω να το χρησιμοποιήσω σαν server για να ενώσω 2 διαφορετικά δίκτυα ?

    • subZraw | 27/01/2016 at 22:25

      Προφανώς αναφέρεσαι στη λειτουργία bridging του OpenVPN. Ως θέμα είναι στα υπόψη!

  17. manthos | 12/04/2016 at 21:35

    Το OpenVPN Connect στο android 5.0 κινητο μου συνδεεται στο VPN, αλλα δεν συνδεεται στο internet. με το client του υπολογιστη δεν υπαρχει κανενα προβλημα.
    Καμια ιδεα?

  18. ToPnt | 03/02/2017 at 16:56

    Θα ανανεώσετε τον οδηγό και για Ubuntu 16.04 LTS ;
    Υπάρχουν σημαντικές αλλαγές για αυτή την έκδοση;

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

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