Takip et

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

Nginx’i Let’s Encrypt ile FreeBSD Üzerinde Güvenli Hale Getirme Giriş Günümüzün dijital dünyasında web siteleri ve uygulamalar için güvenl

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

Giriş

Günümüzün dijital dünyasında web siteleri ve uygulamalar için güvenlik, vazgeçilmez bir unsurdur. Kullanıcı verilerinin korunması, gizliliğin sağlanması ve sitenin güvenilirliğinin artırılması amacıyla HTTPS (Hypertext Transfer Protocol Secure) kullanımı kritik öneme sahiptir. HTTPS, web tarayıcısı ile sunucu arasındaki iletişimi şifreleyerek üçüncü tarafların verileri okumasını veya değiştirmesini engeller. Bu şifreleme, SSL/TLS (Secure Sockets Layer/Transport Layer Security) sertifikaları aracılığıyla sağlanır.

Geleneksel olarak, SSL/TLS sertifikaları maliyetli ve karmaşık bir edinme sürecine sahipti. Ancak Let’s Encrypt projesi, bu durumu temelden değiştirerek ücretsiz, otomatik ve açık bir sertifika yetkilisi (CA) sunmuştur. Let’s Encrypt sayesinde, her web sitesi sahibi kolayca güvenli bir bağlantı kurabilir.

Bu makalede, güçlü ve esnek bir işletim sistemi olan FreeBSD üzerinde, yüksek performanslı bir web sunucusu olan Nginx’i Let’s Encrypt ile nasıl güvenli hale getireceğinizi adım adım açıklayacağız. FreeBSD’nin kararlılığı ve Nginx’in verimliliği bir araya geldiğinde, güvenli ve hızlı bir web altyapısı oluşturmak mümkündür. Bu rehber, temel sistem yapılandırmasından sertifika edinme ve Nginx’i HTTPS için optimize etmeye kadar tüm süreci kapsayacaktır.

Ön Koşullar

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

* FreeBSD İşletim Sistemi: FreeBSD 13.x veya 14.x sürümü kurulu ve güncel bir sunucuya sahip olmalısınız.
* Kullanıcı Yetkileri: Sunucuda root kullanıcısı olarak veya sudo yetkilerine sahip bir kullanıcı ile işlem yapabilmelisiniz.
* Alan Adı (Domain Name): Web siteniz için kayıtlı bir alan adına (örneğin, example.com) sahip olmanız gerekmektedir.
* DNS Kayıtları: Alan adınızın A veya AAAA kayıtlarının, FreeBSD sunucunuzun genel IP adresine doğru şekilde yönlendirilmiş olması zorunludur. Let’s Encrypt, sertifika talebi sırasında alan adının sunucuya ait olduğunu doğrulamak için bu kayıtlara ihtiyaç duyar.
* Temel Komut Satırı Bilgisi: FreeBSD komut satırı ortamında temel düzeyde işlem yapabilme yeteneğine sahip olmanız beklenmektedir.
* İnternet Bağlantısı: Sunucunuzun internete erişimi olmalıdır.

FreeBSD Sisteminin Hazırlanması

Sertifika edinme ve Nginx yapılandırmasına geçmeden önce FreeBSD sistemimizi gerekli yazılımlarla donatmamız ve temel ayarları yapmamız gerekmektedir.

Nginx Kurulumu

Nginx, FreeBSD’nin pkg paket yöneticisi aracılığıyla kolayca kurulabilir. Öncelikle sistemdeki paket listesini güncelleyelim ve ardından Nginx’i kuralım:

sudo pkg update
sudo pkg upgrade -y
sudo pkg install nginx -y

Kurulum tamamlandıktan sonra Nginx’in otomatik olarak başlaması için rc.conf dosyasına ekleme yapmalıyız ve servisi başlatmalıyız:

sudo sysrc nginx_enable="YES"
sudo service nginx start

Nginx’in doğru şekilde çalışıp çalışmadığını test etmek için sunucunuzun IP adresini veya alan adınızı bir web tarayıcısında ziyaret edebilirsiniz. Varsayılan olarak “Welcome to nginx!” sayfasını görmelisiniz.

Let’s Encrypt (Certbot) Kurulumu

Let’s Encrypt sertifikalarını yönetmek için Certbot istemcisini kullanacağız. Certbot, FreeBSD’nin pkg deposunda mevcuttur. Webroot doğrulama yöntemini kullanacağımız için py39-certbot paketini kurmamız yeterlidir. (Python sürümü FreeBSD sürümüne göre değişebilir, örneğin py38-certbot veya py310-certbot olabilir.)

sudo pkg install py39-certbot -y

Bazı durumlarda py39-certbot-nginx paketi de mevcut olabilir ve Nginx yapılandırmasını otomatik olarak yapabilir. Ancak, bu makalede daha manuel ve kontrol odaklı bir yaklaşım olan webroot yöntemini kullanacağız, zira bu yöntem Nginx’in mevcut yapılandırmasını bozmadan sertifika alımına olanak tanır.

Güvenlik Duvarı Yapılandırması (Opsiyonel ama Önemli)

FreeBSD üzerinde bir güvenlik duvarı (örneğin pf veya ipfw) kullanıyorsanız, web trafiğinin (HTTP ve HTTPS) sunucunuza ulaşabilmesi için 80 ve 443 numaralı portları açmanız gerekmektedir. Bu adım, sunucunuzun dışarıdan erişilebilir olması için kritik öneme sahiptir.

PF (Packet Filter) İçin Örnek Yapılandırma:
Eğer pf kullanıyorsanız, /etc/pf.conf dosyanızı düzenlemeniz gerekecektir. Aşağıdaki kuralları dosyanıza ekleyebilir veya mevcut kurallarınızı güncelleyebilirsiniz:

# /etc/pf.conf

HTTP ve HTTPS trafiğine izin ver

pass in proto tcp from any to any port { 80, 443 }

Değişiklikleri kaydettikten sonra pf servisini yeniden yükleyin:

sudo pfctl -f /etc/pf.conf
sudo service pf reload

IPFW İçin Örnek Yapılandırma:
Eğer ipfw kullanıyorsanız, /etc/rc.conf dosyanıza aşağıdaki satırları ekleyerek veya düzenleyerek portları açabilirsiniz:

# /etc/rc.conf
firewall_enable="YES"
firewall_type="open" # veya "client", "server" gibi daha kısıtlı bir tür
firewall_logdeny="YES"
firewall_script="/etc/ipfw.rules" # Kendi kural dosyanızı kullanabilirsiniz

Ve /etc/ipfw.rules dosyanızda şu kuralları tanımlayın:

# /etc/ipfw.rules
#!/bin/sh

ipfw -q flush
ipfw -q add allow all from any to any via lo0
ipfw -q add allow tcp from any to any 80 in
ipfw -q add allow tcp from any to any 443 in
ipfw -q add allow tcp from any to any 22 in # SSH için
ipfw -q add deny all from any to any

Ardından ipfw servisini başlatın:

sudo service ipfw start

Güvenlik duvarı yapılandırmanızın doğru olduğundan emin olmak için test etmeyi unutmayın.

Nginx Yapılandırması

Let’s Encrypt sertifikalarını almadan önce, Certbot’un alan adınızın sahipliğini doğrulayabilmesi için Nginx’i temel HTTP trafiğini işleyecek şekilde yapılandırmamız gerekiyor.

HTTP Yapılandırması (Port 80)

Nginx’in varsayılan yapılandırma dosyası /usr/local/etc/nginx/nginx.conf adresindedir. Genellikle, siteye özel yapılandırmaları conf.d dizini altında ayrı dosyalarda tutmak iyi bir uygulamadır.

Öncelikle, web sitenizin dosyalarını barındıracak bir dizin oluşturalım. Bu dizin aynı zamanda Certbot’un doğrulama dosyalarını yerleştireceği webroot dizini olacaktır.

sudo mkdir -p /usr/local/www/example.com
sudo chown -R www:www /usr/local/www/example.com

Şimdi, /usr/local/etc/nginx/conf.d/example.com.conf adında yeni bir yapılandırma dosyası oluşturalım:

sudo nano /usr/local/etc/nginx/conf.d/example.com.conf

Dosyanın içine aşağıdaki içeriği yapıştırın ve example.com ile www.example.com kısımlarını kendi alan adınızla değiştirin:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /usr/local/www/example.com;
    index index.html index.htm;

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

    # Certbot doğrulama için gerekli olan .well-known dizini
    location ~ /.well-known/acme-challenge {
        allow all;
        root /usr/local/www/example.com;
    }
}

Bu yapılandırma:
* 80 numaralı porttan gelen HTTP isteklerini dinler.
* example.com ve www.example.com alan adları için istekleri karşılar.
* Web sitesi dosyalarını /usr/local/www/example.com dizininden sunar.
* /.well-known/acme-challenge yoluna gelen istekleri doğrudan webroot dizininden sunarak Certbot’un doğrulama işlemini yapmasına olanak tanır.

Yapılandırma dosyasını kaydettikten sonra, Nginx yapılandırmasının sözdizimini kontrol edelim ve Nginx’i yeniden başlatalım:

sudo nginx -t
sudo service nginx reload

Herhangi bir hata mesajı almazsanız, Nginx başarıyla yeniden başlatılmış demektir. Artık Certbot ile sertifika almaya hazırız.

Let’s Encrypt Sertifikası Alma

Nginx’i HTTP isteklerini karşılayacak şekilde yapılandırdığımıza göre, Certbot kullanarak Let’s Encrypt’ten sertifika talep edebiliriz.

Certbot ile Sertifika Talebi

Certbot’u webroot eklentisiyle kullanarak sertifika talebinde bulunacağız. Bu yöntem, Certbot’un doğrulama dosyalarını belirtilen web kök dizinine yerleştirmesini ve Nginx’in bunları sunmasını sağlar.

Aşağıdaki komutu çalıştırın, example.com ve www.example.com yerine kendi alan adlarınızı ve /usr/local/www/example.com yerine web kök dizininizi yazın:

sudo certbot certonly --webroot -w /usr/local/www/example.com -d example.com -d www.example.com

Komutu çalıştırdığınızda, Certbot sizden bazı bilgiler isteyecektir:

1. E-posta Adresi: Acil durum bildirimleri ve sertifika yenileme hatırlatıcıları için bir e-posta adresi girin.
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: İsterseniz EFF’nin haber bültenine abone olabilirsiniz. Y veya N tuşuna basın.

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /usr/local/etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /usr/local/etc/letsencrypt/live/example.com/privkey.pem
   Your certificate will expire on 2024-XX-XX. To obtain a new or
   revising version of this certificate in the future, simply run
   certbot renew
   ...

Sertifikalarınız artık /usr/local/etc/letsencrypt/live/example.com/ dizininde bulunmaktadır. Bu dizin içinde genellikle şu dosyalar bulunur:
* fullchain.pem: Sunucu sertifikası ve ara sertifikayı içerir. Nginx için bu dosyayı kullanacağız.
* privkey.pem: Sertifikanın özel anahtarıdır.
* chain.pem: Sadece ara sertifikayı içerir.
* cert.pem: Sadece sunucu sertifikasını içerir.

Sertifika Yenileme ve Otomasyon

Let’s Encrypt sertifikaları 90 gün boyunca geçerlidir. Bu nedenle, sertifikaların süresi dolmadan önce düzenli olarak yenilenmeleri gerekir. Certbot, bu yenileme işlemini otomatikleştirmek için bir renew komutu sunar.

Sertifika yenileme işlemini test etmek için dry-run parametresiyle çalıştırabilirsiniz:

sudo certbot renew --dry-run

Bu komut, yenileme işlemini gerçekten yapmadan simüle eder ve herhangi bir sorun olup olmadığını kontrol etmenizi sağlar.

Sertifikaların otomatik olarak yenilenmesi için bir cron job oluşturmak en iyi yöntemdir. Certbot, FreeBSD’de genellikle kendi cron job’unu /usr/local/etc/periodic/daily/ veya benzeri bir dizine yerleştirir. Ancak, Nginx’in yeni sertifikaları kullanmaya başlaması için yeniden yüklenmesi gerektiğini unutmayın.

Aşağıdaki gibi bir cron job oluşturabilirsiniz. sudo crontab -e komutunu kullanarak root kullanıcısının cron tablosunu düzenleyin:

# Her gün öğleden sonra 12:00'de veya benzeri bir zamanda çalıştır
0 12   * /usr/local/bin/certbot renew --post-hook "service nginx reload" >> /var/log/certbot-renew.log 2>&1

Bu cron job, certbot renew komutunu çalıştırır ve eğer sertifikalar yenilenirse (--post-hook sayesinde), Nginx servisini yeniden yükler. Bu, Nginx’in yeni sertifikaları kullanmaya başlamasını sağlar. Yenileme günlükleri /var/log/certbot-renew.log dosyasına kaydedilir.

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

Sertifikalarımızı edindiğimize göre, Nginx’i HTTPS trafiğini işleyecek şekilde yapılandırabiliriz.

Sertifikaları Nginx’e Tanıtma

Öncelikle, daha önce oluşturduğumuz /usr/local/etc/nginx/conf.d/example.com.conf dosyasını düzenleyelim. Bu dosyaya HTTPS için yeni bir server bloğu ekleyeceğiz ve mevcut HTTP bloğunu HTTPS’e yönlendirecek şekilde güncelleyeceğiz.

sudo nano /usr/local/etc/nginx/conf.d/example.com.conf

Dosyanın içeriğini aşağıdaki gibi güncelleyin. example.com ve www.example.com kısımlarını kendi alan adlarınızla değiştirin:

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

    # Certbot doğrulama için gerekli olan .well-known dizini
    location ~ /.well-known/acme-challenge {
        allow all;
        root /usr/local/www/example.com;
    }

    # Diğer tüm HTTP isteklerini HTTPS'e yönlendir
    return 301 https://$host$request_uri;
}

HTTPS yapılandırması

server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com www.example.com; root /usr/local/www/example.com; index index.html index.htm; ssl_certificate /usr/local/etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /usr/local/etc/letsencrypt/live/example.com/privkey.pem; # SSL/TLS ayarları (sonraki bölümde daha detaylı ele alınacak) ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; 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; # HSTS ayarı (sonraki bölümde daha detaylı ele alınacak) add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # OCSP Stapling (sonraki bölümde daha detaylı ele alınacak) ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /usr/local/etc/letsencrypt/live/example.com/chain.pem; resolver 8.8.8.8 8.8.4.4 valid=300s; # Güvenilir DNS sunucuları kullanın location / { try_files $uri $uri/ =404; } # Hata sayfaları error_page 404 /404.html; location = /404.html { internal; } }

Bu yapılandırmada, ilk server bloğu 80 numaralı porttan gelen tüm istekleri (Certbot doğrulama hariç) 301 kalıcı yönlendirmesiyle HTTPS’e yönlendirir. İkinci server bloğu ise 443 numaralı porttan gelen HTTPS isteklerini işler, Let’s Encrypt sertifikalarını kullanır ve temel SSL/TLS ayarlarını içerir.

Yapılandırmayı kaydettikten sonra Nginx’in sözdizimini kontrol edin ve yeniden yükleyin:

sudo nginx -t
sudo service nginx reload

Şimdi tarayıcınızdan http://example.com adresini ziyaret ettiğinizde otomatik olarak https://example.com adresine yönlendirilmeniz ve bağlantının güvenli (kilit simgesi) olduğunu görmeniz gerekir.

HTTP’den HTTPS’e Yönlendirme

Yukarıdaki yapılandırmada zaten bu adımı gerçekleştirdik. HTTP (port 80) trafiğini HTTPS (port 443) trafiğine yönlendirmek, kullanıcıların sitenize her zaman güvenli bir bağlantı üzerinden erişmesini sağlar. Bu, özellikle eski yer imleri veya manuel olarak yazılan URL’ler için önemlidir.

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # Certbot doğrulama için gerekli olan .well-known dizini
    location ~ /.well-known/acme-challenge {
        allow all;
        root /usr/local/www/example.com;
    }

    # Diğer tüm HTTP isteklerini HTTPS'e yönlendir
    return 301 https://$host$request_uri;
}

Bu blok, Certbot doğrulama istekleri hariç tüm HTTP isteklerini HTTPS’e yönlendirir. 301 yönlendirmesi kalıcı bir yönlendirmedir ve arama motorları tarafından tercih edilir.

HTTP Strict Transport Security (HSTS) Uygulaması

HSTS (HTTP Strict Transport Security), web sitelerinin tarayıcılara yalnızca HTTPS üzerinden erişilmesi gerektiğini bildiren bir güvenlik mekanizmasıdır. Bir tarayıcı bir kez HSTS başlığını aldığında, belirlenen süre boyunca o alan adına yapılan tüm sonraki istekleri otomatik olarak HTTPS’e dönüştürür, HTTP üzerinden yapılan istekleri engeller. Bu, SSL soygunu (SSL stripping) gibi saldırıları önlemeye yardımcı olur.

HSTS’i etkinleştirmek için HTTPS server bloğunuza aşağıdaki satırı ekleyin:

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

* max-age: Tarayıcının bu kuralı ne kadar süreyle hatırlayacağını saniye cinsinden belirtir (iki yıl için 63072000 saniye).
* includeSubDomains: Alt alan adları için de HSTS’in geçerli olmasını sağlar.
* preload: Alan adınızı HSTS preload listesine eklemek isterseniz bu anahtar kelimeyi kullanırsınız. Dikkat: Preload listesine eklenmek geri alınamaz bir işlemdir ve sitenizin her zaman HTTPS üzerinden erişilebilir olmasını gerektirir. Eğer sitenizde HTTPS’i kapatmayı düşünüyorsanız bu seçeneği kullanmayın.

HSTS başlığını ekledikten sonra Nginx’i yeniden yüklemeyi unutmayın.

OCSP Stapling Etkinleştirme

OCSP (Online Certificate Status Protocol) stapling, bir web sunucusunun SSL/TLS sertifikasının geçerlilik durumunu sertifika yetkilisinden (CA) düzenli olarak sorgulamasını ve bu durumu önbelleğe almasını sağlar. Tarayıcı bir web sitesine bağlandığında, sunucu bu önbelleğe alınmış geçerlilik durumunu (stapled OCSP response) tarayıcıya sunar. Bu, tarayıcının CA’ya doğrudan bağlanarak sertifika durumunu sorgulama ihtiyacını ortadan kaldırır, böylece bağlantı hızı artar ve kullanıcı gizliliği korunur.

OCSP stapling’i etkinleştirmek için HTTPS server bloğunuza aşağıdaki satırları ekleyin:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /usr/local/etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s; # Güvenilir DNS sunucuları kullanın (Google DNS örneği)
resolver_timeout 5s;

* ssl_stapling on;: OCSP stapling’i etkinleştirir.
* ssl_stapling_verify on;: Sunucunun OCSP yanıtının geçerliliğini doğrulaması gerektiğini belirtir.
* ssl_trusted_certificate: CA tarafından sağlanan zincir sertifikasının yolunu belirtir (chain.pem).
* resolver: Nginx’in OCSP sorguları için kullanacağı DNS sunucularını belirtir. Güvenilir ve hızlı DNS sunucuları kullanmak önemlidir.

Bu ayarları yaptıktan sonra Nginx’i yeniden yükleyin.

Ek Güvenlik İpuçları

Nginx’i Let’s Encrypt ile güvenli hale getirmek önemli bir adımdır, ancak web sunucunuzun genel güvenliğini artırmak için ek önlemler alabilirsiniz.

Güçlü Şifreleme Algoritmaları ve TLS Protokolleri

SSL/TLS yapılandırmanızda yalnızca güçlü şifreleme algoritmaları ve güncel TLS protokollerini kullanmalısınız. Eski ve zayıf protokoller (TLSv1.0, TLSv1.1) ile zayıf şifreleme paketlerini devre dışı bırakmak önemlidir.

HTTPS server bloğunuza aşağıdaki ayarları ekleyebilir veya mevcutları güncelleyebilirsiniz:

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;

* ssl_protocols: Yalnızca TLSv1.2 ve TLSv1.3’e izin verir.
* ssl_ciphers: Güçlü ve güvenli şifreleme paketlerini listeler. Bu liste zamanla güncellenebilir, en güncel ve güvenli listeler için SSL Labs gibi kaynakları kontrol edebilirsiniz.
* ssl_prefer_server_ciphers on;: Sunucunun kendi şifreleme paketi tercihini kullanmasını sağlar, böylece daha güvenli olanlar tercih edilir.

Ayrıca, Diffie-Hellman anahtar değişimi için güçlü bir parametre dosyası oluşturmak, ileri gizliliği (Perfect Forward Secrecy – PFS) artırır:

sudo openssl dhparam -out /usr/local/etc/nginx/dhparam.pem 4096

Bu işlem biraz zaman alabilir. Oluşturduktan sonra Nginx yapılandırmanıza ekleyin:

ssl_dhparam /usr/local/etc/nginx/dhparam.pem;

Bu ayarlar, Nginx’in genel SSL/TLS güvenliğini önemli ölçüde artıracaktır.

Nginx Güvenlik Modülleri (ModSecurity gibi)

Web uygulamanızın güvenliğini artırmak için Nginx ile entegre olabilen Web Uygulama Güvenlik Duvarı (WAF) modülleri kullanabilirsiniz. ModSecurity gibi WAF’lar, yaygın web saldırılarına (SQL enjeksiyonu, XSS vb.) karşı koruma sağlayabilir. Bu modüllerin kurulumu ve yapılandırması bu makalenin kapsamının dışında olsa da, genel güvenlik stratejinizin bir parçası olarak değerlendirilmelidir.

Loglama ve İzleme

Nginx erişim ve hata günlüklerini düzenli olarak izlemek, potansiyel güvenlik açıklarını veya saldırı girişimlerini tespit etmek için hayati öneme sahiptir.
* Erişim Günlükleri: /var/log/nginx/access.log
* Hata Günlükleri: /var/log/nginx/error.log

Bu günlükleri analiz etmek için grep, awk, tail gibi komut satırı araçlarını veya ELK Stack (Elasticsearch, Logstash, Kibana) gibi daha gelişmiş çözümleri kullanabilirsiniz. Ayrıca, Fail2ban gibi araçlar, tekrar eden başarısız giriş denemelerini veya şüpheli IP adreslerini otomatik olarak engelleyerek sunucunuzu koruyabilir.

Düzenli Güncellemeler

İşletim sistemini, Nginx’i ve Certbot’u düzenli olarak güncellemek, bilinen güvenlik açıklarına karşı korunmanın en temel yoludur.

sudo pkg update
sudo pkg upgrade -y

Bu komutları düzenli aralıklarla çalıştırmak, sisteminizin güncel ve güvenli kalmasını sağlar.

Sorun Giderme

Kurulum ve yapılandırma sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* Nginx Başlamıyor veya Yeniden Yüklenmiyor:
* sudo nginx -t komutuyla yapılandırma dosyasındaki sözdizimi hatalarını kontrol edin.
* sudo service nginx status komutuyla Nginx servisinin durumunu kontrol edin.
* Nginx hata günlüklerini (/var/log/nginx/error.log) inceleyin.
* Web Sitesine HTTP veya HTTPS Üzerinden Erişilemiyor:
* Güvenlik duvarınızın (PF/IPFW) 80 ve 443 numaralı portlara izin verdiğinden emin olun.
* DNS kayıtlarınızın doğru IP adresine yönlendirildiğini kontrol edin.
* Nginx server_name direktifindeki alan adlarının doğru olduğundan emin olun.
* Certbot Sertifika Alamıyor (Doğrulama Hatası):
* Alan adınızın A/AAAA kayıtlarının sunucunuzun genel IP adresini gösterdiğinden emin olun.
* Nginx’in 80 numaralı porttan erişilebilir olduğundan ve /.well-known/acme-challenge dizinine gelen istekleri doğru şekilde işlediğinden emin olun.
* Certbot’un loglarını (/var/log/letsencrypt/) kontrol edin.
* --webroot -w parametresinde belirtilen dizinin doğru olduğundan ve Nginx’in bu dizine yazma izni olduğundan emin olun.
* Sertifika Süresi Doluyor:
* Cron job’unuzun doğru şekilde çalıştığından ve certbot renew komutunun Nginx’i yeniden yüklediğinden emin olun.
* sudo certbot renew --dry-run komutuyla manuel olarak yenilemeyi test edin.
* Tarayıcıda Güvenlik Uyarısı:
* Sertifika zincirinin doğru olduğundan emin olun (fullchain.pem kullanıldığından).
* Tarayıcınızın önbelleğini temizleyip tekrar deneyin.
* SSL Labs SSL Testi gibi online araçlarla sitenizin SSL yapılandırmasını kontrol edin. Bu test, zayıf şifrelemeler, eksik sertifika zincirleri veya diğer yapılandırma sorunlarını tespit etmenize yardımcı olacaktır.

Sonuç

Bu makalede, FreeBSD işletim sistemi üzerinde Nginx web sunucusunu Let’s Encrypt ile nasıl güvenli hale getireceğinizi detaylı bir şekilde ele aldık. Nginx kurulumundan başlayarak, Certbot ile ücretsiz SSL/TLS sertifikaları edinme, Nginx’i HTTPS için yapılandırma ve otomatik yenileme süreçlerini adım adım uyguladık. Ayrıca, HTTP Strict Transport Security (HSTS) ve OCSP Stapling gibi ek güvenlik önlemleriyle birlikte, güçlü şifreleme algoritmaları ve düzenli güncellemeler gibi genel güvenlik ipuçlarını da sunduk.

HTTPS’in web güvenliği ve kullanıcı gizliliği için ne kadar kritik olduğunu bir kez daha vurgulamak gerekir. Let’s Encrypt sayesinde bu güvenlik katmanını uygulamak artık her zamankinden daha kolay ve ücretsizdir. FreeBSD’nin sağlamlığı ve Nginx’in performansı ile birleşen bu güvenlik katmanı, web siteniz için güçlü ve güvenilir bir temel oluşturacaktır.

Unutmayın ki siber güvenlik sürekli gelişen bir alandır. Bu rehberdeki adımları takip ederek sağlam bir başlangıç yapsanız da, güncel güvenlik tehditleri ve en iyi uygulamalar hakkında bilgi sahibi olmaya devam etmek önemlidir. Düzenli sistem güncellemeleri, güvenlik duvarı kurallarının gözden geçirilmesi ve web uygulamanızın kendi güvenlik açıklarına karşı korunması, web altyapınızın uzun vadeli güvenliğini sağlamak için hayati öneme sahiptir. Bu adımları uygulayarak, hem siz hem de kullanıcılarınız için daha güvenli bir internet deneyimi sunacaksınız.

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

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.