18 Apache žiniatinklio serverio saugos ir tvirtinimo patarimų


„Apache“ žiniatinklio serveris yra vienas populiariausių ir plačiausiai naudojamų žiniatinklio serverių, skirtų failams ir svetainėms talpinti. Tai lengva įdiegti ir konfigūruoti, kad atitiktų jūsų prieglobos poreikius. Tačiau numatytieji nustatymai nėra saugūs, kad būtų užtikrinta labai reikalinga apsauga, kurios reikia jūsų svetainei.

Šiame vadove apžvelgiame kai kuriuos „Apache“ serverio tvirtinimo patarimus ir gudrybes, kuriuos galite įgyvendinti norėdami sustiprinti savo žiniatinklio serverio saugumą.

1. Kaip paslėpti „Apache“ versiją ir OS informaciją

Pagal numatytuosius nustatymus „Apache“ žiniatinklio serveris rodo savo versiją, jei naršote netinkamą svetainės URL. Toliau pateikiamas klaidos puslapio, rodančio, kad puslapio svetainėje nerasta, pavyzdys. Paskutinėje eilutėje nurodoma „Apache“ versija, pagrindinio kompiuterio OS, IP adresas ir prievadas, kurio klausosi.

Niekada nėra gera idėja rodyti savo žiniatinklio serverio informaciją, nes tai gali būti gera dovana įsilaužėliams jų žvalgybos misijoje. Norint padidinti saugumo lygį ir apsunkinti įsilaužėlių darbą, rekomenduojama paslėpti žiniatinklio serverio informaciją.

Norėdami tai padaryti, atidarykite numatytąjį „Apache“ konfigūracijos failą „Debian“ pagrindu sukurtuose platinimuose.

sudo vim /etc/apache2/apache2.conf

RHEL pagrįstoms sistemoms, tokioms kaip RHEL, Fedora, CentOS, Rocky ir AlmaLinux.

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

Failo pabaigoje pridėkite šias eilutes.

ServerTokens Prod
ServerSignature Off

Išsaugokite pakeitimus ir iš naujo paleiskite „Apache“ žiniatinklio serverį.

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

Dabar iš naujo įkelkite svetainę ir šį kartą žiniatinklio serverio informacija nebus rodoma.

2. Išjunkite katalogų sąrašą „Apache“.

Pagal numatytuosius nustatymus Apache leidžia sudaryti katalogų sąrašą, o lankytojai gali matyti bet kokius failus ar katalogus, kuriuos turite Dokumentų šakniniame kataloge.

Norėdami tai parodyti, sukursime katalogą pavadinimu testas.

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

Tada pereisime į katalogą ir sukursime keletą failų.

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

Dabar, jei pasieksime URL, http://localhost/test, galėsime peržiūrėti katalogo sąrašą.

Norėdami išjungti katalogų sąrašą, eikite į pagrindinį „Apache“ konfigūracijos failą ir ieškokite atributo „Katalogas“. Nustatykite parametrą „Parinktys“ į „-Indeksai“, kaip parodyta.

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

Iš naujo įkelkite Apache ir šį kartą, kai apsilankysite URL, katalogai nebebus rodomi.

3. Reguliariai atnaujinkite „Apache“.

Visada rekomenduojama atnaujinti visas programas, nes naujausiose programose yra klaidų pataisymai ir saugos pataisymai, kurie pašalina senesnėse programinės įrangos versijose esančius pažeidžiamumus.

Todėl rekomenduojama reguliariai atnaujinti programas į naujausias versijas.

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

4. Naudokite HTTPS šifravimą „Apache“.

Pagal numatytuosius nustatymus Apache naudoja HTTP protokolą, kuris yra silpnas ir nesaugus protokolas, kurį galima pasiklausyti. Norėdami pagerinti savo svetainės saugumą ir, juo labiau, pagerinti „Google“ SEO reitingą, apsvarstykite galimybę užšifruoti svetainę naudojant SSL sertifikatą.

Tai padarius, numatytasis HTTP protokolas pakeičiamas į HTTPS, todėl kam nors bus sunkiau perimti ir iššifruoti ryšį, siunčiamą pirmyn ir atgal iš serverio.

Sužinokite, kaip apsaugoti „Apache“ žiniatinklio serverį naudojant Šifruokime SSL sistemoje „Linux“.

  • Kaip apsaugoti „Apache“ naudojant „Let's Encrypt SSL“ sertifikatą RHEL
  • Kaip apsaugoti „Apache“ naudojant „Free Let's Encrypt SSL“ sertifikatą „Ubuntu“ ir „Debian“

5. Įjunkite HTTP griežtą transportavimo apsaugą (HSTS), skirtą „Apache“.

Apsvarstykite galimybę ne tik šifruoti svetainę naudojant TLS/SSL sertifikatą, bet ir įdiegti HSTS žiniatinklio saugos mechanizmą kartu su HTTPS.

HTTP griežta transporto sauga (HSTS) – tai politikos mechanizmas, apsaugantis svetaines nuo tarpininkų atakų ir slapukų užgrobimo. Taip nutinka, kai užpuolikai sumažina HTTPS protokolo versiją į nesaugų HTTP protokolą.

HSTS leidžia žiniatinklio serveriui griežtai pareikšti, kad žiniatinklio naršyklės turėtų sąveikauti su juo tik per HTTPS, o ne HTTP protokolą.

Jei norite įgalinti HSTS, įsitikinkite, kad svetainėje veikia HTTPS ir kad joje yra galiojantis TLS/SSL sertifikatas.

Tada įgalinkite „Apache“ antraščių modulį:

sudo a2enmod headers

Tada iš naujo įkelkite Apache, kad pritaikytumėte pakeitimus.

sudo systemctl restart apache2

Tada pasiekite savo domeno virtualios prieglobos konfigūracijos failą.

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

Tada pridėkite šią eilutę į bloką:

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

Tai atrodo taip.

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

Parametras max-age nurodo žiniatinklio naršyklėms ateinančius vienerius metus pasiekti svetainę tik naudojant HTTPS (31536000=1 metai).

Galiausiai iš naujo paleiskite Apache, kad įsigaliotų HSTS politika.

sudo systemctl restart apache2

6. Įjunkite HTTP/2 „Apache“.

2015 m. buvo išleista HTTP/2, kuri yra nauja HTTP protokolo versija, kuria siekiama išspręsti arba išspręsti kelias problemas, kurių HTTP/1.1 kūrėjai nenumatė.

Nors HTTP/1.1 vis dar plačiai naudojamas, jis susijęs su našumo problemomis, susijusiomis su kelių TCP jungčių naudojimu norint apdoroti kelias naršyklės užklausas, todėl kliento pusėje reikia daug išteklių, dėl to pablogėja tinklo veikimas.

Augant programų sudėtingumui ir funkcionalumui, HTTP/2 buvo sukurtas siekiant pašalinti HTTP/1.1 trūkumus, įskaitant ilgas HTTP antraštes, lėtą tinklalapio įkėlimo greitį ir bendrą našumą. degradacija.

HTTP/2 suteikia daugiau apsaugos ir privatumo nei jo pirmtakas. Taip pat svarbu pagerinti našumą naudojant multipleksuotus duomenų srautus. Naudojant HTTP/2 vienas TCP ryšys užtikrina efektyvų pralaidumo naudojimą, net kai perduodami keli duomenų srautai.

Sužinokite, kaip įjungti HTTP/2 „Apache“ žiniatinklio serveryje, naudodami:

  • Kaip įgalinti HTTP/2 Ubuntu „Apache“.

7. Apribokite prieigą prie jautrių katalogų „Apache“.

Kita saugos priemonė, kurios galite imtis, yra apriboti prieigą prie katalogų, kuriuose gali būti neskelbtinos informacijos, pvz., vartotojo duomenų, žurnalų ir konfigūracijos failų.

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

    # Other virtual host settings

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

Aukščiau pateiktoje konfigūracijoje parinktis Reikalauti visų atmesti neleidžia visiems, kurie bando pasiekti failus /sensitive_directory.

Išsaugokite pakeitimus ir išeikite iš failo. Tada iš naujo paleiskite „Apache“, kad pakeitimai įsigaliotų.

8. Išjunkite serverio parašo direktyvą „Apache“.

„Apache“ konfigūracijos failo direktyva ServerSignature prideda poraštę prie serverio sugeneruotų dokumentų, kuriuose pateikiama informacija apie žiniatinklio serverio konfigūraciją, pvz., versiją ir OS, kurioje jis veikia. Atskleidus svarbią informaciją apie savo žiniatinklio serverį kenkėjams, žymiai padidės atakos tikimybė.

Norėdami išvengti tokios informacijos atskleidimo, turite išjungti šią direktyvą „Apache“ konfigūracijos faile:

ServerSignature Off

Išsaugokite pakeitimus ir dar kartą iš naujo paleiskite Apache, kad pakeitimai įsigaliotų.

sudo systemctl restart apache2

9. „ServerTokens“ direktyvą nustatykite į „Prod“

Direktyva „ServerTokens“ valdo, kokią informaciją serveris siunčia, įskaitant „Apache“ versiją (pagrindinę ir mažesnę versiją), OS ir veikiančio žiniatinklio serverio tipą.

Mažiausiai informacijos, kurią norėtumėte atskleisti viešai, yra tai, kad žiniatinklio serveris yra „Apache“. Bet koks kitas veiksnys jūsų serverį sukels tik galimoms atakoms. Todėl rekomenduojama „Apache“ konfigūracijos failo direktyvą „ServerTokens“ nustatyti į „prod“.

ServerTokens Off

Kaip visada, išsaugokite pakeitimus ir būtinai iš naujo paleiskite „Apache“.

10. Apsaugokite „Apache“ naudodami „Fail2ban“.

Fail2ban yra atvirojo kodo įsilaužimo prevencijos programa, apsauganti „Linux“ sistemas nuo išorinių grėsmių, įskaitant DoS ir žiaurios jėgos atakas. Jis veikia nuolat stebint sistemos žurnalus, ar nėra nešvankios veiklos, ir uždrausdamas pagrindinius kompiuterius, atitinkančius atakos elgesį imituojančius modelius.

Fail2ban gali būti sukonfigūruotas taip, kad apsaugotų „Apache“ nuo DoS atakų, nuolat stebint „Apache“ žurnalus dėl nesėkmingų prisijungimo bandymų ir laikinai uždraudžiant pažeidžiančius IP adresus.

Sužinokite, kaip įdiegti Fail2ban sistemoje Linux naudojant:

  • Kaip naudoti „Fail2ban“, kad apsaugotumėte savo „Linux“ serverį

11. Išjunkite nereikalingus modulius

Apache moduliai yra tiesiog programos, kurios įkeliamos siekiant išplėsti žiniatinklio serverio funkcionalumą. Modulių išplėstos funkcijos apima pagrindinį autentifikavimą, turinio kaupimą talpykloje, šifravimą, saugumą ir kt.

Visada rekomenduojama išjungti visus tuos modulius, kurie šiuo metu nenaudojami, kad būtų sumažinta tikimybė tapti atakos auka.

Norėdami peržiūrėti visus įgalintus modulius, paleiskite komandą

apache2ctl -M

Norėdami patikrinti, ar įjungtas konkretus modulis, pavyzdžiui, perrašymo modulis, paleiskite komandą.

apache2ctl -M | grep rewrite

Norėdami išjungti modulį, paleiskite komandą:

sudo a2dismod rewrite 

12. Naudokite mod_security ir mod_evasive modulius, kad apsaugotumėte „Apache“.

Galite įgalinti modulius mod_security ir mod_evasive, kad apsaugotumėte „Apache“ nuo žiaurios jėgos arba DDoS atakų.

  • Modulis mod_security veikia kaip žiniatinklio programos užkarda (WAF) ir blokuoja įtartiną ir nepageidaujamą srautą į jūsų svetainę.
  • Modulis mod_evasive apsaugo jūsų serverį nuo brutalios jėgos ir paslaugų atsisakymo atakų (DoS).

Skaitykite daugiau apie tai, kaip apsaugoti „Apache“ naudojant modulius mod_security ir mod_evasive.

13. Apribotos nepageidaujamos paslaugos „Apache“.

Norėdami dar labiau apsaugoti Apache, apsvarstykite galimybę išjungti tam tikras paslaugas, pvz., simbolines nuorodas ir CGI vykdymą, jei šiuo metu to nereikia. Pagal numatytuosius nustatymus Apache seka simbolius, galime išjungti šią funkciją, taip pat funkciją -Includes ir CGI vienoje eilutėje.

Norėdami tai padaryti, skiltyje Katalogas pridėkite eilutę "-ExecCGI -FollowSymLinks -Includes" prie direktyvos Parinktys.

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

Tai taip pat galima pasiekti katalogo lygiu. Pavyzdžiui, čia išjungiame Includes ir Cgi failų vykdymą kataloge “/var/www/html/mydomain1”.

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

Išsaugokite pakeitimus ir iš naujo paleiskite „Apache“.

14. Apribokite failo įkėlimo dydį „Apache“.

Kitas būdas apsaugoti žiniatinklio serverį yra apriboti bendrą HTTP užklausos teksto, siunčiamo į žiniatinklio serverį iš kliento, dydį. Galite nustatyti jį serverio, katalogo, failo ar vietos kontekste.

Pavyzdžiui, jei norite leisti failą įkelti į konkretų katalogą, pasakykite /var/www/domain.com/wp-uploads katalogą ir apribokite įkelto failo dydį iki 4M.=4194304 baitai, pridėkite šią direktyvą prie „Apache“ konfigūracijos failo arba failo .htaccess.

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

Išsaugokite pakeitimus ir nepamirškite iš naujo paleisti „Apache“.

Galite nustatyti jį serverio, katalogo, failo ar vietos kontekste. Ši direktyva apsaugo nuo neįprasto kliento užklausų elgesio, kuris kartais gali būti paslaugų atsisakymo (DoS) ataka.

15. Įjunkite prisijungimą „Apache“.

Registravimas suteikia visą informaciją apie klientų užklausas ir bet kokią kitą informaciją, susijusią su jūsų žiniatinklio serverio veikimu. Tai suteikia naudingos informacijos, jei kas nors nepavyktų. Įgalinus „Apache“ žurnalus, ypač virtualiosios prieglobos failuose, galite tiksliai nustatyti problemą, jei žiniatinklio serveryje kažkas negerai.

Norėdami įjungti registravimą, turite įtraukti modulį mod_log_config, kuriame pateikiamos dvi pagrindinės registravimo instrukcijos.

  • ErrorLog – nurodo klaidų žurnalo failo kelią.
  • CustomLog – sukuria ir formatuoja žurnalo failą.

Šiuos atributus galite naudoti virtualiojo pagrindinio kompiuterio faile, esančiame virtualiosios prieglobos skiltyje, kad įgalintumėte registravimą.

<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} direktyva Debian sistemose apibrėžiama kaip /var/log/apache2 kelias.

16. Paleiskite „Apache“ kaip atskirą vartotoją ir grupę

Paleisti Apache kaip atskirą vartotoją ir grupę yra įprasta saugos praktika. Tai darydami galite atskirti žiniatinklio serverio procesą nuo kitų sistemos procesų ir sumažinti galimą žalą, jei žiniatinklio serveris bus pažeistas.

Pirmiausia norėsite sukurti naują naudotoją ir grupę, skirtą specialiai Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Tada turėsite redaguoti „Apache“ konfigūracijos failą, kad nurodytumėte naują vartotoją ir grupę.

User apacheuser
Group apachegroup

Kadangi keičiate vartotoją ir grupę, kurią vykdo „Apache“, gali tekti atnaujinti žiniatinklio katalogų ir failų nuosavybės teisę, kad „Apache“ vis tiek galėtų juos skaityti.

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

Atlikę šiuos pakeitimus, iš naujo paleiskite „Apache“, kad juos pritaikytumėte:

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

17. Apsaugokite nuo DDOS atakų ir sukietėjimo

Tiesa, jūs negalite visiškai apsaugoti savo svetainės nuo DDoS atakų. Tačiau čia yra keletas gairių, kurios gali padėti jas sušvelninti ir valdyti.

  • TimeOut – ši direktyva leidžia nurodyti trukmę, kurią serveris lauks, kol baigsis tam tikri įvykiai, prieš grąžindamas klaidą. Numatytoji reikšmė yra 300 sekundžių. Svetainėse, kurios yra jautrios DDoS atakoms, šią vertę patartina išlaikyti žemą. Tačiau tinkamas nustatymas labai priklauso nuo jūsų svetainėje gaunamų užklausų pobūdžio. Pastaba: mažas skirtasis laikas gali sukelti problemų su kai kuriais CGI scenarijais.
  • MaxClients – ši direktyva nustato jungčių, kurios gali būti aptarnaujamos vienu metu, skaičiaus apribojimą. Visi nauji ryšiai, viršijantys šį limitą, bus įrašyti į eilę. Jis pasiekiamas ir Prefork, ir Worker MPM. Numatytoji vertė yra 256.
  • KeepAliveTimeout – ši direktyva nurodo trukmę, kurią serveris lauks tolesnės užklausos prieš uždarydamas ryšį. Numatytoji reikšmė yra 5 sekundės.
  • LimitRequestFields – ši direktyva nustato klientų priimtų HTTP užklausų antraštės laukų skaičiaus apribojimą. Numatytoji reikšmė yra 100. Jei DDoS atakos įvyksta dėl per didelio HTTP užklausų antraščių skaičiaus, rekomenduojama šią reikšmę sumažinti.
  • LimitRequestFieldSize – ši direktyva nustato HTTP užklausos antraštės dydžio apribojimą.

18. Atlikite reguliarius pažeidžiamumo patikrinimus

Kitas būdas apsaugoti žiniatinklio serverį yra reguliariai atlikti pažeidžiamumo nuskaitymo testus. Tai padeda nustatyti galimas saugos spragas, kuriomis gali pasinaudoti įsilaužėliai, norėdami pasiekti neskelbtinus failus arba įterpti kenkėjiškų programų.

Pažeidžiamumo nuskaitymo įrankiai taip pat padeda nurodyti nesaugius konfigūracijos parametrus ir padeda atlikti atitikties auditą. Populiarūs pažeidžiamumo nuskaitymo įrankiai yra „Acutenix“, „Nessus“, „Nexpose“, „Sucuri“ ir daugelis kitų.

Išvada

Tai yra keletas „Apache“ tvirtinimo patarimų, kuriuos galite įgyvendinti savo žiniatinklio serveryje, kad suteiktumėte papildomą apsaugos sluoksnį ir išvengtumėte įsibrovimų.