13 Sikkerheds- og hærdningstips for Apache-webserver


Vi er alle meget fortrolige med Apache-webserveren, det er en meget populær webserver, der er vært for dine webfiler eller dit websted på nettet. Her er nogle links, der kan hjælpe dig med at konfigurere Apache-webserveren på din Linux-boks.

  1. Installer Apache-webserver
  2. Konfigurer dit websted i din Linux-boks

Her i denne vejledning vil jeg dække nogle hovedtip til at sikre din webserver. Inden du anvender disse ændringer på din webserver, skal du have nogle grundlæggende oplysninger om Apache-serveren.

  1. Dokumentrodkatalog:/var/www/html eller/var/www
  2. Hovedkonfigurationsfil: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) og /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Standard HTTP-port: 80 TCP
  4. HTTPS-standardport: 443 TCP
  5. Test dine konfigurationsfilindstillinger og syntaks: httpd -t
  6. Adgangslogfiler på webserveren:/var/log/httpd/access_log
  7. Fejllogfiler på webserveren:/var/log/httpd/error_log

1. Sådan skjules Apache-version og OS-identitet fra fejl

Når du installerer Apache med kilde eller andre pakkeinstallatører som yum, viser den versionen af din Apache-webserver installeret på din server med operativsystemnavnet på din server i fejl. Det viser også oplysningerne om Apache-moduler installeret på din server.

På billedet ovenfor kan du se, at Apache viser sin version med operativsystemet installeret på din server. Dette kan være en stor sikkerhedstrussel for din webserver såvel som din Linux-boks. For at forhindre, at Apache ikke viser disse oplysninger for verden, er vi nødt til at foretage nogle ændringer i Apache-hovedkonfigurationsfilen.

Åbn konfigurationsfil med vim editor og søg efter “ServerSignature”, dens er som standard Til. Vi har brug for at deaktivere denne serversignatur, og den anden linje "ServerTokens Prod" fortæller Apache at kun returnere Apache som produkt i serverresponsoverskriften på hver sideanmodning. Det undertrykker OS, større og mindre version info.

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

2. Deaktiver telefonbogsfortegnelse

Apache viser som standard alt indholdet af dokumentets rodmappe i mangel af en indeksfil. Se billedet nedenfor.

Vi kan slå katalogoversigten fra ved at bruge indstillingsdirektivet i konfigurationsfilen til en bestemt mappe. Til det er vi nødt til at foretage en post i httpd.conf- eller apache2.conf-filen.

<Directory /var/www/html>
    Options -Indexes
</Directory>

3. Fortsæt med at opdatere Apache regelmæssigt

Apache-udviklerfællesskabet arbejder løbende på sikkerhedsproblemer og frigiver sin opdaterede version med nye sikkerhedsindstillinger. Så det anbefales altid at bruge den nyeste version af Apache som din webserver.

Sådan kontrolleres Apache-version: Du kan kontrollere din aktuelle version med kommandoen httpd -v.

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

Du kan opdatere din version med følgende kommando.

# yum update httpd
# apt-get install apache2

Det anbefales også at holde din Kernel og OS opdateret til de seneste stabile udgivelser, hvis du ikke kører nogen specifik applikation, der kun fungerer på specifikt OS eller Kernel.

4. Deaktiver unødvendige moduler

Det er altid godt at mindske chancerne for at blive offer for ethvert webangreb. Så det anbefales at deaktivere alle de moduler, der ikke er i brug i øjeblikket. Du kan liste alle de kompilerede moduler på webserveren ved hjælp af følgende kommando.

# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
....

Ovenfor er listen over moduler, der er aktiveret som standard, men som ofte ikke er nødvendige: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. For at deaktivere det bestemte modul kan du indsætte et "#" i begyndelsen af denne linje og genstarte tjenesten.

5. Kør Apache som separat bruger og gruppe

Med en standardinstallation kører Apache sin proces med brugeren ingen eller dæmon. Af sikkerhedsmæssige årsager anbefales det at køre Apache på sin egen ikke-privilegerede konto. For eksempel: http-web.

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

Nu skal du fortælle Apache at køre med denne nye bruger, og for at gøre det skal vi lave en post i /etc/httpd/conf/httpd.conf og genstarte tjenesten.

Åbn /etc/httpd/conf/httpd.conf med vim editor og søg efter nøgleordet "Bruger" og "Gruppe", og der skal du angive det brugernavn og gruppenavn, der skal bruges.

User http-web
Group http-web

6. Brug Tillad og afvis for at begrænse adgangen til telefonbøger

Vi kan begrænse adgangen til mapper med indstillingerne "Tillad" og "Afvis" i filen httpd.conf. Her i dette eksempel vil vi sikre rodmappen til det ved at indstille følgende i filen httpd.conf.

<Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>

  1. Indstillinger "Ingen" - Denne indstilling tillader ikke brugere at aktivere valgfri funktioner.
  2. Nægtelse af ordre, tilladelse - Dette er den rækkefølge, hvor direktiverne "Afvis" og "Tillad" behandles. Her vil det "benægte" først og "tillade" næste.
  3. Afvis fra alle - Dette nægter anmodning fra alle til rodmappen, ingen vil kunne få adgang til rodmappen.

7. Brug mod_security og mod_evasive moduler til at sikre Apache

Disse to moduler "mod_security" og "mod_evasive" er meget populære moduler af Apache med hensyn til sikkerhed.

Hvor mod_security fungerer som en firewall til vores webapplikationer og giver os mulighed for at overvåge trafik i realtid. Det hjælper os også med at beskytte vores websteder eller webserver mod brute force-angreb. Du kan simpelthen installere mod_security på din server ved hjælp af dine standardpakkeinstallatører.

$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
# yum install mod_security
# /etc/init.d/httpd restart

mod_evasive fungerer meget effektivt, det tager en anmodning at behandle og behandler det meget godt. Det forhindrer DDOS-angreb i at gøre så meget skade. Denne funktion af mod_evasive gør det muligt at håndtere HTTP brute force og Dos eller DDos angreb. Dette modul registrerer angreb med tre metoder.

  1. Hvis der kommer så mange anmodninger til den samme side et par gange i sekundet.
  2. Hvis et barn behandler et forsøg på at stille mere end 50 samtidige anmodninger.
  3. Hvis en IP stadig forsøger at fremsætte nye anmodninger, når den midlertidigt er sortlistet.

mod_evasive kan installeres direkte fra kilden. Her har vi en installations- og installationsvejledning til disse moduler, som hjælper dig med at opsætte disse Apache-moduler i din Linux-boks.

  1. Beskyt Apache ved hjælp af Mod_Security og Mod_evasive

8. Deaktiver Apache's følgende symbolske links

Som standard følger Apache symlinks, vi kan slå denne funktion fra med FollowSymLinks med indstillingsdirektivet. Og for at gøre det skal vi indtaste følgende post i hovedkonfigurationsfilen.

Options -FollowSymLinks

Og hvis en bestemt bruger eller et websted har brug for FollowSymLinks aktiveret, kan vi ganske enkelt skrive en regel i ".htaccess" -filen fra dette websted.

# Enable symbolic links
Options +FollowSymLinks

Bemærk: For at aktivere omskrivningsregler i ".htaccess" -filen skal "AllowOverride All" være til stede i hovedkonfigurationen globalt.

9. Deaktiver Server Side Includes og CGI Execution

Vi kan deaktivere serversiden inkluderer (mod_include) og CGI-udførelse, hvis det ikke er nødvendigt, og for at gøre det skal vi ændre hovedkonfigurationsfilen.

Options -Includes
Options -ExecCGI

Vi kan også gøre dette for en bestemt mappe med Directory-tag. Her I dette eksempel slukker vi Includes og Cgi-filudførelser for "/ var/www/html/web1" -mappen.

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

Her er nogle andre værdier, som kan slås til eller fra med indstillingsdirektivet.

  1. Valgmuligheder alle - For at aktivere alle indstillinger på én gang. Dette er standardværdien. Hvis du ikke ønsker at angive nogen værdier eksplicit i Apache conf-fil eller .htaccess.
  2. Valgmuligheder inkludererNOEXEC - Denne indstilling tillader, at serversiden inkluderer uden at udføre tilladelse til en kommando eller cgi-filer.
  3. Muligheder MultiViews - Tillader indholdsforhandlede multiviews med mod_negotiation-modul.
  4. Indstillinger SymLinksIfOwnerMatch - Det ligner FollowSymLinks. Men dette følger kun, når ejeren er den samme mellem linket og den oprindelige mappe, som den er linket til.

10. Begræns anmodningsstørrelse

Apache har som standard ingen grænse for den samlede størrelse af HTTP-anmodningen, dvs. ubegrænset, og når du tillader store anmodninger på en webserver, er det muligt, at du kan blive offer for Denial of Service-angreb. Vi kan begrænse størrelsen på anmodninger fra et Apache-direktiv "LimitRequestBody" med katalogmærket.

Du kan indstille værdien i byte fra 0 (ubegrænset) til 2147483647 (2 GB), der er tilladt i et anmodningsorgan. Du kan indstille denne grænse i henhold til dit websteds behov. Antag at du har et websted, hvor du tillader uploads, og at du vil begrænse uploadstørrelsen for en bestemt mappe.

Her i dette eksempel er user_uploads et bibliotek, der indeholder filer uploadet af brugere. Vi sætter en grænse på 500K for dette.

<Directory "/var/www/myweb1/user_uploads">
   LimitRequestBody 512000
</Directory>

11. Beskyt DDOS-angreb og hærdning

Nå, det er rigtigt, at du ikke fuldstændigt kan beskytte dit websted mod DDos-angreb. Her er nogle direktiver, der kan hjælpe dig med at få kontrol over det.

  1. TimeOut: Dette direktiv giver dig mulighed for at indstille den tid, som serveren skal vente på, at visse begivenheder skal gennemføres, før den mislykkes. Standardværdien er 300 sek. Det er godt at holde denne værdi lav på de websteder, der er genstand for DDOS-angreb. Denne værdi afhænger helt af den slags anmodning, du får på dit websted. Bemærk: Det kan skabe problemer med kommer CGI-scripts.
  2. MaxClients: Dette direktiv giver dig mulighed for at indstille grænsen for forbindelser, der skal betjenes samtidigt. Hver ny forbindelse vil stå i kø efter denne grænse. Den er tilgængelig med Prefork og Worker begge MPM. Standardværdien af den er 256.
  3. KeepAliveTimeout: Det er den tid, serveren venter på en efterfølgende anmodning, inden den lukker forbindelsen. Standardværdien er 5 sekunder.
  4. LimitRequestFields: Det hjælper os med at indstille en grænse for antallet af HTTP-anmodningens overskriftsfelter, der accepteres fra klienterne. Dens standardværdi er 100. Det anbefales at sænke denne værdi, hvis DDos-angreb forekommer som et resultat af så mange http-anmodningsoverskrifter.
  5. LimitRequestFieldSize: Det hjælper os med at indstille en størrelsesgrænse for HTTP-anmodningsoverskriften.

12. Aktivér Apache-logning

Apache giver dig mulighed for at logge uafhængigt af din OS-logning. Det er klogt at aktivere Apache-logning, fordi det giver flere oplysninger, såsom kommandoer indtastet af brugere, der har interageret med din webserver.

For at gøre det skal du medtage modulet mod_log_config. Der er tre hovedlogningsrelaterede direktiver tilgængelige med Apache.

  1. TransferLog: Oprettelse af en logfil.
  2. LogFormat: Angivelse af et brugerdefineret format.
  3. CustomLog: Oprettelse og formatering af en logfil.

Du kan også bruge dem til et bestemt websted, hvis du laver virtuel hosting, og til det skal du angive det i sektionen virtuel vært. For eksempel er her min websides virtuelle værtkonfiguration med logning aktiveret.

<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

13. Sikring af Apache med SSL-certifikater

Sidst, men ikke mindst SSL-certifikater, kan du sikre din al kommunikation på en krypteret måde over internettet med SSL-certifikat. Antag at du har et websted, hvor folk logger ind ved at bevise deres loginoplysninger, eller at du har et e-handelswebsted, hvor folk giver deres bankoplysninger eller debet-/kreditkortoplysninger for at købe produkter, som standard sender din webserver disse oplysninger med almindelig tekst format, men når du bruger SSL-certifikater til dine websteder, sender Apache alle disse oplysninger i krypteret tekst.

Du kan købe SSl-certifikater fra så mange forskellige SSL-udbydere som namecheap.com. Hvis du driver en meget lille webvirksomhed og ikke er villig til at købe et SSL-certifikat, kan du stadig tildele et selvsigneret certifikat til dit websted. Apache bruger mod_ssl-modulet til at understøtte SSL-certifikat.

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

Når dit certifikat er oprettet og underskrevet. Nu skal du tilføje dette i Apache-konfiguration. Åbn hovedkonfigurationsfil med vim editor, og tilføj følgende linjer, og genstart tjenesten.

<VirtualHost 172.16.25.125:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/example.com.crt
        SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
        SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
        ServerAdmin [email 
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog /var/log/httpd/example.com-error_log
        CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>

Åbn din browser, skriv https://example.com, og du vil kunne se det nye selvsignerede certifikat.

Dette er få sikkerhedstip, som du kan bruge til at sikre din installation af Apache-webserver. For mere nyttige sikkerhedstip og ideer, se den officielle online dokumentation for Apache HTTP Server.