ProHoster > Blog > διαχείριση > Οργάνωση απομακρυσμένης εργασίας ενός οργανισμού SMB στο OpenVPN
Οργάνωση απομακρυσμένης εργασίας ενός οργανισμού SMB στο OpenVPN
Δήλωση προβλήματος
Το άρθρο περιγράφει την οργάνωση της απομακρυσμένης πρόσβασης για υπαλλήλους σε προϊόντα ανοιχτού κώδικα και μπορεί να χρησιμοποιηθεί τόσο για τη δημιουργία ενός πλήρως αυτόνομου συστήματος όσο και χρήσιμο για επέκταση όταν υπάρχει έλλειψη αδειών στο υπάρχον εμπορικό σύστημα ή η απόδοσή του είναι ανεπαρκής.
Ο στόχος του άρθρου είναι να εφαρμόσει ένα πλήρες σύστημα για την παροχή απομακρυσμένης πρόσβασης σε έναν οργανισμό, το οποίο είναι κάτι περισσότερο από "εγκατάσταση OpenVPN σε 10 λεπτά".
Ως αποτέλεσμα, θα λάβουμε ένα σύστημα στο οποίο θα χρησιμοποιούνται πιστοποιητικά και (προαιρετικά) η εταιρική υπηρεσία καταλόγου Active Directory για τον έλεγχο ταυτότητας των χρηστών. Οτι. θα πάρουμε ένα σύστημα με δύο παράγοντες επαλήθευσης - τι έχω (πιστοποιητικό) και τι ξέρω (κωδικός πρόσβασης).
Ένα σημάδι ότι ένας χρήστης επιτρέπεται να συνδεθεί είναι η συμμετοχή του στην ομάδα myVPNUsr. Η αρχή έκδοσης πιστοποιητικών θα χρησιμοποιηθεί εκτός σύνδεσης.
Το κόστος υλοποίησης της λύσης είναι μόνο μικροί πόροι υλικού και 1 ώρα εργασίας του διαχειριστή του συστήματος.
Θα χρησιμοποιήσουμε μια εικονική μηχανή με OpenVPN και Easy-RSA έκδοση 3 στο CetntOS 7, στην οποία εκχωρούνται 100 vCPU και 4 GiB RAM ανά 4 συνδέσεις.
Στο παράδειγμα, το δίκτυο του οργανισμού μας είναι 172.16.0.0/16, στον οποίο ο διακομιστής VPN με τη διεύθυνση 172.16.19.123 βρίσκεται στο τμήμα 172.16.19.0/24, οι διακομιστές DNS 172.16.16.16 και 172.16.17.17, και 172.16.20.0, και 23. Το .XNUMX/XNUMX έχει εκχωρηθεί για πελάτες VPN.
Για να συνδεθείτε από έξω, χρησιμοποιείται μια σύνδεση μέσω της θύρας 1194/udp και έχει δημιουργηθεί ένα αρχείο A-record gw.abc.ru στο DNS για τον διακομιστή μας.
Δεν συνιστάται αυστηρά να απενεργοποιήσετε το SELinux! Το OpenVPN λειτουργεί χωρίς να απενεργοποιεί τις πολιτικές ασφαλείας.
Χρησιμοποιούμε τη διανομή CentOS 7.8.2003. Πρέπει να εγκαταστήσουμε το λειτουργικό σύστημα σε ελάχιστη διαμόρφωση. Είναι βολικό να το κάνετε αυτό χρησιμοποιώντας ξεκινούν, κλωνοποίηση μιας προηγουμένως εγκατεστημένης εικόνας του λειτουργικού συστήματος και άλλων μέσων.
Μετά την εγκατάσταση, εκχωρώντας μια διεύθυνση στη διεπαφή δικτύου (σύμφωνα με τους όρους της εργασίας 172.16.19.123), ενημερώνουμε το λειτουργικό σύστημα:
$ sudo yum update -y && reboot
Πρέπει επίσης να βεβαιωθούμε ότι ο συγχρονισμός χρόνου εκτελείται στο μηχάνημά μας.
Για να εγκαταστήσετε το λογισμικό εφαρμογής, χρειάζεστε τα πακέτα openvpn, openvpn-auth-ldap, easy-rsa και vim ως κύριο πρόγραμμα επεξεργασίας (θα χρειαστείτε το αποθετήριο EPEL).
Οι παράμετροι για τον οργανισμό υπό όρους ABC LLC περιγράφονται εδώ· μπορείτε να τις διορθώσετε στις πραγματικές ή να τις αφήσετε από το παράδειγμα. Το πιο σημαντικό πράγμα στις παραμέτρους είναι η τελευταία γραμμή, η οποία καθορίζει την περίοδο ισχύος του πιστοποιητικού σε ημέρες. Το παράδειγμα χρησιμοποιεί την τιμή 10 έτη (365*10+2 δίσεκτα έτη). Αυτή η τιμή θα πρέπει να προσαρμοστεί πριν από την έκδοση πιστοποιητικών χρήστη.
Στη συνέχεια, διαμορφώνουμε μια αυτόνομη αρχή πιστοποίησης.
Η ρύθμιση περιλαμβάνει την εξαγωγή μεταβλητών, την προετοιμασία της ΑΠ, την έκδοση του κλειδιού και του πιστοποιητικού ρίζας CA, του κλειδιού Diffie-Hellman, του κλειδιού TLS και του κλειδιού και του πιστοποιητικού διακομιστή. Το κλειδί CA πρέπει να προστατεύεται προσεκτικά και να διατηρείται μυστικό! Όλες οι παράμετροι ερωτήματος μπορούν να παραμείνουν ως προεπιλογές.
Αυτό ολοκληρώνει το κύριο μέρος της ρύθμισης του κρυπτογραφικού μηχανισμού.
Ρύθμιση του OpenVPN
Μεταβείτε στον κατάλογο OpenVPN, δημιουργήστε καταλόγους υπηρεσιών και προσθέστε έναν σύνδεσμο στο easy-rsa:
cd /etc/openvpn/
mkdir /var/log/openvpn/ /etc/openvpn/ccd /usr/share/easy-rsa/3/client
ln -s /usr/share/easy-rsa/3/pki/ /etc/openvpn/
Δημιουργήστε το κύριο αρχείο διαμόρφωσης OpenVPN:
$ sudo vim server.conf
το παρακάτω περιεχόμενο
port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/myvpngw.crt
key /etc/openvpn/pki/private/myvpngw.key
crl-verify /etc/openvpn/pki/crl.pem
dh /etc/openvpn/pki/dh.pem
server 172.16.20.0 255.255.254.0
ifconfig-pool-persist ipp.txt
push "route 172.16.0.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"
client-config-dir ccd
push "dhcp-option DNS 172.16.16.16"
push "dhcp-option DNS 172.16.17.17"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
username-as-common-name
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/ldap.conf
Μερικές σημειώσεις για τις παραμέτρους:
εάν προσδιορίστηκε διαφορετικό όνομα κατά την έκδοση του πιστοποιητικού, υποδείξτε το·
καθορίστε το σύνολο των διευθύνσεων που ταιριάζουν στις εργασίες σας*.
μπορεί να υπάρχουν μία ή περισσότερες διαδρομές και διακομιστές DNS.
Οι τελευταίες 2 γραμμές απαιτούνται για την εφαρμογή του ελέγχου ταυτότητας στο AD**.
*Το εύρος των διευθύνσεων που επιλέχθηκε στο παράδειγμα θα επιτρέψει σε έως και 127 πελάτες να συνδεθούν ταυτόχρονα, επειδή επιλέγεται το δίκτυο /23 και το OpenVPN δημιουργεί ένα υποδίκτυο για κάθε πελάτη χρησιμοποιώντας τη μάσκα /30.
Εάν είναι ιδιαίτερα απαραίτητο, η θύρα και το πρωτόκολλο μπορούν να αλλάξουν, ωστόσο, θα πρέπει να ληφθεί υπόψη ότι η αλλαγή του αριθμού θύρας θα συνεπάγεται τη διαμόρφωση του SELinux και η χρήση του πρωτοκόλλου tcp θα αυξήσει το κόστος, επειδή Ο έλεγχος παράδοσης πακέτων TCP εκτελείται ήδη στο επίπεδο των πακέτων που είναι εγκλωβισμένα στη σήραγγα.
**Εάν δεν απαιτείται έλεγχος ταυτότητας στο AD, σχολιάστε τα, παραλείψτε την επόμενη ενότητα και στο πρότυπο αφαιρέστε τη γραμμή auth-user-pass.
Πιστοποίηση AD
Για να υποστηρίξουμε τον δεύτερο παράγοντα, θα χρησιμοποιήσουμε την επαλήθευση λογαριασμού στο AD.
Χρειαζόμαστε έναν λογαριασμό στον τομέα με τα δικαιώματα ενός απλού χρήστη και μιας ομάδας, η συμμετοχή στην οποία θα καθορίζει τη δυνατότητα σύνδεσης.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Έκδοση πιστοποιητικού και ανάκληση
Επειδή Εκτός από τα ίδια τα πιστοποιητικά, χρειάζεστε κλειδιά και άλλες ρυθμίσεις· είναι πολύ βολικό να τυλίξετε όλα αυτά σε ένα αρχείο προφίλ. Αυτό το αρχείο στη συνέχεια μεταφέρεται στον χρήστη και το προφίλ εισάγεται στον υπολογιστή-πελάτη OpenVPN. Για να γίνει αυτό, θα δημιουργήσουμε ένα πρότυπο ρυθμίσεων και ένα σενάριο που δημιουργεί το προφίλ.
Πρέπει να προσθέσετε τα περιεχόμενα των αρχείων πιστοποιητικού ρίζας (ca.crt) και κλειδιού TLS (ta.key) στο προφίλ.
Πριν από την έκδοση πιστοποιητικών χρήστη μην ξεχάσετε να ορίσετε την απαιτούμενη περίοδο ισχύος για τα πιστοποιητικά στο αρχείο παραμέτρων. Δεν πρέπει να το παρατείνετε, σας συνιστώ να περιοριστείτε σε 180 ημέρες το πολύ.
vim /usr/share/easy-rsa/3/vars
...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpn
client
dev tun
proto udp
remote gw.abc.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
</tls-auth>
Σημειώσεις:
γραμμές ΒΑΛΤΕ ΤΟ... αλλαγή σε περιεχόμενο τους πιστοποιητικά?
στην απομακρυσμένη οδηγία, καθορίστε το όνομα/διεύθυνση της πύλης σας.
η οδηγία auth-user-pass χρησιμοποιείται για πρόσθετο εξωτερικό έλεγχο ταυτότητας.
Στον αρχικό κατάλογο (ή σε άλλο βολικό μέρος) δημιουργούμε ένα σενάριο για να ζητήσουμε ένα πιστοποιητικό και να δημιουργήσουμε ένα προφίλ:
vim ~/make.profile.sh
#!/bin/bash
if [ -z "$1" ] ; then
echo Missing mandatory client name. Usage: $0 vpn-username
exit 1
fi
#Set variables
basepath=/usr/share/easy-rsa/3
clntpath=$basepath/client
privpath=$basepath/pki/private
certpath=$basepath/pki/issued
profile=$clntpath/$1.ovpn
#Get current year and lowercase client name
year=`date +%F`
client=${1,,}
echo Processing $year year cert for user/device $client
cd $basepath
if [ -f client/$client* ]; then
echo "*** ERROR! ***"
echo "Certificate $client already issued!"
echo "*** ERROR! ***"
exit 1
fi
. ./vars
./easyrsa --batch --req-cn=$client gen-req $client nopass
./easyrsa --batch sign-req client $client
#Make profile
cp $clntpath/template.ovpn $profile
echo "<key>" >> $profile
cat $privpath/$1.key >> $profile
echo "</key>" >> $profile
echo -e "n" >> $profile
openssl x509 -in $certpath/$1.crt -out $basepath/$1.crt
echo "<cert>" >> $profile
cat $basepath/$1.crt >> $profile
echo "</cert>" >> $profile
echo -e "n" >> $profile
#remove tmp file
rm -f $basepath/$1.crt
echo Complete. See $profile file.
cd ~
Κάνοντας το αρχείο εκτελέσιμο:
chmod a+x ~/make.profile.sh
Και μπορούμε να εκδώσουμε το πρώτο μας πιστοποιητικό.
~/make.profile.sh my-first-user
Επανεξέταση
Σε περίπτωση παραβίασης πιστοποιητικού (απώλεια, κλοπή), είναι απαραίτητη η ανάκληση αυτού του πιστοποιητικού:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Προβολή πιστοποιητικών που έχουν εκδοθεί και ανακληθεί
Για να δείτε τα πιστοποιητικά που έχουν εκδοθεί και ανακληθεί, απλώς προβάλετε το αρχείο ευρετηρίου:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Επεξήγηση:
Η πρώτη γραμμή είναι το πιστοποιητικό διακομιστή.
πρώτος χαρακτήρας
V (Ισχύει) - ισχύει;
R (Ανακλήθηκε) - υπενθύμισε.
Διαμόρφωση δικτύου
Τα τελευταία βήματα είναι η διαμόρφωση του δικτύου μετάδοσης - δρομολόγηση και τείχη προστασίας.
Επιτρέπονται οι συνδέσεις στο τοπικό τείχος προστασίας:
Σε ένα εταιρικό περιβάλλον, είναι πιθανό να υπάρχει υποδικτύωση και πρέπει να πούμε στον(τους) δρομολογητή(ους) πώς να στέλνουν πακέτα που προορίζονται για τους πελάτες VPN μας. Στη γραμμή εντολών εκτελούμε την εντολή με τον τρόπο (ανάλογα με τον εξοπλισμό που χρησιμοποιείται):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
και αποθηκεύστε τη διαμόρφωση.
Επιπλέον, στη διεπαφή του δρομολογητή συνόρων όπου εξυπηρετείται η εξωτερική διεύθυνση gw.abc.ru, είναι απαραίτητο να επιτρέπεται η διέλευση των πακέτων udp/1194.
Σε περίπτωση που ο οργανισμός έχει αυστηρούς κανόνες ασφαλείας, ένα τείχος προστασίας πρέπει επίσης να ρυθμιστεί στον διακομιστή VPN μας. Κατά τη γνώμη μου, η μεγαλύτερη ευελιξία παρέχεται με τη ρύθμιση των αλυσίδων iptables FORWARD, αν και η τοποθέτησή τους είναι λιγότερο βολική. Λίγα περισσότερα για τη ρύθμιση τους. Για να γίνει αυτό, είναι πιο βολικό να χρησιμοποιήσετε "άμεσους κανόνες" - άμεσους κανόνες, αποθηκευμένους σε ένα αρχείο /etc/firewalld/direct.xml. Η τρέχουσα διαμόρφωση των κανόνων μπορεί να βρεθεί ως εξής:
$ sudo firewall-cmd --direct --get-all-rule
Πριν αλλάξετε ένα αρχείο, δημιουργήστε ένα αντίγραφο ασφαλείας του:
Αυτοί είναι ουσιαστικά κανονικοί κανόνες iptables, διαφορετικά συσκευάζονται μετά την εμφάνιση του τείχους προστασίας.
Η διεπαφή προορισμού με τις προεπιλεγμένες ρυθμίσεις είναι tun0 και η εξωτερική διεπαφή για τη σήραγγα μπορεί να είναι διαφορετική, για παράδειγμα, ens192, ανάλογα με την πλατφόρμα που χρησιμοποιείται.
Η τελευταία γραμμή είναι για την καταγραφή πακέτων που πέφτουν. Για να λειτουργήσει η καταγραφή, πρέπει να αλλάξετε το επίπεδο εντοπισμού σφαλμάτων στη διαμόρφωση του τείχους προστασίας:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Η εφαρμογή ρυθμίσεων είναι η συνηθισμένη εντολή τείχους προστασίας για να διαβάσετε ξανά τις ρυθμίσεις:
$ sudo firewall-cmd --reload
Μπορείτε να δείτε πακέτα που απορρίφθηκαν ως εξής:
grep forward_fw /var/log/messages
Ποιο είναι το επόμενο
Αυτό ολοκληρώνει τη ρύθμιση!
Το μόνο που απομένει είναι να εγκαταστήσετε το λογισμικό πελάτη στην πλευρά του πελάτη, να εισαγάγετε το προφίλ και να συνδεθείτε. Για λειτουργικά συστήματα Windows, το κιτ διανομής βρίσκεται στο ιστότοπος προγραμματιστή.
Τέλος, συνδέουμε τον νέο μας διακομιστή με τα συστήματα παρακολούθησης και αρχειοθέτησης και μην ξεχνάμε να εγκαθιστούμε τακτικά ενημερώσεις.