13 Savjeti za sigurnost i učvršćivanje web poslužitelja Apache


Svima nam je vrlo poznat web poslužitelj Apache, vrlo je popularan web poslužitelj za hostiranje vaših web datoteka ili vašeg web mjesta na webu. Evo nekoliko poveznica koje vam mogu pomoći u konfiguriranju web poslužitelja Apache na vašem Linux boxu.

  1. Instalirajte Apache web poslužitelj
  2. Postavite svoju web stranicu u svoj Linux Box

Ovdje u ovom vodiču položit ću neke glavne savjete za zaštitu vašeg web poslužitelja. Prije nego što primijenite ove promjene na svom web poslužitelju, trebali biste imati neke osnove Apache poslužitelja.

  1. Osnovni direktorij dokumenta:/var/www/html ili/var/www
  2. Glavna konfiguracijska datoteka: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) i /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Zadani HTTP priključak: 80 TCP
  4. Zadani HTTPS priključak: 443 TCP
  5. Testirajte postavke konfiguracijske datoteke i sintaksu: httpd -t
  6. Pristup datotekama dnevnika web poslužitelja:/var/log/httpd/access_log
  7. Datoteke dnevnika pogrešaka web poslužitelja:/var/log/httpd/error_log

1. Kako sakriti verziju Apachea i identitet OS-a od pogrešaka

Kada instalirate Apache s izvorom ili bilo kojim drugim instalacijskim programima poput yum, prikazuje verziju vašeg web poslužitelja Apache instaliranu na vašem poslužitelju s nazivom operacijskog sustava vašeg poslužitelja u odjeljku Pogreške. Također prikazuje informacije o Apache modulima instaliranim na vašem poslužitelju.

Na gornjoj slici možete vidjeti da Apache prikazuje svoju verziju s OS-om instaliranim na vašem poslužitelju. To može biti glavna sigurnosna prijetnja vašem web poslužitelju, kao i vašem Linux boxu. Da bismo spriječili da Apache te podatke ne prikazuje svijetu, moramo izvršiti neke promjene u glavnoj konfiguracijskoj datoteci Apachea.

Otvorite konfiguracijsku datoteku s vim uređivačem i potražite „ServerSignature“, koja je prema zadanim postavkama uključena. Moramo isključiti ove potpise poslužitelja, a drugi redak "ServerTokens Prod" govori Apacheu da u zaglavlju odgovora poslužitelja na zahtjev svake stranice vrati samo Apache kao proizvod, potiskuje OS, glavne i manje verzije informacija.

# 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. Onemogućite Popis direktorija

Prema zadanim postavkama Apache navodi sav sadržaj korijenskog direktorija dokumenta u odsustvu indeksne datoteke. Pogledajte sliku ispod.

Popis direktorija možemo isključiti pomoću direktive Options u konfiguracijskoj datoteci za određeni direktorij. Za to moramo napraviti unos u datoteci httpd.conf ili apache2.conf.

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

3. Redovito ažurirajte Apache

Zajednica programera Apache kontinuirano radi na sigurnosnim pitanjima i objavljuje svoju ažuriranu verziju s novim sigurnosnim opcijama. Stoga se uvijek preporučuje da koristite najnoviju verziju Apachea kao svoj web poslužitelj.

Da biste provjerili verziju Apachea: Možete provjeriti svoju trenutnu verziju pomoću naredbe httpd -v.

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

Svoju verziju možete ažurirati pomoću sljedeće naredbe.

# yum update httpd
# apt-get install apache2

Također se preporučuje da kernel i OS redovito ažurirate na najnovija stabilna izdanja ako ne pokrećete nijednu posebnu aplikaciju koja radi samo na određenom OS-u ili kernelu.

4. Onemogućite nepotrebne module

Uvijek je dobro smanjiti šanse da postanete žrtva bilo kojeg web napada. Stoga se preporučuje onemogućavanje svih onih modula koji se trenutno ne koriste. Pomoću sljedeće naredbe možete navesti sve prevedene module web poslužitelja.

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

Iznad je popis modula koji su omogućeni prema zadanim postavkama, ali često nisu potrebni: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Da biste onemogućili određeni modul, možete umetnuti "#" na početak te linije i ponovo pokrenuti uslugu.

5. Pokrenite Apache kao zasebni korisnik i grupa

Sa zadanom instalacijom Apache pokreće svoj proces s korisnikom nikim ili demonom. Iz sigurnosnih razloga preporučuje se pokretanje Apachea na vlastitom neprivilegiranom računu. Na primjer: http-web.

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

Sada trebate reći Apacheu da radi s tim novim korisnikom, a da biste to učinili, trebamo izvršiti unos u /etc/httpd/conf/httpd.conf i ponovo pokrenuti uslugu.

Otvorite /etc/httpd/conf/httpd.conf pomoću vim uređivača i potražite ključne riječi "Korisnik" i "Grupa" i tamo ćete morati navesti korisničko ime i ime grupe koje ćete koristiti.

User http-web
Group http-web

6. Upotrijebite Dopusti i odbij da ograničite pristup direktorijima

Pristup direktorima možemo ograničiti pomoću opcija "Dopusti" i "Odbij" u datoteci httpd.conf. Ovdje u ovom primjeru osigurat ćemo root direktorij, za to postavljanjem sljedećeg u datoteci httpd.conf.

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

  1. Opcije "Ništa" - Ova opcija neće dopustiti korisnicima da omoguće bilo koje neobavezne značajke.
  2. Narudžba odbiti, dopustiti - Ovo je redoslijed kojim će se obrađivati direktive "Odbij" i "Dopusti". Ovdje će prvo "zabraniti", a sljedeće "dopustiti".
  3. Odbiti od svih - Ovime će se odbiti zahtjev svih za korijenski direktorij, nitko neće moći pristupiti korijenskom direktoriju.

7. Koristite mod_security i mod_evasive module za osiguranje Apachea

Ova dva modula "mod_security" i "mod_evasive" vrlo su popularni Apacheovi moduli u smislu sigurnosti.

Gdje mod_security djeluje kao vatrozid za naše web aplikacije i omogućuje nam praćenje prometa u stvarnom vremenu. Također nam pomaže u zaštiti naših web stranica ili web poslužitelja od napada grubom silom. Jednostavno možete instalirati mod_security na svoj poslužitelj uz pomoć zadanih programa za instaliranje paketa.

$ 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 djeluje vrlo učinkovito, potreban je jedan zahtjev za njegovu vrlo dobru obradu i obradu. Sprječava DDOS napade da naprave što veću štetu. Ova značajka mod_evasive omogućuje mu obradu HTTP grube sile i napada Dos ili DDos. Ovaj modul otkriva napade s tri metode.

  1. Ako toliko zahtjeva dođe na istu stranicu u nekoliko puta u sekundi.
  2. Ako neko podređeno tijelo pokušava podnijeti više od 50 istodobnih zahtjeva.
  3. Ako bilo koja IP adresa i dalje pokušava upućivati nove zahtjeve kad je privremeno stavljena na crnu listu.

mod_evasive se može instalirati izravno iz izvora. Ovdje imamo vodič za instalaciju i postavljanje ovih modula koji će vam pomoći da ove Apache module postavite u svoj Linux box.

  1. Zaštitite Apache pomoću Mod_Security i Mod_evasive

8. Onemogućite Apacheovo praćenje simboličkih veza

Prema zadanim postavkama Apache slijedi simboličke veze, možemo isključiti ovu značajku s FollowSymLinks s direktivom Options. Da bismo to učinili, moramo unijeti sljedeći unos u glavnu konfiguracijsku datoteku.

Options -FollowSymLinks

A ako bilo kojem određenom korisniku ili web mjestu treba omogućiti FollowSymLinks, možemo jednostavno napisati pravilo u datoteku ".htaccess" s te web stranice.

# Enable symbolic links
Options +FollowSymLinks

Napomena: Da biste omogućili pravila prepisivanja unutar datoteke .htaccess, globalno bi u glavnoj konfiguraciji trebalo biti prisutno "AllowOverride All".

9. Isključite Includes na strani poslužitelja i izvršenje CGI-a

Možemo isključiti uključivanje na strani poslužitelja (mod_include) i izvršavanje CGI-a ako nije potrebno, a da bismo to učinili trebamo izmijeniti glavnu konfiguracijsku datoteku.

Options -Includes
Options -ExecCGI

To možemo učiniti i za određeni direktorij s oznakom direktorija. Ovdje U ovom primjeru isključujemo izvršenja datoteka Includes i Cgi za direktorij “/ var/www/html/web1”.

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

Evo nekih drugih vrijednosti s koje se može uključiti ili isključiti direktivom Options.

  1. Opcije Sve - za omogućavanje svih opcija odjednom. Ovo je zadana vrijednost. Ako ne želite eksplicitno navesti bilo koju vrijednost u Apache conf datoteci ili .htaccess.
  2. Opcije uključuju NOEXEC - Ova opcija omogućuje uključivanje na poslužitelju bez dopuštenja za izvršavanje naredbe ili cgi datoteka.
  3. Opcije MultiViews - Omogućuje višestruke preglede sadržaja s modulom mod_negotiation.
  4. Opcije SymLinksIfOwnerMatch - slično je FollowSymLinks. Ali, to će uslijediti samo kada je vlasnik isti između veze i izvornog direktorija na koji je povezan.

10. Ograniči veličinu zahtjeva

Prema zadanim postavkama Apache nema ograničenje na ukupnu veličinu HTTP zahtjeva, tj. Neograničeno, a kada dopustite velike zahtjeve na web poslužitelju, moguće je da biste mogli biti žrtva napada uskraćivanja usluge. Veličinu zahtjeva Apacheove direktive “LimitRequestBody” možemo ograničiti oznakom direktorija.

Možete postaviti vrijednost u bajtovima od 0 (neograničeno) do 2147483647 (2 GB) koje su dopuštene u tijelu zahtjeva. Ovo ograničenje možete postaviti prema potrebama svoje web lokacije. Pretpostavimo da imate web mjesto na kojem dopuštate prijenose i želite ograničiti veličinu prijenosa za određeni direktorij.

Ovdje u ovom primjeru, user_uploads je direktorij koji sadrži datoteke koje su korisnici prenijeli. Za to postavljamo ograničenje od 500.000.

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

11. Zaštitite DDOS napade i otvrdnjavanje

Pa, istina je da ne možete u potpunosti zaštititi svoje web mjesto od DDos napada. Evo nekoliko smjernica koje vam mogu pomoći da imate kontrolu nad njima.

  1. TimeOut: Ova vam direktiva omogućuje podešavanje vremena na koje će poslužitelj čekati da se određeni događaji završe prije nego što uspije. Njegova zadana vrijednost je 300 sek. Dobro je ovu vrijednost držati niskom na onim web lokacijama koje su podložne DDOS napadima. Ova vrijednost u potpunosti ovisi o vrsti zahtjeva koji dobivate na svojoj web stranici. Napomena: To bi moglo stvoriti probleme s nadolazećim CGI skriptama.
  2. MaxClients: Ova vam direktiva omogućuje postavljanje ograničenja veza koje će se istovremeno posluživati. Svaka nova veza bit će na čekanju nakon ovog ograničenja. Dostupan je s Preforkom i Worker-om, oba MPM-a. Zadana vrijednost je 256.
  3. KeepAliveTimeout: Vrijeme u kojem će poslužitelj čekati sljedeći zahtjev prije zatvaranja veze. Zadana vrijednost je 5 sek.
  4. LimitRequestFields: Pomaže nam postaviti ograničenje broja polja zaglavlja HTTP zahtjeva koje će klijenti prihvatiti. Njegova je zadana vrijednost 100. Preporučuje se smanjenje ove vrijednosti ako se DDos napadi javljaju kao rezultat toliko zaglavlja http zahtjeva.
  5. LimitRequestFieldSize: Pomaže nam postaviti ograničenje veličine na zaglavlju HTTP zahtjeva.

12. Omogućite Apache evidentiranje

Apache vam omogućuje prijavu neovisno o evidentiranju vašeg OS-a. Pametno je omogućiti Apache zapisovanje, jer pruža više informacija, poput naredbi koje su unijeli korisnici koji su komunicirali s vašim web poslužiteljem.

Da biste to učinili, morate uključiti mod_log_config modul. S Apacheom su dostupne tri glavne smjernice povezane s bilježenjem.

  1. TransferLog: Stvaranje datoteke dnevnika.
  2. LogFormat: Određivanje prilagođenog formata.
  3. CustomLog: Stvaranje i formatiranje datoteke dnevnika.

Možete ih koristiti i za određeno web mjesto koje radite na Virtualnom hostingu, a za to ga morate navesti u odjeljku virtualnog hosta. Na primjer, ovdje je konfiguracija virtualnog domaćina mog web mjesta s omogućenom prijavom.

<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. Osiguravanje Apachea s SSL certifikatima

Posljednje, ali ne najmanje važno, SSL certifikati, svu svoju komunikaciju možete osigurati šifrirano putem Interneta SSL certifikatom. Pretpostavimo da imate web mjesto na koje se ljudi prijavljuju dokazujući svoje vjerodajnice za prijavu ili imate web mjesto e-trgovine na kojem ljudi daju svoje bankovne podatke ili podatke o debitnoj/kreditnoj kartici za kupnju proizvoda, a vaš web server prema zadanim postavkama te podatke šalje u običnom tekstu formatu, ali kada na svoje web stranice koristite SSL certifikate, Apache sve te podatke šalje u šifriranom tekstu.

SSl certifikate možete kupiti od toliko različitih pružatelja SSL-a, poput namecheap.com. Ako imate vrlo malo web poduzeće i ne želite kupiti SSL certifikat, svom web mjestu i dalje možete dodijeliti samopotpisani certifikat. Apache koristi mod_ssl modul za podršku 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

Nakon izrade i potpisivanja vašeg certifikata. Sada to morate dodati u Apache konfiguraciji. Otvorite glavnu konfiguracijsku datoteku s vim uređivačem i dodajte sljedeće retke te ponovo pokrenite uslugu.

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

Otvorite svoj preglednik, upišite https://example.com i moći ćete vidjeti novi samopotpisani certifikat.

Ovo je nekoliko sigurnosnih savjeta pomoću kojih možete osigurati instalaciju web poslužitelja Apache. Za korisnije sigurnosne savjete i ideje pogledajte službenu internetsku dokumentaciju Apache HTTP poslužitelja.