
Apache to drugi pod względem popularności serwer WWW stosowany w Internecie. Otwartoźródłowy, o dużych możliwościach konfiguracyjnych. Poniższe informacje dotyczą pracy z programem na systemie Ubuntu, jednak większość poniższych informacji da się zaaplikować w innych dystrybucjach Linux`a.
sudo apt install apache2 -y
Moduły aktywujemy poleceniem a2enmod nazwa_modułu
, a dezaktywujemy a2dismod nazwa_modułu
.
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_event_module (shared)
negotiation_module (shared)
setenvif_module (shared)
status_module (shared)
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_event_module (shared)
negotiation_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)
/etc/apache2/ports.conf
Listen 80
Ustawienie to wyłącza obsługę IPv6.
Listen 0.0.0.0:80
Listen [::]:80
Zapewniają abstrakcję używanych repozytoriów apt. Umożliwiają łatwe zarządzanie dystrybucją i niezależnymi źródłami oprogramowania dostawcy oprogramowania.
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get install certbot python-certbot-apache -y
Może się zdarzyć, że będzie trzeba ręcznie dodać RewriteEngine On
do konfiguracji HTTP.
sudo certbot --apache -d nazwa.domeny
sudo cron -e
0 0 1 * * /usr/bin/letsencrypt renew >> /var/log/letsencrypt-renew.log
sudo service cron restart
Ponieważ certyfikaty Let's Encrypt wygasają po 90 dniach, należy je okresowo sprawdzać pod kątem przedłużenia. Certbot uruchomi się automatycznie dwa razy dziennie i odnowi każdy certyfikat, który upływa w ciągu trzydziestu dni od wygaśnięcia.
sudo certbot renew --dry-run
sudo /usr/bin/letsencrypt renew --force-renewal
Zmiana lub dopisanie w odpowiednich miejscach poniższych wartości wymaga resa następnie sudo service apache2 restart
.
/etc/apache2/conf-enabled/security.conf
ServerSignature Off
ServerTokens Prod
/etc/apache2/apache2.conf
Options -Indexes -FollowSymLinks -SymLinksIfOwnerMatch -Includes -ExecCGI
AllowOverride None
Require all denied
-Indexes
- wyłączenie wyświetlania sformatowanej listy zawartości katalogu.
-FollowSymLinks
- wyłączenie śledzenia przez serwer dowiązań symbolicznych w danym katalogu.
-SymLinksIfOwnerMatch
- wyłączenie podążania przez serwer tylko za dowiązaniami symbolicznymi, którymi właścicielem lub katalogiem docelowym jest ten sam identyfikator użytkownika co link.
AllowOverrride None
- blokada nadpisywania konfiguracji katalogu.
Require all denied
- blokada dostępu dla wszystkich.
-Includes
- wyłączenie Server Side Includes.
-ExecCGI
- wyłączenie CGI Execution.
/etc/apache2/apache2.conf
<Directory />
Options None
Order deny,allow
Deny from all
</Directory>
Options None
- wyłączenie wszystkich opcji.
Order deny,allow
- kolejność w jakieś aplikowane są uprawnienia.
Deny from all
- odrzuca żądania od wszystkich do katalogu głównego.
/etc/apache2/apache2.conf
<Directory /var/www/html/>
Header always append X-Frame-Options SAMEORIGIN
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
Header set X-Permitted-Cross-Domain-Policies "none"
Header set Content-Security-Policy "default-src * data: blob: 'self'; script-src nazwa.domeny 127.0.0.1:* 'unsafe-inline' 'unsafe-eval' blob: data: 'self'; style-src data: blob: 'unsafe-inline' *; connect-src nazwa.domeny blob: 'self';"
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
FileETag None
</Directory>
Header always append X-Frame-Options SAMEORIGIN
- zabezpieczenie przed atakami Clickjacking ("UI redress attack" ("Atak ze sporami w interfejsie użytkownika")). Jest to złośliwa technika używana przez osobę atakującą do zbierania kliknięć zainfekowanego użytkownika. Clickjacking składa się z dwóch słów - Click and Hijacking. Click oznacza "kliknięcie myszą", a "Hijacking" oznacza "zmuszanie użytkownika do kliknięcia". Clickjacking oznacza zmuszanie użytkownika do kliknięcia strony internetowej, na której haker chce, aby kliknął, aby wykonać pożądaną złośliwą aktywność.
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
- Nagłówek HSTS (HTTP Strict Transport Security) pozwala upewnić się, że cała komunikacja z przeglądarki jest wysyłana przez HTTPS (HTTP Secure). Zapobiega to klikaniu monitów przez HTTPS i przekierowuje żądania HTTP do HTTPS. Przed wdrożeniem tego nagłówka należy upewnić się, że cała strona Twojej witryny jest dostępna przez HTTPS, w przeciwnym razie zostaną one zablokowane. Nagłówek HSTS jest obsługiwany przez wszystkie główne najnowsze wersje przeglądarek (IE, Firefox, Opera, Safari i Chrome).
Header set X-XSS-Protection "1; mode=block"
- zabezpieczenie przed atakami XSS (Cross-site Scripting). Jest to najczęstsza luka w warstwie aplikacji. Umożliwia atakującemu wykonanie kodu na docelowym serwerze sieciowym z poziomu przeglądarki użytkownika. Atakujący mogą atakować na podatnym serwerze XSS za pomocą skryptów po stronie przeglądarki (JavaScript).
Header set X-Permitted-Cross-Domain-Policies "none"
- korzystając z produktów Adobe, można zaimplementować ten nagłówek, aby poinstruować przeglądarkę, jak obsługiwać żądania w wielu domenach. Wdrażając ten nagłówek ograniczamy ładowanie zasobów witryny z innej domeny, aby uniknąć nadużywania zasobów.
Header set X-Content-Type-Options nosniff
- zabezpieczeniem przeciwko zagrożeniom bezpieczeństwa typu MIME. Posiadane tego nagłówka instruuje przeglądarkę, aby uwzględniła typy plików jako zdefiniowane i nie zezwala na "wąchanie" (ang. sniffing) zawartości.
Header set Content-Security-Policy "default-src * data: blob: 'self'; script-src b2b.viavac.pl 127.0.0.1:* 'unsafe-inline' 'unsafe-eval' blob: data: 'self'; style-src data: blob: 'unsafe-inline' *; connect-src b2b.viavac.pl blob: 'self';"
- zabezpieczenie przed atakami XSS, kliknięciami i wstrzykiwaniu kodu. Wdrażając nagłówek CSP (Content Security Policy) w odpowiedzi HTTP na stronie internetowej. CSP instruuje przeglądarkę, aby załadowała dozwolone treści do załadowania na stronie internetowej.
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
- Plik HTTPOnly Cookie jest również znany jako bezpieczny plik cookie używany do przesyłania http lub https przez Internet. Zaleca się używanie "HttpOnly" i "Secure flag" w ciasteczku. To ochroni serwer WWW Apache przed najczęstszymi atakami, takimi jak CSS, ataki na pliki cookie i pliki cookie.
FileETag None
- Etagi (zwane również "Entity Tags") są luką w Apache. Pozwalają użytkownikom zdalnym uzyskiwać poufne informacje, takie jak numer i-węzła, identyfikatory procesów potomnych i wieloczęściową granicę MIME za pomocą nagłówka Etag.
sudo netstat -plunt | grep ":80"
sudo netstat -ntlp | grep LISTEN
sudo a2enmod proxy_http
, modyfikacja vhost dla domeny.
<VirtualHost *:80>
ProxyRequests Off
ProxyPass /ścieżka/linku http://adres:80/ścieżka/linku
ProxyPassReverse /ścieżka/linku http://adres:80/ścieżka/linku
</VirtualHost>
ProxyRequests
- dyrektywa oznacza, że Apache przekazuje oryginalny nagłówek Hosta do serwera backendowego. Przydatne ponieważ informuje serwer backendowy o adresie używanym do uzyskania dostępu do plikacji.
ProxyPass
- główna dyrektywa konfiguracyjna serwera proxy. W w/w przypadku określa, że wszystko pod adresem URL (/ścieżka/linku) powinno zostać zmapowane z serwerem backend pod podanym adresem (http://adres:80/ścieżka/linku).
ProxyPassReverse
- dyrektywa powinna mieć taką samą konfigurację jak ProxyPass. Nakazuje Apache`wi zmodyfikowanie nagłówków odpowiedzi z serwera backendowego. Ustawienie zapewnia, że jeżeli serwer backend zwróci nagłówek przekierowania lokalizacji, przeglądarka klienta zostanie przekierowania na adres serwera proxy, a nie na adres serwera backend (który nie działałby zgodnie z przeznaczeniem).
Błędny VirtualHost
<VirtualHost *:80>
<VirtualHost *:443>
Brak ServerName localhost
sudo nano /etc/apache2/apache2.conf