Takip et

Apache’yi Let’s Encrypt ile FreeBSD 12.0 Üzerinde Güvenli Hale Getirme

Apache’yi Let’s Encrypt ile FreeBSD 12.0 Üzerinde Güvenli Hale Getirme Giriş Günümüz internet dünyasında, web sitelerinin güvenliği hiç ol

Apache’yi Let’s Encrypt ile FreeBSD 12.0 Üzerinde Güvenli Hale Getirme

Giriş

Günümüz internet dünyasında, web sitelerinin güvenliği hiç olmadığı kadar kritik bir öneme sahiptir. Kullanıcı verilerinin korunması, site bütünlüğünün sağlanması ve arama motorlarındaki sıralamaların iyileştirilmesi için HTTPS protokolü vazgeçilmez bir standart haline gelmiştir. Bu teknik makale, açık kaynaklı ve güçlü bir işletim sistemi olan FreeBSD 12.0 üzerinde çalışan Apache web sunucusunu, ücretsiz ve otomatikleştirilmiş bir sertifika yetkilisi olan Let’s Encrypt ile nasıl güvenli hale getireceğinizi adım adım açıklamaktadır.

Apache HTTP Sunucusu, dünya genelinde en yaygın kullanılan web sunucularından biridir. Esnekliği, kararlılığı ve geniş modül desteği sayesinde hem küçük kişisel sitelerden hem de büyük kurumsal uygulamalara kadar geniş bir yelpazede tercih edilmektedir. Ancak, varsayılan kurulumda Apache, verileri şifrelemeden HTTP protokolü üzerinden iletir. Bu da hassas bilgilerin (kullanıcı adları, şifreler, kredi kartı bilgileri vb.) kötü niyetli kişiler tarafından kolayca ele geçirilmesine yol açabilir.

HTTPS (Hypertext Transfer Protocol Secure), HTTP’nin güvenli bir uzantısıdır. SSL (Secure Sockets Layer) veya daha güncel adıyla TLS (Transport Layer Security) protokollerini kullanarak sunucu ile istemci arasındaki iletişimi şifreler. Bu şifreleme, verilerin gizliliğini, bütünlüğünü ve kimlik doğrulamasını sağlar. Bir web sitesinin HTTPS kullanıp kullanmadığı, tarayıcının adres çubuğundaki kilit simgesi veya “https://” ön eki ile kolayca anlaşılabilir.

Let’s Encrypt, Internet Security Research Group (ISRG) tarafından sağlanan, ücretsiz, otomatik ve açık bir sertifika yetkilisidir. Geleneksel SSL/TLS sertifikalarının yüksek maliyetli ve karmaşık edinme süreçlerine bir alternatif olarak ortaya çıkmıştır. Certbot gibi istemci yazılımları sayesinde, sertifika alma, kurma ve yenileme işlemleri tamamen otomatikleştirilebilir, bu da web yöneticileri için büyük bir kolaylık sağlar.

FreeBSD 12.0, kararlılığı, güvenliği ve performansıyla bilinen bir işletim sistemidir. Güçlü ağ özellikleri, gelişmiş dosya sistemleri ve temiz bir paket yönetim sistemi (pkg) ile web sunucuları için ideal bir platform sunar. Bu makalede, Apache’nin FreeBSD 12.0 üzerindeki kurulumundan başlayarak, Certbot’un entegrasyonuna, Let’s Encrypt sertifikalarının alınmasına ve son olarak Apache’nin HTTPS için güvenli bir şekilde yapılandırılmasına kadar tüm adımlar detaylıca ele alınacaktır. Ayrıca, sertifika yenileme, ek güvenlik önlemleri ve yaygın sorun giderme yöntemleri de makalenin kapsamındadır. Bu rehberin sonunda, FreeBSD 12.0 sunucunuzda güvenli ve modern bir web sitesini başarıyla yayınlayabileceksiniz.

Ön Koşullar

Bu rehbere başlamadan önce aşağıdaki ön koşulların yerine getirilmiş olması gerekmektedir:

* FreeBSD 12.0 Sunucusu: Çalışır durumda bir FreeBSD 12.0 sunucusu. Makale, root veya sudo yetkisine sahip olduğunuzu varsaymaktadır.
* Temel Komut Satırı Bilgisi: FreeBSD komut satırında temel düzeyde işlem yapabilme yeteneği.
* Alan Adı: Sunucunuzun genel IP adresine işaret eden kayıtlı bir alan adı (örneğin, example.com). Let’s Encrypt sertifikaları IP adresleri için değil, alan adları için verilir. DNS kayıtlarınızın (A veya AAAA kaydı) doğru şekilde yapılandırıldığından emin olun.
* Apache Kurulumu: Apache web sunucusunun kurulu ve çalışır durumda olması. Henüz kurulu değilse, sonraki adımlarda nasıl kurulacağı anlatılacaktır.
* Paket Yöneticisi: pkg paket yöneticisinin güncel olması. pkg update && pkg upgrade komutu ile güncelliğini kontrol edebilirsiniz.
* Açık Portlar: Sunucunuzun güvenlik duvarında HTTP (80) ve HTTPS (443) portlarının dışarıdan erişime açık olması gerekmektedir. Let’s Encrypt, sertifika doğrulama için genellikle 80 numaralı portu kullanır.

Bu ön koşullar sağlandıktan sonra, Apache’yi Let’s Encrypt ile güvenli hale getirme sürecine başlayabiliriz.

Adım 1: Apache Kurulumu ve Temel Yapılandırma

Eğer Apache sunucunuz zaten kurulu ve temel yapılandırması yapılmışsa, bu adımı atlayabilirsiniz. Aksi takdirde, aşağıdaki adımları izleyerek Apache’yi kurup yapılandıralım.

Apache Kurulumu

İlk olarak, FreeBSD’nin paket yöneticisi pkg‘yi güncelleyelim ve ardından Apache 2.4 sürümünü kuralım:

sudo pkg update && sudo pkg upgrade
sudo pkg install apache24

Apache Servisini Başlatma ve Etkinleştirme

Apache’nin sistem başlangıcında otomatik olarak başlaması için sysrc komutunu kullanalım ve ardından servisi başlatalım:

sudo sysrc apache24_enable="YES"
sudo service apache24 start

Bu noktada, web tarayıcınızda sunucunuzun IP adresini veya alan adını ziyaret ederek Apache’nin varsayılan karşılama sayfasını görmeniz gerekir. Eğer görmüyorsanız, güvenlik duvarı ayarlarınızı kontrol etmeniz gerekebilir.

Güvenlik Duvarı Yapılandırması (PF Örneği)

FreeBSD’de yaygın olarak kullanılan güvenlik duvarlarından biri PF’dir (Packet Filter). Eğer PF kullanıyorsanız, HTTP (80) ve HTTPS (443) portlarının açık olduğundan emin olmalısınız.

PF’yi etkinleştirmek için:

sudo sysrc pf_enable="YES"
sudo sysrc pflog_enable="YES"
sudo service pf start

/etc/pf.conf dosyasını düzenleyerek portları açın. Örnek bir pf.conf parçası:

# /etc/pf.conf

... (Diğer kurallarınız) ...

Default block all

block all

Allow loopback interface

pass in quick on lo0 all pass out quick on lo0 all

Allow SSH

pass in on em0 proto tcp from any to any port 22 keep state

Allow HTTP and HTTPS

pass in on em0 proto tcp from any to any port { 80, 443 } keep state

Allow outbound traffic

pass out quick on em0 all keep state

Değişiklikleri uyguladıktan sonra PF’yi yeniden yükleyin:

sudo pfctl -f /etc/pf.conf

em0 yerine kendi ağ arayüzünüzün adını kullanmayı unutmayın (örneğin vtnet0).

Virtual Host Yapılandırması

Alan adınız için bir Virtual Host (Sanal Sunucu) yapılandırması yapmak, Apache’nin farklı alan adlarına farklı içerikler sunmasını sağlar. Apache’nin ana yapılandırma dosyası /usr/local/etc/apache24/httpd.conf‘tur. Sanal sunucuları ayrı bir dosyada tutmak daha düzenli olacaktır.

Öncelikle, httpd.conf içinde sanal sunucu yapılandırmalarını dahil eden satırın etkin olduğundan emin olun:

# /usr/local/etc/apache24/httpd.conf

...

Include etc/apache24/extra/httpd-vhosts.conf

...

Ardından, /usr/local/etc/apache24/extra/httpd-vhosts.conf dosyasını düzenleyin veya yeni bir dosya oluşturun (örneğin /usr/local/etc/apache24/vhosts/example.com.conf ve httpd.conf içinde bu dosyayı dahil edin):

# /usr/local/etc/apache24/extra/httpd-vhosts.conf veya özel vhost dosyanız

    ServerAdmin webmaster@example.com
    DocumentRoot "/usr/local/www/apache24/data/example.com"
    ServerName example.com
    ServerAlias www.example.com
    ErrorLog "/var/log/apache24/example.com-error.log"
    CustomLog "/var/log/apache24/example.com-access.log" common

    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    

DocumentRoot için bir dizin oluşturun ve içine basit bir index.html dosyası koyun:

sudo mkdir -p /usr/local/www/apache24/data/example.com
echo "" | sudo tee /usr/local/www/apache24/data/example.com/index.html

Yapılandırma dosyasında bir hata olup olmadığını kontrol edin ve Apache’yi yeniden başlatın:

sudo apachectl configtest
sudo service apache24 restart

Artık http://example.com adresini ziyaret ettiğinizde “Hello from example.com!” mesajını görmelisiniz.

Adım 2: Certbot Kurulumu (Let’s Encrypt İstemcisi)

Certbot, Let’s Encrypt sertifikalarını kolayca almanızı ve yönetmenizi sağlayan resmi istemci yazılımıdır. Apache ile entegrasyonu sayesinde yapılandırma işlemlerini büyük ölçüde otomatikleştirir.

Certbot Nedir?

Certbot, Let’s Encrypt sertifikaları almak, yenilemek ve iptal etmek için kullanılan bir komut satırı aracıdır. Apache ve Nginx gibi popüler web sunucuları için özel eklentilere sahiptir, bu da sertifika kurulumunu ve web sunucusu yapılandırmasını basitleştirir. Certbot, alan adınızın kontrolünü doğrulamak için çeşitli yöntemler (HTTP-01, DNS-01) kullanır ve doğrulama başarılı olduğunda sertifikaları otomatik olarak indirir ve yapılandırır.

Kurulum

FreeBSD’de Certbot ve Apache eklentisini pkg ile kurabiliriz. FreeBSD 12.0 genellikle Python 3.7 veya 3.8 ile gelir. Paketin tam adını pkg search certbot komutuyla kontrol edebilirsiniz. Genellikle py37-certbot veya py38-certbot şeklinde olacaktır. Bu örnekte py37-certbot kullanacağız.

sudo pkg install py37-certbot py37-certbot-apache

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

Adım 3: Let’s Encrypt Sertifikası Alma

Certbot kurulduktan sonra, alan adınız için Let’s Encrypt sertifikasını almanın iki ana yolu vardır: otomatik yöntem (Certbot’un Apache eklentisi ile) ve manuel yöntem (sadece sertifikayı alma ve Apache’yi elle yapılandırma). Otomatik yöntem genellikle daha kolay ve önerilen yoldur.

Otomatik Yöntem (Certbot Apache Eklentisi ile)

Bu yöntem, Certbot’un Apache yapılandırmanızı otomatik olarak algılamasına ve güncellemesine olanak tanır.

sudo certbot --apache

Bu komutu çalıştırdığınızda, Certbot sizi bazı sorularla yönlendirecektir:

1. E-posta Adresi: Acil bildirimler ve kayıp anahtar kurtarma için bir e-posta adresi girmeniz istenecektir.
2. Hizmet Şartları: Let’s Encrypt hizmet şartlarını kabul etmeniz gerekecektir.
3. Alan Adı Seçimi: Certbot, Apache yapılandırmanızda bulduğu alan adlarını listeleyecektir. Sertifika almak istediğiniz alan adlarını seçin (örneğin, example.com ve www.example.com). Birden fazla alan adı için tek bir sertifika alabilirsiniz.
4. HTTP’den HTTPS’ye Yönlendirme (Redirect): Certbot, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirmek isteyip istemediğinizi soracaktır. Genellikle bu seçeneği (“2: Redirect”) seçmek önerilir, çünkü bu, sitenizin her zaman güvenli bağlantı üzerinden erişilmesini sağlar.

Certbot bu adımları tamamladıktan sonra, sertifikaları alacak, Apache yapılandırmanızı güncelleyecek (SSL Virtual Host oluşturacak ve HTTP’den HTTPS’ye yönlendirme kurallarını ekleyecek) ve Apache’yi yeniden başlatacaktır. İşlem başarılı olursa, Certbot sertifikanın başarıyla kurulduğunu ve ne zaman yenileneceğini belirten bir mesaj gösterecektir.

Sertifikalarınız genellikle /usr/local/etc/letsencrypt/live/yourdomain.com/ dizininde saklanır. Bu dizin içinde fullchain.pem (tam sertifika zinciri) ve privkey.pem (özel anahtar) dosyalarını bulacaksınız.

Manuel Yöntem (Sadece Sertifika Alma)

Eğer Apache yapılandırmasını kendiniz yapmak istiyorsanız veya Certbot’un otomatik yapılandırması beklentilerinizi karşılamıyorsa, certonly modunu kullanabilirsiniz.

sudo certbot certonly --apache

Bu komut da yukarıdaki gibi e-posta ve alan adı seçimi adımlarını içerecektir, ancak Apache yapılandırmanızı otomatik olarak değiştirmeyecektir. Sertifikaları aldıktan sonra, Apache’yi elle yapılandırmanız gerekecektir.

Alternatif olarak, webroot yöntemini kullanarak da sertifika alabilirsiniz:

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

Burada:
* --webroot: Certbot’a webroot doğrulama yöntemini kullanmasını söyler.
* -w /usr/local/www/apache24/data/example.com: Alan adınızın ana dizinini (DocumentRoot) belirtir. Certbot bu dizine geçici bir dosya yerleştirerek alan adı kontrolünü doğrular.
* -d example.com -d www.example.com: Sertifika almak istediğiniz alan adlarını belirtir.

Bu yöntemle sertifikaları aldıktan sonra, Apache’yi HTTPS için manuel olarak yapılandırmanız gerekecektir.

Adım 4: Apache’yi HTTPS İçin Yapılandırma (Manuel Yöntem İçin)

Eğer Certbot’un otomatik yapılandırma yöntemini kullandıysanız, bu adımı atlayabilirsiniz. Ancak, certonly seçeneğini kullandıysanız veya yapılandırmayı daha fazla özelleştirmek istiyorsanız, Apache’yi HTTPS için manuel olarak yapılandırmanız gerekir.

SSL Modülünü Etkinleştirme

Apache’nin SSL/TLS bağlantılarını işleyebilmesi için mod_ssl modülünün etkinleştirilmesi gerekir. /usr/local/etc/apache24/httpd.conf dosyasını açın ve aşağıdaki satırların başında # işareti olmadığından emin olun:

# /usr/local/etc/apache24/httpd.conf

...

LoadModule ssl_module libexec/apache24/mod_ssl.so

...

Include etc/apache24/extra/httpd-ssl.conf

...

mod_ssl.so modülü, SSL/TLS işlevselliğini sağlar. httpd-ssl.conf dosyası ise SSL Virtual Host yapılandırmalarını içerir.

SSL Virtual Host Oluşturma

Şimdi /usr/local/etc/apache24/extra/httpd-ssl.conf dosyasını düzenleyerek veya ayrı bir dosyada (örneğin /usr/local/etc/apache24/vhosts/example.com-ssl.conf) yeni bir SSL Virtual Host oluşturun. Eğer ayrı bir dosya oluşturursanız, httpd.conf içinde bunu dahil etmeyi unutmayın.

# /usr/local/etc/apache24/extra/httpd-ssl.conf veya özel ssl vhost dosyanız


    ServerAdmin webmaster@example.com
    DocumentRoot "/usr/local/www/apache24/data/example.com"
    ServerName example.com
    ServerAlias www.example.com
    ErrorLog "/var/log/apache24/example.com-error.log"
    CustomLog "/var/log/apache24/example.com-access.log" common

    # SSL Ayarları
    SSLEngine on
    SSLCertificateFile "/usr/local/etc/letsencrypt/live/example.com/fullchain.pem"
    SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/example.com/privkey.pem"

    # Güvenlik ve Performans İçin Önerilen Ayarlar
    # Modern TLS protokollerini etkinleştir, eski ve güvensiz olanları devre dışı bırak
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

    # Güçlü şifreleme algoritmalarını kullan
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLHonorCipherOrder on

    # HSTS (HTTP Strict Transport Security)
    # İlk ziyaretçiler için HTTP'den HTTPS'ye otomatik ve kalıcı yönlendirme sağlar.
    # Max-Age süresini dikkatli belirleyin.
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

    # Diğer güvenlik başlıkları (isteğe bağlı ama önerilir)
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Referrer-Policy "no-referrer-when-downgrade"

    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    

Açıklamalar:
* SSLEngine on: Bu Virtual Host için SSL’yi etkinleştirir.
* SSLCertificateFile: Certbot tarafından oluşturulan tam sertifika zincirini (alan adınızın sertifikası ve ara sertifikalar) belirtir.
* SSLCertificateKeyFile: Sertifikanızla eşleşen özel anahtarı belirtir.
* SSLProtocol ve SSLCipherSuite: Güvenliği artırmak için yalnızca modern ve güçlü TLS protokollerini ve şifreleme algoritmalarını kullanmanızı sağlar. Eski ve zayıf protokolleri (SSLv2, SSLv3, TLSv1, TLSv1.1) devre dışı bırakmak önemlidir.
* SSLHonorCipherOrder on: Sunucunun şifreleme süiti tercihlerini kullanmasını sağlar.
* Header always set Strict-Transport-Security: HSTS başlığı, tarayıcılara sitenize her zaman HTTPS üzerinden erişmeleri gerektiğini bildirir. max-age süresi boyunca (burada 2 yıl), tarayıcı sitenize HTTP ile erişmeye çalışsa bile otomatik olarak HTTPS’ye yönlendirecektir. includeSubDomains alt alan adları için de geçerli olmasını sağlar. preload ise HSTS Preload listesine dahil olmak isteyen siteler için gereklidir (Google tarafından yönetilen bir liste).

HTTP’den HTTPS’ye Yönlendirme

Kullanıcıların sitenize her zaman güvenli bağlantı üzerinden eriştiğinden emin olmak için, HTTP (80 numaralı port) trafiğini otomatik olarak HTTPS (443 numaralı port) trafiğine yönlendirmek iyi bir uygulamadır. Bu, httpd-vhosts.conf dosyasındaki HTTP Virtual Host tanımınıza eklenebilir:

# /usr/local/etc/apache24/extra/httpd-vhosts.conf

    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/

Veya daha esnek bir mod_rewrite kuralı kullanabilirsiniz:

# /usr/local/etc/apache24/extra/httpd-vhosts.conf

    ServerName example.com
    ServerAlias www.example.com

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

mod_rewrite kullanacaksanız, httpd.conf içinde LoadModule rewrite_module libexec/apache24/mod_rewrite.so satırının etkin olduğundan emin olun.

Apache’yi Yeniden Başlatma

Yapılandırma dosyalarındaki değişikliklerden sonra, Apache’nin sözdizimini kontrol edin ve servisi yeniden başlatın:

sudo apachectl configtest
sudo service apache24 restart

Her şey yolundaysa, web tarayıcınızda http://example.com adresini ziyaret ettiğinizde otomatik olarak https://example.com adresine yönlendirilmeli ve adres çubuğunda kilit simgesini görmelisiniz.

Adım 5: Sertifika Yenileme

Let’s Encrypt sertifikaları 90 gün geçerlidir. Bu, sertifikaların düzenli olarak yenilenmesi gerektiği anlamına gelir. Certbot bu süreci otomatikleştirmek için tasarlanmıştır.

Neden Yenileme Gerekli?

Let’s Encrypt, kısa süreli sertifikalar vererek güvenlik ihlali riskini azaltmayı ve otomatik yenileme sürecini teşvik etmeyi amaçlar. Bu, sertifikaların çalınması veya kötüye kullanılması durumunda etki süresinin sınırlı kalmasını sağlar. Ayrıca, bu kısa süre, sertifika yetkililerinin politikalarını veya teknik standartlarını güncellemesi durumunda tüm sertifikaların daha hızlı bir şekilde yeni standartlara uygun hale getirilmesine olanak tanır.

Manuel Yenileme

Certbot, süresi dolmak üzere olan veya zaten süresi dolmuş sertifikaları yenilemek için bir komut sağlar:

sudo certbot renew

Bu komut, sisteminizdeki tüm Certbot tarafından yönetilen sertifikaları kontrol eder ve süresi 30 gün içinde dolacak olanları yenilemeye çalışır. Yalnızca süresi dolmak üzere olan sertifikalar yenilenir.

Yenileme işlemini test etmek için dry-run seçeneğini kullanabilirsiniz:

sudo certbot renew --dry-run

Bu, gerçek bir yenileme işlemi yapmadan, yenilemenin başarılı olup olmayacağını kontrol eder.

Otomatik Yenileme (Cron Job)

Sertifikaların manuel olarak yenilenmesini takip etmek pratik değildir. Bu nedenle, Certbot yenileme işlemini otomatikleştirmek için bir cron job kurmak en iyi yöntemdir. Certbot, çoğu sistemde otomatik olarak bir cron job veya systemd zamanlayıcı birimi kurar. Ancak FreeBSD’de bunu manuel olarak kurmanız gerekebilir.

crontab -e komutunu kullanarak root kullanıcısı için bir cron job ekleyebilirsiniz:

sudo crontab -e

Açılan düzenleyiciye aşağıdaki satırı ekleyin:

0 0,12   * /usr/local/bin/certbot renew --quiet && /usr/local/sbin/apachectl graceful

Açıklamalar:
0 0,12 : Bu, cron job’ın her gün gece yarısı (00:00) ve öğlen (12:00) çalıştırılmasını sağlar. Günde iki kez çalıştırmak, olası bir hatayı telafi etmek için yeterli bir sıklıktır.
* /usr/local/bin/certbot renew: Certbot’un yenileme komutunu çalıştırır.
* --quiet: Sadece hatalar veya önemli uyarılar olduğunda çıktı verir.
* &&: Bir önceki komut (certbot renew) başarılı olursa, sonraki komutu çalıştırır.
* /usr/local/sbin/apachectl graceful: Apache’yi nazikçe yeniden başlatır. Bu, mevcut bağlantıların kesilmemesini sağlar. Sadece yapılandırma dosyalarını yeniden yükler ve yeni bağlantılar için güncel sertifikaları kullanmaya başlar.

Bazı durumlarda, yenileme işlemi sırasında Apache’nin kısa bir süreliğine durdurulup başlatılması gerekebilir. Bu genellikle Certbot’un Apache eklentisi tarafından otomatik olarak yapılır. Eğer certbot renew komutu Apache’yi yeniden başlatmazsa, yukarıdaki cron job’da /usr/local/sbin/apachectl graceful komutunu ekleyerek bu işlemi manuel olarak tetikleyebilirsiniz.

Bu cron job, sertifikalarınızın süresi dolmadan önce otomatik olarak yenilenmesini sağlayacak ve web sitenizin sürekli olarak HTTPS üzerinden erişilebilir kalmasını garantileyecektir.

Ek Güvenlik Önlemleri

Let’s Encrypt ile HTTPS’yi etkinleştirmek, web sunucunuzun güvenliğini artırmada büyük bir adımdır. Ancak, sunucunuzu daha da güvenli hale getirmek için alabileceğiniz başka önlemler de vardır.

Apache Güvenliğini Artırma

* Sunucu Bilgilerini Gizleme: Apache varsayılan olarak sunucu türü ve işletim sistemi hakkında bilgiler verir. Bu bilgileri gizlemek, potansiyel saldırganların zayıf noktaları hedeflemesini zorlaştırır.
* /usr/local/etc/apache24/httpd.conf dosyasında ServerTokens ve ServerSignature ayarlarını aşağıdaki gibi değiştirin:

ServerTokens Prod        # Sadece "Apache" gösterir.
        ServerSignature Off      # Hata sayfalarındaki sunucu imzasını kaldırır.

* Dizin Listelemesini Kapatma: DocumentRoot veya diğer dizinlerde Options Indexes etkinse, bir dizinde index.html veya index.php gibi bir dosya olmadığında, Apache o dizindeki tüm dosyaları listeler. Bu, hassas bilgilerin açığa çıkmasına neden olabilir.
* Options -Indexes kullanarak dizin listelemesini devre dışı bırakın:


            Options -Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        

* ModSecurity ve Mod_Evasive Kullanımı:
* ModSecurity: Bir web uygulama güvenlik duvarı (WAF) modülüdür. SQL enjeksiyonu, XSS (Cross-Site Scripting) gibi yaygın web saldırılarına karşı koruma sağlar. Kurulumu karmaşık olabilir ve dikkatli yapılandırma gerektirir.
* Mod_Evasive: DoS (Denial of Service) ve Brute Force saldırılarına karşı koruma sağlamak için tasarlanmıştır. Belirli bir süre içinde çok sayıda istek gönderen IP adreslerini geçici olarak engeller.
* Minimum Ayrıcalık Prensibi: Apache’nin çalıştığı kullanıcının (genellikle www) yalnızca ihtiyaç duyduğu dosya ve dizinlere erişim izni olduğundan emin olun. DocumentRoot ve altındaki dosyalar doğru izinlere sahip olmalıdır (genellikle dosyalar için 644, dizinler için 755).
* Log Yönetimi: Apache loglarını düzenli olarak kontrol edin (/var/log/apache24/). Anormal aktivite belirtilerini izlemek, potansiyel saldırıları erken tespit etmenize yardımcı olabilir. Logları merkezi bir log yönetim sistemine (örneğin ELK Stack) göndermek faydalı olabilir.

Güvenlik Duvarı (PF) İnce Ayarları

PF, sunucunuzu daha da güçlendirmek için birçok gelişmiş özelliğe sahiptir:
* Rate Limiting: Belirli bir IP adresinden belirli bir porta gelen bağlantı sayısını sınırlayarak DoS saldırılarını hafifletebilirsiniz.

pass in on em0 proto tcp from any to any port { 80, 443 } keep state (max-src-conn 100, max-src-conn-rate 15/5, overload  flush global)

Bu kural, bir IP adresinden aynı anda 100’den fazla bağlantıya veya 5 saniyede 15’ten fazla bağlantıya izin vermez ve kötü niyetli IP’leri tablosuna ekler.
* Kara Listeleme (Blacklisting): Bilinen kötü niyetli IP adreslerini içeren bir tablo oluşturarak bu adreslerden gelen trafiği tamamen engelleyebilirsiniz.

table  persist file "/etc/pf.bad_ips"
    block in quick from  to any

/etc/pf.bad_ips dosyasını manuel olarak veya Fail2Ban gibi araçlarla güncelleyebilirsiniz.

Sistem Güncellemeleri

Apache, Certbot, Python ve FreeBSD işletim sisteminin kendisi de dahil olmak üzere tüm yazılımları güncel tutmak hayati öneme sahiptir. Yazılım geliştiricileri sürekli olarak güvenlik açıklarını yamalar ve performans iyileştirmeleri sunar.
* Paket Güncellemeleri: Düzenli olarak sudo pkg update && sudo pkg upgrade komutunu çalıştırarak kurulu tüm paketlerinizi güncelleyin.
* İşletim Sistemi Güncellemeleri: FreeBSD çekirdeği ve temel sistem bileşenleri için güncellemeleri sudo freebsd-update fetch install komutu ile uygulayın. Bu, sunucunuzun en son güvenlik yamalarına sahip olmasını sağlar.

Bu ek güvenlik önlemleri, web sunucunuzun genel güvenlik duruşunu önemli ölçüde güçlendirecek ve potansiyel tehditlere karşı daha dirençli hale getirecektir.

Sorun Giderme

Apache’yi Let’s Encrypt ile yapılandırırken bazı sorunlarla karşılaşmak olasıdır. İşte yaygın hatalar ve sorun giderme ipuçları:

Yaygın Hatalar

* Port Çakışmaları: Apache’nin 80 veya 443 numaralı portları dinleyememesi. Bu genellikle başka bir servisin (örneğin Nginx veya farklı bir web sunucusu) aynı portları kullanmaya çalışmasından kaynaklanır.
* sudo sockstat -4 -6 -l komutu ile hangi portların hangi uygulamalar tarafından dinlendiğini kontrol edebilirsiniz.
* Apache’nin Listen direktifinin httpd.conf dosyasında doğru yapılandırıldığından emin olun (Listen 80, Listen 443).
* Güvenlik Duvarı Engellemeleri: Güvenlik duvarınızın (PF, IPFW vb.) 80 ve 443 numaralı portlara gelen bağlantıları engellemesi.
* PF için /etc/pf.conf dosyasını kontrol edin ve pass in on proto tcp from any to any port { 80, 443 } gibi kuralların olduğundan emin olun. Değişikliklerden sonra sudo pfctl -f /etc/pf.conf komutunu çalıştırın.
* Geçici olarak güvenlik duvarını devre dışı bırakıp (test amaçlı) sorunun kaybolup kaybolmadığına bakabilirsiniz. (Üretim ortamında dikkatli olun!)
* DNS Sorunları: Alan adınızın sunucunuzun doğru IP adresine işaret etmemesi veya DNS yayılımının henüz tamamlanmamış olması. Let’s Encrypt doğrulama sırasında alan adınıza erişemezse sertifika veremez.
* dig example.com veya nslookup example.com komutlarını kullanarak alan adınızın doğru IP adresine çözümlenip çözümlenmediğini kontrol edin.
* ping example.com ile sunucunuza erişip erişemediğinizi kontrol edin.
* Apache Yapılandırma Hataları: Yanlış yazılmış direktifler, eksik modüller veya yanlış dosya yolları Apache’nin başlamasını engelleyebilir.
* sudo apachectl configtest komutu, Apache yapılandırma dosyalarındaki sözdizimi hatalarını kontrol eder ve ayrıntılı bir çıktı verir. Bu komutu her yapılandırma değişikliğinden sonra çalıştırmak önemlidir.
* Apache hata günlüklerini (/var/log/apache24/error.log) kontrol edin. Bu günlükler, Apache’nin neden başlamadığını veya belirli bir hata verdiğini anlamanıza yardımcı olabilir.
* Certbot Hataları: Certbot’un sertifika alamaması veya yapılandırma yapamaması.
* Certbot’un günlüklerini kontrol edin: /var/log/letsencrypt/. Bu günlükler, doğrulama başarısızlıkları veya diğer Certbot ile ilgili sorunlar hakkında ayrıntılı bilgi sağlar.
* Doğrulama yönteminizi (örneğin --webroot ile belirtilen DocumentRoot yolu) veya alan adı argümanlarınızı kontrol edin.

Yardım Kaynakları

Sorunları kendi başınıza çözemediğinizde, aşağıdaki kaynaklar size yardımcı olabilir:
* Certbot Dokümantasyonu: Certbot’un resmi web sitesi (certbot.eff.org) kapsamlı dokümantasyon ve sorun giderme kılavuzları sunar.
* Let’s Encrypt Forumları: Let’s Encrypt topluluğu oldukça aktiftir ve benzer sorunlarla karşılaşan birçok kullanıcıya yardımcı olunmuştur. Sorununuzu forumlarda aratabilir veya yeni bir konu açabilirsiniz.
* Apache Dokümantasyonu: Apache HTTP Sunucusu’nun resmi dokümantasyonu, yapılandırma direktifleri ve modüller hakkında derinlemesine bilgi sağlar.
* FreeBSD Forumları ve Mailing Listeleri: FreeBSD topluluğu, işletim sistemiyle ilgili sorunlar ve genel sunucu yapılandırması konusunda destek sağlayabilir.
* Stack Overflow ve Diğer Teknik Forumlar: Genel sorunlar için geniş bir bilgi tabanı sunar.

Sorun giderme sürecinde sabırlı olmak ve hata mesajlarını dikkatlice okumak önemlidir. Her hata mesajı, sorunun kökenine dair önemli ipuçları içerir.

Sonuç

Bu teknik makale boyunca, FreeBSD 12.0 işletim sistemi üzerinde Apache web sunucusunu Let’s Encrypt sertifikaları ile nasıl güvenli hale getireceğinizi adım adım inceledik. Modern web dünyasında HTTPS’nin vazgeçilmez bir standart haline geldiğini ve kullanıcı verilerinin korunması, site bütünlüğünün sağlanması ve arama motoru sıralamalarının iyileştirilmesi açısından kritik bir rol oynadığını vurguladık.

Süreç, Apache’nin temel kurulumu ve Virtual Host yapılandırması ile başladı. Ardından, Let’s Encrypt sertifikalarını otomatik olarak yönetmek için güçlü bir araç olan Certbot’u kurduk. Certbot’un Apache eklentisi sayesinde, sertifika alma ve web sunucusu yapılandırmasını büyük ölçüde otomatikleştirdik. Manuel yapılandırma adımlarını da ele alarak, SSL Virtual Host oluşturma ve HTTP trafiğini HTTPS’ye yönlendirme gibi kritik ayarları detaylandırdık. Özellikle, güçlü TLS protokolleri ve şifreleme süitleri kullanarak sunucunuzun güvenliğini artırma ve HSTS (HTTP Strict Transport Security) gibi modern güvenlik başlıklarını uygulama yöntemlerini gösterdik.

Let’s Encrypt sertifikalarının 90 günlük geçerlilik süresi nedeniyle, otomatik yenilemenin önemi üzerinde durduk ve bu süreci bir cron job ile nasıl otomatikleştireceğimizi anlattık. Bu, web sitenizin sürekli olarak güvenli ve erişilebilir kalmasını sağlamak için hayati bir adımdır. Ayrıca, Apache sunucu bilgilerini gizleme, dizin listelemesini kapatma, ModSecurity gibi web uygulama güvenlik duvarları kullanma, güvenlik duvarı (PF) ince ayarları ve düzenli sistem güncellemeleri gibi ek güvenlik önlemlerine de değindik. Son olarak, karşılaşılabilecek yaygın sorunları ve bu sorunları gidermek için kullanılabilecek kaynakları listeledik.

Apache’yi Let’s Encrypt ile güvenli hale getirmek, sadece teknik bir gereklilik değil, aynı zamanda kullanıcılarınıza duyduğunuz sorumluluğun ve modern web standartlarına uyumun bir göstergesidir. HTTPS, kullanıcıların sitenize olan güvenini artırır, veri gizliliğini sağlar ve arama motorları tarafından olumlu bir faktör olarak değerlendirilir. Bu rehberdeki adımları takip ederek, FreeBSD 12.0 sunucunuzda güvenli ve performanslı bir web ortamı oluşturabilir, kullanıcılarınıza güvenli bir deneyim sunabilirsiniz. Unutmayın, güvenlik sürekli bir süreçtir; bu nedenle düzenli güncellemeler ve güvenlik kontrolleri yapmaya devam etmek büyük önem taşımaktadı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

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.