Nginx’i Rocky Linux 9 Üzerinde Let’s Encrypt ile Güvenli Hale Getirme
Rocky Linux 9, kararlı ve güvenilir bir işletim sistemi platformu sunarken, Nginx ise yüksek performanslı ve esnek bir web sunucusu olarak modern web uygulamalarının temelini oluşturur. Günümüzde internet güvenliği, web siteleri ve uygulamaları için vazgeçilmez bir öncelik haline gelmiştir. Kullanıcı verilerinin korunması, arama motoru sıralamaları ve genel kullanıcı güveni açısından SSL/TLS şifrelemesi kritik bir rol oynamaktadır. Let’s Encrypt, bu şifrelemeyi ücretsiz, otomatik ve açık bir sertifika yetkilisi (CA) aracılığıyla herkes için erişilebilir kılarak web güvenliğinde devrim yaratmıştır. Bu makalede, Nginx web sunucunuzu Rocky Linux 9 üzerinde Let’s Encrypt ile nasıl güvenli hale getireceğinizi adım adım detaylı bir şekilde inceleyeceğiz. Bu rehber, temel kurulumdan gelişmiş güvenlik ayarlarına kadar tüm süreçleri kapsayacaktır.
Giriş: Web Güvenliğinin Önemi ve Araçlarımız
İnternet üzerindeki veri akışının gizliliğini ve bütünlüğünü sağlamak, günümüz dijital dünyasında hayati bir zorunluluktur. SSL (Secure Sockets Layer) ve onun daha modern ve güvenli halefi olan TLS (Transport Layer Security) protokolleri, istemci (tarayıcı) ile sunucu arasındaki iletişimi şifreleyerek bu güvenliği sağlar. Bir web sitesi HTTPS (Hypertext Transfer Protocol Secure) kullandığında, tarayıcının adres çubuğunda genellikle bir kilit simgesi belirir ve bu, bağlantının güvenli olduğunu gösterir. Bu durum, hassas bilgilerin (kullanıcı adları, şifreler, kredi kartı bilgileri vb.) kötü niyetli kişiler tarafından ele geçirilmesini engeller. Ayrıca, arama motorları (özellikle Google), HTTPS kullanan siteleri sıralamada önceliklendirme eğilimindedir, bu da SEO açısından da bir avantaj sağlar.
Nginx, hafif yapısı, yüksek eşzamanlı bağlantıları işleme yeteneği ve esnek yapılandırma seçenekleri sayesinde dünya genelinde en popüler web sunucularından biridir. Ters proxy, yük dengeleyici ve HTTP önbelleği olarak da kullanılabilir. Rocky Linux 9, CentOS’un mirasını sürdüren kurumsal düzeyde bir işletim sistemi olarak, kararlılık ve uzun süreli destek sunar. Let’s Encrypt ise, Internet Security Research Group (ISRG) tarafından sağlanan, web siteleri için ücretsiz SSL/TLS sertifikaları sunan otomatik bir sertifika yetkilisidir. Certbot aracı, Let’s Encrypt sertifikalarının alınmasını ve yenilenmesini büyük ölçüde basitleştirir. Bu üç güçlü bileşeni bir araya getirerek, web sitenizi Rocky Linux 9 üzerinde hem performanslı hem de güvenli bir şekilde barındırabilirsiniz.
Ön Koşullar
Bu rehbere başlamadan önce, aşağıdaki ön koşulların yerine getirildiğinden emin olmalısınız:
Rocky Linux 9 Kurulu Sunucu
* Rocky Linux 9 işletim sisteminin kurulu ve güncel bir sunucusuna sahip olmanız gerekmektedir. Tüm paketlerin güncel olduğundan emin olmak için aşağıdaki komutu çalıştırın:
sudo dnf update -y
Root veya Sudo Ayrıcalıklarına Sahip Kullanıcı
* Sunucunuzda root kullanıcısı olarak veya sudo ayrıcalıklarına sahip bir kullanıcı olarak oturum açmış olmanız gerekmektedir. Bu rehberdeki tüm komutlar, aksi belirtilmedikçe, sudo ile çalıştırılacaktır.
Alan Adı (Domain Name) ve DNS Yapılandırması
* Web siteniz için kayıtlı bir alan adına (örneğin, example.com) sahip olmalısınız.
* Alan adınızın DNS kayıtlarının (A veya AAAA kayıtları), sunucunuzun genel IP adresine doğru şekilde işaret ettiğinden emin olun. Let’s Encrypt sertifika doğrulama sürecinde bu kayıtları kullanacaktır. Örneğin, example.com ve www.example.com adreslerinin sunucunuzun IP adresine yönlendirilmesi gerekmektedir. DNS değişikliklerinin yayılması biraz zaman alabilir (genellikle birkaç dakika ile birkaç saat arasında).
Nginx’in Kurulu ve Çalışır Durumda Olması
* Nginx web sunucusunun sunucunuzda kurulu ve yapılandırılmış olması gerekmektedir. Eğer Nginx kurulu değilse, sonraki adımlarda kurulumunu gerçekleştireceğiz.
* Nginx’in varsayılan HTTP (80) portunda web sitenizi başarıyla sunabiliyor olması gerekmektedir.
Güvenlik Duvarı (Firewall) Ayarları
* Sunucunuzun güvenlik duvarının (firewalld), HTTP (80) ve HTTPS (443) portlarına gelen trafiğe izin verdiğinden emin olun. Let’s Encrypt, sertifika doğrulama için 80 numaralı portu kullanır, HTTPS ise 443 numaralı port üzerinden hizmet verir.
Adım 1: Nginx Kurulumu ve Temel Yapılandırma (Gerekliyse)
Eğer Nginx sunucunuzda kurulu değilse, bu adımı takip ederek kurulumunu ve temel yapılandırmasını yapabilirsiniz. Zaten kuruluysa, bu adımı atlayabilirsiniz.
Nginx’in Kurulu Olup Olmadığını Kontrol Etme
Nginx’in sisteminizde kurulu olup olmadığını kontrol etmek için aşağıdaki komutu kullanın:
sudo systemctl status nginx
Eğer Nginx kurulu değilse veya çalışmıyorsa, çıktıda bir hata mesajı veya “Unit nginx.service could not be found.” gibi bir ifade göreceksiniz.
Nginx Kurulumu
Rocky Linux 9’da Nginx, varsayılan DNF (Dandified YUM) depolarında mevcuttur.
sudo dnf install nginx -y
Kurulum tamamlandıktan sonra, Nginx servisini başlatın ve sistem başlangıcında otomatik olarak çalışacak şekilde etkinleştirin:
sudo systemctl start nginx
sudo systemctl enable nginx
Şimdi Nginx’in durumunu tekrar kontrol ederek çalıştığından emin olun:
sudo systemctl status nginx
Çıktıda “active (running)” ifadesini görmelisiniz.
Güvenlik Duvarı Ayarları (Firewalld)
Rocky Linux 9, varsayılan olarak firewalld güvenlik duvarını kullanır. Nginx’in dışarıdan erişilebilir olması için HTTP ve HTTPS portlarını güvenlik duvarında açmanız gerekir.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Bu komutlar, HTTP (port 80) ve HTTPS (port 443) servislerine kalıcı olarak izin verir ve değişiklikleri etkinleştirmek için güvenlik duvarını yeniden yükler.
Basit Bir Nginx Sunucu Bloğu Oluşturma (HTTP için)
Let’s Encrypt sertifikası almadan önce, Nginx’in alan adınız için doğru şekilde yapılandırıldığından ve HTTP üzerinden hizmet verdiğinden emin olmalısınız. Nginx yapılandırma dosyaları genellikle /etc/nginx/nginx.conf ana dosyasında veya /etc/nginx/conf.d/ dizinindeki .conf uzantılı dosyalarda bulunur.
Yeni bir sunucu bloğu oluşturmak için /etc/nginx/conf.d/ dizininde alan adınızla ilgili bir dosya oluşturun, örneğin example.com.conf:
sudo nano /etc/nginx/conf.d/example.com.conf
Dosyanın içine aşağıdaki temel HTTP yapılandırmasını ekleyin (kendi alan adınızla değiştirin):
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /usr/share/nginx/html; # veya web sitenizin dosyalarının bulunduğu dizin
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
* listen 80;: Nginx’in IPv4 üzerinden 80 numaralı portu dinlemesini sağlar.
* listen [::]:80;: Nginx’in IPv6 üzerinden 80 numaralı portu dinlemesini sağlar.
* server_name example.com www.example.com;: Alan adınızı ve isteğe bağlı olarak “www” alt alan adınızı belirtir.
* root /usr/share/nginx/html;: Web sitenizin kök dizinini belirtir. Bu dizinde basit bir index.html dosyası oluşturarak Nginx’in çalıştığını test edebilirsiniz.
* index index.html index.htm;: Dizin istendiğinde aranacak varsayılan dosyaları belirtir.
* location / { ... }: Gelen isteklerin nasıl işleneceğini tanımlar. Bu örnekte, dosya bulunamazsa 404 hatası döndürür.
Basit bir index.html dosyası oluşturarak test edebilirsiniz:
echo "" | sudo tee /usr/share/nginx/html/index.html
Nginx Yapılandırmasını Test Etme ve Yeniden Yükleme
Yapılandırma dosyasında herhangi bir hata olup olmadığını kontrol etmek için:
sudo nginx -t
Eğer “test is successful” mesajını görürseniz, Nginx yapılandırmasını yeniden yükleyerek değişiklikleri uygulayın:
sudo systemctl reload nginx
Şimdi bir web tarayıcısı açın ve alan adınıza (örneğin, http://example.com) giderek Nginx’in HTTP üzerinden düzgün çalıştığını doğrulayın. Web sayfanızı görmelisiniz.
Adım 2: Certbot Kurulumu
Certbot, Let’s Encrypt sertifikalarını almayı ve yönetmeyi kolaylaştıran bir istemci yazılımıdır. Rocky Linux 9 üzerinde Certbot’u kurmak için EPEL (Extra Packages for Enterprise Linux) deposunu etkinleştirmemiz gerekebilir.
EPEL Deposunu Etkinleştirme
EPEL deposu, RHEL tabanlı sistemler için ek paketler sağlar. Certbot genellikle bu depoda bulunur.
sudo dnf install epel-release -y
Depo etkinleştirildikten sonra, sistem paket listesini güncelleyin:
sudo dnf update -y
Certbot ve Nginx Eklentisini Kurma
Şimdi Certbot’u ve Nginx ile entegrasyonu sağlayan python3-certbot-nginx eklentisini kurun:
sudo dnf install certbot python3-certbot-nginx -y
Bu komut, Certbot’un kendisini ve Nginx yapılandırmasını otomatik olarak düzenlemesine olanak tanıyan eklentiyi yükleyecektir.
Adım 3: SSL Sertifikası Alma
Certbot’u kurduktan sonra, Let’s Encrypt’ten SSL sertifikası almak için kullanabiliriz. Certbot’un Nginx eklentisi, bu süreci büyük ölçüde otomatikleştirir.
Certbot ile Sertifika Alma Komutu
Aşağıdaki komutu kullanarak Certbot’u çalıştırın. example.com ve www.example.com yerine kendi alan adlarınızı girin:
sudo certbot --nginx -d example.com -d www.example.com
Bu komutu çalıştırdığınızda, Certbot sizi bir dizi soruyla yönlendirecektir:
1. E-posta Adresi: Let’s Encrypt’ten önemli bildirimler (örneğin, sertifika yenileme hatırlatıcıları) almak için geçerli bir e-posta adresi girmeniz istenecektir.
2. Hizmet Şartları: Let’s Encrypt’in hizmet şartlarını kabul etmeniz gerekecektir. Okuyup onaylayın.
3. EFF (Electronic Frontier Foundation) Haber Bülteni: İsteğe bağlı olarak EFF haber bültenine abone olup olmak istemediğiniz sorulacaktır.
4. Nginx Yapılandırması: Certbot, Nginx yapılandırmanızı analiz edecek ve hangi server bloklarının alan adlarınızla eşleştiğini bulacaktır. Genellikle, doğru server_name direktifini içeren server bloğunu otomatik olarak algılar.
5. HTTP’den HTTPS’ye Yönlendirme: Certbot, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirip yönlendirmeyeceğinizi soracaktır. “2: Redirect” seçeneğini seçmeniz şiddetle tavsiye edilir. Bu, sitenize HTTP üzerinden gelen tüm isteklerin güvenli HTTPS bağlantısına yönlendirilmesini sağlar.
Tüm soruları yanıtladıktan sonra, Certbot alan adlarınız için bir sertifika alacak, Nginx yapılandırmanızı güncelleyecek ve HTTP’den HTTPS’ye yönlendirmeyi ayarlayacaktır. Başarılı bir kurulumun ardından aşağıdaki gibi bir çıktı görmelisiniz:
Successfully received certificate.
Successfully deployed certificate for example.com to /etc/nginx/conf.d/example.com.conf
Successfully deployed certificate for www.example.com to /etc/nginx/conf.d/example.com.conf
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your certificate will expire on 2024-XX-XX. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot renew
...
Bu çıktı, sertifikanızın başarıyla alındığını ve Nginx’e dağıtıldığını gösterir. Sertifika dosyalarının nerede saklandığını ve son kullanma tarihini de belirtir.
Adım 4: Nginx Yapılandırmasını Doğrulama
Certbot’un Nginx yapılandırmanızda yaptığı değişiklikleri kontrol etmek ve sitenizin artık HTTPS üzerinden erişilebilir olduğunu doğrulamak önemlidir.
Certbot’un Yaptığı Değişiklikleri Kontrol Etme
Certbot, /etc/nginx/conf.d/example.com.conf dosyanızı veya ilgili server bloğunuzu otomatik olarak güncelleyecektir. Dosyayı açarak değişiklikleri inceleyebilirsiniz:
sudo nano /etc/nginx/conf.d/example.com.conf
Aşağıdaki gibi bir yapılandırma görmelisiniz:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri; # HTTP'den HTTPS'ye yönlendirme
}
server {
listen 443 ssl http2; # HTTP/2 desteği eklenebilir
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # DH parametresi
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Gördüğünüz gibi, Certbot iki server bloğu oluşturmuştur:
1. İlk blok, 80 numaralı porttan gelen tüm HTTP isteklerini 301 kalıcı yönlendirmesiyle HTTPS’ye yönlendirir.
2. İkinci blok, 443 numaralı portta HTTPS trafiğini dinler, Let’s Encrypt sertifika ve anahtar dosyalarını kullanır ve Certbot tarafından oluşturulan ek SSL ayarlarını (options-ssl-nginx.conf) içerir.
Tarayıcıdan Erişimi Kontrol Etme
Bir web tarayıcısı açın ve alan adınıza https://example.com veya http://example.com adresinden gitmeyi deneyin. Her iki durumda da sitenizin güvenli HTTPS bağlantısı üzerinden yüklenmesi ve adres çubuğunda bir kilit simgesi görmeniz gerekir.
SSL Labs gibi Araçlarla Sertifika Kalitesini Test Etme
Sertifika kurulumunuzun ve SSL yapılandırmanızın ne kadar güvenli olduğunu anlamak için SSL Labs’ın SSL Test aracını kullanabilirsiniz. Tarayıcınızdan https://www.ssllabs.com/ssltest/ adresine gidin, alan adınızı girin ve testi başlatın. Bu araç, sertifika zincirini, protokol desteğini, şifreleme algoritmalarını ve diğer güvenlik ayarlarını analiz ederek size bir not (A+ en yüksek) verecektir.
Adım 5: Otomatik Yenileme
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. Neyse ki, Certbot bu süreci tamamen otomatikleştirir.
Certbot’un Otomatik Yenileme Cron İşi
Certbot’u kurduğunuzda, sisteminize otomatik olarak bir cron işi veya systemd zamanlayıcısı eklenir. Bu iş, sertifikalarınızın süresi dolmadan önce otomatik olarak yenilenmesini sağlar. Genellikle günde iki kez çalışır ve süresi dolmak üzere olan sertifikaları kontrol eder. Eğer bir sertifikanın süresi 30 gün içinde dolacaksa, Certbot onu yenilemeye çalışır.
Yenileme işinin varlığını kontrol etmek için:
sudo systemctl list-timers certbot*
veya cron işleri için:
sudo cat /etc/crontab
sudo ls /etc/cron.d/
Genellikle certbot.timer veya /etc/cron.d/certbot gibi bir giriş görmelisiniz.
Yenileme Test Etme Komutu
Otomatik yenileme sürecinin düzgün çalışıp çalışmadığını test etmek için “dry run” modunu kullanabilirsiniz:
sudo certbot renew --dry-run
Bu komut, gerçek bir yenileme işlemi yapmadan sertifikaların başarıyla yenilenip yenilenemeyeceğini simüle eder. Eğer test başarılı olursa, çıktıda “The dry run was successful.” mesajını görmelisiniz. Herhangi bir hata durumunda, sorun giderme için çıktıyı dikkatlice inceleyin.
Yenileme Sonrası Nginx’in Yeniden Yüklenmesini Sağlama
Certbot’un Nginx eklentisi kullanıldığında, sertifika yenileme işlemi başarılı olduğunda Nginx servisini otomatik olarak yeniden yükler veya yeniden başlatır. Bu, Nginx’in yeni sertifikaları hemen kullanmaya başlamasını sağlar. Bu nedenle, genellikle ek bir yapılandırmaya gerek yoktur.
Adım 6: Ek Güvenlik Ayarları (İsteğe Bağlı ama Önemli)
Nginx ve Let’s Encrypt ile temel güvenliği sağladıktan sonra, web sunucunuzun güvenliğini daha da artırmak için bazı ek yapılandırmalar yapmanız önerilir. Bu ayarlar, sitenizin SSL Labs notunu yükseltmenize ve daha sağlam bir güvenlik duruşu sergilemenize yardımcı olacaktır.
Bu ayarlar genellikle Certbot tarafından oluşturulan /etc/letsencrypt/options-ssl-nginx.conf dosyasında bulunur veya Nginx sunucu bloğunuza doğrudan eklenebilir.
sudo nano /etc/nginx/conf.d/example.com.conf
veya
sudo nano /etc/letsencrypt/options-ssl-nginx.conf
HTTP Strict Transport Security (HSTS)
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ı sonucunda sitenizin şifrelenmemiş HTTP sürümüne erişmesini önler.
Nginx yapılandırmanıza HSTS başlığını eklemek için server bloğunuzun listen 443 ssl; kısmına aşağıdaki satırı ekleyin:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
* max-age: Tarayıcının bu politikayı ne kadar süreyle hatırlayacağını saniye cinsinden belirtir (63072000 saniye = 2 yıl).
* includeSubDomains: Bu 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 liste, tarayıcıların sitenize ilk bağlantılarında bile HTTPS kullanmasını sağlar. Ön yükleme için https://hstspreload.org/ adresini ziyaret edebilirsiniz.
Önemli: HSTS’yi etkinleştirmeden önce tüm alt alan adlarınızın da HTTPS üzerinden erişilebilir olduğundan emin olun, aksi takdirde erişim sorunları yaşanabilir.
OCSP Stapling
OCSP (Online Certificate Status Protocol) Stapling, bir sunucunun kendi sertifikasının geçerliliğini doğrulayan bir OCSP yanıtını doğrudan istemciye (tarayıcıya) göndermesini sağlayan bir mekanizmadır. Bu, tarayıcının sertifika yetkilisine (CA) ayrı bir istek göndermesine gerek kalmadan sertifika durumunu hızlı bir şekilde doğrulamasına olanak tanır, böylece gizlilik artar ve bağlantı hızı iyileşir.
OCSP Stapling’i etkinleştirmek için Nginx yapılandırmanıza (genellikle 443 portunu dinleyen server bloğunun içine) aşağıdaki satırları ekleyin:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; # CA zincir dosyası
resolver 8.8.8.8 8.8.4.4 valid=300s; # Güvenilir bir DNS çözümleyici
resolver_timeout 5s;
* ssl_stapling on;: OCSP Stapling’i etkinleştirir.
* ssl_stapling_verify on;: OCSP yanıtının geçerliliğini doğrular.
* ssl_trusted_certificate: CA zincir dosyasının yolunu belirtir. Let’s Encrypt için bu genellikle chain.pem dosyasıdır.
* resolver: Nginx’in OCSP sunucusunun IP adresini çözümlemek için kullanacağı DNS sunucularını belirtir. Google DNS (8.8.8.8, 8.8.4.4) yaygın olarak kullanılır.
Güçlü Şifreleme Algoritmaları ve TLS Protokolleri
Zayıf veya eski şifreleme algoritmaları ve TLS protokolleri, saldırılara karşı sitenizi savunmasız bırakabilir. Yalnızca modern ve güvenli TLS protokollerini (TLSv1.2 ve TLSv1.3) kullanmalı ve güçlü şifreleme paketlerini tercih etmelisiniz.
Certbot’un varsayılan options-ssl-nginx.conf dosyası genellikle iyi bir başlangıç noktası sunar. Ancak, bunu daha da optimize edebilirsiniz.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
* ssl_protocols: Yalnızca TLSv1.2 ve TLSv1.3’ü etkinleştirir. TLSv1.0 ve TLSv1.1 gibi eski protokolleri devre dışı bırakır.
* ssl_prefer_server_ciphers on;: Sunucunun kendi şifreleme tercihlerini kullanmasını sağlar.
* ssl_ciphers: Güçlü ve modern şifreleme paketlerini listeler. Bu liste zamanla değişebilir, bu yüzden en güncel tavsiyeler için Mozilla SSL Configuration Generator gibi kaynakları kontrol etmek iyi bir fikirdir.
* ssl_session_timeout: SSL oturum önbelleğinin zaman aşımını ayarlar.
* ssl_session_cache: SSL oturumlarını önbelleğe almak için paylaşılan bir önbellek tanımlar.
* ssl_session_tickets off;: Güvenlik nedenleriyle SSL oturum biletlerini devre dışı bırakır.
Diffie-Hellman Parametresi Oluşturma:
Mükemmel ileri gizliliği (Perfect Forward Secrecy – PFS) sağlamak için özel bir Diffie-Hellman (DH) parametresi oluşturmanız önerilir. Certbot bunu genellikle otomatik olarak yapar (ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;), ancak manuel olarak oluşturmak isterseniz:
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 # veya 4096 daha güvenli
Bu komut 2048 bitlik bir DH parametresi oluşturur. Daha yüksek güvenlik için 4096 bit kullanabilirsiniz, ancak bu işlem daha uzun sürebilir. Oluşturduktan sonra, Nginx yapılandırmanızda bu dosyayı kullanmasını sağlayın:
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
HTTP/2 Desteği
HTTP/2, web performansını önemli ölçüde artıran daha yeni bir HTTP protokolüdür. Nginx, SSL/TLS ile birlikte HTTP/2’yi destekler.
Nginx yapılandırmanızda listen 443 ssl; satırını listen 443 ssl http2; olarak değiştirerek HTTP/2’yi etkinleştirebilirsiniz:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# ... diğer SSL/TLS ayarları ...
}
Tüm bu ek güvenlik ayarlarını yaptıktan sonra, Nginx yapılandırmanızı test edin ve yeniden yükleyin:
sudo nginx -t
sudo systemctl reload nginx
Ardından, SSL Labs testini tekrar çalıştırarak sitenizin notunun yükseldiğini ve tüm güvenlik önlemlerinin doğru şekilde uygulandığını doğrulayın.
Sorun Giderme
Kurulum veya yenileme sırasında çeşitli sorunlarla karşılaşabilirsiniz. İşte yaygın sorunlar ve çözüm önerileri:
Yaygın Hatalar
* DNS Sorunları: “Could not find a matching domain” veya “DNS problem” gibi hatalar, alan adınızın sunucunuzun IP adresine doğru şekilde işaret etmediğini gösterir. DNS kayıtlarınızı kontrol edin ve yayılma süresini bekleyin.
* Güvenlik Duvarı (Firewall) Sorunları: “Connection refused” veya “Timeout” gibi hatalar, 80 veya 443 numaralı portların güvenlik duvarında kapalı olduğunu gösterebilir. sudo firewall-cmd --list-all komutuyla firewalld ayarlarınızı kontrol edin.
* Nginx Yapılandırma Hataları: Certbot, Nginx yapılandırmanızda bir hata bulursa sertifika alamaz veya dağıtamaz. sudo nginx -t komutunu kullanarak Nginx yapılandırma dosyanızdaki hataları kontrol edin.
* “Too many requests” Hatası: Let’s Encrypt’in belirli bir süre içinde alabileceğiniz sertifika sayısıyla ilgili hız limitleri vardır. Genellikle bu, deneme-yanılma ile çok fazla sertifika almaya çalışıldığında ortaya çıkar. Birkaç saat bekleyip tekrar deneyin.
Certbot Günlüklerini İnceleme
Certbot’un işlem günlükleri, sorunların kökenini anlamak için çok değerlidir. Günlükler genellikle /var/log/letsencrypt/ dizininde bulunur.
sudo tail -f /var/log/letsencrypt/letsencrypt.log
Bu komut, en son günlük girişlerini gerçek zamanlı olarak gösterir.
Nginx Günlüklerini İnceleme
Nginx’in hata ve erişim günlükleri de sorun giderme için önemlidir. Bu dosyalar genellikle /var/log/nginx/ dizinindedir.
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
Sertifika Yenileme Sorunları
Eğer otomatik yenileme başarısız olursa, Certbot size e-posta ile bildirim gönderecektir (eğer kurulum sırasında bir e-posta adresi verdiyseniz). Yenileme sorunları genellikle DNS, güvenlik duvarı veya Nginx yapılandırma değişikliklerinden kaynaklanır. sudo certbot renew --dry-run komutunu kullanarak sorunun nedenini belirlemeye çalışın ve günlükleri inceleyin.
Sonuç
Bu kapsamlı rehberde, Rocky Linux 9 işletim sistemi üzerinde Nginx web sunucunuzu Let’s Encrypt ile nasıl güvenli hale getireceğinizi adım adım öğrendiniz. Nginx kurulumundan başlayarak, Certbot’u kullanarak ücretsiz SSL/TLS sertifikaları almayı, Nginx yapılandırmasını güncellemeyi, otomatik yenilemeyi ayarlamayı ve hatta HSTS, OCSP Stapling, güçlü şifreleme algoritmaları ve HTTP/2 gibi ek güvenlik önlemlerini uygulamayı ele aldık.
Web sitenizi HTTPS ile güvence altına almak, kullanıcılarınızın gizliliğini ve verilerinin bütünlüğünü korumanın yanı sıra, arama motoru sıralamalarınızı iyileştirmek ve sitenize olan güveni artırmak için kritik öneme sahiptir. Let’s Encrypt ve Certbot sayesinde, bu süreç artık herkes için erişilebilir ve yönetilebilir hale gelmiştir. Bu adımları takip ederek, Rocky Linux 9 sunucunuzda güçlü, güvenli ve performanslı bir web deneyimi sunabilirsiniz. Unutmayın ki güvenlik sürekli bir süreçtir; sertifikalarınızı güncel tutmak, yazılımlarınızı yamalamak ve güvenlik ayarlarınızı düzenli olarak gözden geçirmek her zaman iyi bir uygulamadır.
