Δημιουργήστε εικονικούς κεντρικούς υπολογιστές, καταλόγους προστασίας με κωδικό πρόσβασης και πιστοποιητικά SSL χρησιμοποιώντας "Nginx Web Server" στο Arch Linux


Το προηγούμενο άρθρο «LEMP» του Arch Linux μόλις κάλυψε βασικά πράγματα, από την εγκατάσταση υπηρεσιών δικτύου (Nginx, βάση δεδομένων MySQL και PhpMyAdmin) και τη διαμόρφωση της ελάχιστης ασφάλειας που απαιτείται για τον διακομιστή MySQL και το PhpMyadmin.

Αυτό το θέμα σχετίζεται αυστηρά με την προηγούμενη εγκατάσταση του LEMP στο Arch Linux και θα σας καθοδηγήσει στη ρύθμιση πιο περίπλοκων διαμορφώσεων για τη στοίβα LEMP, ειδικά στις διαμορφώσεις διακομιστή ιστού Nginx, όπως η δημιουργία Εικονικών κεντρικών υπολογιστών , χρησιμοποιήστε τους Κατάλογους που προστατεύονται με κωδικό πρόσβασης, δημιουργήστε και διαμορφώστε το Επίπεδο ασφαλών υποδοχών HTTP, τις μη ασφαλείς ανακατευθύνσεις HTTP σε HTTPS και θα σας παρουσιάσουν επίσης μερικά χρήσιμα σενάρια Bash που θα διευκολύνει την ενεργοποίηση των εικονικών κεντρικών υπολογιστών και θα δημιουργήσει Πιστοποιητικό SSL και κλειδιά.

Απαιτήσεις

Εγκαταστήστε το LEMP με τη βάση δεδομένων MariaDB στο Arch Linux

Βήμα 1: Ενεργοποιήστε τους εικονικούς κεντρικούς υπολογιστές στο Nginx

Μία από τις απλούστερες μεθόδους για να ενεργοποιήσετε τους Εικονικούς κεντρικούς υπολογιστές είναι η χρήση δηλώσεων συμπεριλάβετε στο κύριο αρχείο διαμόρφωσης Nginx, κάτι που κάνει την εργασία των περαιτέρω διαμορφώσεων πιο απλή και αποτελεσματική, επειδή μπορείτε να δημιουργήσετε απλά αρχεία για κάθε νέο κεντρικό υπολογιστή και διατηρήστε καθαρότερο το κύριο αρχείο διαμόρφωσης.

Αυτή η προσέγγιση λειτουργεί με τον ίδιο τρόπο όπως στον Apache Web Server, το πρώτο πράγμα που πρέπει να κάνετε είναι να καθορίσετε τη νέα διαδρομή URI όπου το Nginx θα πρέπει να διαβάζει τις οδηγίες αρχείων.

1. Επομένως, ανοίξτε το κύριο αρχείο nginx.conf που βρίσκεται στη διαδρομή συστήματος /etc/nginx/ και στο κάτω μέρος, πριν από την τελευταία αγκύλα " }" προσθέστε τη διαδρομή όπου θα βρίσκονται τα μελλοντικά αρχεία διαμόρφωσης του Virtual Host.

sudo nano /etc/nginx/nginx.conf

Στο κάτω μέρος προσθέστε την ακόλουθη δήλωση.

include /etc/nginx/sites-enabled/*.conf;

Αυτή η οδηγία λέει στο Nginx ότι πρέπει να διαβάσει όλα τα αρχεία που βρίσκονται στο /etc/nginx/sites-enabled/ που τελειώνει με μια επέκταση .conf.

2. Το επόμενο βήμα είναι να δημιουργήσετε τον κατάλογο sites-enabled και έναν άλλο, που ονομάζεται sites-available, όπου αποθηκεύετε όλες τις ρυθμίσεις παραμέτρων Virtual Hosts αρχεία.

sudo mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled

3. Τώρα ήρθε η ώρα να δημιουργήσετε έναν νέο Virtual Host. Αυτό το παράδειγμα θα χρησιμοποιεί τη διεύθυνση IP του συστήματος ως Virtual Host Name, επομένως δημιουργήστε ένα νέο αρχείο με το όνομα name-ip.conf.

sudo nano /etc/nginx/sites-available/name-ip.conf

Προσθέστε το ακόλουθο περιεχόμενο.

## File content ##

server {
    listen 80;
    server_name 192.168.1.33;

    access_log /var/log/nginx/192.168.1.33.access.log;
    error_log /var/log/nginx/192.168.1.33.error.log;

    root /srv/http;
    location / {
    index index.html index.htm index.php;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
 }
    location /phpmyadmin {
        rewrite ^/* /phpMyAdmin last;
    }

    location ~ \.php$ {
        #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

Η οδηγία που ενεργοποιεί το Virtual Host είναι η δήλωση server_name κάτω από τη θύρα ακρόασης. Επίσης, μια άλλη σημαντική οδηγία εδώ είναι η δήλωση root που υποδεικνύει το Nginx Virtual Host να εξυπηρετεί περιεχόμενο αρχείου από τη διαδρομή συστήματος /srv/http/.

4. Το τελευταίο βήμα είναι να δημιουργήσετε τον κατάλογο /srv/http/ και να κάνετε τη διαμόρφωση αρχείου name-ip.conf διαθέσιμη για ανάγνωση Nginx (χρησιμοποιώντας συμβολικός σύνδεσμος), στη συνέχεια επανεκκινήστε τον δαίμονα για να γίνουν ορατές οι νέες διαμορφώσεις.

sudo mkdir /srv/http/
sudo ln -s /etc/nginx/sites-available/name-ip.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx

5. Για να το επαληθεύσετε, τοποθετήστε το πρόγραμμα περιήγησής σας στη διεύθυνση IP του συστήματος Arch και θα πρέπει να δείτε ότι το περιεχόμενο ιστού διαφέρει από το http://localhost. Εδώ έχω προσθέσει ένα μικρό σενάριο php που ελέγχει επίσης τις διαμορφώσεις FastCGI PHP όπως στο παρακάτω στιγμιότυπο οθόνης.

sudo nano /srv/http/info.php
## File content ##

<?php
phpinfo();
?>

6. Μια άλλη μέθοδος που έχω αναπτύξει μόνος μου για να ενεργοποιήσω ή να απενεργοποιήσω τους εικονικούς κεντρικούς υπολογιστές στο Nginx είναι πιο κομψή και είναι εμπνευσμένη από το σενάριο a2eniste του Apache.

Για να χρησιμοποιήσετε αυτήν τη μέθοδο, ανοίξτε ένα πρόγραμμα επεξεργασίας αρχείων και δημιουργήστε ένα νέο αρχείο, που ονομάζεται n2ensite, στη διαδρομή σας $HOME με το παρακάτω περιεχόμενο, κάντε το εκτελέσιμο, εκτελέστε το με δικαιώματα root και περάστε ως επιλογή στο νέο σας όνομα Virtual Host χωρίς κατάληξη .conf (συμπληρώστε δωρεάν για να το τροποποιήσετε ανάλογα με τις ανάγκες σας).

sudo nano n2ensite
## File content ##

#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-----------------------------------------------"
else
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
fi

avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled/
site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: n2ensite virtual_site"
                echo -e "\nAvailable virtual hosts:\n$site"
                exit 0
else

if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart nginx server: sudo systemctl restart nginx"
else
echo  -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi

Κάντε το εκτελέσιμο και εκτελέστε το ως εμφάνιση.

sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host

7. Για να απενεργοποιήσετε τους Virtual Hosts, δημιουργήστε ένα νέο αρχείο n2dissite με το ακόλουθο περιεχόμενο και εφαρμόστε τις ίδιες ρυθμίσεις όπως παραπάνω.

sudo nano n2dissite
## File content ##

#!/bin/bash
avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-enabled/`

if [ "$#" != "1" ]; then
                echo "Use script: n2dissite virtual_site"
                echo -e "\nAvailable virtual hosts: \n$site"
                exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nPlease restart Nginx: sudo systemctl restart nginx"
exit 0
fi
fi

8. Τώρα μπορείτε να χρησιμοποιήσετε αυτά τα δύο σενάρια για να ενεργοποιήσετε ή να απενεργοποιήσετε οποιοδήποτε Virtual Host, αλλά αν θέλετε να το εφαρμόσετε ως εντολές σε όλο το σύστημα, απλώς αντιγράψτε και τα δύο σενάρια στο /usr/local/bin/ και στη συνέχεια μπορείτε να το χρησιμοποιήσετε χωρίς να καθορίσετε διαδρομή.

sudo cp n2ensite n2dissite /usr/local/bin/

Βήμα 2: Ενεργοποιήστε το SSL με εικονικούς κεντρικούς υπολογιστές στο Nginx

Το SSL (Secure Sockets Layer) είναι ένα πρωτόκολλο που έχει σχεδιαστεί για την κρυπτογράφηση συνδέσεων HTTP μέσω δικτύων ή Διαδικτύου, τα οποία κάνουν τη ροή δεδομένων να μεταδίδεται μέσω ενός ασφαλούς καναλιού χρησιμοποιώντας συμμετρικά/ασύμμετρα κλειδιά κρυπτογραφίας και παρέχεται σε πακέτο Arch Linux by OpenSSL.

sudo pacman -S openssl

9. Για να ενεργοποιήσετε τις συνδέσεις HTTPS με το Nginx, το πρώτο που πρέπει να κάνετε είναι να δημιουργήσετε κλειδιά Virtual Hosts. Επίσης, για να απλοποιήσω τα πράγματα, έχω αναπτύξει ένα μικρό σενάριο που δημιουργεί αυτόματα κρυπτογραφικά κλειδιά στη διαδρομή καταλόγου /etc/nginx/ssl, χρησιμοποιώντας την ονομασία Virtual Host ως ονόματα κλειδιών.

Δημιουργήστε ένα αρχείο με το όνομα nginx_gen_ssl και προσθέστε το ακόλουθο περιεχόμενο.

sudo nano nginx_gen_ssl
## File content ##

#!/bin/bash
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"
read cert

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt

echo -e " The certificate $cert has been generated!\nPlease link it to nginx ssl available website!"
ls -all /etc/nginx/ssl
exit 0

10. Αφού δημιουργηθεί το σενάριο προσαρτήστε τα δικαιώματα εκτέλεσης, εκτελέστε το και δώστε τις επιλογές Πιστοποιητικού σας, η πιο σημαντική είναι το πεδίο Κοινό όνομα (προσθέστε το επίσημο όνομα τομέα εδώ) και Αφήστε τα πεδία Κωδικός πρόσβασης και Προαιρετική Εταιρεία κενά.

sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl

Στο τέλος της εργασίας δημιουργίας κλειδιών, θα εμφανιστεί μια λίστα με όλα τα διαθέσιμα κλειδιά στον κατάλογο Nginx ssl.

Επίσης, εάν θέλετε αυτό το σενάριο να χρησιμοποιηθεί ως εντολή συστήματος, αντιγράψτε ή μετακινήστε το στο /usr/local/bin/.

sudo mv nginx_gen_ssl  /usr/local/bin

11. Αφού δημιουργήσαμε τα κλειδιά που είναι απαραίτητα για τον Εικονικό κεντρικό υπολογιστή Nginx SSL, ήρθε η ώρα να δημιουργήσουμε πραγματικά το αρχείο διαμόρφωσης SSL Virtual Host. Χρησιμοποιήστε την ίδια διεύθυνση IP συστήματος για το Virtual Host όπως παραπάνω στην οδηγία server_name, αλλά αλλάξτε ελαφρώς το όνομα του αρχείου Virtual Host προσθέτοντας ssl πριν από το .conf, για να σας υπενθυμίσει ότι αυτό το αρχείο σημαίνει name-ip SSL Virtual Host.

sudo nano /etc/nginx/sites-availabe/name-ip-ssl.conf

Σε αυτό το αρχείο αλλάξτε τη δήλωση θύρας ακρόαση σε 443 ssl και παρέχετε διαδρομές αρχείων κλειδιών SSL και πιστοποιητικού με αυτές που δημιουργήθηκαν νωρίτερα για να μοιάζουν με το παρακάτω απόσπασμα.

## File content ##

server {
    listen 443 ssl;
    server_name 192.168.1.33;

       ssl_certificate     /etc/nginx/ssl/192.168.1.33.crt;
       ssl_certificate_key  /etc/nginx/ssl/192.168.1.33.key;

       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;

    access_log /var/log/nginx/192.168.1.33-ssl.access.log;
    error_log /var/log/nginx/192.168.1.33-ssl.error.log;
    root /srv/http;
    location / {
    index index.html index.htm index.php;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
 }
    location /phpmyadmin {
        rewrite ^/* /phpMyAdmin last;
    }
    location ~ \.php$ {
        #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

12. Αφού δημιουργηθεί το αρχείο, χρησιμοποιήστε το σενάριο n2ensite ή τη γραμμή εντολών ln για να το ενεργοποιήσετε (δημιουργεί έναν συμβολικό σύνδεσμο αρχείου σε ιστοτόπους -enabled) και μετά επανεκκινήστε το Nginx daemon για να εφαρμόσετε ρυθμίσεις.

sudo ./n2ensite name-ip-ssl
OR
sudo ln -s /etc/nginx/sites-available/name-ip-ssl.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx

13. Τοποθετήστε ξανά το πρόγραμμα περιήγησής σας στο Arch IP URL αλλά αυτή τη φορά χρησιμοποιώντας το πρωτόκολλο HTTPS – https://192.168.1.33 στο σύστημά μου- και θα πρέπει να εμφανιστεί ένα σφάλμα ασφαλείας Μη αξιόπιστη σύνδεση ( Προσθήκη και επιβεβαίωση εξαίρεσης ασφαλείας για να προχωρήσετε περαιτέρω στη σελίδα).

Όπως μπορείτε τώρα να δείτε ο Εικονικός κεντρικός υπολογιστής Nginx σας εξυπηρετεί το ίδιο περιεχόμενο με τον προηγούμενο κεντρικό υπολογιστή name-ip, αλλά αυτή τη φορά χρησιμοποιεί μια ασφαλή σύνδεση HTTP.

Βήμα 3: Πρόσβαση στο PhpMyAdmin μέσω του Virtual Host

Εάν το Virtual Host είναι ενεργοποιημένο στο Nginx, δεν έχουμε πλέον πρόσβαση στα περιεχόμενα της διαδρομής http://localhost (το localhost συνήθως εξυπηρετεί περιεχόμενο χρησιμοποιώντας διεύθυνση IP loopback ή διεύθυνση IP συστήματος εάν δεν έχει ρυθμιστεί διαφορετικά) επειδή έχουμε χρησιμοποιήσαμε το σύστημα IP του Arch ως όνομα_διακομιστή, επομένως η διαδρομή περιεχομένου μας άλλαξε.

14. Η απλούστερη μέθοδος για να αποκτήσετε πρόσβαση στο PhpMyAdmin μέσω ιστού είναι να δημιουργήσετε έναν συμβολικό σύνδεσμο μεταξύ της διαδρομής /usr/share/webapps/phpMyAdmin/ και τη νέα μας καθορισμένη διαδρομή Virtual Host (/srv/http).

sudo ln -s /usr/share/webapps/phpMyAdmin/ /srv/http/

15. Αφού εκτελέσετε την παραπάνω εντολή, ανανεώστε τη σελίδα σας και θα δείτε έναν νέο φάκελο phpMyAdmin να εμφανίζεται, εάν η δήλωση autoindex είναι ενεργοποιημένη στον Εικονικό κεντρικό υπολογιστή Nginx ή κατευθύνετε τη διεύθυνση URL απευθείας στο Φάκελος PhpMyAdmin https://arch_IP/phpMyAdmin.

16. Εάν θέλετε να απολυμάνετε τη συμβολοσειρά phpMyAdmin στο πρόγραμμα περιήγησης, επεξεργαστείτε τα αρχεία Virtual Hosts και προσθέστε το ακόλουθο περιεχόμενο στο μπλοκ διακομιστή.

location /phpmyadmin {
       rewrite ^/* /phpMyAdmin last;
    }

Βήμα 4: Ενεργοποιήστε τον κατάλογο που προστατεύεται με κωδικό πρόσβασης στο Nginx

Σε αντίθεση με τον Apache, το Nginx χρησιμοποιεί την ενότητα HttpAuthBasic για να ενεργοποιήσει τους Κατάλογοι που προστατεύονται με κωδικό πρόσβασης, αλλά δεν παρέχει κανένα εργαλείο για τη δημιουργία κρυπτογραφημένου αρχείου .htpasswd.

17. Για να επιτύχετε προστασία με κωδικό καταλόγου με το Nginx στο Arch Linux, εγκαταστήστε τον διακομιστή ιστού Apache και χρησιμοποιήστε τα εργαλεία του για να δημιουργήσετε ένα κρυπτογραφημένο αρχείο .htaccess.

sudo pacman -S apache

18. Αφού εγκαταστήσετε το Apache, δημιουργήστε έναν νέο κατάλογο κάτω από το /etc/nginx/ με το όνομα intuitively passwd όπου θα αποθηκευτεί και θα χρησιμοποιηθεί το αρχείο .htpasswd Εντολή htpasswd με –c ενεργοποιήστε τον πρώτο χρήστη που προστέθηκε για τη δημιουργία αρχείου και, στη συνέχεια, εάν θέλετε να προσθέσετε περισσότερους χρήστες χρησιμοποιήστε το htpasswd χωρίς – c διακόπτης.

sudo mkdir /etc/nginx/passwd

sudo htpasswd -c /etc/nginx/passwd/.htpasswd first_user
sudo htpasswd /etc/nginx/passwd/.htpasswd second_user
sudo htpasswd /etc/nginx/passwd/.htpasswd third_user

19. Για την προστασία του name-ip-ssl Virtual Host root /srv/http/ με όλους τους υποφακέλους και τα αρχεία του από κάτω προσθέτει τις ακόλουθες οδηγίες μέσα στο μπλοκ διακομιστή Virtual Host κάτω από την οδηγία root και το οδηγεί στην απόλυτη διαδρομή αρχείου .htpasswd.

auth_basic "Restricted Website";
auth_basic_user_file /etc/nginx/passwd/.htpasswd;

20. Μετά την επανεκκίνηση της υπηρεσίας Nginx, η ανανέωση της σελίδας και ένα αναδυόμενο παράθυρο Απαιτείται έλεγχος ταυτότητας θα πρέπει να εμφανιστεί απαιτητικό για τα διαπιστευτήριά σας.

Τώρα έχετε ενεργοποιήσει επιτυχώς το Nginx Κατάλογοι που προστατεύονται με κωδικό πρόσβασης, αλλά να γνωρίζετε ότι την ίδια στιγμή που ο διακομιστής ιστού Apache είναι εγκατεστημένος στο σύστημά σας, επομένως βεβαιωθείτε ότι παραμένει απενεργοποιημένος και με κανέναν τρόπο μην τον ξεκινήσετε γιατί μπορεί να οδηγήσει σε θύρες που έρχονται σε αντίθεση με το Nginx.

Βήμα 5: Ανακατευθύνετε το HTTP στο HTTPS στο Nginx

21. Εάν θέλετε τα προγράμματα περιήγησης να ανακατευθύνουν αυτόματα όλα τα μη ασφαλή αιτήματα HTTP στο πρωτόκολλο HTTPS, ανοίξτε και επεξεργαστείτε, είστε non-ssl Virtual Host και προσθέστε την ακόλουθη οδηγία στο όνομα_διακομιστή.

rewrite        ^ https://$server_name$request_uri? permanent;

Όλες οι ρυθμίσεις που παρουσιάζονται σε αυτό το άρθρο έγιναν σε ένα σύστημα Arch Linux που λειτουργεί ως διακομιστής, αλλά οι περισσότερες από αυτές, ειδικά αυτές που αφορούν αρχεία διαμορφώσεων Nginx, είναι διαθέσιμες στα περισσότερα συστήματα Linux με μικρές διαφορές.