Apache ile Linux üzerinde ASP.NET Core barındırma
Sağlayan- Shayne Boyer
bu kılavuzu kullanarak, HTTP trafiğini sunucuda çalışan bir ASP.NET Core web uygulamasına yönlendirmek için centos 7 ' de bir ters ara sunucu olarak Apache 'yi ayarlamayı öğrenin Kestrel . Mod_proxy uzantısı ve ilgili Modüller sunucunun ters proxy 'sini oluşturur.
Önkoşullar
- Sudo ayrıcalığına sahip standart bir kullanıcı hesabıyla CentOS 7 çalıştıran sunucu.
- .NET Core çalışma zamanını sunucuya yükler.
- .Net çekirdeğini indir sayfasınıziyaret edin.
- En son Önizleme olmayan .NET Core sürümünü seçin.
- Uygulama çalıştırma-çalışma zamanı altındaki tabloda en son önizleme dışı çalışma zamanını indirin.
- Linux Paket Yöneticisi yönergeleri bağlantısını seçin ve CentOS talimatlarını izleyin.
- mevcut bir ASP.NET Core uygulaması.
paylaşılan framework 'ü yükselttikten sonra gelecekte herhangi bir noktada, sunucu tarafından barındırılan ASP.NET Core uygulamaları yeniden başlatın.
Uygulama üzerinde Yayımla ve Kopyala
Uygulamayı çerçeveye bağımlı bir dağıtımiçin yapılandırın.
Uygulama yerel olarak çalıştırılır ve güvenli bağlantı (HTTPS) yapmak üzere yapılandırılmamışsa aşağıdaki yaklaşımlardan birini benimseyin:
- Uygulamayı güvenli yerel bağlantıları işleyecek şekilde yapılandırın. Daha fazla bilgi için https yapılandırma bölümüne bakın.
https://localhost:5001applicationUrlDosyadaki Properties/launchSettings.js özelliğinden (varsa) kaldırın.
Bir uygulamayı sunucuda çalışabilecek bir dizine (örneğin, bin/Release/ < target_framework_moniker > /Publish) paketlemek için geliştirme ortamından DotNet Publish çalıştırın:
dotnet publish --configuration Release
Uygulama, sunucuda .NET Core çalışma zamanının bakımını yapmayı tercih ediyorsanız, kendi kendine içerilen bir dağıtım olarak da yayımlanabilir.
ASP.NET Core uygulamasını, kuruluşun iş akışını (örneğin, SCP, sftp) tümleştiren bir aracı kullanarak sunucuya kopyalayın. Var dizini altında Web uygulamalarının (örneğin, var/www/HelloApp) yerini bulmak yaygındır.
Not
Bir üretim dağıtım senaryosunda, sürekli tümleştirme iş akışı, uygulamayı yayımlama ve varlıkları sunucuya kopyalama işini yapar.
Proxy sunucusu yapılandırma
Ters proxy, dinamik Web uygulamaları sunmak için ortak bir kurulumtir. ters proxy, HTTP isteğini sonlandırır ve ASP.NET uygulamasına iletir.
Proxy sunucusu, istemci isteklerini istekleri yerine başka bir sunucuya iletir. Ters proxy, genellikle rastgele istemciler adına sabit bir hedefe iletilir. bu kılavuzda Apache, ASP.NET Core uygulamasına hizmet eden aynı sunucuda çalışan ters proxy olarak yapılandırılmıştır Kestrel .
İstekler ters proxy tarafından iletileceği için, Microsoft. AspNetCore. HttpOverrides paketindeki Iletilen üstbilgiler ara yazılımını kullanın. Ara yazılım, Request.Scheme üstbilgiyi kullanarak, X-Forwarded-Proto yeniden yönlendirme URI 'leri ve diğer güvenlik ilkelerini doğru çalışacak şekilde güncelleştirir.
Bir şemaya bağlı kimlik doğrulama, bağlantı oluşturma, yeniden yönlendirme ve coğrafi konum gibi herhangi bir bileşen, Iletilen üstbilgiler ara yazılımı çağrıldıktan sonra yerleştirilmelidir.
İletilen üstbilgiler ara yazılımı, diğer ara yazılım öncesinde çalıştırılmalıdır. Bu sıralama, iletilen üst bilgi bilgilerine bağlı olan ara yazılımın işleme için üst bilgi değerlerini kullanmasını sağlar. Tanılama ve hata işleme ara yazılımı sonrasında Iletilen üstbilgiler ara yazılımını çalıştırmak için bkz. Iletilen üstbilgiler ara yazılım sırası.
UseForwardedHeaders Startup.Configure Diğer ara yazılım çağrılmadan önce yönteminin en üstünde yöntemi çağırın. Ara yazılımı, X-Forwarded-For ve üst bilgilerini iletecek şekilde yapılandırın X-Forwarded-Proto :
// using Microsoft.AspNetCore.HttpOverrides;
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
Hayır ForwardedHeadersOptions , ara yazılım için belirtilmemişse, iletmek için varsayılan üstbilgiler şunlardır None .
127.0.0.0/8, [::1]Standart localhost adresi (127.0.0.1) dahil olmak üzere geri döngü adreslerinde çalışan proxy 'ler, varsayılan olarak güvenilirdir. Kuruluş içindeki diğer güvenilir proxy 'ler veya ağlar, Internet ve Web sunucusu arasında istekleri ele alıyorsa, bunları KnownProxies veya ile listesine ekleyin KnownNetworks ForwardedHeadersOptions . Aşağıdaki örnek, içindeki Iletilen üstbilgiler ara sunucusuna alana 10.0.0.100 IP adresinde bir güvenilen ara sunucu ekler KnownProxies Startup.ConfigureServices :
// using System.Net;
services.Configure<ForwardedHeadersOptions>(options =>
{
options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});
Daha fazla bilgi için bkz. Yapılandırma ASP.NET Core sunucuları ve yük dengeciler ile çalışacak şekilde yapılandırma.
Apache 'yi yükler
CentOS paketlerini en son kararlı sürümlerine güncelleştirin:
sudo yum update -y
Tek bir komutla, CentOS üzerinde Apache Web sunucusunu yükler yum :
sudo yum -y install httpd mod_ssl
Komutu çalıştırdıktan sonra örnek çıkış:
Downloading packages:
httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-2.4.6-40.el7.centos.4.x86_64 1/1
Verifying : httpd-2.4.6-40.el7.centos.4.x86_64 1/1
Installed:
httpd.x86_64 0:2.4.6-40.el7.centos.4
Complete!
Not
Bu örnekte, CentOS 7 sürümü 64 bit olduğundan çıkış httpd.86_64 yansıtır. Apache 'nin yüklü olduğu yeri doğrulamak için whereis httpd komut isteminden komutunu çalıştırın.
Apache yapılandırma
Apache için yapılandırma dosyaları, dizin içinde bulunur /etc/httpd/conf.d/ . . Conf uzantısına sahip herhangi bir dosya, içindeki modül yapılandırma dosyalarının yanı sıra /etc/httpd/conf.modules.d/ , modülleri yüklemek için gereken yapılandırma dosyalarını içeren alfabetik sırada işlenir.
Uygulama için HelloApp. conf adlı bir yapılandırma dosyası oluşturun:
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName www.example.com
ServerAlias *.example.com
ErrorLog ${APACHE_LOG_DIR}helloapp-error.log
CustomLog ${APACHE_LOG_DIR}helloapp-access.log common
</VirtualHost>
VirtualHostBlok, sunucuda bir veya daha fazla dosyada birden çok kez görünebilir. Yukarıdaki yapılandırma dosyasında Apache, 80 numaralı bağlantı noktasında genel trafiği kabul eder. Etki alanına www.example.com sunulmakta ve *.example.com diğer ad aynı Web sitesine çözümlenmektedir. Daha fazla bilgi için bkz. ad tabanlı sanal konak desteği. İstekler, kökte, sunucunun bağlantı noktası 5000 ' den 127.0.0.1 ' de sunucu üzerinden alınır. İki yönlü iletişim için ProxyPass ProxyPassReverse gereklidir ve gereklidir. KestrelIP/bağlantı noktasını değiştirmek için bkz Kestrel : uç nokta yapılandırması.
VirtualHostBlok, sunucuda bir veya daha fazla dosyada birden çok kez görünebilir. Yukarıdaki yapılandırma dosyasında Apache, 80 numaralı bağlantı noktasında genel trafiği kabul eder. Etki alanına www.example.com sunulmakta ve *.example.com diğer ad aynı Web sitesine çözümlenmektedir. Daha fazla bilgi için bkz. ad tabanlı sanal konak desteği. İstekler, kökte, sunucunun bağlantı noktası 5000 ' den 127.0.0.1 ' de sunucu üzerinden alınır. İki yönlü iletişim için ProxyPass ProxyPassReverse gereklidir ve gereklidir. KestrelIP/bağlantı noktasını değiştirmek için bkz Kestrel : uç nokta yapılandırması.
Uyarı
VirtualHost bloğunda uygun bir ServerName yönergesi belirtmemesi, uygulamanızı güvenlik açıklarına karşı kullanıma sunar. Alt etki alanı joker karakteri bağlama (örneğin, *.example.com ), tüm üst etki alanını (Bu güvenlik açığı olan aksine) kontrol ediyorsanız bu güvenlik riskini ortadan yapmaz *.com . Daha fazla bilgi için bkz. rfc7230 Section-5,4.
Günlüğe kaydetme, VirtualHost ErrorLog ve yönergeleri başına yapılandırılabilir CustomLog . ErrorLog , sunucunun hataları günlüğe kaydettiği konumdur ve CustomLog günlük dosyasının dosya adını ve biçimini ayarlar. Bu durumda istek bilgileri günlüğe kaydedilir. Her istek için bir satır vardır.
Dosyayı kaydedin ve yapılandırmayı test edin. Her şey geçerse yanıtın olması gerekir Syntax [OK] .
sudo service httpd configtest
Apache 'i yeniden Başlat:
sudo systemctl restart httpd
sudo systemctl enable httpd
Uygulamayı izleme
Apache, http://localhost:80 ' de üzerinde çalışan ASP.NET Core uygulamasına yapılan istekleri iletmek üzere ayarlanmıştır Kestrel http://127.0.0.1:5000 . Ancak, işlemi yönetmek için Apache ayarlanmamış Kestrel . Temel Web uygulamasını başlatmak ve izlemek için systemd ve hizmet dosyası oluşturma ' yı kullanın. systemd , işlem başlatmak, durdurmak ve yönetmek için birçok güçlü özellik sağlayan bir init sistemidir.
Hizmet dosyasını oluşturma
Hizmet tanımı dosyasını oluşturun:
sudo nano /etc/systemd/system/kestrel-helloapp.service
Uygulama için örnek bir hizmet dosyası:
[Unit]
Description=Example .NET Web API App running on CentOS 7
[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/local/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
Yukarıdaki örnekte, hizmeti yöneten Kullanıcı User seçeneğiyle belirtilir. Kullanıcı ( apache ) var olmalıdır ve uygulamanın dosyalarının doğru sahipliğini içermelidir.
TimeoutStopSecUygulamanın ilk kesme sinyali aldıktan sonra kapanması için bekleyeceği süreyi yapılandırmak için kullanın. Uygulama bu dönemde kapanmazsa, uygulamayı sonlandırmak için SIGKıLL çıkarılır. Değeri unitless saniyeler (örneğin, 150 ), bir zaman aralığı değeri (örneğin, 2min 30s ) veya infinity zaman aşımını devre dışı bırakmak için girin. TimeoutStopSec Varsayılan olarak, DefaultTimeoutStopSec yönetici yapılandırma dosyasındaki değerini alır (systemd-System. conf, System. conf. d, systemd-User. conf, User. conf. d). Çoğu dağıtım için varsayılan zaman aşımı 90 saniyedir.
# The default value is 90 seconds for most distributions.
TimeoutStopSec=90
yapılandırma sağlayıcılarının ortam değişkenlerini okuyabilmesi için bazı değerler (örneğin, SQL bağlantı dizeleri) kaçışmalıdır. Yapılandırma dosyasında kullanılmak üzere uygun bir kaçış değeri oluşturmak için aşağıdaki komutu kullanın:
systemd-escape "<value-to-escape>"
İki nokta ( : ) ayırıcılar ortam değişkeni adlarında desteklenmez. İki nokta üst üste yerine çift alt çizgi ( __ ) kullanın. Ortam değişkenleri yapılandırma sağlayıcısı , ortam değişkenleri yapılandırmaya okurken çift alt çizgileri iki nokta üst üste dönüştürür. Aşağıdaki örnekte, bağlantı dizesi anahtarı ConnectionStrings:DefaultConnection hizmet tanımı dosyasına şu şekilde ayarlanır ConnectionStrings__DefaultConnection :
İki nokta ( : ) ayırıcılar ortam değişkeni adlarında desteklenmez. İki nokta üst üste yerine çift alt çizgi ( __ ) kullanın. Ortam değişkenleri yapılandırma sağlayıcısı , ortam değişkenleri yapılandırmaya okurken çift alt çizgileri iki nokta üst üste dönüştürür. Aşağıdaki örnekte, bağlantı dizesi anahtarı ConnectionStrings:DefaultConnection hizmet tanımı dosyasına şu şekilde ayarlanır ConnectionStrings__DefaultConnection :
Environment=ConnectionStrings__DefaultConnection={Connection String}
Dosyayı kaydedin ve hizmeti etkinleştirin:
sudo systemctl enable kestrel-helloapp.service
Hizmeti başlatın ve çalıştığını doğrulayın:
sudo systemctl start kestrel-helloapp.service
sudo systemctl status kestrel-helloapp.service
◝ kestrel-helloapp.service - Example .NET Web API App running on CentOS 7
Loaded: loaded (/etc/systemd/system/kestrel-helloapp.service; enabled)
Active: active (running) since Thu 2016-10-18 04:09:35 NZDT; 35s ago
Main PID: 9021 (dotnet)
CGroup: /system.slice/kestrel-helloapp.service
└─9021 /usr/local/bin/dotnet /var/www/helloapp/helloapp.dll
Kestrel Systemd aracılığıyla yapılandırılan ve yönetilen ters proxy ile, Web uygulaması tam olarak yapılandırılır ve ' deki yerel makinedeki bir tarayıcıdan erişilebilir http://localhost . yanıt üst bilgileri inceleniyor, sunucu üst bilgisi ASP.NET Core uygulamasının tarafından sunulduğunu belirtir Kestrel :
HTTP/1.1 200 OK
Date: Tue, 11 Oct 2016 16:22:23 GMT
Server: Kestrel
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Günlükleri görüntüleme
Kullanan Web uygulaması Kestrel systemd kullanılarak yönetildiğinden, olaylar ve süreçler merkezi bir günlüğe kaydedilir. Ancak, bu günlük systemd tarafından yönetilen tüm hizmet ve işlemlere ait girişleri içerir. kestrel-helloapp.serviceBelirli öğeleri görüntülemek için aşağıdaki komutu kullanın:
sudo journalctl -fu kestrel-helloapp.service
Zaman filtreleme için komutuyla saat seçeneklerini belirtin. Örneğin, --since today geçerli güne filtre uygulamak veya --until 1 hour ago önceki saatin girişlerini görmek için kullanın. Daha fazla bilgi için bkz. journalctl için man sayfası.
sudo journalctl -fu kestrel-helloapp.service --since "2016-10-18" --until "2016-10-18 04:00"
Veri koruma
ASP.NET Core veri koruma yığını , kimlik doğrulama ara yazılımı ( örneğin, cookie ara yazılım) ve siteler arası istek sahteciliğini önleme (csrf) korumaları dahil olmak üzere birkaç ASP.NET Core middlewares tarafından kullanılır. Veri koruma API 'Leri Kullanıcı kodu tarafından çağrılmasa bile, veri korumasının kalıcı bir şifreleme anahtarı deposuoluşturacak şekilde yapılandırılması gerekir. Veri koruması yapılandırılmamışsa, anahtarlar bellekte tutulur ve uygulama yeniden başlatıldığında atılır.
Uygulama yeniden başlatıldığında anahtar halkası bellekte depolanıyorsa:
- Tüm cookie tabanlı kimlik doğrulama belirteçleri geçersiz kılındı.
- Kullanıcıların bir sonraki isteğinde yeniden oturum açması gerekir.
- Anahtar halkası ile korunan tüm veriler artık çözülemez. bu, csrf belirteçlerini ve ASP.NET Core MVC tempdata cookie söğesini içerebilir.
Veri korumayı, anahtar halkasını sürdürmek ve şifrelemek üzere yapılandırmak için, bkz.:
- ASP.NET Core'de önemli depolama sağlayıcıları
- ASP.NET Core kullanarak Windows ve Azure'da bekleme ASP.NET Core
Uygulamanın güvenliğini sağlama
Güvenlik duvarını yapılandırma
Firewallld , ağ bölgeleri desteğiyle güvenlik duvarını yönetmek için dinamik bir Daemon. Bağlantı noktaları ve paket filtrelemesi, Iptables tarafından hala yönetilebilir. Firewalld , varsayılan olarak yüklenmelidir. yum paketi yüklemek veya yüklendiğini doğrulamak için kullanılabilir.
sudo yum install firewalld -y
firewalldYalnızca uygulama için gerekli olan bağlantı noktalarını açmak için kullanın. Bu durumda, 80 ve 443 bağlantı noktaları kullanılır. Aşağıdaki komutlar şunları açmak için 80 ve 443 bağlantı noktalarını kalıcı olarak ayarlar:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent
Güvenlik Duvarı ayarlarını yeniden yükleyin. Varsayılan bölgedeki kullanılabilir hizmetleri ve bağlantı noktalarını kontrol edin. Seçenekler inceleyerek kullanılabilir firewall-cmd -h .
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client
ports: 443/tcp 80/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
HTTPS yapılandırması
Uygulamayı güvenli (HTTPS) yerel bağlantılar için yapılandırma
DotNet Run komutu, uygulamayı özelliği tarafından belirtilen URL 'lerde dinlemek üzere yapılandıran, uygulamanın Özellikler/launchSettings.js kullanır applicationUrl (örneğin, https://localhost:5001;http://localhost:5000 ).
dotnet runaşağıdaki yaklaşımlardan birini kullanarak, uygulamayı komut veya geliştirme ortamı için geliştirme sırasında (f5 veya Ctrl + f5 Visual Studio Code) bir sertifikayı kullanacak şekilde yapılandırın:
Güvenli (HTTPS) istemci bağlantıları için ters proxy 'yi yapılandırma
Uyarı
Bu bölümdeki güvenlik yapılandırması, daha fazla özelleştirme için bir başlangıç noktası olarak kullanılacak genel bir yapılandırmadır. Üçüncü taraf araç araçları, sunucular ve işletim sistemleri için destek sağlayamıyoruz. Bu bölümdeki yapılandırmayı kendi sorumluluğunuzdadır. Daha fazla bilgi için aşağıdaki kaynaklara erişin:
- Apache SSL/TLS şifrelemesi (Apache belgeleri)
- mozilla.org SSL yapılandırma Oluşturucusu
HTTPS için Apache 'yi yapılandırmak için mod_ssl modülü kullanılır. Httpd modülü yüklendiğinde mod_ssl modülü de yüklendi. Yüklenmemişse, yum yapılandırmaya eklemek için kullanın.
sudo yum install mod_ssl
HTTPS 'yi zorlamak için, mod_rewrite URL yeniden yazmayı etkinleştirmek üzere modülünü yükler:
sudo yum install mod_rewrite
443 numaralı bağlantı noktasında güvenli iletişimi etkinleştirmek için HelloApp. conf dosyasını değiştirin.
Aşağıdaki örnek, sunucuyu güvenli olmayan istekleri yeniden yönlendirecek şekilde yapılandırmaz. HTTPS yeniden yönlendirme ara yazılımı kullanmanızı öneririz. Daha fazla bilgi için bkz. ASP.NET Core 'de HTTPS 'yi zorla.
Not
Sunucu yapılandırmasının HTTPS yeniden yönlendirme ara yazılımı yerine güvenli yönlendirmeyi işlediği geliştirme ortamları için kalıcı yeniden yönlendirmeler (301) yerine geçici yeniden yönlendirmeler (302) kullanmanızı öneririz. Bağlantıyı önbelleğe alma, geliştirme ortamlarında kararsız davranışa neden olabilir.
Strict-Transport-Security(HSTS) üstbilgisi eklemek, istemci tarafından yapılan tüm sonraki ISTEKLERIN https üzerinden yapılmasını sağlar. Üstbilgiyi ayarlamaya yönelik yönergeler için Strict-Transport-Security bkz ASP.NET Core 'de HTTPS 'yi zorla ..
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:443>
Protocols h2 http/1.1
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /var/log/httpd/helloapp-error.log
CustomLog /var/log/httpd/helloapp-access.log common
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
</VirtualHost>
Not
Bu örnek, yerel olarak üretilmiş bir sertifika kullanıyor. Sslcertificatefile , etki alanı adı için birincil sertifika dosyası olmalıdır. Sslcertificatekeyfile , CSR oluşturulduğunda oluşturulan anahtar dosyası olmalıdır. Sslcertificatechainfile , sertifika yetkilisi tarafından sağlanan ara sertifika dosyası (varsa) olmalıdır.
OpenSSL 1.1.1 ile bir TLS 1,3 Web sunucusu işletmek için Apache HTTP Server sürüm 2.4.43 veya daha yeni bir sürümü gereklidir.
Not
Yukarıdaki örnek çevrimiçi sertifika durumu Protokolü (OCSP) zımbalamayı devre dışı bırakır. OCSP 'yi etkinleştirme hakkında daha fazla bilgi ve yönergeler için bkz. OCSP zımbalama (Apache belgeleri).
Dosyayı kaydedin ve yapılandırmayı test edin:
sudo service httpd configtest
Apache 'i yeniden Başlat:
sudo systemctl restart httpd
Ek Apache önerileri
Paylaşılan çerçeve güncelleştirmeleriyle uygulamaları yeniden başlatma
sunucuda paylaşılan framework 'ü yükselttikten sonra, sunucu tarafından barındırılan ASP.NET Core uygulamaları yeniden başlatın.
Ek üstbilgiler
Kötü amaçlı saldırılara karşı korumak için, değiştirilmesi veya eklenmesi gereken birkaç üstbilgi vardır. Modülün yüklü olduğundan emin olun mod_headers :
sudo yum install mod_headers
Tıklama ve tıklama saldırılarına karşı güvenli Apache
UI redki saldırısı olarak da bilinen tıklama, bir Web sitesi ziyaretçisinin bir bağlantı veya düğmeye Şu anda ziyaret ettiğinden farklı bir sayfada tıklanması zor olan kötü amaçlı bir saldırıya neden olur. X-FRAME-OPTIONSSitesini güvenli hale getirmek için kullanın.
Tıklama saldırılarını azaltmak için:
Httpd. conf dosyasını düzenleyin:
sudo nano /etc/httpd/conf/httpd.confHeader append X-FRAME-OPTIONS "SAMEORIGIN"satırını ekleyin.Dosyayı kaydedin.
Apache 'i yeniden başlatın.
MIME türü algılaması
X-Content-Type-OptionsÜst bilgi, Internet Explorer 'ın MIME algılaması (dosyanın içeriğinden bir dosya belirleme Content-Type ) gerçekleştirmesini engeller. Sunucu Content-Type üstbilgiyi text/html seçenek kümesiyle ayarlarsa nosniff , Internet Explorer içeriği text/html dosyanın içeriğinden bağımsız olarak işler.
Httpd. conf dosyasını düzenleyin:
sudo nano /etc/httpd/conf/httpd.conf
Header set X-Content-Type-Options "nosniff" satırını ekleyin. Dosyayı kaydedin. Apache 'i yeniden başlatın.
YükDengeleme
Bu örnek, CentOS 7 ve aynı örnek makinede Apache 'in nasıl ayarlanacağını ve yapılandırılacağını gösterir Kestrel . Tek bir hata noktası yok; mod_proxy_balancer kullanmak ve VirtualHost 'u değiştirmek, Apache proxy sunucusunun arkasındaki Web uygulamalarının birden çok örneğini yönetmeye olanak tanır.
sudo yum install mod_proxy_balancer
Aşağıda gösterilen yapılandırma dosyasında, bağlantı noktası 5001 ' de çalışacak ek bir örneği helloapp ayarlanır. Proxy bölümü, Yük Dengeleme istekleri için iki üyeli bir dengeleyici yapılandırması ile ayarlanır.
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
ProxyPass / balancer://mycluster/
ProxyPassReverse / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5001/
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:5000
BalancerMember http://127.0.0.1:5001
ProxySet lbmethod=byrequests
</Proxy>
<Location />
SetHandler balancer
</Location>
ErrorLog /var/log/httpd/helloapp-error.log
CustomLog /var/log/httpd/helloapp-access.log common
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>
Oran limitleri
Httpd modülüne eklenen mod_ratelimit kullanarak, istemcilerin bant genişliği sınırlandırılabilir:
sudo nano /etc/httpd/conf.d/ratelimit.conf
Örnek dosya, bant genişliğini kök konumu altında 600 KB/sn olarak sınırlandırır:
<IfModule mod_ratelimit.c>
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 600
</Location>
</IfModule>
Uzun istek üst bilgisi alanları
Proxy sunucusu varsayılan ayarları, istek üst bilgisi alanlarını genellikle 8.190 bayt ile sınırlar. bir uygulama, varsayılan değerden daha uzun bir süre gerektirebilir (örneğin, Azure Active Directorykullanan uygulamalar). Daha uzun alanlar gerekliyse, proxy sunucusunun LimitRequestFieldSize yönergesi ayarlamayı gerektirir. Uygulanacak değer senaryoya bağlıdır. Daha fazla bilgi için sunucunuzun belgelerine bakın.
Uyarı
Gerekli olmadığı takdirde varsayılan değerini artırmaz LimitRequestFieldSize . Değerin artırılması, kötü amaçlı kullanıcılar tarafından arabellek taşması (taşma) ve hizmet reddi (DoS) saldırıları riskini artırır.