Ubuntu 20.04 Üzerinde Apache’yi Let’s Encrypt ile Güvenli Hale Getirme
Ubuntu 20.04 sunucunuzda Apache web sunucusunu Let’s Encrypt ile güvenli hale getirmek, web sitenizin kullanıcıları için veri gizliliğini ve bütünlüğünü sağlamanın kritik bir adımıdır. Bu kapsamlı teknik makale, bu süreci adım adım açıklayarak, HTTP’den HTTPS’ye güvenli bir geçiş yapmanıza yardımcı olacaktır.
Giriş: Web Güvenliğinin Temelleri ve Let’s Encrypt
Günümüz dijital dünyasında, web sitelerinin güvenliği hiç olmadığı kadar büyük bir önem taşımaktadır. Kullanıcıların kişisel bilgilerini (şifreler, kredi kartı bilgileri vb.) korumak, veri bütünlüğünü sağlamak ve arama motoru sıralamalarında avantaj elde etmek için SSL/TLS (Secure Sockets Layer/Transport Layer Security) sertifikaları vazgeçilmezdir. SSL/TLS, web sunucusu ile web tarayıcısı arasındaki iletişimi şifreleyerek, üçüncü tarafların verileri okumasını veya değiştirmesini engeller. Bir web sitesi HTTPS protokolünü kullandığında, adres çubuğunda genellikle bir kilit simgesi görünür ve bu da kullanıcılara sitenin güvenli olduğu konusunda bir güvence verir.
Geleneksel olarak, SSL/TLS sertifikaları satın alınması gereken maliyetli ürünlerdi. Ancak Let’s Encrypt’in ortaya çıkışıyla bu durum değişti. Let’s Encrypt, Internet Security Research Group (ISRG) tarafından işletilen, ücretsiz, otomatik ve açık kaynaklı bir sertifika yetkilisidir (CA). Misyonu, web’in tamamını şifrelemek ve SSL/TLS kullanımını kolaylaştırmaktır. Certbot gibi istemci yazılımları sayesinde, Let’s Encrypt sertifikalarını sunucularınıza kurmak ve otomatik olarak yenilemek oldukça basit hale gelmiştir. Bu makalede, Ubuntu 20.04 işletim sistemi üzerinde çalışan bir Apache web sunucusunu Let’s Encrypt ile nasıl güvenli hale getireceğinizi detaylı bir şekilde inceleyeceğiz.
Önkoşullar
Bu rehbere başlamadan önce, aşağıdaki önkoşulların yerine getirildiğinden emin olmalısınız:
* Ubuntu 20.04 Sunucusu: SSH erişimi olan ve sudo yetkilerine sahip bir Ubuntu 20.04 sunucusu.
* Alan Adı (Domain Name): Bir alan adına sahip olmalı ve bu alan adının (örneğin, alanadiniz.com) DNS A kaydının sunucunuzun IP adresini işaret ettiğinden emin olmalısınız. Ayrıca www.alanadiniz.com gibi alt alan adları için de uygun DNS kayıtları olmalıdır.
* Apache Web Sunucusu: Sunucunuzda Apache’nin kurulu ve çalışır durumda olması gerekmektedir. Eğer kurulu değilse, sonraki adımda kurulumunu anlatacağız.
* Güvenlik Duvarı (UFW): Ubuntu’nun varsayılan güvenlik duvarı olan UFW’nin yapılandırılmış olması, sunucunuzun güvenliği için önemlidir.
Adım 1: Apache Kurulumu ve Yapılandırması
Eğer sunucunuzda Apache henüz kurulu değilse veya temel yapılandırmasını yapmadıysanız, bu adımı takip etmelisiniz.
Apache Kurulumu
İlk olarak, paket listesini güncelleyin ve Apache’yi kurun:
sudo apt update
sudo apt install apache2 -y
Kurulum tamamlandıktan sonra, Apache servisinin otomatik olarak başlaması ve çalışır durumda olması gerekir. Durumunu kontrol edebilirsiniz:
sudo systemctl status apache2
Çıktıda active (running) ibaresini görmelisiniz.
Güvenlik Duvarı Ayarları (UFW)
Eğer UFW kullanıyorsanız, Apache’nin gelen HTTP (port 80) ve HTTPS (port 443) isteklerini alabilmesi için güvenlik duvarını yapılandırmanız gerekir.
sudo ufw app list
Bu komut, UFW’nin tanınan uygulama profillerini listeler. Apache Full profilini etkinleştirerek hem HTTP hem de HTTPS trafiğine izin verebilirsiniz:
sudo ufw allow 'Apache Full'
sudo ufw enable # Eğer UFW etkin değilse, bu komutla etkinleştirin.
sudo ufw status
sudo ufw status komutunun çıktısında Apache Full için izin verilen kuralları görmelisiniz.
Alan Adı için Sanal Host Oluşturma
Let’s Encrypt sertifikası almadan önce, alan adınız için bir Apache Sanal Host (Virtual Host) yapılandırmanız önemlidir. Bu, Apache’nin web sitenizi doğru şekilde sunmasını sağlar.
Öncelikle, web sitenizin dosyalarını barındıracak bir dizin oluşturun. alanadiniz.com yerine kendi alan adınızı kullanın:
sudo mkdir -p /var/www/alanadiniz.com/html
sudo chown -R $USER:$USER /var/www/alanadiniz.com/html
Şimdi bu dizine basit bir index.html dosyası oluşturalım:
sudo nano /var/www/alanadiniz.com/html/index.html
Dosyanın içine aşağıdaki içeriği ekleyin:
Hoş Geldiniz!
Apache sunucunuz başarıyla çalışıyor.
Kaydedip kapatın (CTRL+X, Y, Enter).
Şimdi alan adınız için bir Sanal Host yapılandırma dosyası oluşturalım:
sudo nano /etc/apache2/sites-available/alanadiniz.com.conf
Dosyanın içine aşağıdaki içeriği ekleyin. alanadiniz.com ve www.alanadiniz.com kısımlarını kendi alan adınızla değiştirin:
ServerAdmin webmaster@localhost
ServerName alanadiniz.com
ServerAlias www.alanadiniz.com
DocumentRoot /var/www/alanadiniz.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Kaydedip kapatın.
Yeni Sanal Host dosyasını etkinleştirin ve varsayılan Sanal Host’u devre dışı bırakın (çakışmaları önlemek için):
sudo a2ensite alanadiniz.com.conf
sudo a2dissite 000-default.conf
Apache yapılandırmanızda bir hata olup olmadığını kontrol edin:
sudo apache2ctl configtest
Eğer Syntax OK çıktısını alırsanız, Apache servisini yeniden başlatın:
sudo systemctl restart apache2
Artık web tarayıcınızdan http://alanadiniz.com adresine gittiğinizde, oluşturduğunuz index.html dosyasının içeriğini 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. Certbot’u kurmanın birkaç yolu vardır, ancak Ubuntu 20.04’te en önerilen yöntem Snap kullanmaktır.
Certbot Deposu Ekleme ve Kurulumu (Snap ile Önerilen)
Snap, Ubuntu 20.04’te Certbot’u kurmanın en güvenilir yoludur çünkü en güncel sürümü sunar ve bağımlılık sorunlarını minimize eder.
Öncelikle, Snap’in güncel olduğundan emin olun:
sudo snap install core
sudo snap refresh core
Ardından Certbot’u Snap ile kurun:
sudo snap install --classic certbot
Certbot komutunu sistem PATH’inize eklemek için bir sembolik link oluşturun:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Bu adımlardan sonra certbot komutunu doğrudan kullanabilirsiniz.
Alternatif: Certbot Kurulumu (APT ile)
Eğer Snap kullanmak istemiyorsanız, Certbot’u APT paket yöneticisi aracılığıyla da kurabilirsiniz. Ancak bu yöntem genellikle Certbot’un daha eski bir sürümünü yükleyebilir.
sudo apt update
sudo apt install certbot python3-certbot-apache -y
Bu komut, Certbot’u ve Apache ile entegrasyonu sağlayan eklentiyi kuracaktır.
Adım 3: Let’s Encrypt SSL Sertifikası Alma
Certbot’u kurduktan sonra, SSL sertifikasını almak için iki ana yöntem vardır: Apache eklentisi ile veya manuel/webroot doğrulaması ile. Apache eklentisi, yapılandırmayı otomatik olarak yaptığı için genellikle daha kolaydır.
Apache Eklentisi ile Sertifika Alma
Certbot’un Apache eklentisi, sertifikayı almanıza, Apache yapılandırmanızı otomatik olarak güncellemenize ve HTTP trafiğini HTTPS’ye yönlendirmenize olanak tanır.
Aşağıdaki komutu çalıştırın, alanadiniz.com ve www.alanadiniz.com kısımlarını kendi alan adlarınızla değiştirin:
sudo certbot --apache -d alanadiniz.com -d www.alanadiniz.com
Komutu çalıştırdıktan sonra, Certbot sizden bazı bilgiler isteyecektir:
1. E-posta Adresi: Bildirimler ve acil durumlar için bir e-posta adresi girin.
2. Hizmet Şartları: Let’s Encrypt hizmet şartlarını kabul etmeniz istenir. A (Agree) yazıp Enter’a basın.
3. EFF (Electronic Frontier Foundation) Haberleri: EFF’den e-posta almak isteyip istemediğiniz sorulur. Y (Yes) veya N (No) yazıp Enter’a basın.
4. HTTP’den HTTPS’ye Yönlendirme: Certbot, HTTP isteklerini otomatik olarak HTTPS’ye yönlendirip yönlendirmeyeceğini soracaktır. 2 (Redirect) seçeneğini seçmeniz şiddetle tavsiye edilir. Bu, tüm trafiğin güvenli bir şekilde yönlendirilmesini sağlar.
Bu adımları tamamladıktan sonra Certbot, sertifikayı alacak, Apache yapılandırmanızı güncelleyecek ve size başarılı bir mesaj gösterecektir:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/alanadiniz.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/alanadiniz.com/privkey.pem
...
Bu mesaj, sertifikanızın başarıyla alındığını ve kurulduğunu gösterir. Artık web tarayıcınızdan https://alanadiniz.com adresine gittiğinizde, web sitenizin güvenli olduğunu gösteren kilit simgesini görmelisiniz.
Manuel Doğrulama ile Sertifika Alma (İsteğe Bağlı)
Bazı durumlarda (örneğin, özel bir Apache yapılandırmanız varsa veya Certbot’un otomatik Apache eklentisi beklendiği gibi çalışmazsa), webroot eklentisini kullanarak manuel olarak sertifika alabilirsiniz. Bu yöntem, Certbot’un alan adınızın sahipliğini doğrulamak için webroot dizininize geçici bir dosya yerleştirmesini gerektirir.
sudo certbot certonly --webroot -w /var/www/alanadiniz.com/html -d alanadiniz.com -d www.alanadiniz.com
Bu komut, sertifikayı alacak ancak Apache yapılandırmanızı otomatik olarak güncellemeyecektir. Sertifikayı aldıktan sonra, Apache’nin SSL modülünü etkinleştirmeniz ve Sanal Host yapılandırma dosyanızı manuel olarak düzenlemeniz gerekir.
1. SSL Modülünü Etkinleştirme:
sudo a2enmod ssl
sudo systemctl restart apache2
2. Sanal Host Yapılandırmasını Güncelleme:
Certbot’un otomatik yönlendirme yapmadığı durumlarda, genellikle yeni bir SSL Sanal Host dosyası oluşturmanız gerekir. Certbot, otomatik olarak /etc/apache2/sites-available/alanadiniz.com-le-ssl.conf gibi bir dosya oluşturur. Eğer oluşturmadıysa, kendiniz oluşturmalısınız:
sudo nano /etc/apache2/sites-available/alanadiniz.com-ssl.conf
İçeriği aşağıdaki gibi düzenleyin, sertifika yollarını kendi alan adınızla değiştirin:
ServerAdmin webmaster@localhost
ServerName alanadiniz.com
ServerAlias www.alanadiniz.com
DocumentRoot /var/www/alanadiniz.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/alanadiniz.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/alanadiniz.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Bu dosyayı etkinleştirin ve Apache’yi yeniden başlatın:
sudo a2ensite alanadiniz.com-ssl.conf
sudo systemctl restart apache2
Adım 4: SSL Sertifikasını Otomatik Yenileme
Let’s Encrypt sertifikaları 90 gün geçerlidir. Bu süre dolmadan önce sertifikaların yenilenmesi gerekir. Certbot, bu işlemi otomatik olarak halletmek için tasarlanmıştır.
Yenileme Testi
Sertifika yenileme mekanizmasının doğru çalıştığından emin olmak için bir kuru çalıştırma (dry-run) yapabilirsiniz:
sudo certbot renew --dry-run
Eğer bu komut herhangi bir hata vermeden çalışırsa, otomatik yenileme mekanizmanızın düzgün çalıştığı anlamına gelir.
Cron İşlemi veya Systemd Timer ile Otomatik Yenileme
Certbot’u Snap ile kurduysanız, otomatik yenileme için bir systemd timer otomatik olarak kurulur. Bu timer günde iki kez çalışır ve sertifikalarınızın süresi dolmak üzereyken yenileme işlemini tetikler.
Timer’ın durumunu kontrol edebilirsiniz:
sudo systemctl status snap.certbot.renew.service
sudo systemctl status snap.certbot.renew.timer
Eğer Certbot’u APT ile kurduysanız, genellikle /etc/cron.d/certbot altında bir cron işi oluşturulur. Bu cron işi de sertifikaları otomatik olarak yenilemekten sorumludur.
Bu otomatik yenileme mekanizmaları sayesinde, sertifikalarınızın süresi dolduğunda manuel olarak müdahale etmenize gerek kalmaz.
Adım 5: HTTP’den HTTPS’ye Yönlendirme
Sertifikayı kurduktan ve Apache’yi yapılandırdıktan sonra, web sitenize gelen tüm HTTP trafiğini HTTPS’ye yönlendirmek önemlidir. Bu, kullanıcıların her zaman güvenli bağlantı üzerinden sitenize erişmesini sağlar. Eğer Certbot kurulum sırasında yönlendirme seçeneğini (2: Redirect) seçtiyseniz, bu adım zaten otomatik olarak yapılmış olacaktır. Ancak manuel kurulum yaptıysanız veya kontrol etmek istiyorsanız, aşağıdaki yöntemleri kullanabilirsiniz.
Apache Sanal Host Ayarlarında Yönlendirme
Bu yöntem, Apache’nin Sanal Host yapılandırma dosyasında bir yönlendirme kuralı eklemeyi içerir. Genellikle, HTTP (port 80) Sanal Host dosyanızı düzenleyerek tüm istekleri HTTPS’ye yönlendiririz.
HTTP Sanal Host dosyanızı açın:
sudo nano /etc/apache2/sites-available/alanadiniz.com.conf
VirtualHost *:80 bloğunun içine aşağıdaki RewriteEngine ve RewriteRule yönergelerini ekleyin:
ServerAdmin webmaster@localhost
ServerName alanadiniz.com
ServerAlias www.alanadiniz.com
DocumentRoot /var/www/alanadiniz.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# HTTP'den HTTPS'ye Yönlendirme
RewriteEngine On
RewriteCond %{SERVER_NAME} =alanadiniz.com [OR]
RewriteCond %{SERVER_NAME} =www.alanadiniz.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Bu kuralı ekledikten sonra, Apache’nin mod_rewrite modülünü etkinleştirmelisiniz:
sudo a2enmod rewrite
sudo systemctl restart apache2
Şimdi http://alanadiniz.com adresine gittiğinizde, otomatik olarak https://alanadiniz.com adresine yönlendirilmelisiniz.
Adım 6: Güvenlik İyileştirmeleri
SSL sertifikası kurmak harika bir başlangıçtır, ancak web sitenizin güvenliğini daha da artırmak için ek adımlar atabilirsiniz.
HSTS (HTTP Strict Transport Security)
HSTS, tarayıcılara web sitenize her zaman HTTPS üzerinden bağlanmaları gerektiğini bildiren bir güvenlik mekanizmasıdır. Bu, kullanıcıların yanlışlıkla veya kötü niyetli bir saldırı sonucunda HTTP üzerinden sitenize erişmesini önler.
HSTS’yi etkinleştirmek için, Apache’nin mod_headers modülünü etkinleştirmeniz ve SSL Sanal Host yapılandırmanıza bir başlık eklemeniz gerekir.
1. mod_headers Modülünü Etkinleştirme:
sudo a2enmod headers
sudo systemctl restart apache2
2. HSTS Başlığını Ekleme:
SSL Sanal Host yapılandırma dosyanızı açın (genellikle alanadiniz.com-le-ssl.conf veya alanadiniz.com-ssl.conf):
sudo nano /etc/apache2/sites-available/alanadiniz.com-le-ssl.conf
bloğunun içine aşağıdaki satırı ekleyin:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
max-age değeri, tarayıcının bu kuralı ne kadar süreyle hatırlayacağını saniye cinsinden belirtir (iki yıl). includeSubDomains alt alan adlarını da kapsar. preload ise sitenizi HSTS preload listesine dahil etmek istediğinizi belirtir (ancak bunun için özel bir başvuru süreci vardır).
Dosyayı kaydedip kapatın ve Apache’yi yeniden başlatın:
sudo systemctl restart apache2
SSL Labs Testi
Web sitenizin SSL/TLS yapılandırmasının ne kadar güvenli olduğunu kontrol etmek için Qualys SSL Labs’ın ücretsiz online test aracını kullanabilirsiniz: [https://www.ssllabs.com/ssltest/](https://www.ssllabs.com/ssltest/). Alan adınızı girin ve “Submit” butonuna tıklayın. Test birkaç dakika sürecektir ve sitenizin SSL/TLS yapılandırması hakkında detaylı bir rapor sunacaktır (A+, A, B gibi derecelendirmelerle). Bu test, herhangi bir zayıflık veya yanlış yapılandırma olup olmadığını belirlemenize yardımcı olur.
Güçlü Şifreleme Protokolleri ve Şifreleme Paketleri
Apache’nin SSL yapılandırmasında, sadece güvenli SSL/TLS protokollerini kullanmaya ve zayıf şifreleme paketlerini devre dışı bırakmaya özen göstermelisiniz. Certbot’un varsayılan yapılandırması genellikle iyi bir başlangıç noktası sunar ( /etc/letsencrypt/options-ssl-apache.conf dosyasına bakın), ancak daha fazla optimizasyon yapmak isteyebilirsiniz.
Bu ayarları genellikle /etc/apache2/mods-available/ssl.conf dosyasında veya Sanal Host yapılandırmanızda bulabilirsiniz.
Örnek güvenli ayarlar:
# Sadece güçlü protokolleri etkinleştirin
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
Güçlü şifreleme paketlerini kullanın ve zayıfları devre dışı bırakın
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
Bu değişiklikleri yaptıktan sonra Apache’yi yeniden başlatmayı unutmayın.
Adım 7: Sorun Giderme ve Sıkça Sorulan Sorular
Kurulum sürecinde veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
Certbot Hataları
* DNS Doğrulama Hatası: Certbot, alan adınızın sunucunuzun IP adresini işaret ettiğini doğrulayamadığında bu hatayı alırsınız. DNS kayıtlarınızın doğru olduğundan ve yayılmasının tamamlandığından emin olun.
* Güvenlik Duvarı Hatası: Certbot, doğrulamayı gerçekleştirmek için port 80 (HTTP) veya port 443 (HTTPS) üzerinden sunucunuza erişebilmelidir. Güvenlik duvarınızın (UFW gibi) bu portlara gelen trafiğe izin verdiğinden emin olun.
* Apache Yapılandırma Hatası: Certbot’un Apache eklentisi, Apache yapılandırmanızda bir hata bulursa çalışmayabilir. sudo apache2ctl configtest komutuyla Apache yapılandırmanızı kontrol edin ve hataları düzeltin.
Sertifika Yenileme Hataları
* Eğer otomatik yenileme başarısız olursa, Certbot size e-posta ile bildirim gönderecektir (kayıt sırasında verdiğiniz e-posta adresine).
* Yenileme sorunlarını gidermek için sudo certbot renew --force-renewal komutunu kullanabilirsiniz, ancak bu sadece geçici bir çözümdür. Asıl sorunu bulmak için Certbot’un günlük dosyalarını (/var/log/letsencrypt/) kontrol edin.
* Genellikle yenileme hataları, DNS değişiklikleri, güvenlik duvarı kısıtlamaları veya Apache yapılandırmasındaki değişikliklerden kaynaklanır.
Karma İçerik (Mixed Content) Hataları
HTTPS üzerinden yüklenen bir sayfada HTTP üzerinden yüklenen kaynaklar (resimler, CSS dosyaları, JavaScript dosyaları vb.) varsa, tarayıcılar “karma içerik” uyarısı verebilir veya bu kaynakları engelleme yoluna gidebilir.
* Çözüm: Web sitenizin HTML, CSS ve JavaScript dosyalarını kontrol edin. HTTP ile başlayan tüm kaynak URL’lerini HTTPS ile başlayacak şekilde güncelleyin. Örneğin, http://alanadiniz.com/resim.jpg yerine https://alanadiniz.com/resim.jpg kullanın. Veya göreceli yollar kullanın: /resim.jpg.
* Veritabanınızdaki içerikleri de kontrol etmeniz gerekebilir, özellikle WordPress gibi CMS’ler kullanıyorsanız.
Güvenlik Duvarı Sorunları
* Port 80 (HTTP) ve Port 443 (HTTPS) açık olmalıdır. sudo ufw status komutuyla kontrol edin.
* Eğer farklı bir güvenlik duvarı kullanıyorsanız (örneğin bir bulut sağlayıcısının güvenlik grubu), ilgili portların açık olduğundan emin olun.
Sonuç
Ubuntu 20.04 üzerinde Apache web sunucunuzu Let’s Encrypt ile güvenli hale getirmek, web sitenizin kullanıcıları için güvenilir bir ortam sağlamanın ve modern web standartlarına uymanın temel bir adımıdır. Bu rehberde anlatılan adımları takip ederek, ücretsiz bir SSL/TLS sertifikası edinebilir, Apache’nizi HTTPS için yapılandırabilir, HTTP trafiğini HTTPS’ye yönlendirebilir ve sertifikanızın otomatik olarak yenilenmesini sağlayabilirsiniz.
Unutmayın ki web güvenliği sürekli bir süreçtir. Sertifikalarınızı güncel tutmak, sunucu yazılımınızı düzenli olarak yamalamak ve güvenlik iyileştirmelerini takip etmek, web sitenizi ve kullanıcılarınızı potansiyel tehditlere karşı korumanın anahtarıdır. Let’s Encrypt ve Certbot, bu süreci önemli ölçüde basitleştirerek, herkesin güvenli bir web deneyimi sunmasına olanak tanır. Artık web siteniz hem güvenli hem de modern web standartlarına uygun bir şekilde hizmet vermektedir.
