13 Apache tīmekļa servera drošības un cietēšanas padomi


Mēs visi ļoti labi zinām Apache tīmekļa serveri, tas ir ļoti populārs tīmekļa serveris, kurā tiek mitināti jūsu tīmekļa faili vai jūsu vietne. Šeit ir dažas saites, kas var palīdzēt konfigurēt Apache tīmekļa serveri Linux lodziņā.

  1. Instalējiet Apache tīmekļa serveri
  2. Iestatiet savu vietni savā Linux kastē

Šajā apmācībā es sniegšu dažus galvenos padomus, kā aizsargāt jūsu tīmekļa serveri. Pirms lietojat šīs izmaiņas savā tīmekļa serverī, jums vajadzētu būt dažiem Apache servera pamatiem.

  1. Dokumenta saknes direktorijs:/var/www/html vai/var/www
  2. Galvenais konfigurācijas fails: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) un /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Noklusējuma HTTP ports: 80 TCP
  4. Noklusējuma HTTPS ports: 443 TCP
  5. Pārbaudiet savus konfigurācijas faila iestatījumus un sintaksi: httpd -t
  6. Piekļuve tīmekļa servera žurnāla failiem:/var/log/httpd/access_log
  7. Tīmekļa servera kļūdu žurnāla faili:/var/log/httpd/error_log

1. Kā paslēpt Apache versiju un OS identitāti no kļūdām

Instalējot Apache ar avotu vai jebkuru citu pakotņu instalētāju, piemēram, yum, tajā tiek parādīta jūsu serverī instalētā Apache tīmekļa servera versija ar kļūdu - servera operētājsistēmas nosaukums. Tas arī parāda informāciju par jūsu serverī instalētajiem Apache moduļiem.

Augšējā attēlā jūs varat redzēt, ka Apache parāda savu versiju ar jūsu serverī instalēto OS. Tas var būt nopietns drošības apdraudējums jūsu tīmekļa serverim, kā arī jūsu Linux kastei. Lai nepieļautu, ka Apache nerāda šo informāciju pasaulei, mums ir jāveic dažas izmaiņas Apache galvenajā konfigurācijas failā.

Atveriet konfigurācijas failu ar vim redaktoru un meklējiet “ServerSignature”, kas pēc noklusējuma ir Ieslēgts. Mums ir jāizslēdz šis servera paraksts, un otrajā rindiņā “ServerTokens Prod” tiek teikts, lai Apache katra lapas pieprasījumā servera atbildes galvenē atgriež tikai Apache kā produktu. Tas nomāc OS, galvenās un mazās versijas informāciju.

# 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. Atspējot direktoriju sarakstu

Pēc noklusējuma Apache uzskaita visu dokumenta saknes direktorija saturu, ja nav indeksa faila. Lūdzu, skatiet attēlu zemāk.

Mēs varam izslēgt direktoriju sarakstu, izmantojot opciju direktīva konkrēta direktorija konfigurācijas failā. Lai to izdarītu, mums jāveic ieraksts failā httpd.conf vai apache2.conf.

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

3. Turpiniet regulāri atjaunināt Apache

Apache izstrādātāju kopiena nepārtraukti strādā pie drošības jautājumiem un izlaiž tās atjaunināto versiju ar jaunām drošības opcijām. Tāpēc vienmēr ir ieteicams kā tīmekļa serveri izmantot jaunāko Apache versiju.

Lai pārbaudītu Apache versiju: pašreizējo versiju varat pārbaudīt, izmantojot komandu httpd -v.

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

Versiju var atjaunināt ar šādu komandu.

# yum update httpd
# apt-get install apache2

Ieteicams arī atjaunināt kodola un operētājsistēmas jaunākās stabilās versijas, ja jūs nedarbojat nevienu konkrētu lietojumprogrammu, kas darbojas tikai konkrētā OS vai kodolā.

4. Atspējojiet nevajadzīgos moduļus

Vienmēr ir labi mazināt iespējas kļūt par jebkura tīmekļa uzbrukuma upuri. Tāpēc ieteicams atspējot visus tos moduļus, kas pašlaik netiek izmantoti. Izmantojot šādu komandu, varat uzskaitīt visus apkopotos tīmekļa servera moduļus.

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

Iepriekš ir saraksts ar moduļiem, kas pēc noklusējuma ir iespējoti, bet bieži vien nav vajadzīgi: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Lai atspējotu konkrēto moduli, šīs rindas sākumā varat ievietot “#” un restartēt pakalpojumu.

5. Palaidiet Apache kā atsevišķu lietotāju un grupu

Izmantojot noklusējuma instalāciju, Apache palaiž procesu ar lietotāju neviens vai dēmonu. Drošības apsvērumu dēļ ieteicams Apache palaist savā privileģētajā kontā. Piemēram: http-web.

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

Tagad jums jāpasaka Apache, lai palaistu kopā ar šo jauno lietotāju, un, lai to izdarītu, mums jāveic ieraksts mapē /etc/httpd/conf/httpd.conf un restartējiet pakalpojumu.

Atveriet /etc/httpd/conf/httpd.conf ar vim editor un meklējiet atslēgvārdus “User” un “Group”, un tur jums būs jānorāda lietotājvārds un grupas nosaukums.

User http-web
Group http-web

6. Izmantojiet Atļaut un noraidīt, lai ierobežotu piekļuvi direktorijiem

Mēs varam ierobežot piekļuvi direktorijiem, izmantojot opcijas “Atļaut” un “Noraidīt” failā httpd.conf. Šajā piemērā mēs nodrošināsim saknes direktoriju, šim nolūkam failā httpd.conf iestatot tālāk norādīto.

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

  1. Opcijas “None” - šī opcija neļaus lietotājiem iespējot papildu opcijas.
  2. Noraidīt, atļaut rīkojumu - šī ir kārtība, kādā tiks apstrādātas direktīvas “Noraidīt” un “Atļaut”. Šeit tas vispirms “noliegs” un pēc tam “atļaus”.
  3. Noraidīt no visiem - tas noraidīs pieprasījumu no visiem saknes direktorijā, neviens nevarēs piekļūt saknes direktorijai.

7. Apache drošībai izmantojiet mod_security un mod_evasive Modules

Šie divi moduļi “mod_security” un “mod_evasive” ir ļoti populāri Apache moduļi drošības ziņā.

Ja mod_security darbojas kā ugunsmūris mūsu tīmekļa lietojumprogrammām un ļauj mums reāllaikā uzraudzīt trafiku. Tas arī palīdz mums aizsargāt mūsu vietnes vai tīmekļa serveri no brutālu spēku uzbrukumiem. Jūs varat vienkārši instalēt mod_security savā serverī, izmantojot noklusējuma pakotņu instalētājus.

$ 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 darbojas ļoti efektīvi, tā apstrādei ir vajadzīgs viens pieprasījums un tas tiek ļoti labi apstrādāts. Tas neļauj DDOS uzbrukumiem nodarīt tik lielu kaitējumu. Šī mod_evasive funkcija ļauj tai rīkoties ar rupju HTTP spēku un Dos vai DDos uzbrukumu. Šis modulis uzbrukumus atklāj ar trim metodēm.

  1. Ja tik daudz pieprasījumu vienā un tajā pašā lapā nonāk pāris reizes sekundē.
  2. Ja kāds bērns mēģina iesniegt vairāk nekā 50 vienlaicīgus pieprasījumus.
  3. Ja kāds IP joprojām mēģina iesniegt jaunus pieprasījumus, kad tas uz laiku iekļauti melnajā sarakstā.

mod_evasive var instalēt tieši no avota. Šeit mums ir šo moduļu instalēšanas un iestatīšanas rokasgrāmata, kas palīdzēs jums iestatīt šos Apache moduļus jūsu Linux lodziņā.

  1. Aizsargājiet Apache, izmantojot Mod_Security un Mod_evasive

8. Atspējojiet Apache sekošanu simboliskajām saitēm

Pēc noklusējuma Apache seko simbolu saitēm, mēs varam izslēgt šo funkciju ar FollowSymLinks with Options direktīvu. Lai to izdarītu, galvenajā konfigurācijas failā ir jāveic šāds ieraksts.

Options -FollowSymLinks

Un, ja kādam konkrētam lietotājam vai vietnei ir jāiespējo FollowSymLinks, mēs varam vienkārši ierakstīt kārtulu šīs vietnes failā .htaccess.

# Enable symbolic links
Options +FollowSymLinks

Piezīme. Lai iespējotu pārrakstīšanas kārtulas failā .htaccess, galvenajā konfigurācijā globāli jābūt AllowOverride All.

9. Izslēdziet servera puses iekļaušanu un CGI izpildi

Mēs varam izslēgt servera puses iekļaušanu (mod_include) un CGI izpildi, ja tas nav nepieciešams, un, lai to izdarītu, mums ir jāmaina galvenais konfigurācijas fails.

Options -Includes
Options -ExecCGI

Mēs to varam izdarīt arī noteiktā direktorijā, izmantojot direktorijas tagu. Šeit Šajā piemērā mēs izslēdzam direktoriju “/ var/www/html/web1” failu izpildes ietver un Cgi.

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

Šeit ir dažas citas vērtības, kuras var ieslēgt vai izslēgt, izmantojot opciju direktīvu.

  1. Opcijas Visas - lai vienlaikus iespējotu visas opcijas. Šī ir noklusējuma vērtība, ja nevēlaties, lai Apache conf failā vai .htaccess būtu skaidri norādītas vērtības.
  2. Iespējas ietverNOEXEC - šī opcija ļauj servera puses iekļaušanu bez izpildes atļaujas komandai vai cgi failiem.
  3. Opcijas MultiViews - ļauj ar mod_negotiation moduli sarunātos satura multiviewus.
  4. Opcijas SymLinksIfOwnerMatch - tas ir līdzīgs FollowSymLinks. Bet tas notiks tikai tad, kad īpašnieks ir vienāds starp saiti un sākotnējo direktoriju, ar kuru tas ir saistīts.

10. Limit Request Size

Pēc noklusējuma Apache nav ierobežojuma kopējam HTTP pieprasījuma lielumam, t.i., neierobežotam, un, ja tīmekļa serverī atļaujat lielus pieprasījumus, iespējams, ka jūs varētu būt pakalpojumu lieguma uzbrukumu upuris. Mēs varam ierobežot Apache direktīvas “LimitRequestBody” pieprasījumu lielumu ar direktorijas tagu.

Varat iestatīt vērtību baitos no 0 (neierobežots) līdz 2147483647 (2 GB), kas ir atļauts pieprasījuma pamattekstā. Jūs varat iestatīt šo ierobežojumu atbilstoši savas vietnes vajadzībām. Pieņemsim, ka jums ir vietne, kurā jūs atļaujat augšupielādes, un vēlaties ierobežot konkrēta direktorija augšupielādes lielumu.

Šajā piemērā user_uploads ir direktorijs, kurā ir lietotāju augšupielādētie faili. Mēs tam uzliekam 500K ierobežojumu.

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

11. Aizsargājiet DDOS uzbrukumus un sacietēšanu

Tā ir taisnība, ka jūs nevarat pilnībā aizsargāt savu vietni no DDos uzbrukumiem. Šeit ir dažas direktīvas, kas var jums palīdzēt to kontrolēt.

  1. TimeOut: šī direktīva ļauj iestatīt laiku, kad serveris gaidīs noteiktu notikumu pabeigšanu, pirms tas neizdodas. Tā noklusējuma vērtība ir 300 sekundes. Ir labi saglabāt šo vērtību zemu tajās vietnēs, uz kurām attiecas DDOS uzbrukumi. Šī vērtība ir pilnībā atkarīga no pieprasījuma veida, ko saņemat savā vietnē. Piezīme. Tas var radīt problēmas ar nākošajiem CGI skriptiem.
  2. MaxClients: šī direktīva ļauj iestatīt ierobežojumu savienojumiem, kas tiks apkalpoti vienlaikus. Katrs jauns savienojums tiks rindots pēc šī ierobežojuma. Tas ir pieejams gan ar Prefork, gan Worker MPM. Tā noklusējuma vērtība ir 256.
  3. KeepAliveTimeout: tas ir laiks, kad serveris pirms savienojuma slēgšanas gaidīs nākamo pieprasījumu. Noklusējuma vērtība ir 5 sekundes.
  4. LimitRequestFields: Tas palīdz mums noteikt ierobežojumu HTTP pieprasījuma galvenes lauku skaitam, ko klienti pieņems. Tās noklusējuma vērtība ir 100. Ieteicams samazināt šo vērtību, ja DDos uzbrukumi notiek tik daudz http pieprasījumu galvenes rezultātā.
  5. LimitRequestFieldSize: Tas mums palīdz iestatīt lielumu ierobežojumu HTTP pieprasījuma galvenē.

12. Iespējot Apache reģistrēšanu

Apache ļauj reģistrēties neatkarīgi no OS reģistrēšanas. Ir saprātīgi iespējot Apache reģistrēšanu, jo tā sniedz vairāk informācijas, piemēram, komandas, kuras ievadījuši lietotāji, kas ir mijiedarbojušies ar jūsu tīmekļa serveri.

Lai to izdarītu, jums jāiekļauj mod_log_config modulis. Apache ir pieejamas trīs galvenās ar mežizstrādi saistītās direktīvas.

  1. TransferLog: žurnāla faila izveide.
  2. LogFormat: pielāgota formāta norādīšana.
  3. CustomLog: žurnāla faila izveide un formatēšana.

Varat tos izmantot arī konkrētai vietnei, kurā veicat virtuālo mitināšanu, un tas jums jānorāda virtuālā resursdatora sadaļā. Piemēram, šeit ir manas vietnes virtuālās resursdatora konfigurācija ar iespējotu reģistrēšanu.

<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. Apache nodrošināšana ar SSL sertifikātiem

Visbeidzot, bet ne mazāk svarīgi SSL sertifikāti, jūs varat nodrošināt visu komunikāciju šifrētā veidā, izmantojot internetu, izmantojot SSL sertifikātu. Pieņemsim, ka jums ir vietne, kurā cilvēki piesakās, apliecinot savus pieteikšanās datus, vai arī jums ir e-komercijas vietne, kur cilvēki produktu iegādei sniedz savu bankas informāciju vai debetkartes/kredītkartes informāciju, pēc noklusējuma jūsu tīmekļa serveris nosūta šo informāciju vienkāršā formā formātā, bet, kad vietnēm izmantojat SSL sertifikātus, Apache visu šo informāciju nosūta šifrētā tekstā.

SSl sertifikātus var iegādāties no tik daudziem dažādiem SSL nodrošinātājiem, piemēram, namecheap.com. Ja jūs vadāt ļoti mazu tīmekļa uzņēmumu un nevēlaties iegādāties SSL sertifikātu, jūs joprojām varat piešķirt savai vietnei pašparakstītu sertifikātu. Apache izmanto mod_ssl moduli, lai atbalstītu SSL sertifikātu.

# 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

Kad jūsu sertifikāts ir izveidots un parakstīts. Tagad tas jāpievieno Apache konfigurācijā. Atveriet galveno konfigurācijas failu ar vim redaktoru un pievienojiet šādas rindas un restartējiet pakalpojumu.

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

Atveriet pārlūkprogrammu, ierakstiet https://example.com, un jūs varēsiet redzēt jauno pašparakstīto sertifikātu.

Šie ir daži drošības padomi, kurus varat izmantot, lai nodrošinātu Apache tīmekļa servera instalēšanu. Lai iegūtu noderīgākus drošības padomus un idejas, skatiet Apache HTTP Server oficiālo tiešsaistes dokumentāciju.