Takip et

Ubuntu 16.04 Üzerinde Nginx Server Blokları ile Let’s Encrypt Kurulumu: Adım Adım Rehber

Ubuntu 16.04 Üzerinde Nginx Server Blokları ile Let’s Encrypt Kurulumu: Adım Adım Rehber Bu kapsamlı rehberde, Ubuntu 16.04 işletim sistemi üz

Ubuntu 16.04 Üzerinde Nginx Server Blokları ile Let’s Encrypt Kurulumu: Adım Adım Rehber

Bu kapsamlı rehberde, Ubuntu 16.04 işletim sistemi üzerinde çalışan Nginx web sunucunuz için Let’s Encrypt kullanarak ücretsiz SSL/TLS sertifikaları nasıl kuracağınızı ve yapılandıracağınızı adım adım öğreneceksiniz. Web sitelerinin güvenliği günümüzde her zamankinden daha kritik bir öneme sahiptir. HTTPS, kullanıcı verilerini şifreleyerek gizliliği ve bütünlüğü korurken, arama motoru sıralamalarında da avantaj sağlar. Let’s Encrypt, bu güvenliği herkes için erişilebilir kılan, ücretsiz, otomatik ve açık bir sertifika yetkilisidir.

Giriş: Let’s Encrypt ve Nginx’in Önemi

İnternet üzerindeki bilgi akışının büyük bir kısmı, hassas veriler içerebilir. Kredi kartı bilgileri, kişisel veriler, şifreler ve daha fazlası, güvenli olmayan bağlantılar üzerinden aktarıldığında kötü niyetli kişiler tarafından ele geçirilebilir. İşte bu noktada SSL/TLS sertifikaları devreye girer. Bir SSL/TLS sertifikası, sunucu ile istemci (web tarayıcısı) arasındaki iletişimi şifreleyerek verilerin güvenli bir şekilde aktarılmasını sağlar. Bu şifreleme, tarayıcınızın adres çubuğunda “https://” ve bir kilit simgesi ile belirtilir.

Geleneksel olarak, SSL/TLS sertifikaları pahalıydı ve kurulum süreçleri karmaşık olabiliyordu. Ancak Let’s Encrypt’in ortaya çıkışı bu durumu tamamen değiştirdi. Internet Security Research Group (ISRG) tarafından geliştirilen Let’s Encrypt, herkesin ücretsiz ve otomatik olarak güvenilir sertifikalar almasını sağlayan bir sertifika yetkilisidir (CA). Bu, web sitesi sahiplerinin güvenlik maliyetlerini düşürürken, internetin genel güvenliğini artırmasına olanak tanır.

Nginx ise, performans odaklı, hafif ve güçlü bir web sunucusu ve ters proxy’dir. Yüksek trafikli web sitelerini barındırma yeteneği, esnek yapılandırma seçenekleri ve kaynak verimliliği nedeniyle dünya genelinde en popüler web sunucularından biridir. Nginx’in modüler yapısı, Let’s Encrypt gibi araçlarla kolayca entegre edilmesini sağlar. Ubuntu 16.04, uzun dönem destekli (LTS) bir işletim sistemi sürümü olup, kararlılığı ve geniş paket desteği nedeniyle sunucu ortamlarında hala yaygın olarak kullanılmaktadır. Bu rehber, bu üç güçlü bileşeni (Ubuntu 16.04, Nginx, Let’s Encrypt) bir araya getirerek güvenli bir web deneyimi sunmayı amaçlamaktadır.

Ön Koşullar: Başlamadan Önce Bilmeniz Gerekenler

Kuruluma başlamadan önce, aşağıdaki ön koşulların yerine getirildiğinden emin olmalısınız:

Ubuntu 16.04 Sunucusu

Bu rehber Ubuntu 16.04 üzerinde çalışacak şekilde tasarlanmıştır. Sunucunuza SSH erişiminiz olmalı ve sudo yetkilerine sahip bir kullanıcı olarak oturum açmalısınız.

Nginx Kurulumu

Sunucunuzda Nginx’in kurulu ve çalışır durumda olması gerekmektedir. Eğer kurulu değilse, aşağıdaki komutlarla kurabilirsiniz:

sudo apt update
sudo apt install nginx

Kurulumdan sonra Nginx’in çalışıp çalışmadığını kontrol etmek için:

systemctl status nginx

Çıktıda “active (running)” ifadesini görmelisiniz.

Alan Adı ve DNS Ayarları

Let’s Encrypt sertifikaları, belirli bir alan adı için verilir. Bu nedenle, web sitenizin yayınlanacağı bir alan adına (örneğin, ornekalanadi.com) sahip olmanız ve bu alan adının DNS kayıtlarının sunucunuzun IP adresini işaret etmesi gerekmektedir. Hem ana alan adınız (örneğin, ornekalanadi.com) hem de www alt alan adınız (örneğin, www.ornekalanadi.com) için A/AAAA kayıtlarının sunucunuzun IP adresine yönlendirildiğinden emin olun. DNS değişikliklerinin internet genelinde yayılması biraz zaman alabilir (genellikle birkaç dakika ile birkaç saat arası).

Güvenlik Duvarı Ayarları (UFW)

Eğer sunucunuzda bir güvenlik duvarı (örneğin, UFW – Uncomplicated Firewall) etkinse, Nginx’in web trafiğini alabilmesi için HTTP (80) ve HTTPS (443) portlarının açık olduğundan emin olmalısınız.

Nginx için UFW profillerini listeleyerek başlayın:

sudo ufw app list

Çıktıda “Nginx HTTP”, “Nginx HTTPS” ve “Nginx Full” gibi seçenekler görmelisiniz. HTTP ve HTTPS trafiğine izin vermek için “Nginx Full” profilini etkinleştirebilirsiniz:

sudo ufw allow 'Nginx Full'

Eğer UFW etkin değilse, aşağıdaki komutla etkinleştirebilirsiniz (SSH bağlantınızın kesilmemesi için öncelikle SSH portuna izin verdiğinizden emin olun, varsayılan olarak 22):

sudo ufw allow OpenSSH
sudo ufw enable

Güvenlik duvarının durumunu kontrol etmek için:

sudo ufw status

Nginx Server Bloğunun Yapılandırılması: İlk Adım

Let’s Encrypt sertifikası almadan önce, Nginx’in alan adınızı doğru bir şekilde barındırdığından emin olmanız gerekir. Bu, bir Nginx “server bloğu” oluşturarak yapılır.

Yeni Bir Nginx Server Bloğu Oluşturma

Alan adınız için yeni bir yapılandırma dosyası oluşturun. Bu dosyayı /etc/nginx/sites-available/ dizini altında saklayacağız. ornekalanadi.com kısmını kendi alan adınızla değiştirin.

sudo nano /etc/nginx/sites-available/ornekalanadi.com

Dosyanın içine aşağıdaki temel yapılandırmayı ekleyin. Bu yapılandırma, sunucunuzun HTTP (port 80) isteklerini dinlemesini ve web sitenizin dosyalarının nerede olduğunu belirtir.

server {
    listen 80;
    listen [::]:80;

    root /var/www/ornekalanadi.com/html; # Web sitenizin dosyalarının bulunduğu dizin
    index index.html index.htm index.nginx-debian.html;

    server_name ornekalanadi.com www.ornekalanadi.com; # Alan adlarınız

    location / {
        try_files $uri $uri/ =404;
    }
}

* listen 80;: Nginx’in HTTP istekleri için port 80’i dinlemesini sağlar.
* root /var/www/ornekalanadi.com/html;: Web sitenizin kök dizinini belirtir. Bu dizini daha sonra oluşturacağız.
* index index.html ...;: Varsayılan dizin dosyalarını belirtir.
* server_name ornekalanadi.com www.ornekalanadi.com;: Bu server bloğunun hangi alan adları için geçerli olduğunu belirtir. Hem ana alan adınızı hem de www alt alan adınızı eklediğinizden emin olun.
* location / { ... };: İsteklerin nasıl işleneceğini tanımlar. try_files yönergesi, gelen isteklere karşılık gelen dosyaları veya dizinleri arar.

Yapılandırma dosyasını kaydedip kapatın (CTRL+X, Y, Enter).

Şimdi, yukarıda belirttiğimiz kök dizini oluşturalım ve içine basit bir index.html dosyası ekleyelim:

sudo mkdir -p /var/www/ornekalanadi.com/html
sudo chown -R $USER:$USER /var/www/ornekalanadi.com/html # Kullanıcınıza sahiplik verin
sudo chmod -R 755 /var/www/ornekalanadi.com

Şimdi bir test HTML dosyası oluşturalım:

nano /var/www/ornekalanadi.com/html/index.html

İçine şunları ekleyin:




    Hoş Geldiniz!


    
    

Bu sayfa ornekalanadi.com alan adı için hazırlanmıştır.

Server Bloğunu Etkinleştirme

Yeni oluşturduğunuz server bloğunu etkinleştirmek için, /etc/nginx/sites-enabled/ dizinine sembolik bir bağlantı (symlink) oluşturmanız gerekir:

sudo ln -s /etc/nginx/sites-available/ornekalanadi.com /etc/nginx/sites-enabled/

Bu, Nginx’e bu yapılandırma dosyasını kullanmasını söyler.

Nginx Yapılandırmasını Test Etme ve Yeniden Başlatma

Değişiklikleri uygulamadan önce Nginx yapılandırma dosyasında herhangi bir sözdizimi hatası olup olmadığını kontrol etmek iyi bir uygulamadır:

sudo nginx -t

Eğer “test is successful” mesajını görürseniz, her şey yolunda demektir. Herhangi bir hata durumunda, hatayı düzeltmeniz ve testi tekrarlamanız gerekir.

Hata yoksa, Nginx hizmetini yeniden başlatarak yeni yapılandırmayı uygulayın:

sudo systemctl restart nginx

Şimdi web tarayıcınızdan http://ornekalanadi.com adresine giderek sitenizin çalıştığını doğrulayın. Eğer her şey doğruysa, hazırladığınız “Hoş Geldiniz!” sayfasını görmelisiniz.

Certbot Kurulumu: Let’s Encrypt İçin Temel Araç

Certbot, Let’s Encrypt sertifikalarını almayı ve yönetmeyi otomatikleştiren bir araçtır. Nginx için özel bir eklentisi bulunur ve sertifika alma ve yapılandırma sürecini büyük ölçüde basitleştirir.

Certbot Depolarını Ekleme

Ubuntu 16.04’ün varsayılan depolarındaki Certbot sürümü güncel olmayabilir. En güncel Certbot sürümünü almak için Certbot PPA (Personal Package Archive) deposunu eklememiz gerekir:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt update

Certbot Paketini Kurma

Şimdi Certbot’u Nginx eklentisi ile birlikte kurabiliriz:

sudo apt install python-certbot-nginx

Bu komut, Certbot ana paketini ve Nginx ile entegrasyonu sağlayan eklentiyi kuracaktır.

SSL Sertifikası Alma: Let’s Encrypt ile Güvenli Bağlantı

Certbot’u kurduktan sonra, web siteniz için SSL sertifikası almak artık çok kolay.

Certbot ile Nginx Eklentisini Kullanma

Certbot’un Nginx eklentisi, sertifika alma ve Nginx yapılandırmasını otomatik olarak güncelleme yeteneğine sahiptir.

sudo certbot --nginx -d ornekalanadi.com -d www.ornekalanadi.com

* --nginx: Nginx eklentisini kullanacağını belirtir. Bu, Certbot’un Nginx yapılandırmanızı okuyup otomatik olarak değiştirmesini sağlar.
* -d: Sertifika almak istediğiniz alan adlarını belirtir. Her alan adı için ayrı bir -d parametresi kullanın.

Komutu çalıştırdığınızda, Certbot size birkaç soru soracaktır:

1. E-posta Adresi: Sertifika bildirimleri ve kayıp anahtar kurtarma için bir e-posta adresi girmeniz istenecektir.
2. Hizmet Şartları: Let’s Encrypt’in hizmet şartlarını kabul etmeniz istenecektir. Kabul etmek için ‘A’ tuşuna basın.
3. EFF Haber Bülteni: Electronic Frontier Foundation (EFF) haber bültenine abone olmak isteyip istemediğiniz sorulacaktır. Bu isteğe bağlıdır, ‘Y’ veya ‘N’ tuşuna basarak seçiminizi yapabilirsiniz.
4. HTTP’den HTTPS’ye Yönlendirme: Certbot, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirmek isteyip istemediğinizi soracaktır. Bu genellikle önerilen bir ayardır. ‘2’ seçeneğini (Redirect) seçerek tüm HTTP isteklerinin HTTPS’ye yönlendirilmesini sağlayın.

Başarılı bir kurulumun ardından, Certbot size sertifikaların nerede saklandığı ve ne zaman sona ereceği gibi bilgileri içeren bir mesaj gösterecektir. Ayrıca, “Congratulations!” mesajını görmelisiniz.

Bu işlem sırasında Certbot, Nginx yapılandırma dosyanızı ( /etc/nginx/sites-available/ornekalanadi.com ) otomatik olarak güncelleyecektir. Yeni yapılandırma genellikle aşağıdaki gibi görünecektir (detaylar Certbot sürümüne göre değişebilir):

# ... (önceki HTTP server bloğu) ...
server {
    listen 80;
    listen [::]:80;

    server_name ornekalanadi.com www.ornekalanadi.com;

    # Certbot'un eklediği yönlendirme
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    root /var/www/ornekalanadi.com/html;
    index index.html index.htm index.nginx-debian.html;

    server_name ornekalanadi.com www.ornekalanadi.com;

    ssl_certificate /etc/letsencrypt/live/ornekalanadi.com/fullchain.pem; # Sertifika dosyası
    ssl_certificate_key /etc/letsencrypt/live/ornekalanadi.com/privkey.pem; # Özel anahtar dosyası

    # Certbot'un önerdiği SSL ayarları
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # DH parametresi (Certbot oluşturur)

    location / {
        try_files $uri $uri/ =404;
    }
}

Certbot, Nginx’i otomatik olarak yeniden başlatır, böylece değişiklikler hemen etkili olur. Şimdi web tarayıcınızdan https://ornekalanadi.com adresine giderek sitenizin güvenli bir bağlantı üzerinden çalıştığını doğrulayabilirsiniz. Tarayıcınızın adres çubuğunda kilit simgesini ve “https://” ibaresini görmelisiniz.

Manuel Sertifika Alma (Gerekirse)

Bazı durumlarda, Certbot’un Nginx eklentisi otomatik yapılandırmayı yapamayabilir veya siz manuel kontrolü tercih edebilirsiniz. Bu durumda certonly modunu kullanabilirsiniz:

sudo certbot certonly --nginx -d ornekalanadi.com -d www.ornekalanadi.com

Bu komut sadece sertifikaları alacak ve /etc/letsencrypt/live/ornekalanadi.com/ dizinine yerleştirecektir. Nginx yapılandırmanızı manuel olarak düzenlemeniz gerekecektir. Bu durumda, yukarıdaki server bloğundaki ssl_certificate ve ssl_certificate_key yönergelerini eklemeniz ve HTTP’den HTTPS’ye yönlendirmeyi manuel olarak yapılandırmanız gerekir.

Birden Fazla Alan Adı İçin Sertifika Alma

Eğer aynı sunucu bloğunda veya farklı sunucu bloklarında birden fazla alan adınız varsa, bunları aynı Certbot komutuna ekleyebilirsiniz:

sudo certbot --nginx -d alanadi1.com -d www.alanadi1.com -d alanadi2.com -d www.alanadi2.com

Certbot, bu alan adlarının her biri için tek bir sertifika oluşturacak ve Nginx yapılandırmalarını buna göre güncelleyecektir.

Nginx Yapılandırmasının Güncellenmesi: Sertifikayı Kullanıma Sokma

Certbot’un otomatik olarak yaptığı değişiklikleri anlamak ve gerekirse manuel olarak ayarlamalar yapmak önemlidir.

Certbot’un Otomatik Değişiklikleri

Certbot, Nginx yapılandırma dosyanıza temel olarak iki ana değişiklik yapar:

1. Yeni bir server bloğu oluşturur veya mevcut bloğu günceller: Bu blok, HTTPS (port 443) isteklerini dinler.
2. SSL/TLS yönergelerini ekler: ssl_certificate ve ssl_certificate_key ile sertifika ve özel anahtar dosyalarının yollarını belirtir. Ayrıca, /etc/letsencrypt/options-ssl-nginx.conf dosyasını dahil ederek güvenli SSL/TLS ayarlarını (protokoller, şifreler vb.) ve ssl_dhparam yönergesi ile Diffie-Hellman parametresini (ileri gizlilik için) ekler.
3. HTTP’den HTTPS’ye yönlendirme: Port 80’i dinleyen server bloğuna return 301 https://$host$request_uri; yönergesini ekleyerek tüm HTTP isteklerini HTTPS’ye yönlendirir.

Manuel Kontrol ve Ayarlamalar

Certbot’un otomatik olarak oluşturduğu /etc/letsencrypt/options-ssl-nginx.conf dosyası genellikle iyi ve güvenli varsayılanlar içerir. Ancak, daha fazla güvenlik veya performans optimizasyonu için bu ayarları manuel olarak değiştirmek isteyebilirsiniz.

Örneğin, Nginx yapılandırma dosyanızdaki server bloğuna aşağıdaki gibi ek SSL/TLS ayarları ekleyebilirsiniz (bu ayarlar zaten options-ssl-nginx.conf içinde olabilir, kontrol etmekte fayda var):

server {
    # ... (diğer ayarlar) ...

    ssl_protocols TLSv1.2 TLSv1.3; # Güvenli TLS protokollerini kullan
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # Güçlü şifreleri kullan
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS çözümleyici
    resolver_timeout 5s;

    # ...
}

Bu ayarlar, SSL Labs gibi araçlarla sertifika derecelendirmesini artırmanıza yardımcı olabilir.

HTTP’den HTTPS’ye Yönlendirme

Certbot bu yönlendirmeyi otomatik olarak yapar, ancak nasıl çalıştığını bilmek önemlidir. Port 80’i dinleyen server bloğunuzda aşağıdaki satırı bulmalısınız:

server {
    listen 80;
    listen [::]:80;
    server_name ornekalanadi.com www.ornekalanadi.com;
    return 301 https://$host$request_uri;
}

Bu, herhangi bir HTTP isteğinin kalıcı olarak (301 kodu ile) aynı URL’nin HTTPS versiyonuna yönlendirilmesini sağlar. Bu, SEO için de önemlidir, çünkü arama motorları web sitenizin tek bir canonical (tercih edilen) URL’ye sahip olmasını ister.

Herhangi bir manuel değişiklik yaptıktan sonra, Nginx yapılandırmasını test etmeyi ve yeniden başlatmayı unutmayın:

sudo nginx -t
sudo systemctl restart nginx

SSL Sertifikasının Otomatik Yenilenmesi: Sürekli Güvenlik

Let’s Encrypt sertifikaları 90 gün geçerlidir. Bu, güvenlik açısından iyi bir uygulama olsa da, sertifikaların düzenli olarak yenilenmesi gerektiği anlamına gelir. Certbot, bu yenileme sürecini otomatikleştirerek büyük kolaylık sağlar.

Certbot Yenileme Mekanizması

Certbot’un yüklenmesiyle birlikte, sisteminizde otomatik bir yenileme mekanizması kurulur. Bu genellikle bir cron işi veya systemd zamanlayıcısı aracılığıyla yapılır. Certbot, sertifikaların sona ermesine 30 gün kala otomatik olarak yenileme girişiminde bulunur.

Yenileme işlemini manuel olarak tetiklemek için aşağıdaki komutu kullanabilirsiniz:

sudo certbot renew

Bu komut, yalnızca süresi dolmak üzere olan veya zaten süresi dolmuş sertifikaları yeniler. Eğer tüm sertifikalarınızın geçerliliği devam ediyorsa, herhangi bir işlem yapmayacaktır.

Yenileme Testi

Yenileme işleminin düzgün çalıştığından emin olmak için bir kuru çalıştırma (dry run) yapabilirsiniz:

sudo certbot renew --dry-run

Bu komut, gerçek bir yenileme yapmadan yenileme sürecini simüle eder. Eğer herhangi bir sorunla karşılaşırsanız, hata mesajlarını göreceksiniz. “Cert not due for renewal” veya “Congratulations, all renewals succeeded” gibi mesajlar, yenileme mekanizmanızın düzgün çalıştığını gösterir.

Cron İşlemi ile Otomatik Yenileme

Ubuntu 16.04’te Certbot, genellikle /etc/cron.d/certbot altında bir cron işi oluşturur. Bu dosyanın içeriği aşağıdaki gibi olabilir:

0 /12    root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

Bu cron işi, her 12 saatte bir certbot renew komutunu çalıştırmayı dener. -q (quiet) parametresi, yalnızca hatalar oluştuğunda çıktı verir. perl -e 'sleep int(rand(3600))' kısmı, sunucuların aynı anda yenileme yapmasını önlemek için rastgele bir gecikme ekler. Bu sayede Let’s Encrypt sunucularına aşırı yük binmesi engellenir.

Bu otomatik yenileme mekanizması sayesinde, sertifikalarınızın süresinin dolması konusunda endişelenmenize gerek kalmaz.

Güvenliği Artırma (İsteğe Bağlı ama Önemli): Ek Adımlar

Let’s Encrypt sertifikasını kurmak, web sitenizi güvence altına almanın harika bir başlangıcıdır. Ancak, Nginx SSL yapılandırmanızı daha da güçlendirmek için atabileceğiniz ek adımlar vardır.

DH Parametresi Oluşturma

Diffie-Hellman (DH) parametresi, Perfect Forward Secrecy (PFS) sağlayan anahtar değişim algoritmaları için kullanılır. Bu, gelecekte bir anahtarın ele geçirilmesi durumunda bile eski oturumların şifrelerinin çözülmesini engeller. Certbot, genellikle kurulum sırasında otomatik olarak bir DH parametresi oluşturur, ancak manuel olarak da oluşturabilirsiniz.

Varsayılan olarak Certbot, /etc/letsencrypt/ssl-dhparams.pem konumunda 2048-bit bir DH parametresi oluşturur. Daha güçlü bir güvenlik için 4096-bit bir parametre oluşturabilirsiniz:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096

Bu komutun çalışması biraz zaman alabilir (birkaç dakika sürebilir). Oluşturulduktan sonra, Nginx yapılandırma dosyanızda (veya Certbot’un dahil ettiği options-ssl-nginx.conf dosyasında) bu dosyayı kullanmasını sağlamalısınız:

ssl_dhparam /etc/nginx/ssl/dhparam.pem;

Eğer Certbot’un otomatik olarak oluşturduğu dosyayı kullanıyorsanız, bu adımı atlayabilirsiniz.

Nginx SSL Yapılandırmasını Güçlendirme (TLS Sürümleri, Şifreler)

Nginx’in SSL/TLS yapılandırması, hangi protokollerin (TLSv1.2, TLSv1.3) ve hangi şifreleme algoritmalarının kullanılacağını belirler. Daha eski ve zayıf protokolleri veya şifreleri devre dışı bırakmak, sitenizin güvenliğini artırır. Certbot’un dahil ettiği options-ssl-nginx.conf dosyası genellikle iyi varsayılanlar sağlar, ancak bunları gözden geçirmek ve gerekirse güncellemek iyi bir uygulamadır.

/etc/letsencrypt/options-ssl-nginx.conf dosyasını inceleyin. Genellikle aşağıdaki gibi satırlar içerir:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;

... diğer ayarlar ...

* ssl_protocols: Sadece TLSv1.2 ve TLSv1.3 gibi modern ve güvenli protokolleri kullanın. TLSv1.0 ve TLSv1.1 gibi eski protokollerden kaçının.
* ssl_ciphers: Güçlü ve güvenli şifre paketlerini tercih edin. Mozilla’nın SSL Yapılandırma Üreticisi (Mozilla SSL Configuration Generator), farklı uyumluluk ve güvenlik seviyeleri için önerilen şifre setleri sunar.
* ssl_prefer_server_ciphers on;: Sunucunun şifre seçimi konusunda istemciye göre öncelikli olmasını sağlar.

Değişiklik yaptıktan sonra Nginx’i yeniden başlatmayı unutmayın. SSL Labs’ın SSL Test aracını kullanarak sitenizin SSL yapılandırmasının derecelendirmesini kontrol edebilirsiniz.

HSTS (HTTP Strict Transport Security) Uygulaması

HSTS, tarayıcılara web sitenize her zaman HTTPS üzerinden bağlanmalarını söyleyen bir güvenlik politikası mekanizmasıdır. Bu, kullanıcıların yanlışlıkla veya kötü niyetli bir saldırı sonucu HTTP üzerinden bağlanmasını engeller.

HSTS’yi etkinleştirmek için, HTTPS server bloğunuza aşağıdaki başlığı ekleyin:

server {
    # ...

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    # ...
}

* max-age: Tarayıcının bu politikayı ne kadar süreyle hatırlayacağını saniye cinsinden belirtir (63072000 saniye = 2 yıl).
* includeSubDomains: Politikanın tüm alt alan adları için de geçerli olmasını sağlar.
* preload: Sitenizin HSTS ön yükleme listesine eklenmesine izin verir. Bu, tarayıcıların sitenizi daha hiç ziyaret etmemiş olsalar bile varsayılan olarak HTTPS kullanmalarını sağlar. Ön yükleme listesine başvurmak için hstspreload.org adresini ziyaret edebilirsiniz.

HSTS başlığını ekledikten sonra Nginx’i yeniden başlatın. Bu başlık, ilk ziyaretçiden sonra tarayıcı tarafından önbelleğe alınacak ve sonraki tüm ziyaretler HTTPS üzerinden yapılacaktır.

Sık Karşılaşılan Sorunlar ve Çözümleri: Hata Ayıklama

Kurulum sürecinde veya sonrasında bazı sorunlarla karşılaşabilirsiniz. İşte sıkça rastlanan sorunlar ve olası çözümleri:

Nginx Yapılandırma Hataları

* Hata Mesajı: nginx: [emerg] ... syntax error veya nginx: [emerg] ... directive not found
* Çözüm: Nginx yapılandırma dosyanızda (genellikle /etc/nginx/sites-available/ornekalanadi.com veya ana nginx.conf dosyasında) sözdizimi hatası var demektir. sudo nginx -t komutunun çıktısındaki satır numarasını ve hata mesajını dikkatlice inceleyin. Eksik noktalı virgül (;), yanlış anahtar kelime veya yanlış dosya yolu gibi basit hatalar olabilir.

Certbot Hataları

* Hata Mesajı: Failed to connect to host for DVS challenge veya DNS problem: NXDOMAIN
* Çözüm: Bu genellikle DNS ayarlarınızla ilgili bir sorundur. Alan adınızın A/AAAA kayıtları sunucunuzun IP adresini doğru şekilde işaret etmiyor olabilir veya DNS değişiklikleri henüz yayılmamış olabilir. DNS kayıtlarınızı kontrol edin ve birkaç dakika bekleyip tekrar deneyin.
* Hata Mesajı: Problem binding to port 80: Could not bind to IPv4 or IPv6
* Çözüm: Başka bir uygulamanın (örneğin, Apache veya başka bir Nginx örneği) port 80’i zaten kullanıyor olması muhtemeldir. sudo netstat -tulpn | grep :80 komutuyla hangi uygulamanın portu kullandığını kontrol edebilirsiniz. Çakışan uygulamayı durdurmanız veya yapılandırmasını değiştirmeniz gerekebilir.
* Hata Mesajı: Too many requests for this domain
* Çözüm: Let’s Encrypt’in oran limitleri vardır. Genellikle haftada belirli bir alan adı için 5 kez sertifika alma limiti bulunur. Testleriniz için --dry-run kullanın. Eğer bu limitlere takıldıysanız, bir hafta beklemeniz gerekebilir.

Yenileme Sorunları

* Hata Mesajı: Attempting to renew cert (ornekalanadi.com) from /etc/letsencrypt/renewal/ornekalanadi.com.conf produced an unexpected error
* Çözüm: Yenileme işlemi sırasında Certbot’un Nginx yapılandırmanızı doğrulayamaması veya başka bir sorunla karşılaşması anlamına gelir. Nginx yapılandırmanızın hala geçerli olduğundan emin olun (sudo nginx -t). Güvenlik duvarı ayarlarınızın 80 ve 443 portlarını hala açık tuttuğundan emin olun. Bazen Nginx’i yeniden başlatmak veya Certbot’u güncellemek sorunu çözebilir.

Güvenlik Duvarı Sorunları

* Web sitesi erişilemiyor veya HTTPS çalışmıyor.
* Çözüm: UFW veya başka bir güvenlik duvarının 80 (HTTP) ve 443 (HTTPS) portlarını engellemediğinden emin olun. sudo ufw status komutuyla kontrol edin ve gerekirse sudo ufw allow 'Nginx Full' komutuyla izin verin.

Genel hata ayıklama ipuçları:

* Log dosyalarını kontrol edin: Nginx logları (/var/log/nginx/error.log, /var/log/nginx/access.log) ve Certbot logları (/var/log/letsencrypt/) sorunların kökenini bulmanıza yardımcı olabilir.
* Nginx’i yeniden başlatın: Herhangi bir yapılandırma değişikliğinden sonra Nginx’i yeniden başlatmayı unutmayın.
* Certbot’u güncelleyin: Bazen eski bir Certbot sürümü sorunlara neden olabilir. sudo apt update && sudo apt install python-certbot-nginx komutuyla güncelleyin.

Sonuç: Güvenli Bir Web Sunucusunun Önemi

Bu rehber boyunca, Ubuntu 16.04 üzerinde Nginx web sunucunuz için Let’s Encrypt kullanarak ücretsiz SSL/TLS sertifikalarını nasıl kuracağınızı ve yapılandıracağınızı ayrıntılı olarak ele aldık. Güvenli bir web sitesi, kullanıcılarınızın verilerini korumanın yanı sıra, web sitenizin profesyonelliğini ve güvenilirliğini de artırır. Arama motorları da HTTPS kullanan sitelere öncelik verdiğinden, SEO performansınız üzerinde de olumlu bir etkisi olacaktır.

Let’s Encrypt ve Certbot’un sunduğu otomasyon sayesinde, SSL/TLS sertifikaları artık pahalı ve karmaşık bir yük olmaktan çıktı. Düzenli otomatik yenilemeler, sertifikalarınızın her zaman güncel ve geçerli kalmasını sağlar. Ek güvenlik önlemleri (DH parametreleri, güçlü şifreler, HSTS) ile Nginx yapılandırmanızı daha da güçlendirerek, web sitenizi modern güvenlik standartlarına uygun hale getirebilirsiniz.

Unutmayın, web güvenliği sürekli bir süreçtir. Sertifikalarınızı güncel tutmak, sunucu yazılımlarınızı (Nginx, Ubuntu) düzenli olarak yamalamak ve güvenlik ayarlarınızı periyodik olarak gözden geçirmek, web sitenizin ve kullanıcılarınızın güvenliğini sağlamak için kritik öneme sahiptir. Bu rehberdeki adımları takip ederek, güvenli ve performanslı bir web sunucusu ortamı oluşturmuş oldunuz. Artık web siteniz HTTPS’in tüm avantajlarından yararlanmaya hazır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version