Apache HTTP Server'ı CentOS'a güvenli kurma


Yayın tarihi:

Güncelleme:


Teknik makaleler > Apache HTTP Server'ı CentOS'a güvenli kurma

2026 bağlamı ve güvenli kullanım

Sonuç: Desteklenen bir RHEL ailesi sunucuda paketlenmiş httpd sürümünü kurun. Reload öncesinde yapılandırmayı doğrulayın, yalnızca gerekli firewall servislerini açın ve SELinux'u kapatmak yerine doğru context ve boolean'ları kullanın.

Ne öğreneceksiniz

  • Paket kurulumu, systemd başlangıcı, yapılandırma doğrulaması ve ağ erişiminin birlikte nasıl çalıştığı.
  • Özel document root'ların dosya izinleri ve SELinux label'larıyla etkileşimi.
  • Aşağıdaki hangi CentOS 7 komutları geçmişe yöneliktir ve desteklenen platform eşdeğerini gerektirir.

Kimler için: Temel bir Apache HTTP Server kuran veya eski bir CentOS runbook'unu güncelleyen Linux yöneticileri.

2026 bağlamı: CentOS 7 desteği sona ermiştir. Orijinal kılavuz yalnızca tarihsel referans olarak korunmaktadır. Güncel RHEL ve Apache belgelerini izleyin, SELinux'u enforcing modunda tutun, gereksiz modülleri kapatın ve graceful reload öncesinde apachectl configtest çalıştırın.

Güvenlik notu: Orijinal makaledeki komutlar ve yapılandırma örnekleri mevcut üretim ortamında yeniden çalıştırılmamıştır. Desteklenen sürümleri, yedeklemeleri, erişim kontrollerini ve geri alma adımlarını uygulamadan önce ayrı bir test ortamında doğrulayın.

Başlıca resmî kaynaklar

Genel bakış

Bu tarihsel rehber, Apache HTTP Server 2.4.6'nın CentOS 7.6 üzerinde nasıl kurulduğunu ve o dönemde kullanılan yapılandırmayı belgeler. Güncel bir üretim baseline'ı değildir.

Örnekte kullanılan sürümler:

CentOS sürümü7.6 (1810)
Apache sürümü2.4.6

İçindekiler

  1. Kurulum ve ilk test
  2. Eski Apache yapılandırma adımları
  3. Özet

1. Kurulum ve ilk test

Bu bölümdeki komutlar tarihsel CentOS 7 ortamına özgüdür.

1-1. Apache HTTP Server kurulumu

Orijinal ortamda httpd paketi yum ile root hesabından kurulmuştu.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install httpd

1-2. HTTP başlangıcını doğrulama

Kurulumdan sonra tarihsel örnekte apachectl ile servis başlatılmış ve durum kontrol edilmiştir.

[root@hostname ~]# apachectl start
[root@hostname ~]# apachectl status
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-12-06 17:08:12 JST; 1s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1303 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           |-1303 /usr/sbin/httpd -DFOREGROUND
           |-1304 /usr/sbin/httpd -DFOREGROUND
           |-1305 /usr/sbin/httpd -DFOREGROUND
           |-1306 /usr/sbin/httpd -DFOREGROUND
           |-1307 /usr/sbin/httpd -DFOREGROUND
           `-1308 /usr/sbin/httpd -DFOREGROUND

Dec 06 17:08:11 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Dec 06 17:08:12 localhost.localdomain httpd[1303]: AH00558: httpd: Could not reliably determ...ge
Dec 06 17:08:12 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

apachectl status çıktısında “Active: active (running)” görülmesi httpd işleminin çalıştığını gösterir; yapılandırmanın ve dış erişimin doğru olduğunu tek başına kanıtlamaz.

Gerekli HTTP ve HTTPS servisleri firewalld içinde açılmıştır. Üretimde yalnızca gerçekten kullanılan servisleri ve güvenilir kaynakları açın; HTTPS yapılandırılmadan 443/tcp erişimi vermeyin.

[root@hostname ~]# firewall-cmd --permanent --add-service=http
[root@hostname ~]# firewall-cmd --permanent --add-service=https
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

services satırında http ve https değerlerini doğrulayın. Örnek ortamda tarayıcıdan http://192.168.50.10 adresine erişilmiştir. Aşağıdaki test sayfası web sunucusuna ulaşıldığını gösterir.

Apache üst ekranı

İlk test tamamlandıktan sonra sonraki yapılandırma adımları için servis durdurulmuştur.

[root@hostname ~]# apachectl stop

2. Eski Apache yapılandırma adımları

2-1. Log klasörü oluşturma

Örnekte Apache logları için /var/log/httpd dizini kullanılmıştır.

Dizin sahibi, grup ve izinler dağıtımın çalışan kullanıcı modeline göre belirlenmelidir. Logların yetkisiz kullanıcılarca değiştirilememesi ve SELinux label'larının korunması gerekir.

'mkdir /var/log/httpd' komutunun, aynı isimde bir dizin zaten oluşturulmuşsa çalıştırılmasına gerek yoktur.

[root@hostname ~]# mkdir /var/log/httpd
[root@hostname ~]# chmod 755 /var/log/httpd

Bu adım yalnızca dizini oluşturur; log hedefleri daha sonra Apache yapılandırmasında tanımlanır.

2-2. Alan adı ayarı

ServerName değeri httpd.conf içinde yapılandırılır. Değeri gerçek alan adı ve dinleme portuyla eşleştirin; yerel test ortamında kullanılacak adı da DNS veya hosts yapılandırmasıyla tutarlı seçin.

[root@hostname ~]# vi /etc/httpd/conf/httpd.conf

Yorum işaretini kaldırın ve ServerName değerini ortama göre ayarlayın.

httpd.conf【Değişimden önce】


#ServerName www.example.com:80

httpd.conf【değişiklikten sonra】


ServerName domainname:80

2-3. SSL modüllerinin ve yapılandırma dosyalarının etkinleştirilmesi

HTTPS erişimi için TLS modülünü etkinleştirin. Kimlik bilgileri veya kişisel veri taşıyan trafiği şifrelenmemiş HTTP üzerinden sunmayın.

Tarihsel örnek mod_ssl paketini yum ile kurar.

[root@hostname ~]# yum -y install mod_ssl

Paket kurulumu modülü etkinleştirir ve /etc/httpd/conf.d/ssl.conf dosyasını oluşturur. Sertifika yollarını ve güvenlik ayarlarını ortama göre gözden geçirin.

2-4. Günlük çıktı yolunu değiştirme

Apache günlük çıktı hedefini yeni oluşturduğunuz günlük dosyası çıktı klasörü olarak değiştirin. Sadece ssl yapılandırma dosyasını değiştirin, çünkü sonraki bir adımda sadece ssl (https) üzerinden erişilecek şekilde ayarlanacaktır.

[root@hostname ~]# vi /etc/httpd/conf.d/ssl.conf


ssl.conf【Değişimden önce】


ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

~KISALTMA~

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


ssl.conf【değişiklikten sonra】


ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log

~KISALTMA~

CustomLog /var/log/httpd/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Yukarıdaki değişiklik günlük çıktı hedefini "/var/log/httpd" altına değiştirir.


'%t, %h', vb., bu günlük biçimlendirme ayarıdır. Aşağıda referans için sıkça kullanılabilecek formatların bir listesi bulunmaktadır.

Referans

• %T: Talebi işlemek için geçen süre (saniye)

• %h: İstemcinin ana bilgisayar adı veya IP adresi. Yalnızca HostnameLookups öğesi On olarak ayarlanmışsa ana bilgisayar adlarını çözümlemeye çalışın

• %r: Talebin ilk satırı

• %b: Yanıtın bayt sayısı (HTTP üstbilgileri hariç). CLF formatı, yani - baytların hiçbiri gönderilmezse

• %D: İsteği işlemek için geçen süre (mikrosaniye)

• %>s: HTTP Durumu

2-5. SSL sertifikalarının oluşturulması

Sertifika oluşturma prosedürü. Özel operasyonlar için kendi kendine belgelendirme uygundur. Halka açık sunucular için, kendi kendine sertifikasyon önerilmemelidir.

Self-signed sertifika şifreleme sağlayabilse de güven zinciri sunmaz; istemci sunucunun kimliğini güvenilir bir sertifika otoritesi üzerinden doğrulayamaz. Bu nedenle public sunucularda güvenilir bir CA tarafından düzenlenen ve alan adıyla eşleşen sertifika kullanın. Self-signed sertifikayı yalnızca kontrollü iç testlerde, fingerprint'i ayrı bir kanaldan doğrulayarak değerlendirin.

Apache için varsayılan sertifika ayarları "/etc/pki/tls/certs/localhost.crt" ve "/etc/pki/tls/private/localhost.key" şeklindedir.

Ayarlar "/etc/httpd/conf.d/ssl.conf" içindeki "SSLCertificateFile" ve "SSLCertificateKeyFile" içinde bulunabilir.


(Kendi kendine belgelendirme için)

Öz sertifika oluşturmak için aşağıdaki komutu çalıştırın. Kök kullanıcı olarak çalıştırın.

'openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.crt' komutunu çalıştırdığınızda sizden birkaç kez yanıt isteyecektir, hepsi Enter ile, sorun yok. Bu, sertifikayı kimin verdiğine ilişkin bilgiler olacaktır (örneğin, hangi ülkede yaşadıkları ve e-posta adreslerinin ne olduğu). Normal bir sertifika düzenliyorsanız, doğru bilgileri girin ve ayarlayın.

[root@hostname ~]# openssl genrsa > /etc/pki/tls/private/localhost.key
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.csr
[root@hostname ~]# openssl x509 -req -signkey /etc/pki/tls/private/localhost.key < /etc/pki/tls/certs/localhost.csr > /etc/pki/tls/certs/localhost.crt

(Normal sertifikalar için)

Normal bir sertifika oluşturmak için aşağıdaki komutu çalıştırın. Kök kullanıcı olarak çalıştırın.

[root@hostname ~]# openssl genrsa -out /etc/pki/tls/private/localhost.key 2048
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.csr

Normal sertifikalar için bu işlemin tamamlanması yeterli değildir. Çalışma, oluşturulan 'server.csr' dosyasını bir sunucu sertifikası düzenlenmesi için Sertifika Yetkilisine teslim etmeyi ve düzenlenen sunucu sertifikasını yüklemeyi içerir.

2-6. HTTP'den HTTPS'ye yönlendirme

HTTP isteğini HTTPS'ye yönlendirmek için tarihsel örnekte mod_rewrite kuralı eklenmiştir.

Yönlendirme kuralını proxy ve host header mimarisiyle birlikte test edin; güvenilmeyen Host değerini doğrulamadan redirect hedefinde kullanmak risk oluşturabilir. Aşağıdaki eski adımlar root hesabıyla uygulanmıştır.

[root@hostname ~]# vi /etc/httpd/conf/httpd.conf

Sonuna aşağıdakileri ekleyin.

httpd.conf


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

Bu ayarı http ile gelen erişimlerin https ile işlenmesini sağlayacak şekilde değiştirmek mümkündür.

Eğer https üzerinden gelirseniz bu ayarın çalışmadığı belirtiliyor. (RewriteCond %{HTTPS} off)

Bu ayar olmadan https erişimlerinin de yönlendirileceğini ve sonsuz bir döngüye neden olacağını belirtmeyi unutmayın.

2-7. HTTPS erişimini doğrulama

Yapılandırmayı kontrol ettikten sonra servisi başlatın ve HTTPS erişimini doğrulayın.

[root@hostname ~]# apachectl start

Örnek ortamda http://192.168.50.10 adresine erişilir.

Yönlendirme doğru çalışıyorsa tarayıcı https://192.168.50.10 adresine geçer. Sertifikanın alan adı, güven zinciri ve geçerlilik süresini ayrıca doğrulayın.

Artık başarıyla başlatıldığına göre Apache'yi durdurun.

[root@hostname ~]# apachectl stop

2-8. Otomatik başlatma ayarı

Aşağıdaki adımlar, CentOS 7 döneminde özel bir apache.service dosyası oluşturulan tarihsel örnektir. Güncel paketler genellikle hazır httpd.service unit'i sağlar; yeni bir unit oluşturmadan önce dağıtımın sağladığı servisi kullanın.

Bir 'apache.service' dosyası oluşturun ve gerekli ayarları tanımlayın.

[root@hostname ~]# touch /etc/systemd/system/apache.service
[root@hostname ~]# vi /etc/systemd/system/apache.service

Aşağıdaki bilgiler verilmiştir.

[Unit]
#Açıklama.
Description=Apache
#Yürütme öncesi ve sonrası kontrol.
#Before=xxx.service
#After=xxx.service

[Service]
#Kullanıcı ve grup tanımlama
User=root
Group=root
#Etkinleştirildikten sonra durumu Etkinleştirildi olarak ayarlayın.
Type=oneshot
RemainAfterExit=yes
#Başlat, durdur ve yeniden yükle.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart

[Install]
#Çalışma seviyesi 3 eşdeğer ayarları.
WantedBy=multi-user.target

Tanımlamayı bitirdiğinizde, systemctl komutu ile kaydedin.

[root@hostname ~]# systemctl enable apache
[root@hostname ~]# systemctl is-enabled apache
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep apache
apache.service                                enabled
[root@hostname ~]# systemctl daemon-reload


3. Özet

Bu sayfa CentOS 7 dönemindeki Apache kurulumunu belgeler. Güncel üretim sisteminde desteklenen paketleri ve resmî systemd unit'ini kullanın; configtest, firewall, SELinux, güvenilir TLS sertifikası, log izinleri ve rollback planını birlikte doğrulayın.