Linux

Cpanel Web Sunucusunda Otomatik SSL Sertifikası Alma ve Apache VirtualHost Yapılandırması

Bu makalede, bir web sunucusunda Let’s Encrypt üzerinden SSL sertifikası almayı ve Apache web sunucusunda ilgili domain için bir VirtualHost yapılandırması yapmayı sağlayan bir Bash scriptinin kullanımını adım adım inceleyeceğiz. Bu script, yeni domain eklemek, SSL sertifikası almak ve VirtualHost yapılandırmasını oluşturmak gibi adımları otomatik hale getirir.

Cpanel sunucusun da çalışan bir projeye dışarıdan yönlendirilen alan adı için cpanel de account oluşturmadan projeyi çalıştırmak ve ssl sertifikası almak için aşağıdaki adımların yapılması gerekir.

1. Bash Scriptinin İşlevi

Yukarıdaki script, yeni eklenen alan adları için SSL sertifikası almayı ve bu alan adlarını Apache VirtualHost yapılandırmalarına ekleyip etkinleştirmeyi amaçlar. Ayrıca Apache sunucusunu her işlemden sonra yeniden başlatır.

2. Scriptin Çalışma Adımları

a. Alan Adı Listesini Okuma

Script, /etc/domains.txt dosyasından alan adlarını okur. Her satırda bir alan adı olacak şekilde bu dosyada bulunan domain’ler işlenir:

DOMAINS_FILE="/etc/domains.txt"

b. Log Dosyası Belirleme

Sertifika alma ve VirtualHost yapılandırma işlemleri sırasında oluşabilecek hataları kaydetmek için bir log dosyası tanımlanmıştır:

LOG_FILE="/var/log/certbot-auto.log"

c. Certbot Kullanarak SSL Sertifikası Alma

Her bir domain için Let’s Encrypt üzerinden bir SSL sertifikası almak için certbot komutu kullanılır. Daha önce alınmış bir sertifika olup olmadığını kontrol eder ve eğer yoksa sertifika alır:

CERTBOT_CMD="/usr/bin/certbot"
if $CERTBOT_CMD certificates | grep -q "$DOMAIN"; then
echo "$(date) - $DOMAIN için zaten bir SSL sertifikası mevcut." >> "$LOG_FILE"
else
echo "$(date) - $DOMAIN için SSL sertifikası alınıyor..." >> "$LOG_FILE"
$CERTBOT_CMD certonly --webroot -w "$WEBROOT_PATH" -d "$DOMAIN" -d "www.$DOMAIN" --non-interactive --agree-tos --email "$EMAIL" >> "$LOG_FILE" 2>&1
fi

d. Apache VirtualHost Yapılandırması

Script, her domain için ayrı bir VirtualHost yapılandırma dosyası oluşturur ve hem HTTP hem de HTTPS bağlantılarını destekleyecek şekilde yapılandırır. 80 numaralı portta gelen HTTP istekleri, 443 numaralı HTTPS portuna yönlendirilir:

conf_file="${apache_available}/${DOMAIN}.conf"
cat <<EOL > "$conf_file"
<VirtualHost 192.168.100.100:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot $WEBROOT_PATH
ServerAdmin root@sv1.server.com

# HTTP'den HTTPS'e yönlendirme
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]</VirtualHost>

<VirtualHost 192.168.100.100:443>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot $WEBROOT_PATH
ServerAdmin root@sv1.server.com

# SSL Ayarları
SSLEngine on
SSLCertificateFile $ssl_dir/$DOMAIN/fullchain.pem
SSLCertificateKeyFile $ssl_dir/$DOMAIN/privkey.pem
</VirtualHost>
EOL

e. Apache Yapılandırmasının Etkinleştirilmesi

Apache’de yeni oluşturulan her VirtualHost yapılandırması, a2ensite komutu kullanılarak etkinleştirilir ve sonrasında Apache yeniden başlatılır:

sudo a2ensite "${DOMAIN}.conf"
sudo systemctl restart httpd

3. Scriptin Kurulumu ve Çalıştırılması

Scriptin çalıştırılabilmesi için aşağıdaki adımları izleyebilirsiniz:

a. Script Dosyasını Oluşturma

Öncelikle, scriptin bulunduğu dizinde bir dosya oluşturun ve bu dosyaya yukarıdaki scripti yapıştırın. Örneğin, scripti /usr/local/bin altına kaydedelim:

sudo nano /usr/local/bin/auto_ssl.sh

Scripti dosyanın içine yapıştırdıktan sonra kaydedin.

b. Çalıştırılabilir İzinleri Verme

Scripti çalıştırılabilir hale getirmek için aşağıdaki komutu kullanın:

sudo chmod +x /usr/local/bin/auto_ssl.sh

c. Scripti Çalıştırma

Scripti çalıştırmak için aşağıdaki komutu kullanabilirsiniz:

sudo /usr/local/bin/auto_ssl.sh

Bu komut, domains.txt dosyasındaki tüm alan adları için SSL sertifikası alacak ve Apache yapılandırmalarını yapacaktır.

4. Crontab ile Zamanlanmış Görev Olarak Ayarlama

Bu scripti her 6 saatte bir otomatik olarak çalıştırmak istiyorsanız, bir crontab görevi ekleyebilirsiniz. Terminalde aşağıdaki komutu çalıştırarak crontab’ı düzenleyin:

sudo crontab -e

Aşağıdaki satırı ekleyerek scriptin her 6 saatte bir çalışmasını sağlayın:

0 */6 * * * /bin/bash /usr/local/bin/auto_ssl.sh >> /var/log/server.log 2>&1

Apache’nin Erişeceği Dosya ve Dizinlere Ekstra İzin Verme (ACL Kullanarak)

Eğer Apache’nin belirli dizinlere erişim sağlamasını istiyor, fakat dizini 750 izni ile tutmak istiyorsanız, ACL (Access Control Lists) kullanarak Apache’ye ekstra izin verebilirsiniz.

  1. ACL desteğinin etkin olup olmadığını kontrol edin mount | grep acl Eğer etkin değilse, /etc/fstab dosyasına eklemeniz gerekebilir.
  2. ACL kullanarak user dizinini Apache kullanıcısına açın: setfacl -m u:nobody:rx /home/user/public_html Eğer Apache kullanıcısı apache ise: setfacl -m u:apache:rx /home/user/public_html Bu komutla Apache’ye okuma ve çalıştırma izni vermiş olursunuz.
  3. Apache’yi yeniden başlatın: systemctl restart httpd

5. Sonuç

Bu makalede, bir web sunucusunda Let’s Encrypt sertifikalarını almak ve Apache VirtualHost yapılandırmalarını otomatik hale getirmek için oluşturulan bir Bash scriptini detaylı olarak inceledik. Bu script, sunucunuzdaki işlemleri kolaylaştırarak alan adlarının hızlı bir şekilde eklenmesini ve güvenli hale getirilmesini sağlar.

Eğer sorunlarla karşılaşırsanız, Apache hata loglarını inceleyebilir veya Let’s Encrypt log dosyasına bakarak daha fazla bilgi edinebilirsiniz:

sudo tail -f /var/log/httpd/error_log
sudo tail -f /var/log/certbot-auto.log


Full bash script hali için tıklayınız.

Muhammed Kerim Koç

1996 yılında Giresun Şebinkarahisarda dünyaya geldim. İlk ve orta öğretimi Şebinkarahisarda tamamladım. Liseyi Şebinkarahisar Anadolu Teknik ve Endüstri Meslek Lisesinde bitirdim. Üniversite için de Şebinkarahisar Teknik Bilimler Meslek Yüksek Okulunda Bilgisayar programcılığını okudum. Üniversite stajı için gelmiş olduğum özel bir firmada işe başladım. 5,5 yıl bu firmadan çalıştıktan sonra farklı bir sektör olan inşaat sektöründe Bilgi teknolojileri Uzmanı olarak 8 ay çalıştım. Daha sonra özel bir şirkette Sistem Network Sorumlusu olarak 4 ay çalıştıktan sonra proje sonlandırılmasından dolayı işten ayrıldım. Tekrar dan 5.5 yıl çalışmış olduğum firmaya Sistem ve Network Yöneticisi olarak geri döndüm ve çalışmaya başladım. Kendimi geliştirmek için Bilge Adam Akademi den Sistem Uzmanlığı eğitimi aldım. Sanallaştırma ve Ağ tarafında kendimi sürekli olarak geliştiriyorum.

İlgili Makaleler

Başa dön tuşu