18 Apache Web Server sikkerhet og herding tips


Apache webserver er en av de mest populære og mest brukte webserverne for å være vert for filer og nettsteder. Det er enkelt å installere og konfigurere for å møte dine hostingbehov. Standardinnstillingene er imidlertid ikke sikre for å tilby den sårt tiltrengte beskyttelsen som nettstedet ditt trenger.

I denne guiden ser vi på noen av Apache-serverherdingstipsene og triksene du kan implementere for å styrke sikkerheten til webserveren din.

1. Hvordan skjule Apache-versjon og OS-informasjon

Som standard viser Apache-nettserveren sin versjon i tilfelle du blar gjennom feil URL til et nettsted. Nedenfor er et eksempel på en feilside som indikerer at siden ikke kan bli funnet på nettstedet. Den siste linjen indikerer Apache-versjonen, vertsoperativsystemet, IP-adressen og porten den lytter på.

Det er aldri lurt å vise nettserverens informasjon, da dette kan være en god gave til hackere i deres rekognoseringsoppdrag. For å legge til et sikkerhetslag og gjøre det vanskeligere for hackere, anbefales det å skjule webserverinformasjonen.

For å gjøre dette, åpne standard Apache-konfigurasjonsfilen på Debian-baserte distribusjoner.

sudo vim /etc/apache2/apache2.conf

For RHEL-baserte systemer som RHEL, Fedora, CentOS, Rocky og AlmaLinux sterk>.

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

Legg til følgende linjer på slutten av filen.

ServerTokens Prod
ServerSignature Off

Lagre endringene og start Apache-nettserveren på nytt.

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

Last inn siden på nytt, og denne gangen vil ikke webserverinformasjonen vises.

2. Deaktiver katalogoppføring i Apache

Som standard tillater Apache katalogoppføring, og besøkende kan se hvilke filer eller kataloger du måtte ha i Document Root-katalogen.

For å demonstrere dette vil vi lage en katalog som heter test.

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

Deretter vil vi navigere inn i katalogen og lage noen få filer.

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

Nå, hvis vi får tilgang til URL-en, http://localhost/test, vil vi kunne se katalogoppføringen.

For å deaktivere katalogoppføringen, gå over til Apaches hovedkonfigurasjonsfil og søk etter «Directory»-attributtet. Sett «Alternativer»-parameteren til '-Indekser' som vist.

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

Last inn Apache på nytt, og denne gangen, når du besøker URL-en, vil ikke katalogene lenger vises.

3. Oppdater Apache regelmessig

Det anbefales alltid å holde alle applikasjonene dine oppdatert, siden de nyeste applikasjonene kommer med feilrettinger og sikkerhetsoppdateringer som adresserer underliggende sårbarheter som finnes i eldre programvareversjoner.

Derfor anbefales det å regelmessig oppgradere applikasjonene til de nyeste versjonene.

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

4. Bruk HTTPS-kryptering på Apache

Apache bruker som standard HTTP-protokoll, som er en svak og usikker protokoll som er utsatt for avlytting. For å forbedre nettstedets sikkerhet og, enda bedre, forbedre Google SEO-rangeringene dine, bør du vurdere å kryptere nettstedet ditt med et SSL-sertifikat.

Ved å gjøre det bytter den standard HTTP-protokollen til HTTPS, og gjør det dermed vanskeligere for noen å fange opp og tyde kommunikasjon som sendes frem og tilbake fra serveren.

Sjekk ut hvordan du sikrer Apache-nettserveren ved å bruke La oss kryptere SSL på Linux.

  • Hvordan sikre Apache med Let's Encrypt SSL-sertifikat på RHEL
  • Hvordan sikre Apache med gratis Let's Encrypt SSL-sertifikat på Ubuntu og Debian

5. Aktiver HTTP Strict Transport Security (HSTS) for Apache

I tillegg til å kryptere nettstedet ditt med et TLS/SSL-sertifikat, bør du vurdere å implementere nettsikkerhetsmekanismen HSTS på toppen av HTTPS.

HTTP Strict Transport Security (HSTS) er en policymekanisme som beskytter nettsteder fra man-in-the-midten-angrep og kapring av informasjonskapsler. Dette skjer når angripere nedgraderer HTTPS-protokollen til den usikre HTTP-protokollen.

HSTS gjør det mulig for nettserveren å strengt deklarere at nettlesere kun skal samhandle med den via HTTPS, og aldri gjennom HTTP-protokollen.

For å aktivere HSTS, sørg for at nettstedet ditt kjører HTTPS og har et gyldig TLS/SSL-sertifikat.

Deretter aktiverer du header-modulen for Apache:

sudo a2enmod headers

Last deretter inn Apache på nytt for å bruke endringene.

sudo systemctl restart apache2

Deretter får du tilgang til domenets konfigurasjonsfil for virtuell vert.

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

Deretter legger du til denne linjen i blokken :

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

Dette ser ut som følger.

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

max-age-parameteren instruerer nettlesere om å bare få tilgang til nettstedet ditt ved å bruke HTTPS det neste året (31536000=1 år).

Til slutt, start Apache på nytt for at HSTS-policyen skal tre i kraft.

sudo systemctl restart apache2

6. Aktiver HTTP/2 på Apache

I 2015 ble HTTP/2 utgitt, som er en ny versjon av HTTP-protokollen som søker å løse eller løse flere problemer som skaperne av HTTP/1.1 ikke forutså.

Mens HTTP/1.1 fortsatt er mye i bruk, er det assosiert med ytelsesproblemer knyttet til bruk av flere TCP-tilkoblinger for å behandle flere forespørsler fra nettleseren, noe som fører til høye ressurskostnader på klientsiden, fører til redusert nettverksytelse.

Etter hvert som applikasjoner vokste i kompleksitet og funksjonalitet, ble HTTP/2 laget for å løse manglene ved HTTP/1.1, som inkluderer lange HTTP-overskrifter, sakte lastehastigheter for nettsider og generell ytelse degradering.

HTTP/2 gir mer beskyttelse og personvern enn forgjengeren. Like viktig er forbedret ytelse gjennom bruk av multipleksede datastrømmer. Med HTTP/2 sikrer en enkelt TCP-tilkobling effektiv båndbreddeutnyttelse, selv når du overfører flere datastrømmer.

Sjekk ut hvordan du aktiverer HTTP/2 på Apache-nettserveren ved å bruke:

  • Slik aktiverer du HTTP/2 i Apache på Ubuntu

7. Begrens tilgang til sensitive kataloger i Apache

Et annet sikkerhetstiltak du kan ta er å begrense tilgangen til kataloger som kan inneholde sensitiv informasjon som brukerdata, logger og konfigurasjonsfiler.

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

    # Other virtual host settings

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

I konfigurasjonen ovenfor nekter Require all denied tilgang til alle som prøver å få tilgang til filer i /sensitive_directory.

Lagre endringene og avslutt filen. Start deretter Apache på nytt for at endringene skal tre i kraft.

8. Deaktiver ServerSignature-direktivet i Apache

ServerSignature-direktivet i Apache-konfigurasjonsfilen legger til en bunntekst til servergenererte dokumenter som inneholder informasjon om nettserverens konfigurasjon, for eksempel versjonen og operativsystemet den kjører på. Å eksponere viktige detaljer om webserveren din for ondsinnede aktører vil øke sjansene for et angrep betraktelig.

For å forhindre eksponering av slik informasjon, må du deaktivere dette direktivet i Apache-konfigurasjonsfilen:

ServerSignature Off

Lagre endringene og start Apache på nytt for at endringene skal tre i kraft.

sudo systemctl restart apache2

9. Sett 'ServerTokens'-direktivet til 'Prod'

ServerTokens’-direktivet kontrollerer hvilken informasjon serveren sender, inkludert Apache-versjon (hoved- og mindreversjon), OS og typen webserver som kjører.

Den minste mengden informasjon du ønsker å eksponere for offentligheten er at webserveren er Apache. Noe annet vil bare eksponere serveren din for potensielle angrep. Derfor anbefales det å sette 'ServerTokens'-direktivet i Apache-konfigurasjonsfilen til 'prod'.

ServerTokens Off

Som alltid lagre endringene og sørg for å starte Apache på nytt.

10. Sikre Apache med Fail2ban

Fail2ban er en åpen kildekode-inntrengningsforebyggende applikasjon som beskytter Linux-systemer mot eksterne trusler, inkludert DoS og brute-force-angrep. Det fungerer ved å konstant overvåke systemlogger for ondsinnet aktivitet og utestenge verter som samsvarer med mønstre som etterligner angrepsatferd.

Fail2ban kan konfigureres til å beskytte Apache mot DoS-angrep ved å konstant overvåke Apache-logger for mislykkede påloggingsforsøk og midlertidig utestenge støtende IP-er.

Sjekk ut hvordan du installerer Fail2ban på Linux ved å bruke:

  • Slik bruker du Fail2ban for å sikre Linux-serveren din

11. Deaktiver unødvendige moduler

Apache-moduler er ganske enkelt programmer som lastes inn for å utvide funksjonaliteten til webserveren. Funksjoner utvidet med moduler inkluderer grunnleggende autentisering, innholdsbufring, kryptering, sikkerhet, etc.

Det anbefales alltid å deaktivere alle de modulene som ikke er i bruk for øyeblikket for å minimere sjansene for å bli offer for et angrep.

For å se alle aktiverte moduler, kjør kommandoen

apache2ctl -M

For å sjekke om en bestemt modul er aktivert, for eksempel omskrivingsmodulen, kjør kommandoen.

apache2ctl -M | grep rewrite

For å deaktivere modulen, kjør kommandoen:

sudo a2dismod rewrite 

12. Bruk mod_security og mod_evasive moduler for å sikre Apache

Du kan aktivere modulene mod_security og mod_evasive for å sikre Apache mot brute-force-angrep eller DDoS-angrep.

  • Modulen mod_security fungerer som en brannmur for nettapplikasjoner (WAF) og blokkerer mistenkelig og uønsket trafikk til nettstedet ditt.
  • Modulen mod_evasive beskytter serveren din mot brute force og denial of service-angrep (DoS).

Les mer om hvordan du beskytter Apache ved å bruke mod_security og mod_evasive moduler.

13. Begrensede uønskede tjenester i Apache

For å sikre Apache ytterligere, bør du vurdere å deaktivere visse tjenester som symbolske lenker og CGI-kjøring hvis det ikke er nødvendig for øyeblikket. Som standard følger Apache symbolkoblinger, vi kan slå av denne funksjonen samt funksjonen -Inkluderer og CGI på én linje.

For å gjøre dette, legg til linjen '-ExecCGI -FollowSymLinks -Includes' for 'Options'-direktivet i 'Directory'-delen.

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

Dette kan også oppnås på katalognivå. For eksempel, her slår vi av Includes og Cgi-filkjøringer for “/var/www/html/mydomain1”-katalogen.

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

Lagre endringene og start Apache på nytt.

14. Begrens filopplastingsstørrelsen i Apache

En annen måte å sikre webserveren på er å begrense den totale størrelsen på HTTP-forespørselskroppen som sendes til webserveren fra en klient. Du kan sette den i sammenheng med server, per katalog, per fil eller per plassering.

Hvis du for eksempel vil tillate filopplasting til en bestemt katalog, si /var/www/domain.com/wp-uploads-katalogen, og begrense størrelsen på den opplastede filen til 4M=4194304Bytes, legg til følgende direktiv i Apache-konfigurasjonsfilen eller .htaccess-filen.

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

Lagre endringene og husk å starte Apache på nytt.

Du kan sette den i sammenheng med server, per katalog, per fil eller per plassering. Direktivet avverger unormal klientforespørselsadferd som noen ganger kan være en form for tjenestenektangrep (DoS).

15. Aktiver pålogging i Apache

Logging gir alle detaljer om klientforespørsler og annen informasjon knyttet til ytelsen til webserveren din. Dette gir nyttig informasjon i tilfelle noe skulle gå galt. Aktivering av Apache-logger, spesielt i virtuelle vertsfiler, lar deg finne et problem i tilfelle noe går galt med webserveren.

For å aktivere logging, må du inkludere mod_log_config-modulen, som gir to hovedloggingsdirektiver.

  • ErrorLog – Angir banen til feilloggfilen.
  • CustomLog – Oppretter og formaterer en loggfil.

Du kan bruke disse attributtene i en virtuell vertsfil i den virtuelle vertsdelen for å aktivere logging.

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

{APACHE_LOG_DIR}-direktivet i Debian-systemer er definert som /var/log/apache2-bane.

16. Kjør Apache som en separat bruker og gruppe

Å kjøre Apache som en separat bruker og gruppe er en vanlig sikkerhetspraksis. Ved å gjøre det kan du isolere webserverprosessen fra andre systemprosesser og minimere potensiell skade hvis webserveren blir kompromittert.

Først vil du opprette en ny bruker og gruppe spesifikt for Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Deretter må du redigere Apache-konfigurasjonsfilen for å spesifisere den nye brukeren og gruppen.

User apacheuser
Group apachegroup

Siden du endrer brukeren og gruppen som Apache kjører, må du kanskje oppdatere eierskapet til nettkataloger og filer for å sikre at Apache fortsatt kan lese dem.

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

Etter å ha gjort disse endringene, start Apache på nytt for å bruke dem:

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

17. Beskytt DDOS-angrep og herding

Vel, det er sant at du ikke fullt ut kan beskytte nettstedet ditt mot DDoS-angrep. Men her er noen retningslinjer som kan hjelpe deg med å redusere og administrere dem.

  • Tidsavbrudd – Dette direktivet lar deg spesifisere hvor lang tid serveren skal vente på at visse hendelser skal fullføres før de returnerer en feil. Standardverdien er 300 sekunder. For nettsteder som er utsatt for DDoS-angrep, er det tilrådelig å holde denne verdien lav. Den riktige innstillingen avhenger imidlertid i stor grad av typen forespørsler nettstedet ditt mottar. Merk: Et lavt tidsavbrudd kan forårsake problemer med enkelte CGI-skript.
  • MaxClients – Dette direktivet setter grensen for antall tilkoblinger som kan betjenes samtidig. Alle nye tilkoblinger utover denne grensen vil bli satt i kø. Den er tilgjengelig både i Prefork og Worker MPM. Standardverdien er 256.
  • KeepAliveTimeout – Dette direktivet spesifiserer varigheten serveren vil vente på en påfølgende forespørsel før tilkoblingen lukkes. Standardverdien er 5 sekunder.
  • LimitRequestFields – Dette direktivet setter en grense for antall HTTP-forespørselshodefelt som aksepteres av klienter. Standardverdien er 100. Hvis DDoS-angrep forekommer på grunn av et for stort antall HTTP-forespørselshoder, anbefales det å redusere denne verdien.
  • LimitRequestFieldSize – Dette direktivet setter en størrelsesgrense for HTTP-forespørselshodet.

18. Utfør regelmessige sårbarhetsskanninger

En annen måte å beskytte webserveren din på er å utføre regelmessige tester for sårbarhetsskanning. Dette hjelper til med å identifisere potensielle sikkerhetshull som kan utnyttes av hackere for å få tilgang til sensitive filer eller injisere skadelig programvare.

Verktøy for sårbarhetsskanning hjelper også med å peke ut usikre konfigurasjonsinnstillinger og hjelp til å revidere for samsvar. Populære verktøy for sårbarhetsskanning inkluderer Acutenix, Nessus, Nexpose, Sucuri og mange flere.

Konklusjon

Dette er noen av Apache-herdingstipsene du kan implementere på webserveren din for å gi et ekstra lag med beskyttelse og holde inntrenging i sjakk.