13 Nasveti za varnost in utrjevanje spletnega strežnika Apache


Vsi dobro poznamo spletni strežnik Apache, zelo priljubljen spletni strežnik za gostovanje vaših spletnih datotek ali vašega spletnega mesta v spletu. Tu je nekaj povezav, ki vam lahko pomagajo pri konfiguraciji spletnega strežnika Apache na vašem Linuxu.

  1. Namestite spletni strežnik Apache
  2. Spletno mesto nastavite v Linux Box

V tej vadnici bom zajemal nekaj glavnih nasvetov za zaščito vašega spletnega strežnika. Preden uveljavite te spremembe na spletnem strežniku, morate imeti nekaj osnov o strežniku Apache.

  1. Korenski imenik dokumenta:/var/www/html ali/var/www
  2. Glavna konfiguracijska datoteka: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) in /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Privzeta vrata HTTP: 80 TCP
  4. Privzeta vrata HTTPS: 443 TCP
  5. Preizkusite nastavitve in sintakso konfiguracijske datoteke: httpd -t
  6. Dostop do dnevniških datotek spletnega strežnika:/var/log/httpd/access_log
  7. Datoteke dnevnika napak spletnega strežnika:/var/log/httpd/error_log

1. Kako skriti različico Apache in identiteto OS pred napakami

Ko namestite Apache z izvorno ali katero koli drugo namestitveno različico paketa, kot je yum, prikaže različico vašega spletnega strežnika Apache, nameščeno na vašem strežniku, z imenom operacijskega sistema strežnika v Napake. Prikažejo se tudi informacije o modulih Apache, nameščenih v vašem strežniku.

Na zgornji sliki lahko vidite, da Apache prikazuje svojo različico z OS, nameščenim v vašem strežniku. To je lahko velika varnostna grožnja za vaš spletni strežnik in tudi vaš Linux. Da Apache prepreči, da teh informacij ne bi prikazoval svetu, moramo nekaj sprememb spremeniti v glavno konfiguracijsko datoteko Apache.

Odprite konfiguracijsko datoteko z urejevalnikom vim in poiščite »ServerSignature«, ki je privzeto vklopljena. Izklopiti moramo ta podpis strežnika, druga vrstica “ServerTokens Prod” pa Apacheu sporoča, naj na zahtevo vsake strani vrne samo Apache kot izdelek v glavo odziva strežnika. Zatira informacije o OS, glavni in manjši različici.

# 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. Onemogočite seznam imenikov

Apache privzeto prikaže celotno vsebino korenskega imenika dokumenta brez indeksne datoteke. Oglejte si spodnjo sliko.

Seznam imenikov lahko izklopimo z direktivo Možnosti v konfiguracijski datoteki za določen imenik. Za to moramo narediti vnos v datoteki httpd.conf ali apache2.conf.

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

3. Redno posodabljajte Apache

Skupnost razvijalcev Apache nenehno dela na varnostnih vprašanjih in izdaja svojo posodobljeno različico z novimi varnostnimi možnostmi. Zato je vedno priporočljivo, da za svoj spletni strežnik uporabite najnovejšo različico Apacheja.

Če želite preveriti različico Apache: Svojo trenutno različico lahko preverite z ukazom httpd -v.

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

Različico lahko posodobite z naslednjim ukazom.

# yum update httpd
# apt-get install apache2

Priporočljivo je tudi, da sta jedro in operacijski sistem posodobljena na najnovejše stabilne izdaje, če ne izvajate nobene posebne aplikacije, ki deluje samo na določenem operacijskem sistemu ali jedru.

4. Onemogočite nepotrebne module

Vedno je dobro zmanjšati možnosti, da postanete žrtev katerega koli spletnega napada. Zato je priporočljivo onemogočiti vse tiste module, ki trenutno niso v uporabi. Z naslednjim ukazom lahko navedete vse prevedene module spletnega strežnika.

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

Zgoraj je seznam modulov, ki so privzeto omogočeni, vendar pogosto niso potrebni: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Če želite onemogočiti določen modul, lahko na začetek vrstice vstavite\"#" in znova zaženete storitev.

5. Zaženite Apache kot ločen uporabnik in skupina

Z privzeto namestitvijo Apache zažene postopek z nikomer ali demonom. Iz varnostnih razlogov je priporočljivo zagnati Apache v svojem lastnem neprivilegiranem računu. Na primer: http-splet.

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

Zdaj morate naročiti Apacheju, naj zažene s tem novim uporabnikom, in za to moramo narediti vnos v /etc/httpd/conf/httpd.conf in znova zagnati storitev.

Odprite /etc/httpd/conf/httpd.conf z urejevalnikom vim in poiščite ključni besedi »Uporabnik« in »Skupina« in tam boste morali določiti uporabniško ime in ime skupine za uporabo.

User http-web
Group http-web

6. Uporabite Dovoli in zavrni, da omejite dostop do imenikov

Dostop do imenikov lahko omejimo z možnostma »Dovoli« in »Zavrni« v datoteki httpd.conf. V tem primeru bomo zagotovili korenski imenik, in sicer tako, da v datoteki httpd.conf nastavimo naslednje.

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

  1. Možnosti »Brez« - Ta možnost uporabnikom ne dovoli, da omogočijo neobvezne funkcije.
  2. Naročilo zavrni, dovoli - To je vrstni red obdelave direktiv »Zavrni« in »Dovoli«. Tu bo najprej "zavrnil" in nato "dovolil".
  3. Zavrni od vseh - To bo zavrnilo zahtevo vseh do korenskega imenika, nihče ne bo mogel dostopati do korenskega imenika.

7. Za zaščito Apache uporabite mod_security in mod_evasive Modules

Ta dva modula "mod_security" in "mod_evasive" sta zelo priljubljena modula Apache v smislu varnosti.

Kjer mod_security deluje kot požarni zid za naše spletne aplikacije in nam omogoča sprotno spremljanje prometa. Pomaga nam tudi pri zaščiti naših spletnih mest ali spletnega strežnika pred napadi surove sile. Mod_security lahko preprosto namestite na strežnik s pomočjo privzetih namestitvenih paketov.

$ 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 deluje zelo učinkovito, za obdelavo in obdelavo potrebuje eno zahtevo. DDOS napadom preprečuje, da bi naredili toliko škode. Ta funkcija mod_evasive omogoča obvladovanje surove sile HTTP in napadov Dos ali DDos. Ta modul zazna napade s tremi metodami.

  1. Če toliko zahtev pride na isto stran v nekaj krat na sekundo.
  2. Če kateri koli podrejeni proces poskuša poslati več kot 50 hkratnih zahtev.
  3. Če kateri koli IP še vedno poskuša oddati nove zahteve, ko je začasno uvrščen na črni seznam.

mod_evasive lahko namestite neposredno iz vira. Tu imamo priročnik za namestitev in namestitev teh modulov, ki vam bo pomagal nastaviti te module Apache v vašem Linuxu.

  1. Zaščitite Apache z uporabo Mod_Security in Mod_evasive

8. Onemogočite Apachejevo sledenje simboličnim povezavam

Privzeto Apache sledi simbolnim povezavam, to funkcijo lahko izklopimo z direktivo FollowSymLinks z možnostmi. Za to moramo v glavno konfiguracijsko datoteko vnesti naslednji vnos.

Options -FollowSymLinks

Če kateri koli uporabnik ali spletno mesto potrebuje funkcijo FollowSymLinks, lahko preprosto napišemo pravilo v datoteko .htaccess s tega spletnega mesta.

# Enable symbolic links
Options +FollowSymLinks

Opomba: Če želite omogočiti prepisovanje pravil znotraj datoteke .htaccess, mora biti v glavni konfiguraciji globalno prisotna različica AllowOverride All.

9. Izklopite strežniško Vključuje in izvedbo CGI

Če ni potrebno, lahko izklopimo izvajanje strežnika (mod_include) in izvedbo CGI, zato moramo spremeniti glavno konfiguracijsko datoteko.

Options -Includes
Options -ExecCGI

To lahko naredimo tudi za določen imenik z oznako Imenik. Tukaj V tem primeru izklopimo izvrševanje datotek Includes in Cgi za imenik “/ var/www/html/web1”.

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

Tu je nekaj drugih vrednosti, ki jih lahko vklopite ali izklopite z direktivo Možnosti.

  1. Možnosti Vse - če želite omogočiti vse možnosti hkrati. To je privzeta vrednost. Če nobene vrednosti ne želite izrecno navesti v datoteki Apache conf ali .htaccess.
  2. Možnosti vključujejo NOEXEC - Ta možnost omogoča vključitev strežniške strani brez dovoljenja za izvajanje ukaza ali datotek cgi.
  3. Možnosti MultiViews - Omogoča vsebinske dogovore o več pogledih z mod_negotiation modulom.
  4. Možnosti SymLinksIfOwnerMatch - podobno je FollowSymLinks. Toda to bo sledilo le, če je lastnik enak med povezavo in izvirnim imenikom, na katerega je povezana.

10. Omeji velikost zahteve

Apache privzeto nima omejitve skupne velikosti zahteve HTTP, tj. Neomejeno, in ko na spletnem strežniku dovolite velike zahteve, je možno, da bi bili žrtev napadov za zavrnitev storitve. Velikost zahtev direktive Apache “LimitRequestBody” lahko omejimo z imeniško oznako.

V bajtih lahko nastavite vrednost v bajtih od 0 (neomejeno) do 2147483647 (2 GB), ki so dovoljene v telesu zahteve. To omejitev lahko nastavite glede na potrebe spletnega mesta. Recimo, da imate spletno mesto, na katerem dovoljujete nalaganje, in želite omejiti velikost nalaganja za določen imenik.

V tem primeru je user_uploads imenik, ki vsebuje datoteke, ki so jih naložili uporabniki. Za to postavljamo omejitev 500K.

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

11. Zaščitite DDOS napade in kaljenje

No, res je, da svojega spletnega mesta ne morete popolnoma zaščititi pred DDos napadi. Tu je nekaj smernic, ki vam lahko pomagajo imeti nadzor nad njimi.

  1. TimeOut: Ta direktiva vam omogoča, da nastavite, koliko časa bo strežnik čakal, da se določeni dogodki zaključijo, preden ne uspe. Njegova privzeta vrednost je 300 sekund. Dobro je, da ta vrednost ostane nizka na spletnih mestih, ki so izpostavljena napadom DDOS. Ta vrednost je popolnoma odvisna od vrste zahteve, ki jo prejemate na svojem spletnem mestu. Opomba: Lahko povzroči težave s prihajajočimi skripti CGI.
  2. MaxClients: Ta direktiva vam omogoča, da nastavite omejitev povezav, ki bodo hkrati na voljo. Vsaka nova povezava bo v čakalni vrsti po tej omejitvi. Na voljo je pri Prefork in Worker, tako MPM. Privzeta vrednost je 256.
  3. KeepAliveTimeout: čas, ki ga strežnik čaka na naslednjo zahtevo, preden prekine povezavo. Privzeta vrednost je 5 sekund.
  4. LimitRequestFields: Pomaga nam določiti omejitev števila polj glave zahtev HTTP, ki jih bodo stranke sprejele. Njegova privzeta vrednost je 100. Priporočljivo je, da to vrednost znižate, če se DDos napadi pojavljajo zaradi toliko glav naslovov http.
  5. LimitRequestFieldSize: Pomaga nam določiti omejitev velikosti v glavi zahteve HTTP.

12. Omogočite beleženje Apache

Apache vam omogoča beleženje neodvisno od dnevnika OS. Pametno je omogočiti beleženje Apache, ker vsebuje več informacij, na primer ukaze uporabnikov, ki so komunicirali z vašim spletnim strežnikom.

Če želite to narediti, morate vključiti modul mod_log_config. V Apacheju so na voljo tri glavne smernice, povezane z beleženjem.

  1. TransferLog: Ustvarjanje dnevniške datoteke.
  2. LogFormat: Določanje oblike po meri.
  3. CustomLog: Ustvarjanje in formatiranje dnevniške datoteke.

Uporabite jih lahko tudi za določeno spletno mesto, ki ga opravljate navidezno gostovanje, za to pa ga morate določiti v razdelku navideznega gostitelja. Na primer, tukaj je konfiguracija navideznega gostitelja mojega spletnega mesta z omogočenim beleženjem.

<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. Zaščita Apache s potrdili SSL

Nenazadnje, vendar nenazadnje potrdila SSL, lahko vso svojo komunikacijo zaščitite na šifriran način prek interneta s potrdilom SSL. Recimo, da imate spletno mesto, na katerem se ljudje prijavijo s potrdilom o prijavi, ali imate spletno mesto za e-trgovino, na katerem ljudje za nakup izdelkov navedejo svoje bančne podatke ali podatke o debetni/kreditni kartici, privzeto pa jih vaš spletni strežnik pošlje v preprostem besedilu formatu, vendar ko na svojih spletnih mestih uporabljate potrdila SSL, Apache pošlje vse te informacije v šifriranem besedilu.

Potrdila SSl lahko kupite pri toliko različnih ponudnikih SSL, kot je namecheap.com. Če imate zelo majhno spletno podjetje in ne želite kupiti potrdila SSL, lahko svojemu spletnemu mestu še vedno dodelite samopodpisano potrdilo. Apache uporablja modul mod_ssl za podporo SSL certifikatu.

# 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

Ko je vaše potrdilo ustvarjeno in podpisano. Zdaj morate to dodati v konfiguraciji Apache. Odprite glavno konfiguracijsko datoteko z urejevalnikom vim in dodajte naslednje vrstice ter znova zaženite storitev.

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

Odprite brskalnik, vnesite https://example.com in videli boste novo samopodpisano potrdilo.

Tu je nekaj varnostnih nasvetov, s katerimi lahko zaščitite namestitev spletnega strežnika Apache. Za več koristnih varnostnih nasvetov in idej glejte uradno spletno dokumentacijo strežnika Apache HTTP.