Takip et

Nginx’i Debian 8 Üzerinde Let’s Encrypt ile Güvenli Hale Getirme

Nginx’i Debian 8 Üzerinde Let’s Encrypt ile Güvenli Hale Getirme Giriş Günümüzün dijital dünyasında web sitelerinin güvenliği, kullanıcı verilerinin korunması ve arama motoru sıralamaları için vazgeçilmez bir unsurdur.

Nginx’i Debian 8 Üzerinde Let’s Encrypt ile Güvenli Hale Getirme

Giriş

Günümüzün dijital dünyasında web sitelerinin güvenliği, kullanıcı verilerinin korunması ve arama motoru sıralamaları için vazgeçilmez bir unsurdur. HTTP protokolü üzerinden yapılan iletişimler şifrelenmediği için, hassas bilgiler (şifreler, kredi kartı numaraları vb.) üçüncü taraflarca kolayca ele geçirilebilir. Bu riski ortadan kaldırmak için HTTPS (Hypertext Transfer Protocol Secure) protokolü kullanılır. HTTPS, SSL/TLS (Secure Sockets Layer/Transport Layer Security) sertifikaları aracılığıyla istemci ve sunucu arasındaki tüm iletişimi şifreler.

Nginx, yüksek performanslı, ölçeklenebilir ve esnek bir web sunucusu ve ters proxy olarak dünya genelinde milyonlarca web sitesi tarafından kullanılmaktadır. Nginx’i HTTPS ile güvenli hale getirmek, web sitenizin güvenilirliğini artırmanın ve kullanıcılarınıza güvenli bir deneyim sunmanın temel adımlarından biridir. Geleneksel olarak, SSL/TLS sertifikaları ücretli olup, belirli bir maliyet ve manuel yapılandırma gerektiriyordu. Ancak Let’s Encrypt, bu durumu değiştirerek herkese ücretsiz, otomatik ve açık bir Sertifika Yetkilisi (CA) hizmeti sunmaktadır. Let’s Encrypt sayesinde, sertifika alma ve yenileme süreçleri büyük ölçüde basitleştirilmiştir.

Bu kapsamlı teknik makale, Debian 8 (Jessie) işletim sistemi üzerinde çalışan bir Nginx web sunucusunu Let’s Encrypt sertifikalarıyla nasıl güvenli hale getireceğinizi adım adım açıklayacaktır. Debian 8, güncel bir dağıtım olmasa da, birçok sunucuda hala kullanılmaktadır ve bu rehber, eski sistemlerde bile modern güvenlik standartlarını sağlamak isteyen yöneticilere yardımcı olmayı amaçlamaktadır. Makale boyunca, ön gereksinimlerden başlayarak, Certbot kurulumuna, sertifika alma ve Nginx yapılandırmasına, otomatik yenilemeye ve ek güvenlik iyileştirmelerine kadar tüm süreç detaylı bir şekilde ele alınacaktır.

Ön Gereksinimler

Bu rehbere başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olmalısınız:

* Debian 8 (Jessie) Sunucusu: Çalışır durumda bir Debian 8 sunucusuna sahip olmalısınız.
* Nginx Kurulumu: Sunucunuzda Nginx’in kurulu ve en azından bir alan adı için HTTP üzerinden çalışır durumda olması gerekmektedir. Eğer Nginx kurulu değilse, sonraki bölümde kurulum adımları gösterilecektir.
* Alan Adı: Sunucunuzun IP adresine yönlendirilmiş (A/AAAA kaydı) bir alan adına sahip olmalısınız (örneğin, ornekalanadi.com). Let’s Encrypt, sertifika verirken bu alan adının kontrolünü doğrular.
* SSH Erişimi ve Sudo Yetkileri: Sunucuya SSH üzerinden erişiminiz ve sudo komutunu kullanma yetkiniz olmalıdır.
* Güvenlik Duvarı (Firewall) Ayarları: Sunucunuzun güvenlik duvarının (UFW veya iptables) 80 (HTTP) ve 443 (HTTPS) portlarına gelen bağlantılara izin verdiğinden emin olun.

Nginx Kurulumu ve Temel Yapılandırma

Eğer Nginx sunucunuzda zaten kurulu ve yapılandırılmışsa, bu adımı atlayabilirsiniz. Aksi takdirde, aşağıdaki adımları izleyerek Nginx’i kurun ve temel bir yapılandırma yapın.

Sistem Güncellemesi

İlk olarak, paket listelerinizi güncelleyin ve mevcut paketleri yükseltin:

sudo apt update
sudo apt upgrade -y

Nginx Kurulumu

Nginx’i kurmak için aşağıdaki komutu kullanın:

sudo apt install nginx -y

Kurulumdan sonra Nginx servisinin çalıştığından emin olun:

sudo systemctl status nginx

Çıktıda active (running) ibaresini görmelisiniz.

Nginx Temel Yapılandırması

Varsayılan olarak Nginx, /etc/nginx/sites-available/default dosyasında bir yapılandırma bloğu ile gelir. Kendi alan adınız için yeni bir yapılandırma dosyası oluşturmak daha iyi bir uygulamadır.

Öncelikle, web sitenizin kök dizinini oluşturun. Örneğin, ornekalanadi.com için:

sudo mkdir -p /var/www/ornekalanadi.com/html

Test amaçlı basit bir index.html dosyası oluşturun:

echo "Merhaba Dünya! Bu Nginx sunucunuzun test sayfasıdır." | sudo tee /var/www/ornekalanadi.com/html/index.html

Şimdi, alan adınız için bir Nginx yapılandırma dosyası oluşturun. Örneğin, /etc/nginx/sites-available/ornekalanadi.com adında bir dosya oluşturun:

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

Dosyanın içine aşağıdaki içeriği yapıştırın (alan adınızı kendi alan adınızla değiştirin):

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

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

    server_name ornekalanadi.com www.ornekalanadi.com;

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

Bu yapılandırma, sunucunun 80 numaralı porttan gelen HTTP isteklerini dinlemesini, belirtilen kök dizinden dosyaları sunmasını ve alan adınızı tanımasını sağlar.

Yeni yapılandırma dosyasını etkinleştirmek için bir sembolik bağ (symlink) oluşturun ve varsayılan yapılandırmayı devre dışı bırakın:

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

Nginx yapılandırmanızda herhangi bir sözdizimi hatası olup olmadığını kontrol edin:

sudo nginx -t

Eğer test is successful mesajını görürseniz, Nginx servisini yeniden yükleyin:

sudo systemctl reload nginx

Şimdi web tarayıcınızdan http://ornekalanadi.com adresine giderek Nginx’in doğru çalıştığını doğrulayabilirsiniz.

Güvenlik Duvarı Ayarları

Eğer UFW kullanıyorsanız, HTTP ve HTTPS trafiğine izin vermek için:

sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
sudo ufw allow 'OpenSSH'
sudo ufw enable

Eğer UFW kurulu değilse ve iptables kullanıyorsanız, port 80 ve 443’e izin veren kurallar eklemeniz gerekebilir.

Certbot Kurulumu

Let’s Encrypt sertifikalarını otomatik olarak almak ve yönetmek için Certbot istemcisini kullanacağız. Debian 8 (Jessie) eski bir dağıtım olduğu için, varsayılan depolardaki Certbot sürümü eski veya hiç bulunmayabilir. Bu nedenle, jessie-backports deposunu etkinleştirerek daha güncel bir Certbot sürümünü yüklememiz gerekecektir.

Jessie-Backports Deposunu Ekleme

/etc/apt/sources.list dosyanızı açın:

sudo nano /etc/apt/sources.list

Dosyanın sonuna aşağıdaki satırı ekleyin:

deb http://ftp.debian.org/debian jessie-backports main contrib non-free

Dosyayı kaydedip kapatın (CTRL+X, Y, Enter).

Paket listelerinizi güncelleyin:

sudo apt update

Certbot Kurulumu

Şimdi jessie-backports deposundan Certbot’u yükleyebilirsiniz. Nginx için özel bir eklenti olan python-certbot-nginx de mevcuttur, ancak Debian 8’de bu eklentinin sorunsuz çalışıp çalışmadığı garanti değildir. En güvenli yöntem, certbot certonly --webroot kullanarak sertifikayı almak ve Nginx yapılandırmasını manuel olarak yapmaktır. Bu yöntem, Certbot’un web sitenizin kök dizinine geçici bir dosya yerleştirerek alan adı sahipliğini doğrulamasına dayanır.

Certbot’u yükleyin:

sudo apt install certbot -t jessie-backports

Bu komut, jessie-backports deposundan Certbot’un en güncel sürümünü yüklemeye çalışacaktır.

Let’s Encrypt SSL Sertifikası Alma

Certbot’u kurduktan sonra, alan adınız için bir SSL sertifikası alabiliriz. webroot eklentisini kullanarak sertifika alacağız. Bu yöntem, Certbot’un belirli bir dizine (webroot) geçici dosyalar yerleştirmesini ve Let’s Encrypt sunucularının bu dosyalara HTTP üzerinden erişerek alan adınızın kontrolünü doğrulamasını gerektirir.

Aşağıdaki komutu kullanın (alan adınızı ve webroot dizininizi kendi bilgilerinizle değiştirin):

sudo certbot certonly --webroot -w /var/www/ornekalanadi.com/html -d ornekalanadi.com -d www.ornekalanadi.com

* certonly: Yalnızca sertifika al, Nginx yapılandırmasını otomatik yapma.
* --webroot: Webroot eklentisini kullan.
* -w /var/www/ornekalanadi.com/html: Web sitenizin kök dizini. Certbot, bu dizine doğrulama dosyalarını yerleştirecektir.
* -d ornekalanadi.com: Sertifika almak istediğiniz birincil alan adı.
* -d www.ornekalanadi.com: Sertifika almak istediğiniz diğer alan adı (örneğin, www ön ekli).

Komutu çalıştırdıktan sonra Certbot size bazı sorular soracaktır:

1. E-posta Adresi: Sertifika bildirimleri ve kayıp anahtar kurtarma için bir e-posta adresi girin.
2. Hizmet Şartları: Let’s Encrypt hizmet şartlarını kabul etmeniz istenecektir. Kabul etmek için A (Agree) yazıp Enter tuşuna basın.
3. EFF Bülteni: EFF (Electronic Frontier Foundation) bültenine abone olmak isteyip istemediğiniz sorulacaktır. Y (Yes) veya N (No) yazıp Enter tuşuna basın.

Eğer her şey yolunda giderse, Certbot sertifikaları başarıyla alacak ve size aşağıdaki gibi bir çıktı gösterecektir:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ornekalanadi.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ornekalanadi.com/privkey.pem
   ...

Bu çıktı, sertifika dosyalarınızın nerede saklandığını gösterir. Özellikle /etc/letsencrypt/live/ornekalanadi.com/ dizini, sertifikanızın, özel anahtarınızın ve zincir dosyalarınızın sembolik bağlantılarını içerir. Bu bağlantılar her yenilemede güncellenecektir, bu yüzden Nginx yapılandırmanızda bu live dizinindeki yolları kullanmalısınız.

Nginx’i SSL Kullanacak Şekilde Yapılandırma

Sertifikaları aldıktan sonra, Nginx’i HTTPS trafiğini dinleyecek ve bu sertifikaları kullanacak şekilde yapılandırmamız gerekiyor. Ayrıca HTTP trafiğini HTTPS’e yönlendireceğiz.

Diffie-Hellman Parametreleri Oluşturma

Ekstra güvenlik için, güçlü bir Diffie-Hellman grubu oluşturmak iyi bir uygulamadır. Bu, anahtar değişimi sırasında ileri gizliliği (Perfect Forward Secrecy) sağlar. Bu işlem biraz zaman alabilir (birkaç dakika):

sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048

Daha da güçlü bir anahtar için 4096 bit kullanabilirsiniz, ancak bu işlem daha da uzun sürecektir.

Nginx SSL Yapılandırması

Alan adınız için daha önce oluşturduğunuz Nginx yapılandırma dosyasını tekrar açın:

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

Mevcut server bloğunu iki ayrı server bloğuna ayıracağız: biri HTTP (port 80) için, diğeri HTTPS (port 443) için. HTTP bloğu, tüm istekleri HTTPS bloğuna yönlendirecektir.

Dosyanın içeriğini aşağıdaki gibi güncelleyin (alan adınızı değiştirmeyi unutmayın):

# HTTP trafiğini HTTPS'e yönlendirme
server {
    listen 80;
    listen [::]:80;
    server_name ornekalanadi.com www.ornekalanadi.com;

    # Certbot doğrulama dosyaları için özel lokasyon
    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/ornekalanadi.com/html;
    }

    return 301 https://$host$request_uri;
}

HTTPS yapılandırması

server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ornekalanadi.com www.ornekalanadi.com; root /var/www/ornekalanadi.com/html; index index.html index.htm index.nginx-debian.html; ssl_certificate /etc/letsencrypt/live/ornekalanadi.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ornekalanadi.com/privkey.pem; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; # Yalnızca güvenli protokolleri kullanın 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_prefer_server_ciphers on; ssl_dhparam /etc/nginx/dhparam.pem; # Oluşturduğumuz Diffie-Hellman parametresi # OCSP Stapling (sertifika iptal kontrolü) ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS veya kendi güvenilir DNS sunucunuzu kullanın resolver_timeout 5s; # HSTS (HTTP Strict Transport Security) add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # Güvenlik başlıkları (isteğe bağlı ama önerilir) add_header X-Frame-Options "DENY" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; location / { try_files $uri $uri/ =404; } }

Yapılandırma Açıklamaları:

* HTTP Yönlendirme Bloğu: İlk server bloğu, 80 numaralı porttan gelen tüm HTTP isteklerini yakalar ve return 301 https://$host$request_uri; komutu ile kalıcı olarak HTTPS’e yönlendirir.
* .well-known/acme-challenge: Certbot’un sertifikayı yenilerken kullanacağı doğrulama dosyalarına erişmesine izin veren özel bir lokasyon bloğudur. Bu, HTTP yönlendirmesi olsa bile Certbot’un çalışmasını sağlar.
* HTTPS Bloğu: İkinci server bloğu, 443 numaralı porttan gelen HTTPS isteklerini dinler.
* ssl_certificate ve ssl_certificate_key: Let’s Encrypt tarafından sağlanan sertifika ve özel anahtar dosyalarının yollarını belirtir.
* ssl_protocols: Yalnızca güvenli TLS protokollerini (TLSv1.2 ve TLSv1.3) kullanır. Eski ve zayıf protokolleri devre dışı bırakır.
* ssl_ciphers: Güçlü şifreleme süitlerini belirler. Bu liste, güncel güvenlik tavsiyelerine göre seçilmiştir.
* ssl_prefer_server_ciphers on: Sunucunun şifreleme süitleri seçiminde öncelikli olmasını sağlar.
* ssl_dhparam: Daha önce oluşturduğumuz Diffie-Hellman parametre dosyasını belirtir.
* OCSP Stapling: Sertifikanızın iptal edilip edilmediğini kontrol etmek için bir mekanizmadır. Bu, tarayıcıların CA’ya doğrudan sorgu göndermesini engeller ve gizliliği artırır. resolver direktifi, DNS sorguları için kullanılacak sunucuyu belirtir.
* HSTS (HTTP Strict Transport Security): Tarayıcılara, belirli bir süre boyunca (burada 2 yıl) sitenize yalnızca HTTPS üzerinden erişmeleri gerektiğini bildiren bir güvenlik mekanizmasıdır. Bu, ortadaki adam saldırılarını (man-in-the-middle attacks) önlemeye yardımcı olur. preload seçeneği, tarayıcıların ön yükleme listelerine sitenizi eklemesini sağlar.
* Güvenlik Başlıkları: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection ve Referrer-Policy gibi başlıklar, çeşitli tarayıcı tabanlı güvenlik açıklarını azaltmaya yardımcı olur.

Dosyayı kaydedip kapatın.

Nginx yapılandırmanızda herhangi bir sözdizimi hatası olup olmadığını tekrar kontrol edin:

sudo nginx -t

Eğer test is successful mesajını alırsanız, Nginx servisini yeniden yükleyin:

sudo systemctl reload nginx

Şimdi web tarayıcınızdan http://ornekalanadi.com adresine gidin. Otomatik olarak https://ornekalanadi.com adresine yönlendirilmeniz ve tarayıcınızda bir kilit simgesi görmeniz gerekir. Bu, sitenizin artık güvenli bir HTTPS bağlantısı üzerinden sunulduğu anlamına gelir. SSL Labs gibi bir araçla sitenizin SSL yapılandırmasını test ederek A veya A+ derecesi aldığınızdan emin olabilirsiniz.

SSL Sertifikasının Otomatik Yenilenmesi

Let’s Encrypt sertifikaları 90 gün boyunca geçerlidir. Bu nedenle, sertifikaların süresi dolmadan önce otomatik olarak yenilenmesi çok önemlidir. Certbot, bu işlemi otomatikleştirmek için tasarlanmıştır.

Certbot, kurulum sırasında genellikle otomatik olarak bir cron işi veya systemd zamanlayıcısı (Debian 8 için cron daha olasıdır) oluşturur. Bu görev, sertifikaları süresi dolmadan önce kontrol eder ve yeniler. Varsayılan olarak, bu görev günde iki kez çalışır ve yalnızca sertifikanın süresi dolmak üzereyse (genellikle 30 gün içinde) yenileme yapar.

Yenileme mekanizmasının doğru çalıştığını test etmek için dry-run (deneme çalıştırması) seçeneğini kullanabilirsiniz:

sudo certbot renew --dry-run

Eğer bu komut herhangi bir hata mesajı vermeden başarılı bir şekilde tamamlanırsa, otomatik yenileme mekanizmanızın düzgün çalıştığı anlamına gelir.

Önemli Not: Certbot sertifikaları yenilediğinde, Nginx’in yeni sertifikaları kullanmaya başlaması için yeniden yüklenmesi gerekir. Certbot’un varsayılan yenileme betiği Nginx’i yeniden yüklemeyebilir. Bunu sağlamak için, renew komutuna bir --post-hook ekleyebilirsiniz:

sudo certbot renew --post-hook "systemctl reload nginx"

Bu komut, yenileme başarılı olduğunda Nginx’i yeniden yükleyecektir. Certbot’un otomatik cron işini düzenleyerek bu --post-hook seçeneğini kalıcı hale getirebilirsiniz. cron işleri genellikle /etc/cron.d/certbot veya /etc/crontab dosyasında bulunur.

sudo nano /etc/cron.d/certbot komutuyla dosyayı açın ve certbot renew komutunun sonuna --post-hook "systemctl reload nginx" ekleyin.

Örnek bir cron girdisi (farklılık gösterebilir):

0 /12    root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot renew --nginx --quiet --post-hook "systemctl reload nginx"

Eğer certbot komutunu webroot ile kullandıysanız, --nginx yerine certonly --webroot -w /path/to/webroot kullanmanız gerekebilir. En basit haliyle, sadece certbot renew --post-hook "systemctl reload nginx" komutunun çalışmasını sağlayan bir cron girdisi yeterli olacaktır.

Güvenlik Ayarlarını Geliştirme

Nginx ve Let’s Encrypt ile temel HTTPS yapılandırmasını tamamladık. Ancak, web sitenizin güvenliğini daha da artırmak için bazı ek ayarlar yapabiliriz. Yukarıdaki Nginx yapılandırmasında bu ayarların çoğu zaten eklenmişti, ancak burada önemlerini ve detaylarını tekrar vurgulayalım.

HTTP Strict Transport Security (HSTS)

HSTS, web sitenizin yalnızca HTTPS üzerinden erişilebilir olmasını sağlayan bir güvenlik politikasıdır. Bir kullanıcı sitenizi HTTPS üzerinden ziyaret ettiğinde, sunucu tarayıcıya “gelecekte bu siteye sadece HTTPS ile bağlan” talimatını gönderir. Bu, tarayıcının HTTP isteklerini otomatik olarak HTTPS’e çevirmesini sağlar ve ortadaki adam saldırılarını önler.

Nginx yapılandırmanızda aşağıdaki başlığı ekleyerek HSTS’yi etkinleştirebilirsiniz:

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: Bu politikanın tüm alt alan adları için de geçerli olmasını sağlar.
* preload: Sitenizin HSTS ön yükleme listelerine dahil edilmesini sağlar. Bu, tarayıcıların sitenizi hiç HTTP üzerinden ziyaret etmeden bile HTTPS ile bağlanmasını sağlar. Ön yükleme için hstspreload.org adresine başvurmanız gerekir.

OCSP Stapling

OCSP (Online Certificate Status Protocol) Stapling, sunucunun sertifika yetkilisinden (CA) bir sertifikanın iptal durumu hakkında güncel bilgileri almasını ve bu bilgiyi TLS el sıkışması sırasında istemciye “zımbalamasını” sağlar. Bu, istemcinin CA’ya doğrudan sorgu göndermesine gerek kalmadan sertifikanın durumunu hızlı ve gizliliğe saygılı bir şekilde doğrulamasına olanak tanır.

Nginx yapılandırmanızda OCSP Stapling’i etkinleştirmek için:

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # Güvenilir DNS sunucularınızı kullanın
resolver_timeout 5s;

resolver direktifi, Nginx’in OCSP sorguları için kullanacağı DNS sunucularını belirtir. Google DNS (8.8.8.8, 8.8.4.4) yaygın olarak kullanılır, ancak kendi güvenilir DNS sunucularınızı da kullanabilirsiniz.

TLS Protokolleri ve Şifreleme Süitleri

Güvenli bir HTTPS bağlantısı için, yalnızca güncel ve güçlü TLS protokollerini ve şifreleme süitlerini kullanmak çok önemlidir. Eski ve zayıf protokoller (SSLv2, SSLv3, TLSv1.0, TLSv1.1) güvenlik açıkları içerebilir ve devre dışı bırakılmalıdır.

Nginx yapılandırmanızda önerilen ayarlar:

ssl_protocols TLSv1.2 TLSv1.3;
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_prefer_server_ciphers on;

Bu yapılandırma, yalnızca TLS 1.2 ve TLS 1.3’ü etkinleştirir ve modern, güvenli şifreleme süitlerini tercih eder. ssl_prefer_server_ciphers on direktifi, sunucunun istemcinin önerdiği yerine kendi tercih ettiği şifreleme süitlerini kullanmasını sağlar, böylece daha güçlü olanlar seçilir.

Diğer Güvenlik Başlıkları

Yukarıdaki Nginx yapılandırmasında eklenen diğer güvenlik başlıkları da web sitenizi çeşitli saldırı türlerine karşı korur:

* X-Frame-Options "DENY": Clickjacking saldırılarını önlemek için sitenizin başka sitelerde iframe içinde görüntülenmesini engeller.
* X-Content-Type-Options "nosniff": Tarayıcıların bir dosyanın Content-Type başlığını göz ardı ederek içerik türünü tahmin etmesini engeller. Bu, MIME türü saldırılarını önler.
* X-XSS-Protection "1; mode=block": Tarayıcıların yerleşik XSS (Cross-Site Scripting) filtrelerini etkinleştirir.
* Referrer-Policy "no-referrer-when-downgrade": Yönlendiren bilgisini (referrer) yalnızca HTTPS’ten HTTPS’e geçerken göndermesini sağlar, HTTP’ye düşüşlerde göndermez. Bu, hassas bilgilerin HTTP üzerinden sızmasını engeller.

Bu güvenlik başlıkları, Nginx yapılandırmasına add_header direktifiyle eklenir ve always anahtar kelimesiyle her zaman gönderilmeleri sağlanır.

Sorun Giderme ve Sık Karşılaşılan Sorunlar

Kurulum ve yapılandırma sırasında bazı sorunlarla karşılaşmak olasıdır. İşte sık karşılaşılan sorunlar ve olası çözümleri:

* Firewall Engeli: Eğer web sitenize HTTP veya HTTPS üzerinden erişemiyorsanız, güvenlik duvarınızın (UFW/iptables) 80 ve 443 portlarına izin verdiğinden emin olun.

sudo ufw status verbose # UFW için
    # veya
    sudo iptables -L -n # iptables için

* DNS Sorunları: Alan adınızın sunucunuzun doğru IP adresine yönlendirilmediğinden emin olun. dig veya nslookup komutlarıyla kontrol edebilirsiniz.

dig ornekalanadi.com

* Nginx Sözdizimi Hataları: Nginx yapılandırma dosyalarınızda bir hata varsa, sudo nginx -t komutu size hatayı gösterecektir. Hata mesajını dikkatlice okuyarak ilgili satırı düzeltin.
* Certbot Hataları:
* Rate Limits (Oran Sınırları): Let’s Encrypt’in sertifika verme konusunda belirli oran sınırları vardır. Çok sık sertifika almaya çalışırsanız bu sınırlara takılabilirsiniz. Genellikle haftada bir alan adı için 5 sertifika ile sınırlıdır. Hata mesajında rate limit exceeded görüyorsanız, bir süre beklemeniz gerekebilir.
* Domain Validation Failed (Alan Adı Doğrulama Başarısız): Certbot, alan adınızın kontrolünü doğrulayamıyorsa bu hatayı alırsınız. Bu genellikle DNS sorunları, yanlış webroot yolu veya güvenlik duvarı engeli nedeniyle HTTP portu 80 üzerinden Certbot’un doğrulama dosyalarına erişilememesi durumunda ortaya çıkar.
* Old Certbot Version (Eski Certbot Sürümü): Debian 8’de jessie-backports kullanılmasına rağmen hala eski bir Certbot sürümüyle ilgili sorunlar yaşanabilir. Eğer apt install certbot -t jessie-backports işe yaramazsa, Certbot’un resmi web sitesindeki diğer kurulum yöntemlerini (örneğin pip veya snap ile kurulum) değerlendirmeniz gerekebilir, ancak bu yöntemler Debian 8 için daha karmaşık olabilir.
* Tarayıcı Uyarıları: Tarayıcınızda “Güvenli Değil” uyarısı veya karışık içerik (mixed content) uyarıları alıyorsanız, Nginx yapılandırmanızda eksik veya yanlış bir şey olabilir. Tarayıcınızın geliştirici araçlarını (F12) kullanarak konsoldaki hataları kontrol edin. Karışık içerik genellikle sitenizdeki bazı kaynakların (resimler, CSS, JS dosyaları) hala HTTP üzerinden yüklenmeye çalışmasından kaynaklanır. Bu durumda, web sitenizin içeriğindeki tüm bağlantıların HTTPS olduğundan emin olun veya Nginx’te sub_filter gibi modüllerle HTTP URL’lerini HTTPS’e dönüştürmeyi deneyin.

Sonuç

Bu rehberde, Debian 8 işletim sistemi üzerinde Nginx web sunucunuzu Let’s Encrypt sertifikalarıyla güvenli hale getirmenin tüm adımlarını ayrıntılı olarak inceledik. Nginx kurulumundan başlayarak, Certbot istemcisini kullanarak ücretsiz SSL/TLS sertifikaları almayı, Nginx’i HTTPS trafiğini yönetecek şekilde yapılandırmayı, HTTP’yi HTTPS’e yönlendirmeyi ve sertifikaların otomatik yenilenmesini sağlamayı öğrendik. Ayrıca, HSTS, OCSP Stapling ve güçlü TLS protokolleri/şifreleme süitleri gibi gelişmiş güvenlik önlemlerini uygulayarak web sitenizin güvenliğini daha da artırma yollarını ele aldık.

Web sitenizi HTTPS ile korumak, günümüzün internet ortamında bir zorunluluktur. Kullanıcılarınızın verilerini korur, arama motoru sıralamalarınızı iyileştirir ve web sitenize olan güveni artırır. Let’s Encrypt sayesinde, bu güvenlik seviyesine ulaşmak hiç bu kadar kolay ve ücretsiz olmamıştı. Unutmayın, güvenlik sürekli bir süreçtir. Sertifikalarınızın düzenli olarak yenilendiğinden, Nginx yapılandırmanızın güncel güvenlik tavsiyelerine uygun olduğundan ve sunucunuzun genel güvenliğinin sağlandığından emin olmak için düzenli kontroller yapmaya devam edin. Bu rehber, güvenli bir web deneyimi için sağlam bir temel oluşturmanıza yardımcı olacaktı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