18 Savjeti za sigurnost i jačanje Apache web servera


Apache web server je jedan od najpopularnijih i najčešće korištenih web servera za hosting datoteka i web stranica. Lako se instalira i konfiguriše kako bi zadovoljio vaše potrebe za hostingom. Međutim, zadane postavke nisu sigurne da bi ponudile prijeko potrebnu zaštitu koja je potrebna vašoj web-lokaciji.

U ovom vodiču razmatramo neke od savjeta i trikova za jačanje Apache servera koje možete primijeniti kako biste ojačali sigurnost vašeg web servera.

1. Kako sakriti verziju Apachea i informacije o OS-u

Po defaultu, Apache web server prikazuje svoju verziju u slučaju da pregledate pogrešan URL web stranice. Ispod je primjer stranice s greškom koja ukazuje da se stranica ne može pronaći na web lokaciji. Posljednji red označava verziju Apachea, OS hosta, IP adresu i port na kojem se sluša.

Nikada nije dobra ideja prikazati informacije vašeg web servera jer to može biti dobar poklon hakerima u njihovoj izviđačkoj misiji. Da biste dodali nivo sigurnosti i otežali hakerima, preporučujemo da sakrijete informacije o web serveru.

Da biste to učinili, otvorite zadanu Apache konfiguracijsku datoteku na distribucijama baziranim na Debianu.

sudo vim /etc/apache2/apache2.conf

Za sisteme zasnovane na RHEL-u kao što su RHEL, Fedora, CentOS, Rocky i AlmaLinux jako>.

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

Dodajte sljedeće redove na kraj datoteke.

ServerTokens Prod
ServerSignature Off

Sačuvajte promene i ponovo pokrenite Apache web server.

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

Sada ponovo učitajte stranicu i, ovog puta, informacije o web serveru neće biti prikazane.

2. Onemogućite popis direktorija u Apacheu

Prema zadanim postavkama, Apache dozvoljava popis direktorija, a posjetitelji mogu vidjeti sve datoteke ili direktorije koje imate u vašem Root-u dokumenta direktoriju.

Da bismo to demonstrirali, kreirat ćemo direktorij pod nazivom test.

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

Zatim ćemo se navigirati u direktorij i kreirati nekoliko datoteka.

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

Sada, ako pristupimo URL-u, http://localhost/test, moći ćemo vidjeti popis direktorija.

Da biste onemogućili popis direktorija, prijeđite na Apacheov glavni konfiguracijski fajl i potražite atribut 'Directory'. Postavite parametar 'Opcije' na '-Indeksi' kao što je prikazano.

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

Ponovo učitajte Apache i ovaj put, kada posjetite URL, direktoriji više neće biti prikazani.

3. Redovno ažurirajte Apache

Uvijek se preporučuje da sve svoje aplikacije održavate ažurnim, jer najnovije aplikacije dolaze s ispravkama grešaka i sigurnosnim zakrpama koje rješavaju temeljne ranjivosti prisutne u starijim verzijama softvera.

Stoga se preporučuje redovno nadograđivanje vaših aplikacija na njihove najnovije verzije.

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

4. Koristite HTTPS enkripciju na Apacheu

Apache, prema zadanim postavkama, koristi HTTP protokol koji je slab i nesiguran protokol koji je sklon prisluškivanju. Da biste poboljšali sigurnost vaše web lokacije i, štoviše, poboljšali svoje Google SEO rangiranje, razmislite o šifriranju vaše web stranice pomoću SSL certifikata.

Na taj način on prebacuje zadani HTTP protokol na HTTPS, što otežava bilo kome da presretne i dešifruje komunikaciju koja se šalje sa servera napred i nazad.

Provjerite kako osigurati Apache web server korištenjem Let’s Encrypt SSL na Linuxu.

  • Kako osigurati Apache pomoću Let’s Encrypt SSL certifikata na RHEL-u
  • Kako osigurati Apache s besplatnim Let’s Encrypt SSL certifikatom na Ubuntu i Debianu

5. Omogućite HTTP strogu sigurnost transporta (HSTS) za Apache

Osim šifriranja vaše web stranice TLS/SSL certifikatom, razmislite o implementaciji HSTS mehanizma web sigurnosti na HTTPS.

HTTP stroga sigurnost transporta (HSTS) je mehanizam politike koji štiti web stranice od napada "čovjek u sredini" i otmice kolačića. Ovo se dešava kada napadači sniže HTTPS protokol na nebezbedni HTTP protokol.

HSTS omogućava web serveru da striktno izjavi da web pretraživači trebaju komunicirati s njim samo putem HTTPS-a, a nikako putem HTTP protokola.

Da omogućite HSTS, uvjerite se da vaša web stranica radi HTTPS i da ima važeći TLS/SSL certifikat.

Zatim omogućite modul zaglavlja za Apache:

sudo a2enmod headers

Zatim ponovo učitajte Apache da primijenite promjene.

sudo systemctl restart apache2

Zatim pristupite konfiguracijskoj datoteci virtualnog hosta vaše domene.

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

Zatim dodajte ovaj red unutar bloka:

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

Ovo izgleda ovako.

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

Parametar max-age upućuje web pretraživače da pristupe vašoj web stranici samo koristeći HTTPS u narednih godinu dana (31536000=1 godina).

Konačno, ponovo pokrenite Apache da bi politika HSTS stupila na snagu.

sudo systemctl restart apache2

6. Omogućite HTTP/2 na Apache-u

2015. godine objavljen je HTTP/2, nova verzija HTTP protokola koja nastoji da adresira ili riješi više problema koje kreatori HTTP/1.1 nisu predvidjeli.

Iako je HTTP/1.1 još uvijek u širokoj upotrebi, povezan je s problemima performansi povezanim s korištenjem više TCP veza za obradu više zahtjeva iz preglednika, što dovodi do velikih troškova resursa na strani klijenta, što dovodi do pogoršanja performansi mreže.

Kako su aplikacije rasle u složenosti i funkcionalnosti, HTTP/2 je kreiran kako bi riješio nedostatke HTTP/1.1 koji uključuju duga HTTP zaglavlja, spore brzine učitavanja web stranica i opće performanse degradacija.

HTTP/2 pruža više zaštite i privatnosti od svog prethodnika. Jednako važno, poboljšane su performanse korištenjem multipleksiranih tokova podataka. Sa HTTP/2 jedna TCP veza osigurava efikasno korištenje propusnog opsega, čak i kada se prenosi više tokova podataka.

Provjerite kako omogućiti HTTP/2 na Apache web serveru koristeći:

  • Kako omogućiti HTTP/2 u Apacheu na Ubuntu

7. Ograničite pristup osjetljivim direktorijima u Apacheu

Još jedna sigurnosna mjera koju možete poduzeti je da ograničite pristup direktorijima koji mogu sadržavati osjetljive informacije kao što su korisnički podaci, zapisnici i konfiguracijske datoteke.

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

    # Other virtual host settings

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

U gornjoj konfiguraciji Zahtijevaj sve odbijeno odbija pristup svima koji pokušavaju pristupiti datotekama u /osjetljivom_direktoriju.

Sačuvajte promjene i izađite iz datoteke. Zatim ponovo pokrenite Apache da bi promjene stupile na snagu.

8. Onemogućite Direktivu ServerSignature u Apacheu

Direktiva ServerSignature u Apache konfiguracijskoj datoteci dodaje podnožje dokumentima generiranim na serveru koji nose informacije o konfiguraciji vašeg web servera, kao što su verzija i OS na kojem je pokrenut. Izlaganje ključnih detalja o vašem web serveru zlonamjernim akterima značajno će povećati šanse za napad.

Da biste spriječili izlaganje takvih informacija, morate onemogućiti ovu direktivu u Apache konfiguracijskoj datoteci:

ServerSignature Off

Sačuvajte promjene i ponovo pokrenite Apache kako bi promjene stupile na snagu.

sudo systemctl restart apache2

9. Postavite Direktivu 'ServerTokens' na 'Prod'

Direktiva ‘ServerTokens’ kontrolira koje informacije server šalje uključujući Apache verziju (glavnu i manju verziju), OS i tip web servera koji radi.

Najmanja količina informacija koju biste željeli izložiti javnosti je da je web server Apache. Sve drugo bi samo izložilo vaš server potencijalnim napadima. Stoga je preporučljivo postaviti direktivu ‘ServerTokens’ u Apache konfiguracijskoj datoteci na ‘prod’.

ServerTokens Off

Kao i uvijek sačuvajte promjene i obavezno ponovo pokrenite Apache.

10. Osigurajte Apache sa Fail2ban

Fail2ban je aplikacija za prevenciju upada otvorenog koda koja štiti Linux sisteme od vanjskih prijetnji uključujući DoS i napade grubom silom. Radi tako što stalno nadgleda sistemske dnevnike za zlobne aktivnosti i zabranjuje hostove koji odgovaraju obrascima koji oponašaju ponašanje napada.

Fail2ban se može konfigurirati da zaštiti Apache od DoS napada stalnim praćenjem Apache dnevnika za neuspjele pokušaje prijave i privremenom zabranom uvredljivih IP-ova.

Provjerite kako instalirati Fail2ban na Linux koristeći:

  • Kako koristiti Fail2ban za osiguranje vašeg Linux servera

11. Onemogućite nepotrebne module

Apache moduli su jednostavno programi koji se učitavaju radi proširenja funkcionalnosti web servera. Funkcije proširene modulima uključuju osnovnu autentifikaciju, keširanje sadržaja, enkripciju, sigurnost itd.

Uvijek se preporučuje da onemogućite sve one module koji se trenutno ne koriste kako biste smanjili šanse da postanete žrtva napada.

Da vidite sve omogućene module, pokrenite naredbu

apache2ctl -M

Da biste provjerili da li je određeni modul omogućen, na primjer, modul za ponovno pisanje, pokrenite naredbu.

apache2ctl -M | grep rewrite

Da biste onemogućili modul, pokrenite naredbu:

sudo a2dismod rewrite 

12. Koristite mod_security i mod_evasive module da osigurate Apache

Možete omogućiti module mod_security i mod_evasive da osigurate Apache od brute-force napada ili DDoS napada.

  • Modul mod_security djeluje kao firewall web aplikacije (WAF) i blokira sumnjiv i neželjen promet na vašoj web lokaciji.
  • Modul mod_evasive štiti vaš server od brutalne sile i napada uskraćivanja usluge (DoS).

Pročitajte više o tome kako zaštititi Apache koristeći mod_security i mod_evasive module.

13. Ograničene neželjene usluge u Apache-u

Da dodatno osigurate Apache, razmislite o onemogućavanju određenih usluga kao što su simbolički linkovi i CGI izvršavanje ako trenutno nisu potrebni. Po defaultu, Apache prati simbolične veze, možemo isključiti ovu funkciju kao i -Includes funkciju i CGI u jednom redu.

Da biste to učinili, dodajte redak '-ExecCGI -FollowSymLinks -Includes' za direktivu ‘Options’ u odjeljku ‘Directory’.

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

Ovo se također može postići na nivou direktorija. Na primjer, ovdje isključujemo izvršavanje Includes i Cgi datoteka za “/var/www/html/mydomain1” direktorij.

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

Sačuvajte promene i ponovo pokrenite Apache.

14. Ograničite veličinu otpremanja datoteka u Apache

Drugi način osiguranja vašeg web servera je ograničavanje ukupne veličine tijela HTTP zahtjeva poslanog web serveru od klijenta. Možete ga postaviti u kontekstu servera, po direktoriju, po datoteci ili po lokaciji.

Na primjer, ako želite dopustiti otpremanje datoteke u određeni direktorij, recite /var/www/domain.com/wp-uploads direktorij i ograničite veličinu učitane datoteke na 4M=4194304 bajtova, dodajte sljedeću direktivu u vašu Apache konfiguracijsku datoteku ili .htaccess datoteku.

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

Sačuvajte promjene i ne zaboravite ponovo pokrenuti Apache.

Možete ga postaviti u kontekstu servera, po direktoriju, po datoteci ili po lokaciji. Direktiva sprječava abnormalno ponašanje zahtjeva klijenta koje ponekad može biti oblik napada uskraćivanja usluge (DoS).

15. Omogućite prijavljivanje u Apache

Evidentiranje pruža sve detalje o zahtjevima klijenata i sve druge informacije koje se odnose na performanse vašeg web servera. Ovo pruža korisne informacije u slučaju da nešto krene po zlu. Omogućavanje Apache dnevnika, posebno u virtuelnim datotekama hosta, omogućava vam da precizno odredite problem u slučaju da nešto krene po zlu sa web serverom.

Da biste omogućili evidentiranje, morate uključiti mod_log_config modul, koji pruža dvije glavne direktive za evidentiranje.

  • ErrorLog – Određuje putanju datoteke evidencije grešaka.
  • CustomLog – Kreira i formatira datoteku dnevnika.

Možete koristiti ove atribute u datoteci virtuelnog hosta u sekciji virtuelnog hosta da biste omogućili evidentiranje.

<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>

Direktiva {APACHE_LOG_DIR} u Debian sistemima je definirana kao /var/log/apache2 staza.

16. Pokrenite Apache kao odvojenog korisnika i grupe

Pokretanje Apachea kao zasebnog korisnika i grupe je uobičajena sigurnosna praksa. Na taj način možete izolovati proces web servera od drugih sistemskih procesa i minimizirati potencijalnu štetu ako je web server kompromitovan.

Prvo, htjet ćete kreirati novog korisnika i grupu posebno za Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Zatim ćete morati urediti Apache konfiguracijsku datoteku da navedete novog korisnika i grupu.

User apacheuser
Group apachegroup

Budući da mijenjate korisnika i grupu koju Apache pokreće jer ćete možda morati ažurirati vlasništvo nad web direktorijima i datotekama kako biste osigurali da ih Apache i dalje može čitati.

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

Nakon što izvršite ove promjene, ponovo pokrenite Apache da biste ih primijenili:

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

17. Zaštitite DDOS napade i otvrdnjavanje

Pa, istina je da ne možete u potpunosti zaštititi svoju web stranicu od DDoS napada. Međutim, evo nekoliko smjernica koje vam mogu pomoći da ih ublažite i upravljate njima.

  • TimeOut – Ova direktiva vam omogućava da odredite trajanje koje će server čekati da se određeni događaji završe prije nego što vrati grešku. Zadana vrijednost je 300 sekundi. Za web lokacije podložne DDoS napadima, preporučljivo je zadržati ovu vrijednost niskom. Međutim, odgovarajuća postavka uvelike ovisi o prirodi zahtjeva koje vaša web stranica prima. Napomena: Nisko vremensko ograničenje može uzrokovati probleme s nekim CGI skriptama.
  • MaxClients – Ova direktiva postavlja ograničenje broja veza koje se mogu istovremeno opsluživati. Sve nove veze koje prelaze ovo ograničenje bit će stavljene u red čekanja. Dostupan je u Prefork i Worker MPM-ovima. Zadana vrijednost je 256.
  • KeepAliveTimeout – Ova direktiva određuje trajanje koje će server čekati na sljedeći zahtjev prije zatvaranja veze. Zadana vrijednost je 5 sekundi.
  • LimitRequestFields – Ova direktiva postavlja ograničenje na broj polja zaglavlja HTTP zahtjeva koje prihvaćaju klijenti. Zadana vrijednost je 100. Ako se DDoS napadi dešavaju zbog prevelikog broja zaglavlja HTTP zahtjeva, preporučuje se smanjenje ove vrijednosti.
  • LimitRequestFieldSize – Ova direktiva postavlja ograničenje veličine za zaglavlje HTTP zahtjeva.

18. Vršite redovno skeniranje ranjivosti

Drugi način zaštite vašeg web servera je provođenje redovnih testova skeniranja ranjivosti. Ovo pomaže u identifikaciji potencijalnih sigurnosnih rupa koje bi hakeri mogli iskoristiti za pristup osjetljivim datotekama ili ubacivanje zlonamjernog softvera.

Alati za skeniranje ranjivosti također pomažu u uočavanju nesigurnih postavki konfiguracije i pomažu u kontroli usklađenosti. Popularni alati za skeniranje ranjivosti uključuju Acutenix, Nessus, Nexpose, Sucuri i mnoge druge.

Zaključak

Ovo su neki od savjeta za učvršćivanje Apachea koje možete implementirati na svoj web server kako biste pružili dodatni sloj zaštite i držali upade podalje.