spot_imgspot_img

Top 5 This Week

spot_img

Related Posts

Ev Sunucusu ile: 2026 Pratik Rehber

Ev Sunucusu ile Kendi Hosting Altyapınızı Kurun: WordPress, Mail Server ve DNS Yönetimi

İçinde WordPress, e‑posta ve DNS’i tek bir sunucuda barındırmak, veri kontrolünü elinize alır. Sunucu donanımı ve yazılımı kendi yönetin, yetkisiz erişimi azaltın.

Bu rehber, üç kritik bileşeni güvenli bir biçimde birleştirmeye odaklanır. Her adım, en az ayrıcalık, düzenli yedekleme ve izlenebilir loglamaya dayanır.

Veri gizliliği, maliyet düşüşü ve gerçek‑zaman izleme, ev sunucusunun ana avantajlarıdır. Bilgiyi elinizde tutmak, saldırı yüzeyini küçültür ve operasyonel özerkliği artırır.

Şimdi WordPress güvenlik ayarlarından Postfix/Dovecot kurulumuna ve BIND ile DNS yapılandırmasına adım adım geçelim. Her bölümde olası hataları ve geri alma yöntemlerini bulacaksınız.

Ev Sunucusu ile: Neden Önemli?

Bulut sağlayıcılarının otomatik güncellemeleri ve veri saklama politikaları, kontrolü sınırlayabilir. Ev sunucusunda güncellemeleri kendi hızınızda uygulayabilirsiniz.

WordPress, mail ve DNS aynı sunucuda çalışırsa tek bir açık tüm hizmetleri etkileyebilir. Yerel yapılandırma, açığı izole etmenize ve hızlı bir rollback planı oluşturmanıza imkan verir.

Veri kaybı, saldırı sonrası ortaya çıkabilir. Yedekleme prosedürleri tamamen sizin sorumluluğunuzdadır. Şifreli, sürüm kontrolü ile yerinde saklama, kayıp riskini azaltır.

Bulut maliyetleri yıllık abonelik ve veri transfer ücretleriyle artarken, ev sunucusunda sabit maliyetler bulunur. Enerji, ekipman ömrü ve bakım giderleri göz önünde bulundurulmalı.

Log toplama, anormallik tespitini hızlandırır. syslog, journald ve auditd ile tam izlenebilirlik sağlanır. Bu loglar denetimde kanıt olarak kullanılır.

Least privilege, kullanıcı ve servis hesapları için ayrı, en az ayrıcalıklı erişim seviyeleri belirler. Örneğin, WordPress veritabanı yalnızca okuma/yazma yetkisine sahip olmalı.

Rollback stratejileri, güncelleme hatalarında hızlı geri dönüş için kritiktir. Snapshot ve yedekleme araçları, 15 dakikalık kesintiden önceki duruma dönmeyi mümkün kılar.

Ek olarak, güvenlik açıklarını izlemek için OSSEC veya Wazuh gibi host‑based IDS’ler kurmak, saldırı anında uyarı almanızı sağlar. Bu araçlar, sistem çağrılarını, kullanıcı girişlerini ve dosya değişikliklerini anlık izler.

Gereksinimler

Gereksinimler

Kurulumdan önce donanım, yazılım ve ağ yapılandırmasını netleştirin.

Donanım

En az 4 çekirdekli CPU, 8 GB RAM, 500 GB SSD ve 1 TB HDD önerilir. UPS, ani kapanma riskini ortadan kaldırır.

Yeterli İdeal
CPU: 2 çekirdek, 2 GHz CPU: 4 çekirdek, 3 GHz
RAM: 4 GB RAM: 8 GB
Depolama: 256 GB SSD Depolama: 500 GB SSD + 1 TB HDD
UPS: 500 VA UPS: 1000 VA, 2 saat çalışma süresi

Yazılım

Ubuntu 24.04 LTS, Docker Engine, BIND9, Postfix, Dovecot, MySQL, PHP‑FPM ve Cert‑bot temel bileşenlerdir.

Örnek apt install:

sudo apt update
sudo apt install -y docker.io bind9 postfix dovecot-core dovecot-imapd dovecot-pop3d mysql-server php-fpm php-mysql certbot

Yöntem karşılaştırma tablosu: Docker vs. native paket yönetimi

Yöntem Avantajlar Dezavantajlar
Docker Hızlı kurulum, bağımsız konteynerler Ek kaynak tüketimi, snapshot yönetimi zor
Ağ Paketleri Düşük kaynak, yerel yönetim Yeniden kurulum zaman alıcı

Sabit IP, port yönlendirme ve DNS yapılandırması kritik. 80, 443, 25, 587, 143, 993 portlarını yönlendirin. BIND9 zone dosyası örneği:

$TTL 600
@ IN SOA ns1.example.com. admin.example.com. (
   2024040601 ; serial
   604800     ; refresh
   86400      ; retry
   2419200    ; expire
   604800 )   ; minimum

@ IN NS ns1.example.com.
@ IN A 203.0.113.10
ns1 IN A 203.0.113.10
www IN CNAME @
mail IN A 203.0.113.10

Rollback & Backup

Snapshot ile tüm sistem durumunu 15 dakika içinde geri döndürün. LVM veya Btrfs snapshotları kullanın. MySQL için mysqldump, WordPress dizini için rsync ile günlük yedek alın.

Risk ve rollback noktası tablosu:

Risk Rollback Noktası Geri Dönüş Yöntemi
WordPress Güncelleme Hatası WP-CLI ile wp core update öncesi wp db export Veritabanı yedeği geri yükle
Postfix Yapılandırma Değişikliği Configuration directory snapshot Snapshot’ı btrfs restore ile geri yükle
DNS Zone Güncelleme Zone dosyası snapshot İlk haliyle yeniden yükle
Sistemsel Güncelleme İlk snapshot Rollback için systemctl reboot ile snapshot’dan başla

En İyi Uygulamalar

  • Least privilege: Her servis kendi kullanıcı hesabıyla çalışmalı.
  • Loglama: journald, syslog-ng ve auditd ile tam izlenebilirlik.
  • SSL/TLS: Let’s Encrypt ile otomatik yenileme.
  • Port güvenliği: ufw ile sadece gerekli portları açın.

Uygulama Adımları

Uygulama Adımları

Ağ Yapılandırması

  • Sunucuya sabit IP atayın. Örneğin 203.0.113.10.
  • Yönlendiricide 80, 443, 25, 587, 143, 993 portlarını 203.0.113.10 IP’ine yönlendirin.
  • UFW ile sadece gerekli portları açın: ufw allow 80,443,25,587,143,993/tcp.
  • DNS için TTL’i 600 saniye altına düşürün; hızlı değişiklik için kritik.
  • Firewall’da ufw deny 22/tcp ile SSH’ye sadece yetkili IP’lerden erişim izni verin.

BIND9 DNS Kurulumu ve Zone Dosyası

  • apt-get install bind9 bind9utils bind9-doc
  • Zone dosyasını /etc/bind/db.example.com içinde oluşturun:
    $TTL 600
    @ IN SOA ns1.example.com. admin.example.com. (
        2024040601 ; serial
        604800 ; refresh
        86400 ; retry
        2419200 ; expire
        604800 ) ; minimum
    @ IN NS ns1.example.com.
    @ IN A 203.0.113.10
    ns1 IN A 203.0.113.10
    www IN CNAME @
    mail IN A 203.0.113.10
  • BIND’in /etc/bind/named.conf.local dosyasına zone’ı ekleyin:
    zone "example.com" IN {
        type master;
        file "/etc/bind/db.example.com";
    };
  • Servisi yeniden başlatın: systemctl restart bind9.
  • DNS sorgularını dig @203.0.113.10 mail.example.com ile test edin.

WordPress Kurulumu

  • MySQL kuruluysa veri tabanı oluşturun: mysql -u root -p -e "CREATE DATABASE wordpress; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'root_pass'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES;"
  • Web dizini /var/www/html olarak ayarlayın ve yetkileri sınırlandırın: chown -R www-data:www-data /var/www/html.
  • WP-CLI ile kurulumu tamamlayın:
    wp core download --path=/var/www/html
    wp config create --path=/var/www/html --dbname=wordpress --dbuser=wpuser --dbpass=root_pass --dbhost=localhost
    wp core install --path=/var/www/html --url="https://example.com" --title="Ev Sunucusu" --admin_user="admin" --admin_password="admin_pass" --admin_email="[email protected]"
  • Apache yapılandırma dosyası /etc/apache2/sites-available/ev-sunucu.conf:
    <VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
        Redirect permanent / https://example.com/
    </VirtualHost>
    
    <VirtualHost *:443>
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    </VirtualHost>
  • Site’i etkinleştirin: a2ensite ev-sunucu, systemctl reload apache2.
  • WordPress’in dosya izinlerini 644/755 olarak kurun: find /var/www/html -type d -exec chmod 755 {} \;, find /var/www/html -type f -exec chmod 644 {} \;.

E‑posta Sunucusu (Postfix + Dovecot)

  • Postfix kurun: apt-get install postfix. “Internet Site” seçin ve example.com girin.
  • Postfix yapılandırması /etc/postfix/main.cf:
myhostname = mail.example.com
mydestination = $myhostname, example.com, localhost.$mydomain, localhost
inet_interfaces = all
inet_protocols = all
myorigin = /etc/mailname
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_use_tls = yes
smtpd_tls_security_level = encrypt
smtpd_tls_auth_only = yes
smtpd_tls_ciphers = high
smtpd_tls_protocols = TLSv1.2, TLSv1.3
smtpd_tls_exclude_ciphers = ALL-EXP, RC4, DES, MD5, SHA1, SSLv2, SSLv3
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
  • Dovecot kurun: apt-get install dovecot-core dovecot-imapd dovecot-pop3d.
  • Dovecot yapılandırması /etc/dovecot/dovecot.conf:
  • protocols = imap pop3 lmtp
    ssl = required
    ssl_cert = 
    
  • Postfix ve Dovecot’ı yeniden başlatın: systemctl restart postfix dovecot.
  • SSL Entegrasyonu (Let’s Encrypt)

    • Certbot kurun: apt-get install certbot python3-certbot-apache python3-certbot-dovecot.
    • Doğrulama ve sertifika alımı:
      certbot certonly --apache -d example.com -d www.example.com -d mail.example.com
    • Postfix ve Dovecot dosyalarını otomatik yenileme için /etc/letsencrypt/renewal-hooks/deploy içinde script ekleyin:
      #!/bin/bash
      systemctl reload postfix
      systemctl reload dovecot
    • Sertifika süresini kontrol edin: certbot certificates.

    Sorun Giderme & Rollback

    DNS TTL Gecikmesi

    TTL değeri düşükse değişiklikler hemen uygulanmaz. Adım 1: /etc/hosts dosyasında geçici IP yönlendirme ekleyin. Adım 2: DNS sunucusunda TTL’i 60 saniyeye düşürün. Adım 3: dig @dns.example.com mail.example.com +trace ile kontrol edin. Adım 4: TTL’i 3600 saniyeye yükseltin.

    WordPress 500 Hatası

    500 hatası dosya izinleri eksikse veya tema hatası varsa ortaya çıkar. İzinleri kontrol edin: wp-content 755, dosyalar 644; wp-config.php 600. Adım 1: .htaccess dosyasını yedekleyin. Adım 2: WordPress’i varsayılan temaya geçin. Adım 3: eklenti sayısını sıfırla. Adım 4: php.ini’de memory_limiti artırın. Adım 5: logları /var/log/apache2/error.log’da inceleyin.

    Mail Sunucusu Port Çatışması

    Postfix ve Dovecot genelde 25, 143 ve 587 portlarını kullanır. Aynı port başka servis tarafından çalışıyorsa çatışma olur. Adım 1: netstat -tuln ile port kullanımını kontrol edin. Adım 2: Çakışan servisi durdurun: systemctl stop apache2. Adım 3: Postfix’i yeniden başlatın: systemctl restart postfix. Adım 4: Dovecot portunu /etc/dovecot/dovecot.conf’da 993’e taşıyın. Adım 5: SSL sertifikasını yeniden yükleyin.

    Yedek Alma ve Restore Adımları

    Adım 1: MySQL yedekleme: mysqldump -u root -p --all-databases > all.sql. Adım 2: Dosya sistem yedeği: rsync -avz /var/www/html /backup/html. Adım 3: Postfix ve Dovecot yapılandırmalarını /etc/backup/ dizinine kopyalayın.

    Restore için:

    1. MySQL yedeğini yükleyin: mysql -u root -p < all.sql.
    2. Dosya sistemini geri yükleyin: rsync -avz /backup/html /var/www/html.
    3. Postfix/Dovecot yapılandırmalarını geri taşıyın ve servisleri yeniden başlatın.
    4. SSL sertifikasını certbot ile yeniden başlatın: certbot renew --deploy-hook "systemctl reload postfix dovecot".

    Rollback Stratejisi

    Yedek alımı, değişiklik öncesi kritik. Her güncellemeden önce tam yedek alın. Gerekirse snapshot ile anlık geri dönüş yapılabilir. Rollback planı sürüm kontrol sisteminde saklanmalı.

    Sistemsel Güncelleme Sorunları

    Ubuntu 24.04 LTS’de apt upgrade sonrası kernel değişikliği, grub yapılandırmasını günceller. Sorun yaşarsanız, GRUB_TIMEOUT=0 ekleyerek doğrudan kök çekirdeğe atlayın. Yedek grub dosyası: cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak.

    Optimizasyon & En İyi Uygulamalar

    Dosya İzinleri ve SELinux / AppArmor

    Web kök dizini ve e‑posta klasörleri için 644 dosya, 755 klasör izinleri belirleyin. Sahipliği www-data kullanıcısına verin. SELinux aktifse httpd_can_network_connect ve httpd_enable_homedirs booleanlarını setsebool -P ile açın. AppArmor için /etc/apparmor.d/apache2 içinde /var/www/html/** r, ve owner izinlerini kontrol edin.

    Önbellekleme (Redis, Varnish)

    Redis’i yalnızca localhost üzerinden erişime açın (bind 127.0.0.1), requirepass ile şifreleme yapın ve save "" ile kalıcı saklama devre dışı bırakın. Varnish’i 80 portunda dinleyip, backend default { .host = "127.0.0.1"; .port = "8080"; } ile Apache’e yönlendirin. Cache-control başlıklarını Cache-Control: max-age=300, public olarak ayarlayarak 5 dakikalık önbellek süresi elde edin.

    Log Rotasyonu ve İzlenebilirlik

    Her servis için /etc/logrotate.d/ içinde günlük log dosyalarını 7 gün saklayın, sıkıştırın ve rotate 7 ile eski logları silin. logrotate çalıştırıldığında systemctl reload komutuyla servislere log yeniden açılmasını bildirin. syslog-ng ile merkezi log toplayıcıya yönlendirme ekleyerek izlenebilirliği artırın.

    Least Privilege Uygulaması

    Apache, Postfix, Dovecot ve Redis’i root değil, kendi kullanıcıları altında çalıştırın. sudoers dosyasında sadece gerekli komutlara izin verin: örn. www-data ALL=(ALL) NOPASSWD:/usr/sbin/apache2ctl. Dosya ve dizin erişimlerini chmod ile minimum seviyeye indirin; gereksiz 777 izinlerinden kaçının.

    Best‑Practice Kontrol Tablosu

    Alan Doğrulama
    Dosya İzinleri 644 / 755, www-data sahibi
    SELinux Booleanlar httpd_can_network_connect, httpd_enable_homedirs
    Redis Konfigürasyonu bind 127.0.0.1, requirepass, save ""
    Varnish Backend localhost:8080, Cache‑Control 300s
    Log Rotasyonu rotate 7, compress, postrotate reload
    Least Privilege Root olmayan kullanıcılar, sudoers NOPASSWD
    Günlük Log İzleme syslog-ng + SIEM entegrasyonu
    SSL Sertifikası Yenileme Certbot otomatik deploy hook
    Snapshot Otomasyonu crontab: 0 2 * * * btrfs subvolume snapshot / /srv/backup/root_$(date +%F)
    Veri Yedekleme mysqldump + rsync periyotluk
    Port Güvenliği ufw deny 22/tcp, izin verilen IP listesi
    Uygulama Güncelleme WP-CLI update önce yedek, rollback test
    Sunucu Güncelleme GRUB backup, kernel rollback

    Gerçek Örnekler

    Kişisel Blog ve Alt Domain

    WordPress’i blog.mydomain.com alt domainine kurarak ana web sunucusundan izole bir ortam yaratın. virtualhost dosyasında DocumentRoot /srv/blog ve ServerName blog.mydomain.com ayarlarını yapın. SSL için Let’s Encrypt sertifikası, postfix ve dovecot ile aynı subdomain üzerinden e‑posta gönderimini etkinleştirin. Logları /srv/blog/logs içine yönlendirin ve logrotate ile 30 gün saklayın.

    Küçük İşletme E‑Posta Çözümü

    İşletme alan adı company.com için mail.company.com subdomaini oluşturun. Postfix’in myhostname alanını bu subdomain olarak ayarlayın, smtpd_tls_security_level=may ile şifreli bağlantı zorunlu edin. Dovecot’da mail_location olarak maildir:/srv/mail/%d/%n yapılandırın. Kullanıcı dizinlerini 700 izinleriyle kısıtlayın, postfix ve dovecot servislerini ayrı kullanıcılar altında çalıştırın.

    Yedekleme Senaryosu (Snapshot + Backup)

    Sunucu snapshot’ı için btrfs subvolume snapshot / /srv/backup/root_$(date +%F) komutunu kullanın. Veri tabanı yedeklemesi için mysqldump --single-transaction --quick --lock-tables=false --databases wpdb > /srv/backup/db_$(date +%F).sql. Özel dosya yedekleri için rsync -avz /srv/blog/ /srv/backup/blog_$(date +%F)/. Snapshot ve dosya yedeklerini haftalık olarak cron üzerinden daily_backup.sh scriptiyle otomatikleştirin. Geri yükleme sırasında önce snapshot’ı btrfs restore, ardından mysqldump restore dosyasını mysql ile geri yükleyin.

    Sonuç

    Ev sunucusu kurmak, güvenlik, dayanıklılık ve performansın birleştiği bir ekosistem oluşturur. En az ayrıcalık ile servisleri çalıştırın; dosya izinlerini 700, kullanıcı dizinlerini 700 olarak ayarlayın. Günlük logları /srv/blog/logs konumuna yönlendirin ve logrotate ile 30‑günlük döngü sağlayın. Snapshot + mysqldump + rsync kombinasyonu ile haftalık cron otomasyonu oluşturun. TLS zorunlu olmalı, sertifika Let's Encrypt üzerinden otomatik yenilenmeli ve SMTP/IMAP için güvenli bağlantı tercih edilmeli.

    İleri adımlar için; Kurulum rehberi, Sorun giderme, Güvenlik notları ve WordPress Hardening belgelerini derinlemesine inceleyin. Monit veya Prometheus + Grafana ile servis izlenebilirliği ekleyin.

    Son kontrol listesi:

    • Postfix ve Dovecot ayrı kullanıcılarla çalışıyor mu?
    • MySQL yedeği günlük olarak alınıyor ve restore senaryosu test edildi mi?
    • Logrotates 30 gün saklanıyor, eski loglar arşivleniyor mu?
    • TLS sertifikası otomatik yenileniyor ve sertifika süresi kritik bir aşamaya gelmeden uyarı gönderiliyor mu?
    • Btrfs snapshot günlük otomasyonuyla saklanıyor ve restore adımları belgelendi mi?
    • Dosya izinleri ve grup/owner rolleri en az ayrıcalık ilkesine uygun mu?
    • Ana alarm ve e‑posta bildirimleri yapılandırıldı mı?
    • Yedek dosyaları güvenli bir harici ortamda saklanıyor mu?

    Bu adımları tamamladığınızda ev sunucusu ortamı güvenli, izlenebilir ve sürdürülebilir bir sistem haline gelir. Operasyonel disiplin ve düzenli kontrollerle kritik hizmetlerin sürekliliğini sağlar.

    CEVAP VER

    Lütfen yorumunuzu giriniz!
    Lütfen isminizi buraya giriniz

    Popular Articles