Apache etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Apache etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

XAMPP Sunucu Konfigürasyonu (MySql+Apache+Php)

XAMPP sunucusu konfigürasyonunu kontrol panelden yaparken ini dosyasına yazma yetki sorunu ile karşılaşabilirsiniz.

XAMPP server error xampp-control.ini Access is denied

Bu hatayı açmak için kurduğunuz xampp klasörü içinde xampp-control.exe üzerine sağ klik yapıp Properties alanına girin, burada Compatibility sekmesine tıklayın. En altta Run this program as an administrator seçeneğini seçin ve Apply butonuna tıklayın. Windows artık konfigürasyon kaydederken, servis oluştururken veya startup'da servisleri başlatmak için yapılan konfigürasyonları sorunsuz yazacaktır ve bu özellikler kullanılabilir olur. 

Aşağıdaki videoda Windows 10 Xampp kurulumu ve ayarların nasıl  yapılacağı anlatılmaktadır.




Apache Sunucusu için SSL Nasıl Oluşturulur

 Apache web sunucusu için SSL sertifikasını aşağıdaki gibi oluşturabilirsiniz. Bu sertifikayı oluşturmak için OpenSSL kullanacağız. Https ile güvenli siteler yapmak için günümüzde mutlaka bu SSL sertifikasını oluşturmalı ve kullanmalısınız. Biz oluşturma işlemini XAMPP server için yapacağız, sizde XAMPP kullanmıyorsanız kendinize göre komutları uyarlayabilirsiniz. İlk olarak Apache bin klasörüne gidilir.

cd /E E:\xampp\apache\bin

Bazı parametreleri set edelim

set OPENSSL_CONF=E:\xampp\apache\conf\openssl.cnf

set RANDFILE=C:\Temp\.rnd

RSA private key Oluşturma

openssl genrsa -out server.key 1024

2048 şifreleme kullanabilirsiniz, sadece komutun sonundaki değeri değiştirmeniz yeterlidir. DS3 ile şifrelemek isterseniz aşağıdaki komutu kullanın.

openssl genrsa -des3 -out server.key 1024

Bu opsiyon size bir şifre soracaktır, uygun bir şifre ile şifreleyin.

CSR (Certificate Sign Request ) Oluşturma

openssl req -nodes -new -key server.key -out server.csr

Bu komutu girdikten sonra çıkan aşağıdaki alanları doldurun.

Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Istanbul
Locality Name (eg, city) []:Istanbul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Şirket Adı
Organizational Unit Name (eg, section) []:Bölüm
Common Name (e.g. server FQDN or YOUR name) []:Domain
Email Address []:eporta adresi
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Domain

Burada dikkat edilmesi gereken "An optional company name" alanınında doldurulmasıdır. Bu alanı doldurmazsanız bazı browser'lar da hata alınabilir. Apache\bin klasöründe oluşacak server.csr isimli CSR dosyasını kullanabilirsiniz.

CSR dosya içeriği nasıl kontrol edilir.

openssl req -in E:\XAMPP\apache\bin\server.csr server -noout -text

Tek Satırda KEY ve CSR Dosyası Oluşturma

İlk olarak bir openssl-san.cfg dosyası oluşturmamız gerekiyor. Dosya içeriği aşağıdaki gibi olmalı.

${URL_ADRESS}=domain adıdır.

------------------------------------

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = TR
ST = IS
L = Istanbul
O = Sirket
OU = Bolum
CN = ${URL_ADRESS}
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${URL_ADRESS}
DNS.2 = ${URL_ADRESS}.uzantısı
------------------------------------

Dosyayı openssl komutunu yazacağımız alana kopyalamalıyız. Açağıdaki komut ile Key ve CSR dosyalarını yukarıdaki konfigürasyona göre oluşturmuş oluruz.

openssl req -new -newkey rsa:2048 -nodes -out ${URL_ADRESS}.csr -keyout ${URL_ADRESS}.key -config openssl-san.cfg

Aşağıdaki komut ile içeriğini kontrol edebiliriz. 

openssl req -in dosya.csr server -noout -text

Kontrollerde bir sorun yoksa dosya.csr isimli dosyayı SSL alacağınız kişi veya kuruma gönderebilirsiniz. Kendiniz sertifika oluşturacaksanız yazının devamını takip ediniz.

Sertifika Oluşturma

Aşağıdaki komutu kullanarak sertifika oluşturabilirsiniz.

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Tek Adımda Sertifika Oluşturma:Opsiyonel

openssl req -nodes -new -x509 -keyout server.key -out server.crt

Sertifikayı uygulama

Apache Http.conf dosyasına aşağıdaki bölümü ekleyebilirsiniz.

<VirtualHost *:443>
     DocumentRoot E:/XAMPP/htdocs/
     ServerName Domain
     ServerAlias *.Domain
SSLEngine On
SSLCertificateFile "conf/ssl.crt/server.cer"
SSLCertificateKeyFile "conf/ssl.crt/server.key"
</VirtualHost>

yada aşağıdaki komut ile ekleyebilirsiniz. Dikkat etmeniz gereken konu konfigürasyondaki directory yeni oluşturduğunuz dosyaların yeri olmalıdır.

copy /Y server.crt e:\xampp\apache\conf\ssl.crt

copy /Y server.key e:\xampp\apache\conf\ssl.key

Apache sunucusunu yeniden başlatın.

SSL çalışır durumda.


Kaynak : https://benohead.com/blog/2014/05/07/generating-new-certificate-xampp-windows/

https://helpcenter.gsx.com/hc/en-us/articles/207831828-How-to-identify-the-Cipher-used-by-an-HTTPS-Connection

https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-

Apache Sunucu Güvenliği

Apache sunucusunun güvenliği için aşağıdaki adımları takip etmek önemlidir:

  1. Güncel Tutun: Apache sunucunuzu ve kullanılan diğer yazılımları (PHP, MySQL vb.) güncel tutun. Güncellemeler, güvenlik açıklarını düzeltir ve saldırılardan korunmanıza yardımcı olur.
  2. Güvenlik Duvarı (Firewall): Sunucunuzda güvenlik duvarı kullanın ve yalnızca gerekli portlara izin verin. Güvenlik duvarı, zararlı trafikleri engeller ve saldırılardan korur.
  3. DoS ve DDoS Saldırılarına Karşı Koruma: Apache sunucusunun DoS (Hizmet Reddi) ve DDoS (Dağıtık Hizmet Reddi) saldırılarına karşı dayanıklı olmasını sağlayın. Yüksek trafikli saldırılara karşı önlem almak için uygulamalar ve servisler kullanın.
  4. SSL Sertifikası: Web sitesini HTTPS protokolüyle çalıştırmak için SSL sertifikası kullanın. SSL, veri iletimini şifreleyerek güvenliği artırır ve kullanıcı bilgilerini korur.
  5. Güçlü Parolalar ve Erişim Kontrolleri: Sunucu, yönetici paneli ve veritabanları için güçlü parolalar kullanın. Ayrıca, erişim kontrolleriyle sadece yetkilendirilmiş kişilerin sunucuya erişmesini sağlayın.
  6. İzin Ayarları: Dosya ve klasör izinlerini uygun şekilde yapılandırın. İzinlerin gereksiz yere açık olması güvenlik açıklarına neden olabilir.
  7. Giriş Logları: Apache sunucusunun giriş loglarını düzenli olarak inceleyin. Bu loglar, olası saldırıları ve güvenlik ihlallerini tespit etmenize yardımcı olabilir.
  8. IP Engelleme: Tehdit oluşturan IP adreslerini engellemek için güvenlik duvarında IP engelleme (IP blocking) kullanın.
  9. HTTP Başlık Güvenliği: HTTP başlık güvenliği önlemleri alın. Örneğin, HTTP başlıklarında sunucu ve teknoloji bilgisi vermeyin.
  10. Kendi Kendini İmha Eden Dosyalar: Özellikle yükleme dosyaları gibi geçici dosyaların sunucuda kalmasını önleyin.

Bu adımlar, Apache sunucunuzun güvenliğini artırmaya yardımcı olacaktır. Ancak, güvenlik sürekli bir çabadır ve düzenli olarak sunucu güvenlik testleri ve denetimleri yapmak önemlidir. Ayrıca, güvenlik uzmanlarından danışmanlık almak ve güvenlik en iyi uygulamalarını takip etmek de önemlidir.

 Apache sunucu güvenliği için bazı bilgileri kullanıcılardan saklamata fayda vardır. Bunun için ilk olarak .haccess dosyası oluşturarak işe başlamak gerekir. Bu dosya ile birçok güvenlik önlemini alabilirsiniz.

.htaccess dosyasını / dizininde oluşturunuz. Dosya içeriği;

IndexIgnore *
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html
ErrorDocument 502 /error.html
ErrorDocument 503 /error.html
ErrorDocument 504 /error.html

PHP uzantısını silmek için
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

HTML uzantısını silmek için
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

Link sonundaki / işaretini silmek için
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

Şeklinde olabilir.

Apache Mod Security Yükleme

İlk olarak aşağıdaki linklerden dosya indirilir.

https://www.apachehaus.com/cgi-bin/download.plx

veya

https://www.apachelounge.com/download/

Daha sonra zip dosyası açılır. Dosya içindeki dosya mod_security2.so apache\modules klasörüne kopyalanır.

yajl.dll dosyası apache\bin klasörüne kopyalanır. Aşağıdaki satır http.conf dosyasına eklenir.

LoadModule security2_module modules/mod_security2.so
<IfModule security2_module>
    SecRuleEngine on
    ServerTokens Min
    SecServerSignature " "
</IfModule> 

Server yeniden başlatılır.

Bu modul için diğer seçenekler;

<IfModule mod_security.c>
    # Turn the filtering engine On or Off
    SecFilterEngine On
    # The audit engine works independently and
    # can be turned On of Off on the per-server or
    # on the per-directory basis
    SecAuditEngine RelevantOnly
    # Make sure that URL encoding is valid
    SecFilterCheckURLEncoding On
    # Unicode encoding check
    SecFilterCheckUnicodeEncoding On
    # Only allow bytes from this range
    SecFilterForceByteRange 1 255
    # Cookie format checks.
    SecFilterCheckCookieFormat On
    # The name of the audit log file
    SecAuditLog logs/audit_log
    # Should mod_security inspect POST payloads
    SecFilterScanPOST On
    # Default action set
    SecFilterDefaultAction "deny,log,status:406"
    # Simple example filter
    # SecFilter 111
    # Prevent path traversal (..) attacks
    # SecFilter "\.\./"
    # Weaker XSS protection but allows common HTML tags
    # SecFilter "<( |\n)*script"
    # Prevent XSS atacks (HTML/Javascript injection)
    # SecFilter "<(.|\n)+>"
    # Very crude filters to prevent SQL injection attacks
    # SecFilter "delete[[:space:]]+from"
    # SecFilter "insert[[:space:]]+into"
    # SecFilter "select.+from"
    # Require HTTP_USER_AGENT and HTTP_HOST headers
    SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"
    # Only accept request encodings we know how to handle
    # we exclude GET requests from this because some (automated)
    # clients supply "text/html" as Content-Type
    SecFilterSelective REQUEST_METHOD "!^GET$" chain
    SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)"
    # Require Content-Length to be provided with
    # every POST request
    SecFilterSelective REQUEST_METHOD "^POST$" chain
    SecFilterSelective HTTP_Content-Length "^$"
    # Don't accept transfer encodings we know we don't handle
    # (and you don't need it anyway)
    SecFilterSelective HTTP_Transfer-Encoding "!^$"
</IfModule>

Http bağlantısını Https bağlantısına yönlendirme

Kullanıcıların kesinlikle 80 portundan sunucunuza gelememesi gereklidir. 80 portu güvenli olmadığı için aşağıdaki önlem alınabilir.

<VirtualHost *:80>
     ServerName adres.com
     ServerAlias *.adres.com
Redirect permanent / https://adres.com/
</VirtualHost>

<IfModule rewrite_module>
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,QSA]
</IfModule>


XAMPP Sunucusu OpenSSL Yazılımı Nasıl Upgrade Edilir

 OpenSSL yazılımınızın güncel olması güvenlik açısından çok önemlidir. Yeni yazılım çıktığında vakit kaybetmeden OpenSSL yazılımınızı güncellemelisiniz. XAMPP server üzerinde bu yazılımı güncellemek için sadece üç dosyayı güncellemeniz yeterlidir. OpenSSL yazılımının tüm dosyalarına;

https://wiki.openssl.org/index.php/Binaries

Adresinden erişebilirsiniz. Bu adreste bulunan linklerde farklı kaynaklardan dosyaları temin edebilirsiniz. XAMPP için en doğru kaynak;

http://wiki.overbyte.eu/wiki/index.php/ICS_Download

Adresidir Bu sayfanın download bölümünde uygun linki bulup dosyayı indirin. Dosya içinde bulunan;

  • libcrypto-1_1-x64.dll
  • libssl-1_1-x64.dll
  • openssl.exe

İsimli dosyaları Apache2 servisini durdurduktan sonra XAMPP\apache\bin klaörüne kopyalayıp servisi yeniden açmanız yeterlidir. XAMPP\apache\bin klasöründeki eski dosyaları işlemden önce yedeklemenizi öneririz.

Apache PDO Oracle Bağlantısı

Bu bağlantı için ilk olarak oracle driver'ına sahip olmalısınız. Aşağıdaki kod ile hangi PDO driverlarına sahip olduğunuzu kontrol edebilirsiniz.

<?php

foreach(PDO::getAvailableDrivers() as $driver)

    echo $driver, '\n';

?>

Apache Yazılım Upgrade (XAMMP)

 XAMMP sunucusu içinde bulunan apache yazılımını upgrade etmek için ilk olarak apache yazılımının yeni sürmünü aşağıdaki adresten indirmelisiniz. Apache'nin birçok sürümü var Xammp sunucusu için en uygun sürüm bu linkte bulunan sürümdür.

https://www.apachelounge.com/download/ 

Sürümü indirdikten sonra apache servisini durdurun. Eski apache klasörünün adını değiştirin, sakın silmeyin. İndirdiğiniz apache klasörünü açın ve içindeki apache klasörünü çıkartıp eski klasör yerine aynı ad ile koyun.Klasör ismi/bin şeklinde olmalı. sonra config klasörü içindeki konfigürasyonu yeni klasöre geçirin. Son olarakta yüklediğiniz modüller varsa o modül dosyalarını yeni klasöre aktarın ve servisi başlatın.

Apache Active Directory NTLM Kimlik Doğrulama

 Apache web sunucusu ile Active Directory hesaplarından NTLM Kimlik Doğrulamasının nasıl yapılacağını inceleyeceğiz. Domainde bir Apache sunucunuz varsa domain kullanıcılarının kendi şifreleri ile local intranet sayfanıza erişmelerini istiyorsanız aşağıdaki gibi kurulumu yapabilirsiniz.

İlk olarak mod_authn_ntlm.so modülünü internetten indirin fakat dikkat edilmesi gereken bir durum var. Apache sunucunuz 32bit veya 64bit olabilir, bunu kontrol edip uygun versiyonu indirmelisiniz. Daha sonra indirdiğiniz dosyayı Apache/modules klasörüne kopyalayın.

Httpd.conf dosyasının içersine aşağıdaki satırı ekleyin.

LoadModule auth_ntlm_module modules/mod_authn_ntlm.so

Aşağıdaki iki modülün aktif olduğundan emin olun. (Satır önünde # olmamalı)

LoadModule ldap_module modules/mod_ldap.so

LoadModule rewrite_module modules/mod_rewrite.so

Aşağıdaki satırları da ekleyin. Web root'da /authenticate isimli bir klasör yoksa oluşturun. Bu klasör için şifreleme yapılacaktır.

RequestHeader unset X_ISRW_PROXY_AUTH_USER
<Location /authenticate >
    #AllowOverride None
    AuthName "Private location"
    AuthType SSPI
    NTLMAuth On
    NTLMAuthoritative On
    <RequireAll>
        <RequireAny>
            Require valid-user
            #require sspi-user EMEA\group_name
        </RequireAny>
        <RequireNone>
            Require user "ANONYMOUS LOGON"
            Require user "NT-AUTORITÄT\ANONYMOUS-ANMELDUNG"
        </RequireNone>
    </RequireAll>
    # use this to add the authenticated username to you header
    # so any backend system can fetch the current user
    # rewrite_module needs to be loaded then
    # while X_ISRW_PROXY_AUTH_USER is your header name
    RequestHeader set X_ISRW_PROXY_AUTH_USER expr=%{REMOTE_USER}
</Location>

Apache sunucusunu yeniden başlatın. Aşağıdaki kodu şifrelediğiniz klasörde bir php dosyasına yazın ve browser üzerinden sayfaya gidin.

<?php echo $_SERVER['REMOTE_USER']; ?>

PHP Güvenlik ve Performans Ayarları

Apache veya IIS üzerinde çalışan PHP için aşağıdaki özellikleri değiştirerek server performansını artırabilirsiniz.

memory_limit : Default "128M"  Bu, bir komut dosyasının ayırmasına izin verilen maksimum bellek miktarını bayt cinsinden ayarlar. Bu, bir sunucudaki tüm kullanılabilir belleği tüketmek için kötü yazılmış komut dosyalarının önlenmesine yardımcı olur. Bellek sınırı olmaması için bu yönergeyi -1'e ayarlayın. Bir int kullanıldığında, değer bayt cinsinden ölçülür. 

realpath_cache_size : Default "4M" PHP tarafından kullanılacak gerçek önbelleğinin boyutunu belirler. PHP'nin birçok dosya açtığı sistemlerde, gerçekleştirilen dosya işlemlerinin miktarını yansıtmak için bu değer artırılmalıdır. 

Boyut, depolanan yol dizelerindeki toplam bayt miktarını artı önbellek girişiyle ilişkili verilerin boyutunu temsil eder. Bu, önbellekte daha uzun yollar depolamak için önbellek boyutunun daha büyük olması gerektiği anlamına gelir. Bu değer, önbelleğe alınabilen farklı yolların sayısını doğrudan kontrol etmez. Önbellek girişi verileri için gereken boyut sisteme bağlıdır.

realpath_cache_ttl : Default "120"  Belirli bir dosya veya dizin için gerçek yol bilgilerinin önbelleğe alınacağı süre (saniye cinsinden). Nadiren değişen dosyalara sahip sistemler için değeri artırmayı düşünün.

https://www.php.net/manual/en/ini.core.php#ini.variables-order

PHP Şifre Güvenliği

PHP dosyaları içerisine kesinlikle password(şifre) yazmayın, passwordleri bilgisayarda başka bir yere konumlandırıp PHP dosyası içerisine bu şifreleri getirebilirsiniz. Ör sifreler.txt isimli bir dosya oluşturun ve şifreyi içine yazın. Sonra bu dosyadaki şifreyi bir değişkene atayın.

$myfile = fopen("E:\sifreler.txt", "r") or die("Unable to open file!");

$plogin=fgets($myfile);

fclose($myfile);

Yukarıdaki kod ile PHP dostanızda $plogin bilgisini şifre olarak kullanabilirsiniz. Bilgisayarı başkaları da kullanıyorsa bu işlem veri güvenliği için yeterli değildir. Bilgiyi aşağıdaki gibi şifreleyerek kullanabilirsiniz. Password bilgisini gizlemek için şifreleyin. Bu kod password bilginizi şifreler. Çıktıyı aldıktan sonra dosyayı silin fakat key bilgisini kaydetmeyi unutmayın.

<?php

$data = 'şifreyi_buraya_yazın';

$cipher = 'AES-128-ECB';

//key bilgisini istediğiniz gibi değiştirebilirsiniz.

$key = 'jfgksjdfgaksgf32423423bbfabsdjeyrwerwer898er2312423543656';

$encoded = openssl_encrypt($data, $cipher, $key); 

echo $encoded;

?>

Password bilgisini şifreledikten sonra E:\sifreler.txt dosyasına bu bilgiyi yazın. Sonra aşağıdaki kodu php dosyanıza ekleyin.

<?php

$myfile = fopen("E:\sifreler.txt", "r") or die("Unable to open file!");

$plogin=fgets($myfile);

fclose($myfile);

$cipher = 'AES-128-ECB';

$key = 'jfgksjdfgaksgf32423423bbfabsdjeyrwerwer898er2312423543656';

$decoded = openssl_decrypt($plogin, $cipher, $key); // çıktı: prototurk.com

echo $decoded;

?>


Google