Arch Linux'ta "Nginx Web Sunucusu" kullanarak Sanal Ana Bilgisayarlar, Parola Korumalı Dizinler ve SSL Sertifikaları oluşturun


Önceki Arch Linux 'LEMP' makalesi, ağ hizmetlerinin (Nginx, MySQL veritabanı ve PhpMyAdmin) kurulumundan MySQL sunucusu ve PhpMyadmin için gereken minimum güvenliğin yapılandırılmasına kadar temel konuları kapsıyordu.

Bu konu, kesinlikle Arch Linux'a eski LEMP Kurulumu ile ilgilidir ve LEMP yığını için, özellikle de Nginx web sunucusu yapılandırmaları için, Sanal Ana Bilgisayarlar oluşturmak gibi daha karmaşık yapılandırmalar ayarlama konusunda size rehberlik edecektir. , Parola Korumalı Dizinler kullanın, HTTP Güvenli Yuva Katmanı oluşturup yapılandırın, HTTPS'ye HTTP güvenli olmayan yönlendirmeler yapın ve ayrıca size bazı yararlı Bash komut dosyaları sunacaktır. Sanal Ana Bilgisayarların etkinleştirilmesi ve SSL Sertifikası ve Anahtarlarının oluşturulması işini kolaylaştıracaktır.

Gereksinimler

Arch Linux'ta LEMP'yi MariaDB Veritabanıyla yükleyin

1. Adım: Nginx'te Sanal Ana Bilgisayarları Etkinleştirin

Sanal Ana Bilgisayarları etkinleştirmenin en basit yöntemlerinden biri, ana Nginx yapılandırma dosyasında include deyimlerini kullanmaktır; bu, basit dosyalar oluşturabildiğiniz için diğer yapılandırmaların işini daha basit ve verimli hale getirir. her yeni ana bilgisayar için ve ana yapılandırma dosyasını daha temiz tutun.

Bu yaklaşım Apache Web Sunucusu'ndakiyle aynı şekilde çalışır; yapmanız gereken ilk şey, Nginx'in dosya yönergelerini okuması gereken yeni URI yolunu belirtmektir.

1. Öyleyse, /etc/nginx/ sistem yolunda ve en altta, son küme parantezinden önce bulunan nginx.conf ana dosyasını açın “ ”, gelecekteki Sanal Ana Bilgisayar yapılandırma dosyalarının bulunacağı yolu ekleyin.

sudo nano /etc/nginx/nginx.conf

En alta aşağıdaki ifadeyi ekleyin.

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

Bu yönerge Nginx'e /etc/nginx/sites-enabled/ dosyasında bulunan ve .conf uzantısıyla biten tüm dosyaları okuması gerektiğini söyler.

2. Bir sonraki adım, sitelerin etkin olduğu dizini ve tüm Sanal Ana Bilgisayar yapılandırmanızı depoladığınız sitelerin bulunduğu adı verilen başka bir dizin oluşturmaktır. Dosyalar.

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

3. Şimdi yeni bir Sanal Ana Bilgisayar oluşturmanın zamanı geldi. Bu örnekte Sanal Ana Bilgisayar Adı olarak sistem IP adresi kullanılacaktır, dolayısıyla name-ip.conf adında yeni bir dosya oluşturun.

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

Aşağıdaki içeriği ekleyin.

## 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;
    }
}

Sanal Ana Bilgisayarı etkinleştiren yönerge, dinleme portu altındaki sunucu_adı ifadesidir. Ayrıca buradaki bir diğer önemli yönerge, Nginx Sanal Ana Bilgisayarının dosya içeriğini /srv/http/ sistem yolundan sunmasını işaret eden root ifadesidir.

4. Son adım, /srv/http/ dizini oluşturmak ve name-ip.conf dosya yapılandırmasını Nginx okuması için kullanılabilir hale getirmektir (kullanarak sembolik bağlantı), ardından yeni konfigürasyonları görünür kılmak için arka plan programını yeniden başlatın.

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

5. Bunu doğrulamak için tarayıcınızı Arch sistem IP adresine yönlendirin; web içeriğinin http://localhost'tan farklı olduğunu görmelisiniz. Buraya, aşağıdaki ekran görüntüsündeki gibi FastCGI PHP yapılandırmalarını da kontrol eden küçük bir php betiği ekledim.

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

<?php
phpinfo();
?>

6. Nginx'te Sanal Konakları etkinleştirmek veya devre dışı bırakmak için kendi geliştirdiğim başka bir yöntem daha şıktır ve Apache a2eniste betiğinden ilham almıştır.

Bu yöntemi kullanmak için bir dosya düzenleyici açın ve $HOME yolunuzda aşağıdaki içeriğe sahip n2ensite adında yeni bir dosya oluşturun, onu yürütülebilir hale getirin, kök ayrıcalıklarıyla çalıştırın ve .conf sonu olmadan yeni Sanal Ana Bilgisayar adınıza bir seçenek olarak iletin (ihtiyaçlarınıza göre değiştirmek için ücretsiz doldurun).

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

Çalıştırılabilir hale getirin ve gösteri olarak çalıştırın.

sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host

7. Sanal Ana Bilgisayarları devre dışı bırakmak için aşağıdaki içeriğe sahip yeni bir n2dissite dosyası oluşturun ve yukarıdaki ayarların aynısını uygulayın.

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. Artık bu iki komut dosyasını herhangi bir Sanal Ana Bilgisayarı etkinleştirmek veya devre dışı bırakmak için kullanabilirsiniz, ancak bunu sistem çapında komutlar olarak uygulamak istiyorsanız her iki komut dosyasını da /usr/local/bin/< dizinine kopyalamanız yeterlidir. ve sonra yolu belirtmeden kullanabilirsiniz.

sudo cp n2ensite n2dissite /usr/local/bin/

Adım 2: Nginx'te Sanal Ana Bilgisayarlarla SSL'yi etkinleştirin

SSL (Güvenli Yuva Katmanı), simetrik/asimetrik şifreleme anahtarları kullanılarak veri akışının güvenli bir kanal üzerinden iletilmesini sağlayan, ağlar veya İnternet üzerinden HTTP bağlantılarını şifrelemek için tasarlanmış bir protokoldür. Arch Linux'ta OpenSSL paketiyle sağlanır.

sudo pacman -S openssl

9. Nginx ile HTTPS bağlantılarını etkinleştirmek için yapmanız gereken ilk şey Sanal Ana Bilgisayar anahtarları oluşturmaktır. Ayrıca, işleri basitleştirmek için, Anahtar adları olarak Sanal Ana Bilgisayar adlandırmasını kullanarak /etc/nginx/ssl dizin yolunda otomatik olarak şifreleme anahtarları üreten küçük bir komut dosyası geliştirdim.

nginx_gen_ssl adında bir dosya oluşturun ve aşağıdaki içeriği ekleyin.

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. Komut dosyası oluşturulduktan sonra yürütme izinlerini ekleyin, çalıştırın ve Sertifika seçeneklerinizi sağlayın; en önemlisi Ortak Ad alanıdır (resmi alan adını buraya ekleyin) ve Şifre ve İsteğe Bağlı Şirket alanlarını boş bırakın.

sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl

Anahtar oluşturma görevinin sonunda, Nginx SSL dizini altında mevcut tüm anahtarların bulunduğu bir liste görüntülenecektir.

Ayrıca bu betiğin bir sistem komutu olarak kullanılmasını istiyorsanız, onu /usr/local/bin/ dizinine kopyalayın veya taşıyın.

sudo mv nginx_gen_ssl  /usr/local/bin

11. Nginx SSL Sanal Ana Bilgisayarı için gerekli anahtarları oluşturduktan sonra, SSL Sanal Ana Bilgisayar yapılandırma dosyasını gerçekten oluşturmanın zamanı geldi. Sanal Ana Bilgisayar için yukarıdaki sunucu_adı yönergesindekiyle aynı sistem IP adresini kullanın, ancak Sanal Ana Bilgisayar dosya adını, bu dosyanın size gerekli olduğunu hatırlatması için .conf'un önüne ssl ekleyerek biraz değiştirin. name-ip SSL Sanal Ana Bilgisayarı anlamına gelir.

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

Bu dosyada dinle bağlantı noktası ifadesini 443 SSL olarak değiştirin ve aşağıdaki alıntıdaki gibi görünmesi için daha önce oluşturulanlarla SSL ve sertifika anahtarı dosya yollarını sağlayın.

## 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. Dosya oluşturulduktan sonra onu etkinleştirmek için n2ensite komut dosyasını veya ln komut satırını kullanın (sites'te bir dosya sembolik bağlantısı oluşturur) -enabled dizini), ardından ayarları uygulamak için Nginx arka plan programını yeniden başlatın.

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. Tarayıcınızı yine Arch IP URL'e yönlendirin, ancak bu sefer sistemimde HTTPS protokolünü (https://192.168.1.33) kullanın ve Güvenilmeyen Bağlantı güvenlik hatası görünmelidir (sayfada daha ileri gitmek için Güvenlik İstisnası Ekle ve Onayla).

Artık görebileceğiniz gibi, Nginx Sanal Ana Makineniz önceki name-ip ana bilgisayarıyla aynı içeriği sunuyor ancak bu sefer HTTP güvenli bağlantısı kullanıyor.

Adım 3: PhpMyAdmin'e Sanal Ana Bilgisayar aracılığıyla erişin

Nginx'te Sanal Ana Bilgisayar etkinleştirilmişse, artık http://localhost yol içeriklerine erişimimiz yoktur (localhost genellikle içeriği geridöngü IP adresini veya aksi yapılandırılmamışsa sistem IP adresini kullanarak sunar) çünkü elimizde Arch sistem IP'sini sunucu_adı olarak kullandığından içerik yolumuz değişti.

14. PhpMyAdmin'e web üzerinden erişmenin en basit yöntemi, /usr/share/webapps/phpMyAdmin/ yolu arasında sembolik bir bağlantı oluşturmaktır. ve yeni tanımlanmış Sanal Ana Bilgisayar yolumuz (/srv/http).

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

15. Yukarıdaki komutu yürüttükten sonra sayfanızı yenileyin; eğer Nginx Sanal Ana Bilgisayarda autoindex ifadesi etkinse veya URL'nizi doğrudan PhpMyAdmin klasörü https://arch_IP/phpMyAdmin.

16. Tarayıcıdaki phpMyAdmin dizesini temizlemek istiyorsanız Sanal Ana Bilgisayar dosyalarınızı düzenleyin ve aşağıdaki içeriği sunucu bloğunun altına ekleyin.

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

Adım 4: Nginx'te Parola Korumalı Dizini Etkinleştirin

Apache'den farklı olarak Nginx, Parola Korumalı Dizinleri etkinleştirmek için HttpAuthBasic modülünü kullanır, ancak şifrelenmiş bir .htpasswd dosyası oluşturmak için herhangi bir araç sağlamaz.

17. Arch Linux'ta Nginx ile dizin parolası koruması elde etmek için Apache web sunucusunu yükleyin ve şifrelenmiş bir .htaccess dosyası oluşturmak için onun araçlarını kullanın.

sudo pacman -S apache

18. Apache'yi kurduktan sonra /etc/nginx/ altında sezgisel olarak passwd adında yeni bir dizin oluşturun; burada .htpasswd dosyası saklanacak ve kullanılacaktır htpasswd komutunu –c ile açın, dosya oluşturmak için ilk eklenen kullanıcıyı açın, daha sonra daha fazla kullanıcı eklemek istiyorsanız - olmadan htpasswd komutunu kullanın. c anahtarına basın.

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 Sanal Ana Bilgisayar kök /srv/http/ hizmet yolunu korumak için, altındaki tüm alt klasörleri ve dosyalarıyla birlikte aşağıdaki talimatları Virtual Host sunucu bloğunuzun içine root direktifinin altına ekler ve onu mutlak .htpasswd dosya yoluna yönlendirir.

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

20. Nginx hizmetini yeniden başlattıktan sonra sayfayı yenileyin ve kimlik bilgilerinizi isteyen Kimlik Doğrulama Gerekli açılır penceresi görünmelidir.

Artık Nginx Şifre Korumalı Dizinleri başarıyla etkinleştirdiniz, ancak aynı zamanda Apache web sunucusunun sisteminize kurulduğunu unutmayın, bu nedenle devre dışı kaldığından emin olun ve hiçbir şekilde başlatmayın, çünkü bu duruma yol açabilir Nginx ile çakışan bağlantı noktaları.

Adım 5: Nginx'te HTTP'yi HTTPS'ye yönlendirin

21. Tarayıcıların tüm güvenli olmayan HTTP isteklerini HTTPS protokolüne otomatik olarak yönlendirmesini ve düzenlemesini istiyorsanız, Ssl olmayan Sanal Ana Bilgisayarsınız ve sunucu_adı yönergesi.

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

Bu makalede sunulan ayarların tümü, sunucu görevi gören bir Arch Linux sistemi altında yapılmıştır; ancak bunların çoğu, özellikle de Nginx yapılandırma dosyalarıyla ilgili olanlar, küçük farklılıklarla çoğu Linux sisteminde mevcuttur.