Wyszukiwanie w witrynie

18 Wskazówki dotyczące bezpieczeństwa i wzmacniania serwera WWW Apache


Serwer WWW Apache jest jednym z najpopularniejszych i najczęściej używanych serwerów internetowych do hostowania plików i stron internetowych. Jest łatwy w instalacji i konfiguracji, aby spełnić Twoje potrzeby hostingowe. Jednak ustawienia domyślne nie są bezpieczne, aby zapewnić tak potrzebną ochronę, jakiej potrzebuje Twoja witryna.

W tym przewodniku przyjrzymy się niektórym wskazówkom i trikom dotyczącym wzmacniania serwera Apache, które możesz wdrożyć, aby zwiększyć bezpieczeństwo swojego serwera internetowego.

1. Jak ukryć informacje o wersji Apache i systemie operacyjnym

Domyślnie serwer WWW Apache wyświetla swoją wersję w przypadku przeglądania nieprawidłowego adresu URL witryny. Poniżej znajduje się przykład strony błędu wskazującej, że strony nie można znaleźć w serwisie. Ostatnia linia wskazuje wersję Apache, system operacyjny hosta, adres IP i port, na którym nasłuchuje.

Wyświetlanie informacji o serwerze internetowym nigdy nie jest dobrym pomysłem, ponieważ może to być dobry prezent dla hakerów podczas ich misji zwiadowczej. Aby dodać warstwę zabezpieczeń i utrudnić hakerom, zaleca się ukrycie informacji o serwerze internetowym.

Aby to zrobić, otwórz domyślny plik konfiguracyjny Apache w dystrybucjach opartych na Debianie.

sudo vim /etc/apache2/apache2.conf

Dla systemów opartych na RHEL, takich jak RHEL, Fedora, CentOS, Rocky i AlmaLinux.

sudo vim /etc/httpd/conf/httpd.conf

Dodaj następujące wiersze na końcu pliku.

ServerTokens Prod
ServerSignature Off

Zapisz zmiany i zrestartuj serwer WWW Apache.

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Teraz załaduj ponownie witrynę i tym razem informacje o serwerze internetowym nie będą wyświetlane.

2. Wyłącz wyświetlanie katalogów w Apache

Domyślnie Apache zezwala na wyświetlanie listy katalogów, a odwiedzający mogą zobaczyć dowolne pliki i katalogi, które możesz mieć w swoim katalogu Document Root.

Aby to zademonstrować, utworzymy katalog o nazwie test.

sudo mkdir -p /var/www/html/test

Następnie przejdziemy do katalogu i utworzymy kilka plików.

cd /var/www/html/test
sudo touch app.py main.py

Teraz, jeśli uzyskamy dostęp do adresu URL http://localhost/test, będziemy mogli wyświetlić listę katalogów.

Aby wyłączyć wyświetlanie katalogów, przejdź do głównego pliku konfiguracyjnego Apache i wyszukaj atrybut „Katalog”. Ustaw parametr „Opcje” na '-Indexes', jak pokazano.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Załaduj ponownie Apache i tym razem, gdy odwiedzisz adres URL, katalogi nie będą już wyświetlane.

3. Regularnie aktualizuj Apache

Zawsze zaleca się aktualizowanie wszystkich aplikacji, ponieważ najnowsze aplikacje zawierają poprawki błędów i poprawki zabezpieczeń, które usuwają podstawowe luki występujące w starszych wersjach oprogramowania.

W związku z tym zaleca się regularne aktualizowanie aplikacji do najnowszych wersji.

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Użyj szyfrowania HTTPS na Apache

Apache domyślnie używa protokołu HTTP, który jest słabym i niepewnym protokołem, podatnym na podsłuchiwanie. Aby poprawić bezpieczeństwo swojej witryny, a tym bardziej poprawić ranking SEO w Google, rozważ zaszyfrowanie swojej witryny za pomocą certyfikatu SSL.

W ten sposób przełącza domyślny protokół HTTP na HTTPS, utrudniając w ten sposób przechwycenie i odszyfrowanie komunikacji przesyłanej tam i z powrotem z serwera.

Sprawdź, jak zabezpieczyć serwer WWW Apache za pomocą Let's Encrypt SSL w systemie Linux.

  • Jak zabezpieczyć Apache za pomocą certyfikatu Let’s Encrypt SSL na RHEL
  • Jak zabezpieczyć Apache za pomocą bezpłatnego certyfikatu Let's Encrypt SSL na Ubuntu i Debianie

5. Włącz ścisłe zabezpieczenia transportu HTTP (HSTS) dla Apache

Oprócz szyfrowania swojej witryny certyfikatem TLS/SSL rozważ wdrożenie mechanizmu bezpieczeństwa sieci HSTS oprócz protokołu HTTPS.

HTTP Strict Transport Security (HSTS) to mechanizm zasad, który chroni strony internetowe przed atakami typu man-in-the-middle i przejmowaniem plików cookie. Dzieje się tak, gdy atakujący obniżą wersję protokołu HTTPS do niezabezpieczonego protokołu HTTP.

HSTS umożliwia serwerowi sieciowemu ścisłe zadeklarowanie, że przeglądarki internetowe powinny z nim współdziałać wyłącznie za pośrednictwem protokołu HTTPS, a nigdy za pośrednictwem protokołu HTTP.

Aby włączyć HSTS, upewnij się, że Twoja witryna obsługuje HTTPS i ma ważny certyfikat TLS/SSL.

Następnie włącz moduł nagłówków dla Apache:

sudo a2enmod headers

Następnie załaduj ponownie Apache, aby zastosować zmiany.

sudo systemctl restart apache2

Następnie uzyskaj dostęp do pliku konfiguracyjnego wirtualnego hosta swojej domeny.

sudo vim /etc/apache2/sites-available/mydomain.conf

Następnie dodaj tę linię w bloku :

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Wygląda to następująco.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

Parametr max-age instruuje przeglądarki internetowe, aby przez następny rok uzyskiwały dostęp do Twojej witryny wyłącznie przy użyciu protokołu HTTPS (31536000=1 rok).

Na koniec uruchom ponownie Apache, aby zasady HSTS zaczęły obowiązywać.

sudo systemctl restart apache2

6. Włącz HTTP/2 na Apache

W 2015 roku wypuszczono HTTP/2, czyli nową wersję protokołu HTTP, która ma na celu rozwiązanie wielu problemów, których nie przewidzieli twórcy HTTP/1.1.

Chociaż protokół HTTP/1.1 jest nadal szeroko stosowany, wiąże się z problemami z wydajnością związanymi z wykorzystaniem wielu połączeń TCP do przetwarzania wielu żądań z przeglądarki, co prowadzi do dużego obciążenia zasobów po stronie klienta, co prowadzi do pogorszenia wydajności sieci.

W miarę wzrostu złożoności i funkcjonalności aplikacji stworzono HTTP/2, aby rozwiązać niedociągnięcia HTTP/1.1, które obejmują długie nagłówki HTTP, powolne ładowanie stron internetowych i ogólną wydajność degradacja.

HTTP/2 zapewnia większą ochronę i prywatność niż jego poprzednik. Równie ważne jest zwiększenie wydajności poprzez wykorzystanie multipleksowanych strumieni danych. Dzięki HTTP/2 pojedyncze połączenie TCP zapewnia efektywne wykorzystanie przepustowości, nawet podczas przesyłania wielu strumieni danych.

Sprawdź, jak włączyć protokół HTTP/2 na serwerze WWW Apache, używając:

  • Jak włączyć HTTP/2 w Apache na Ubuntu

7. Ogranicz dostęp do poufnych katalogów w Apache

Innym środkiem bezpieczeństwa, jaki możesz zastosować, jest ograniczenie dostępu do katalogów, które mogą zawierać poufne informacje, takie jak dane użytkownika, dzienniki i pliki konfiguracyjne.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

W powyższej konfiguracji opcja Wymagaj odmowy uniemożliwia dostęp każdemu, kto próbuje uzyskać dostęp do plików w /katalogu_wrażliwym.

Zapisz zmiany i zamknij plik. Następnie uruchom ponownie Apache, aby zmiany zaczęły obowiązywać.

8. Wyłącz dyrektywę ServerSignature w Apache

Dyrektywa ServerSignature w pliku konfiguracyjnym Apache dołącza stopkę do dokumentów generowanych przez serwer, które zawierają informacje o konfiguracji Twojego serwera internetowego, takie jak wersja i system operacyjny, na którym jest on uruchomiony. Ujawnienie kluczowych szczegółów serwera WWW złośliwym podmiotom znacznie zwiększy ryzyko ataku.

Aby zapobiec ujawnieniu takich informacji, musisz wyłączyć tę dyrektywę w pliku konfiguracyjnym Apache:

ServerSignature Off

Zapisz zmiany i ponownie uruchom Apache, aby zmiany zaczęły obowiązywać.

sudo systemctl restart apache2

9. Ustaw dyrektywę „ServerTokens” na „Prod”

Dyrektywa „ServerTokens” kontroluje, jakie informacje wysyła serwer, w tym wersję Apache (wersja główna i pomocnicza), system operacyjny i typ działającego serwera WWW.

Najmniejszą informacją, którą chciałbyś udostępnić opinii publicznej, jest to, że serwerem WWW jest Apache. Wszystko inne naraziłoby tylko Twój serwer na potencjalne ataki. Dlatego zaleca się ustawienie dyrektywy „ServerTokens” w pliku konfiguracyjnym Apache na „prod”.

ServerTokens Off

Jak zawsze zapisz zmiany i pamiętaj o ponownym uruchomieniu Apache.

10. Zabezpiecz Apache za pomocą Fail2ban

Fail2ban to aplikacja typu open source do zapobiegania włamaniom, która chroni systemy Linux przed zagrożeniami zewnętrznymi, w tym DoS i atakami typu brute-force. Działa poprzez ciągłe monitorowanie dzienników systemowych pod kątem nikczemnej aktywności i blokowanie hostów, które pasują do wzorców naśladujących zachowanie ataku.

Fail2ban można skonfigurować tak, aby chronił Apache przed atakami DoS poprzez ciągłe monitorowanie dzienników Apache pod kątem nieudanych prób logowania i tymczasowe blokowanie niewłaściwych adresów IP.

Sprawdź, jak zainstalować Fail2ban w systemie Linux, używając:

  • Jak używać Fail2ban do zabezpieczenia serwera Linux

11. Wyłącz niepotrzebne moduły

Moduły Apache to po prostu programy ładowane w celu rozszerzenia funkcjonalności serwera WWW. Funkcje rozszerzone przez moduły obejmują podstawowe uwierzytelnianie, buforowanie zawartości, szyfrowanie, bezpieczeństwo itp.

Zawsze zaleca się wyłączenie wszystkich modułów, które nie są aktualnie używane, aby zminimalizować ryzyko padnięcia ofiarą ataku.

Aby wyświetlić wszystkie włączone moduły, uruchom polecenie

apache2ctl -M

Aby sprawdzić, czy dany moduł jest włączony, na przykład moduł przepisywania, uruchom komendę.

apache2ctl -M | grep rewrite

Aby wyłączyć moduł, uruchom komendę:

sudo a2dismod rewrite 

12. Użyj modułów mod_security i mod_evasive, aby zabezpieczyć Apache

Możesz włączyć moduły mod_security i mod_evasive, aby zabezpieczyć Apache przed atakami brute-force lub atakami DDoS.

  • Moduł mod_security działa jak zapora sieciowa aplikacji internetowych (WAF) i blokuje podejrzany i niechciany ruch w Twojej witrynie.
  • Moduł mod_evasive chroni Twój serwer przed atakami typu brute-force i odmową usługi (DoS).

Przeczytaj więcej o tym, jak chronić Apache za pomocą modułów mod_security i mod_evasive.

13. Ograniczone niechciane usługi w Apache

Aby jeszcze bardziej zabezpieczyć Apache, rozważ wyłączenie niektórych usług, takich jak dowiązania symboliczne i wykonywanie CGI, jeśli nie są obecnie wymagane. Domyślnie Apache podąża za dowiązaniami symbolicznymi, możemy wyłączyć tę funkcję, a także funkcję -Includes i CGI w jednej linii.

Aby to zrobić, dodaj wiersz '-ExecCGI -FollowSymLinks -Includes' dla dyrektywy „Opcje” w sekcji „Katalog”.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Można to osiągnąć również na poziomie katalogu. Na przykład tutaj wyłączamy wykonywanie plików include i Cgi dla katalogu „/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Zapisz zmiany i uruchom ponownie Apache.

14. Ogranicz rozmiar przesyłanego pliku w Apache

Innym sposobem zabezpieczenia serwera WWW jest ograniczenie całkowitego rozmiaru treści żądania HTTP wysyłanego do serwera WWW od klienta. Można to ustawić w kontekście serwera, katalogu, pliku lub lokalizacji.

Na przykład, jeśli chcesz zezwolić na przesyłanie plików do określonego katalogu, powiedz katalog /var/www/domain.com/wp-uploads i ogranicz rozmiar przesyłanego pliku do 4M=4194304Bytes, dodaj następującą dyrektywę do pliku konfiguracyjnego Apache lub pliku .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Zapisz zmiany i pamiętaj o ponownym uruchomieniu Apache.

Można to ustawić w kontekście serwera, katalogu, pliku lub lokalizacji. Dyrektywa zapobiega nieprawidłowemu zachowaniu żądań klientów, które czasami może być formą ataku typu „odmowa usługi” (DoS).

15. Włącz logowanie w Apache

Rejestrowanie udostępnia wszystkie szczegółowe informacje na temat żądań klientów i wszelkie inne informacje dotyczące wydajności Twojego serwera WWW. Zapewnia to przydatne informacje na wypadek, gdyby coś poszło nie tak. Włączenie dzienników Apache, zwłaszcza w plikach hosta wirtualnego, pozwala zlokalizować problem w przypadku, gdy coś pójdzie nie tak z serwerem WWW.

Aby włączyć rejestrowanie, musisz dołączyć moduł mod_log_config, który udostępnia dwie główne dyrektywy dotyczące rejestrowania.

  • ErrorLog – określa ścieżkę pliku dziennika błędów.
  • CustomLog – tworzy i formatuje plik dziennika.

Możesz użyć tych atrybutów w pliku hosta wirtualnego w sekcji hosta wirtualnego, aby włączyć rejestrowanie.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Dyrektywa {APACHE_LOG_DIR w systemach Debian jest zdefiniowana jako ścieżka /var/log/apache2.

16. Uruchom Apache jako oddzielny użytkownik i grupa

Uruchamianie Apache jako oddzielny użytkownik i grupa jest powszechną praktyką związaną z bezpieczeństwem. W ten sposób można odizolować proces serwera WWW od innych procesów systemowych i zminimalizować potencjalne szkody w przypadku naruszenia bezpieczeństwa serwera WWW.

Najpierw utwórz nowego użytkownika i grupę specjalnie dla Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Następnie musisz edytować plik konfiguracyjny Apache, aby określić nowego użytkownika i grupę.

User apacheuser
Group apachegroup

Ponieważ zmieniasz użytkownika i grupę uruchamianą przez Apache, może być konieczna aktualizacja własności katalogów internetowych i plików, aby mieć pewność, że Apache nadal będzie mógł je odczytać.

sudo chown -R apacheuser:apachegroup /var/www/html

Po wprowadzeniu tych zmian uruchom ponownie Apache, aby je zastosować:

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. Chroń ataki i hartowanie DDOS

Cóż, to prawda, że nie da się w pełni zabezpieczyć swojej witryny przed atakami DDoS. Poniżej znajduje się jednak kilka wskazówek, które pomogą Ci je złagodzić i zarządzać nimi.

  • TimeOut – ta dyrektywa pozwala określić czas, przez który serwer będzie czekał na zakończenie określonych zdarzeń, zanim zwróci błąd. Wartość domyślna to 300 sekund. W przypadku witryn podatnych na ataki DDoS zaleca się utrzymywanie tej wartości na niskim poziomie. Jednak odpowiednie ustawienie w dużej mierze zależy od charakteru żądań otrzymywanych przez Twoją witrynę. Uwaga: niski limit czasu może powodować problemy z niektórymi skryptami CGI.
  • MaxClients – ta dyrektywa ustala limit liczby połączeń, które mogą być obsługiwane jednocześnie. Wszelkie nowe połączenia przekraczające ten limit będą umieszczane w kolejce. Jest dostępny zarówno w wersji Prefork, jak i Worker MPM. Wartość domyślna to 256.
  • KeepAliveTimeout – ta dyrektywa określa czas oczekiwania serwera na kolejne żądanie przed zamknięciem połączenia. Wartość domyślna to 5 sekund.
  • LimitRequestFields – ta dyrektywa ustawia limit liczby pól nagłówka żądania HTTP akceptowanych przez klientów. Wartość domyślna to 100. Jeśli dochodzi do ataków DDoS z powodu nadmiernej liczby nagłówków żądań HTTP, zaleca się zmniejszenie tej wartości.
  • LimitRequestFieldSize – ta dyrektywa ustawia limit rozmiaru nagłówka żądania HTTP.

18. Wykonuj regularne skanowanie w poszukiwaniu luk

Innym sposobem zabezpieczenia serwera WWW jest przeprowadzanie regularnych testów skanowania pod kątem luk w zabezpieczeniach. Pomaga to zidentyfikować potencjalne luki w zabezpieczeniach, które mogą zostać wykorzystane przez hakerów w celu uzyskania dostępu do wrażliwych plików lub wstrzyknięcia złośliwego oprogramowania.

Narzędzia do skanowania podatności pomagają również wskazać niebezpieczne ustawienia konfiguracyjne i pomóc w inspekcji pod kątem zgodności. Popularne narzędzia do skanowania podatności obejmują Acutenix, Nessus, Nexpose, Sucuri i wiele innych.

Wniosek

Oto niektóre wskazówki dotyczące wzmacniania serwera Apache, które możesz wdrożyć na swoim serwerze internetowym, aby zapewnić dodatkową warstwę ochrony i powstrzymać włamania.