Oct 29, 2023

Apache HTTP Server

Apache HTTP Server, često nazivan samo Apache, je besplatan i otvorenog koda web server softver koji omogućava distribuciju web sadržaja putem interneta. Ovaj server je razvijen od strane Apache Software Foundation i dostupan je za različite platforme, uključujući Unix, Linux, Windows i mnoge druge.

Instalacija Apache Servera

Za instalaciju Apache servera na Linux sistemu, možete koristiti paketni menadžer. Na primer, na Debian-based sistemima, koristite komandu:

sudo apt-get install apache2

Na Red Hat-based sistemima, koristite:

sudo yum install httpd

Nakon instalacije, možete pokrenuti Apache server sa:

sudo systemctl start apache2    # na Debian-based sistemima

sudo systemctl start httpd     # na Red Hat-based sistemima

Gde se nalazi konfiguracija Apache Servera?

Konfiguracija Apache servera se nalazi u konfiguracionim datotekama koje se obično nalaze u direktorijumu /etc/apache2/ na Debian-based sistemima ili /etc/httpd/ na Red Hat-based sistemima.

Osnovna konfiguracija se nalazi u datoteci httpd.conf, dok se specifične postavke za svaki veb sajt obično stavljaju u datoteke u direktorijumima /etc/apache2/sites-available/ ili /etc/httpd/conf.d/.

Instalacija Apache dokumentacije

Apache dokumentacija se obično instalira kao zaseban paket. Na Debian-based sistemima, možete koristiti sledeću komandu za instalaciju paketa apache2-doc:
sudo apt-get install apache2-doc w3m
Na Red Hat-based sistemima, možete koristiti sličan pristup da biste instalirali paket httpd-manual:
sudo yum install httpd-manual w3m

Pristup dokumentaciji:
Nakon uspešne instalacije, dokumentacija će biti smeštena u odgovarajući direktorijum. Obično se nalazi u /usr/share/doc/apache2/ na Debian-based sistemima ili /usr/share/doc/httpd/ na Red Hat-based sistemima.

Da biste pristupili dokumentaciji, otvorite web pregledač i upišite URL koji vodi do lokalnih Apache dokumentacija. Na primer:
http://localhost/manual/

Ili iz comandne linije uz pomoć w3m tekstualnog web browsera:
w3m http://localhost/manual/

Ovo će vas odvesti na početnu stranicu Apache dokumentacije. Odavde možete istraživati različite delove dokumentacije kako biste pronašli informacije koje su vam potrebne.

Dokumentacija obuhvata različite teme, uključujući konfiguraciju servera, upravljanje veb sajtovima, upravljanje modulima i mnoge druge korisne informacije.

Napomena: Lokacija dokumentacije može se razlikovati u zavisnosti od distribucije Linux-a i verzije Apache servera koju koristite. Preporučujem da proverite tačnu putanju na vašem sistemu ukoliko se razlikuje.

Provera statusa Apache servisa

Koristite sledeću komandu na komandnoj liniji da biste proverili status Apache servera na većini Linux sistema:
systemctl status apache2   # Na Debian/Ubuntu sistemima
Ako koristite Red Hat-based sistem, koristite:
systemctl status httpd     # Na Red Hat/CentOS sistemima
Ova komanda će prikazati informacije o trenutnom statusu Apache servera, uključujući da li je server pokrenut ili zaustavljen, aktivni procesi i druge relevantne informacije.

Status Apache servera se može proveriti i na stranici:
w3m http://localhost/server-status

Smještanje HTML stranica na Apache serveru - CentOS

Na CentOS operativnom sistemu, HTML stranice i drugi resursi za Apache web server obično se smeštaju u direktorijum koji se naziva "DocumentRoot". Evo standardnih putanja:

  1. Osnovni direktorijum za web server konfiguraciju: /etc/httpd/
  2. DocumentRoot za glavni sajt: /var/www/html/
  3. Dodatni sajtovi: Mogu imati svoje DocumentRoot direktorijume u /var/www/.

Kada dodate HTML datoteke u odgovarajući DocumentRoot direktorijum, možete ih pregledati preko web pregledača unosom IP adrese ili domena servera u adresnu traku.

Smještanje HTML stranica na Apache serveru - Ubuntu

Na Ubuntu operativnom sistemu, HTML stranice i drugi resursi za Apache web server obično se smeštaju u direktorijum koji se naziva "DocumentRoot". Evo standardnih putanja:

  1. Osnovni direktorijum za web server konfiguraciju: /etc/apache2/
  2. DocumentRoot za glavni sajt: /var/www/html/
  3. Dodatni sajtovi: Mogu imati svoje DocumentRoot direktorijume u /var/www/.

Kada dodate HTML datoteke u odgovarajući DocumentRoot direktorijum, možete ih pregledati preko web pregledača unosom IP adrese ili domena servera u adresnu traku.

VirtualHost

VirtualHost (virtuelni host) je koncept koji vam omogućava da na istom fizičkom web serveru hostujete više web stranica ili aplikacija, svaka sa svojim vlastitim postavkama i domenom. To vam omogućava da razdvojite različite sajtove ili aplikacije na istom serveru. Virtualni hostovi se često koriste za hosting više domena na jednom serveru ili za razvoj i testiranje različitih web aplikacija na istom serveru.

Evo kako se konfiguriše VirtualHost u Apache web serveru, zajedno s primerima:

Kreiranje konfiguracionih datoteka za VirtualHost:

Konfiguracijske datoteke za VirtualHost obično se smeštaju u direktorijumu /etc/apache2/sites-available/ na većini Linux sistema. Možete kreirati posebne datoteke za svaki VirtualHost.

Primeri VirtualHost konfiguracija:

a. Jednostavan primer za hosting više domena:

Ovaj primer pokazuje kako hostovati dva različita domena na istom serveru. Kreirajte dve odvojene konfiguracijske datoteke za svaki domen.

Konfiguracijska datoteka za prvi-domen.com (/etc/apache2/sites-available/prvi-domen.com.conf):

<VirtualHost *:80>

    ServerAdmin webmaster@prvi-domen.com

    ServerName prvi-domen.com

    DocumentRoot /var/www/prvi-domen

</VirtualHost>

Konfiguracijska datoteka za drugi-domen.com (/etc/apache2/sites-available/drugi-domen.com.conf):

<VirtualHost *:80>

    ServerAdmin webmaster@drugi-domen.com

    ServerName drugi-domen.com

    DocumentRoot /var/www/drugi-domen

</VirtualHost>

Zatim aktivirajte ove konfiguracije koristeći naredbu:

sudo a2ensite prvi-domen.com.conf

sudo a2ensite drugi-domen.com.conf

Nakon toga, ponovo pokrenite Apache server (sudo systemctl restart apache2).


b. Primer za hosting web aplikacija sa različitim domenima i SSL podrškom:

Ovaj primer prikazuje kako hostovati dve web aplikacije sa različitim domenama i SSL/TLS podrškom.

Konfiguracijska datoteka za prvi-aplikacija.com (/etc/apache2/sites-available/prvi-aplikacija.com.conf):

<VirtualHost *:80>

    ServerAdmin webmaster@prvi-aplikacija.com

    ServerName prvi-aplikacija.com

    DocumentRoot /var/www/prvi-aplikacija

</VirtualHost>


<VirtualHost *:443>

    ServerAdmin webmaster@prvi-aplikacija.com

    ServerName prvi-aplikacija.com

    DocumentRoot /var/www/prvi-aplikacija

    SSLEngine on

    SSLCertificateFile /putanja/do/ssl-sertifikata.crt

    SSLCertificateKeyFile /putanja/do/privatnog-kljuca.key

</VirtualHost>

Konfiguracijska datoteka za drugi-aplikacija.com (/etc/apache2/sites-available/drugi-aplikacija.com.conf):


<VirtualHost *:80>

    ServerAdmin webmaster@drugi-aplikacija.com

    ServerName drugi-aplikacija.com

    DocumentRoot /var/www/drugi-aplikacija

</VirtualHost>


<VirtualHost *:443>

    ServerAdmin webmaster@drugi-aplikacija.com

    ServerName drugi-aplikacija.com

    DocumentRoot /var/www/drugi-aplikacija

    SSLEngine on

    SSLCertificateFile /putanja/do/ssl-sertifikata.crt

    SSLCertificateKeyFile /putanja/do/privatnog-kljuca.key

</VirtualHost>

Aktivirajte ove konfiguracije i instalirajte SSL sertifikate za oba domena kako bi omogućili HTTPS.

Nakon podešavanja VirtualHost konfiguracija, ne zaboravite ponovo pokrenuti Apache server kako bi promene stupile na snagu. VirtualHost omogućava hosting više domena i aplikacija na istom serveru, pružajući izolaciju i prilagodljivost za svaku od njih.


Moduli

Apache HTTP Server dolazi s velikim brojem modula koji proširuju njegove funkcionalnosti i omogućavaju konfiguraciju za različite potrebe. Evo nekoliko klasičnih i često korišćenih Apache modula:
  • mod_rewrite: Ovaj modul omogućava konfiguraciju URL preusmeravanja i promene URL struktura na serveru. Koristi se za implementaciju URL preusmeravanja i prilagođavanje URL-ova.
  • mod_ssl: Ovaj modul omogućava podršku za SSL i TLS enkripciju, čime se omogućava siguran prenos podataka preko HTTPS protokola.
  • mod_proxy: Modul za proksi server koji omogućava Apache serveru da deluje kao proksi server. Može se koristiti za preusmeravanje zahteva prema drugim serverima, kao što su aplikacioni serveri.
  • mod_auth: Omogućava autentifikaciju korisnika. Podržava različite metode autentifikacije, kao što su osnovna autentifikacija, autentifikacija sertifikatom i drugi.
  • mod_security: Modul za zaštitu od napada na web aplikacije (WAF). Pomaže u zaštiti servera i aplikacija od različitih vrsta napada.
  • mod_cache: Omogućava keširanje web sadržaja kako bi se smanjilo opterećenje servera i ubrzao odgovor na zahteve klijenata.
  • mod_gzip: Modul za kompresiju sadržaja koji omogućava smanjenje veličine prenosa podataka između servera i klijenta, čime se poboljšava brzina učitavanja stranica.
  • mod_dav: Modul za podršku WebDAV (Web Distributed Authoring and Versioning) protokolu, koji omogućava rad sa fajlovima i resursima na daljinu.
  • mod_cgi: Omogućava izvršavanje CGI skripti na serveru. Ovo je korisno za dinamičke web aplikacije napisane u jezicima poput Perl, Python i drugih.
  • mod_userdir: Omogućava korisnicima da hostuju svoje veb stranice u svojim ličnim direktorijumima na serveru.
  • mod_include: Omogućava uključivanje dinamičkih elemenata u HTML stranice, kao što su SSI (Server Side Includes).
  • mod_headers: Ovaj modul omogućava konfiguraciju HTTP zaglavlja, što je korisno za kontrolu keširanja, sigurnosti i drugih aspekata HTTP komunikacije.
Ovo su samo neki od često korišćenih modula za Apache HTTP Server. 

A2 komande

a2dismod i a2enmod komande

a2dismod i a2enmod su komande koje se često koriste na Debian-based sistemima (uključujući Debian i Ubuntu) za upravljanje Apache modulima. Ove komande omogućavaju lako omogućavanje (enable) i onemogućavanje (disable) pojedinačnih modula na Apache HTTP Serveru. Evo kako se koriste i primeri:

a2enmod (Apache2 Enable Module):
Ova komanda se koristi za omogućavanje (aktiviranje) Apache modula. Kada omogućite modul, on postaje deo aktivne konfiguracije servera i može se koristiti za razne svrhe, poput autentifikacije, kompresije, keširanja i drugih.

Primer:
sudo a2enmod rewrite
Ovaj primer omogućava modul rewrite, što je korisno za konfiguraciju URL preusmeravanja i promene URL struktura na serveru.

a2dismod (Apache2 Disable Module):
Ova komanda se koristi za onemogućavanje (deaktiviranje) Apache modula. Kada onemogućite modul, on se izbacuje iz aktivne konfiguracije servera i više neće biti deo obrade zahteva na serveru.

Primer:
sudo a2dismod status
Ovaj primer onemogućava modul status, koji je odgovoran za server-status stranicu, kao što smo prethodno spomenuli.

Nakon što koristite a2enmod ili a2dismod, obavezno ponovo pokrenite Apache server kako biste primenili promene:
sudo systemctl restart apache2


apache2ctl komanda

apache2ctl je komandna linija koja se koristi za upravljanje Apache HTTP Serverom na Unix i Linux sistemima. Ova komanda pruža različite opcije za kontrolu Apache servera, uključujući pokretanje, zaustavljanje, ponovno pokretanje, proveru konfiguracije i druge operacije. Ovo je koristan alat za administratore sistema i webmastera koji upravljaju Apache serverima.

Evo nekoliko čestih opcija koje se koriste sa apache2ctl:
  • start: Pokreće Apache HTTP Server. Na primer: sudo apache2ctl start.
  • stop: Zaustavlja Apache server. Na primer: sudo apache2ctl stop.
  • restart: Ponovo pokreće Apache server. Ovo je korisno nakon izmena u konfiguraciji kako bi se primenile promene. Na primer: sudo apache2ctl restart.
  • graceful: Izvodi "graceful" ponovno pokretanje Apache servera. Ovo omogućava da se aktivni zahtevi završe pre nego što se server zaustavi i ponovo pokrene. Na primer: sudo apache2ctl graceful.
  • configtest: Proverava konfiguraciju Apache servera na greške. Ovo je korisno kako biste identifikovali probleme u konfiguraciji pre nego što ih primenite. Na primer: sudo apache2ctl configtest.
  • status: Prikazuje status Apache servera, uključujući informacije o trenutnim procesima i konekcijama. Na primer: sudo apache2ctl status.

apache2ctl može varirati u nazivima i dostupnim opcijama u zavisnosti od verzije Apache servera i operativnog sistema koji koristite.

a2query komanda

a2query je komanda koja se koristi za upravljanje Apache konfiguracijom na Debian-based sistemima. Ova komanda omogućava različite opcije za pregled i analizu Apache konfiguracije. Evo nekoliko glavnih opcija:

  • -m (moduli): Prikazuje listu aktivnih Apache modula.
  • -v (Virtual Hosts): Prikazuje informacije o aktivnim Apache Virtual Host-ovima.
  • -l (Load File): Prikazuje putanju do glavne konfiguracione datoteke Apache servera.
  • -f (File): Omogućava pregled informacija o određenoj konfiguracionoj datoteci ili direktorijumu.

Ove opcije se često koriste za analizu i dijagnostiku Apache konfiguracije kako bi se identifikovali aktivni moduli, Virtual Host-ovi i druge informacije o konfiguraciji.


a2ensite i a2dissite komande

a2ensite i a2dissite su korisne komande na Debian-based sistemima, poput Debian-a i Ubuntu-a, koje se koriste za upravljanje Apache Virtual Host konfiguracijama. Virtual Host-ovi omogućavaju hostovanje više veb sajtova na istom Apache serveru, a ove komande olakšavaju aktiviranje i deaktiviranje pojedinačnih Virtual Host konfiguracija.

a2ensite (Apache2 Enable Site)

Ova komanda omogućava (aktivira) Apache Virtual Host konfiguraciju. Konfiguracija Virtual Host-a se simbolički povezuje sa direktorijumom /etc/apache2/sites-enabled/, što ga čini aktivnim i dostupnim na serveru.

Primer:

sudo a2ensite mywebsite

Ovaj primer omogućava Virtual Host sa imenom mywebsite, čime se veb sajt konfigurisan u toj Virtual Host konfiguraciji sada aktivira na serveru.

a2dissite (Apache2 Disable Site)

Ova komanda onemogućava (deaktivira) Apache Virtual Host konfiguraciju. Simbolička veza na konfiguracionu datoteku Virtual Host-a se uklanja iz direktorijuma /etc/apache2/sites-enabled/, čime se deaktivira.

Primer:

sudo a2dissite mywebsite

Ovaj primer onemogućava Virtual Host sa imenom mywebsite, čime se veb sajt konfigurisan u toj Virtual Host konfiguraciji više neće prikazivati na serveru.

Direktive

DocumentRoot direktiva

DocumentRoot je ključna konfiguraciona direktiva u Apache HTTP Serveru koja definiše osnovni direktorijum na serveru u kojem se nalaze web sadržaji (HTML, CSS, slike, fajlovi itd.) koji će biti dostupni putem HTTP protokola.

Drugim rečima, DocumentRoot je putanja do korena vašeg veb sajta na serveru.

Kada klijent (korisnik web pregledača) zahteva određeni URL sajta, Apache server traži odgovarajući resurs (npr. HTML stranicu) u direktorijumu koji je naveden kao DocumentRoot za taj sajt. Ako se resurs nalazi u tom direktorijumu, server će ga poslati klijentu. Ovo je osnovni koncept koji omogućava Apacheu da servira web stranice.

Na primer, ako imate konfiguraciju u Apache koja izgleda ovako:

DocumentRoot /var/www/html

To znači da su svi web sadržaji za taj veb sajt smešteni u direktorijumu /var/www/html. Ako neko zatraži stranicu sa URL-om http://www.example.com/index.html, Apache će potražiti ovu stranicu u direktorijumu /var/www/html i, ako je pronađe, poslaće je klijentu.

DocumentRoot se često koristi zajedno sa Apache Virtual Host-ovima (Virtual Host-ovi omogućavaju hostovanje više veb sajtova na istom serveru). Svaki Virtual Host može imati svoj sopstveni DocumentRoot kako bi različiti sajtovi bili odvojeni na serveru.

Pravilno konfigurisan DocumentRoot je ključan za ispravno hostovanje web sajtova na Apache serveru. Važno je da osigurate da ova direktiva vodi do tačnog direktorijuma u kojem se nalaze vaši web sadržaji kako bi server mogao da pravilno servira stranice i resurse.

ServerName direktiva

ServerName je Apache konfiguraciona direktiva koja se koristi za definisanje kanonskog (osnovnog) imena servera. Ova direktiva se obično koristi u konfiguracionim datotekama Apache servera kako bi se navelo ime ili DNS (Domain Name System) naziv pod kojim će server biti poznat na internetu.

Kada se zahtevi šalju serveru putem HTTP ili HTTPS protokola, Apache koristi vrednost ServerName da bi usmerio zahtev na odgovarajući Virtual Host (ako su konfigurisani). Takođe, ServerName je važan za generisanje odgovarajućih HTTP odgovora, kao što su HTTP "Location" zaglavlja koja se koriste za preusmeravanje korisnika.

Evo primera upotrebe ServerName u Apache konfiguraciji:

<VirtualHost *:80>

    ServerName www.example.com

    DocumentRoot /var/www/example

</VirtualHost>

U ovom primeru, ServerName je postavljen na www.example.com. To znači da će svi zahtevi koji stignu na ovu adresu biti usmereni na odgovarajući Virtual Host sa podešenim DocumentRoot direktorijumom.

Važno je napomenuti da svaki Apache Virtual Host treba da ima svoju ServerName ili ServerAlias direktivu kako bi se tačno usmerili zahtevi na odgovarajući sajt. Osim toga, ServerName može biti i IP adresa servera, a ne samo DNS ime.

Pravilno postavljen ServerName je ključan za tačno usmeravanje zahteva i funkcionalnost Virtual Host-ova na Apache serveru, posebno kada se hostuje više sajtova na istom serveru.

LogFormat direktiva

LogFormat je Apache konfiguraciona direktiva koja se koristi za definisanje formata zapisa (log formata) za Apache pristupne i greške log datoteke. Ova direktiva omogućava prilagođavanje načina na koji se informacije o zahtevima i događajima zabeleženi u log datotekama formatiraju i prikazuju.

Standardni format zapisa (Common Log Format):

    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    CustomLog "logs/access_log" common
    

Ovaj format zapisa uključuje IP adresu klijenta (%h), identifikaciju korisnika (%l), korisničko ime (%u), vremensku oznaku (%t), HTTP zahtev ("%r"), status HTTP odgovora (>%s), i veličinu odgovora (%b).

Kratki format zapisa sa vremenskom oznakom:

    LogFormat "%t %h \"%r\" %>s %b" shorttime
    CustomLog "logs/access_log" shorttime
    

Ovaj format zapisa prikazuje samo vremensku oznaku, IP adresu klijenta, HTTP zahtev, status HTTP odgovora i veličinu odgovora.

Prilagođeni format sa dodatnim informacijama:

    LogFormat "[%{%Y-%m-%d %H:%M:%S}t] %h \"%r\" %>s %b 
            \"%{Referer}i\"\"%{User-Agent}i\"" customformat
    CustomLog "logs/access_log" customformat
    

Ovaj prilagođeni format dodaje dodatne informacije, kao što su vremenska oznaka u određenom formatu, Referer zaglavlje i User-Agent zaglavlje.

<Location> direktiva

<Location> direktiva u Apache HTTP server konfiguraciji podržava različite opcije koje omogućavaju precizno podešavanje ponašanja za određeni URL prostor. Evo nekoliko često korišćenih opcija za <Location> direktivu:

  • AuthType: Definiše vrstu autentifikacije koja se koristi za zaštitu ove lokacije. Na primer, AuthType Basic koristi HTTP osnovnu autentifikaciju.
  • AuthName: Postavlja ime autentifikacionog stvaratelja koje će se pojaviti u dijalogu za unos korisničkog imena i lozinke.
  • AuthUserFile: Postavlja putanju do datoteke koja sadrži informacije o korisnicima i njihovim lozinkama za autentifikaciju.
  • Require: Definiše uslove koje korisnik mora zadovoljiti kako bi pristupio ovoj lokaciji. Na primer, Require valid-user zahteva da korisnik bude validan (autentifikovan).
  • Redirect: Koristi se za postavljanje redirekcija sa ove lokacije na drugu lokaciju. Na primer, Redirect 301 /old-url /new-url će trajno preusmeriti zahteve sa /old-url na /new-url.
  • ProxyPass: Omogućava proxy postavke za ovu lokaciju, korisne za obrtanje proxy-ja. Na primer, ProxyPass /app http://app-server:8080 usmerava zahteve sa ove lokacije na drugi server.
  • SetHandler: Postavlja handler za obradu zahteva za ovu lokaciju. Na primer, SetHandler cgi-script može se koristiti za izvršavanje CGI skripti.
  • ErrorDocument: Definiše prilagođeni dokument za prikazivanje grešaka na ovoj lokaciji. Na primer, ErrorDocument 404 /custom-404.html će prikazati prilagođenu stranicu za 404 grešku.
  • Options: Postavlja opcije koje se primenjuju na ovu lokaciju, kao što su Indexes za omogućavanje indeksiranja direktorijuma ili FollowSymLinks za praćenje simboličkih veza.

Ovo su samo neke od opcija koje možete koristiti sa <Location> direktivom. Opcije se često koriste zajedno kako bi se precizno konfigurisalo ponašanje za određeni URL prostor na Apache serveru.

SetHandler direktiva

SetHandler je Apache konfiguraciona direktiva koja se koristi za postavljanje handlera (obrtnika) za određenu URL putanju ili lokaciju na web serveru. Obrtnici su odgovorni za procesiranje zahteva i generisanje odgovora na osnovu tipa sadržaja. Korišćenjem SetHandler možete precizno odabrati kako će Apache obraditi zahteve za određenim resursima.

Sintaksa SetHandler izgleda ovako:

<Location URL-path>

    SetHandler handler-name

</Location>

<Location URL-path> definiše na kojoj putanji (URL-u) će se primeniti SetHandler.

SetHandler handler-name postavlja handler koji će se koristiti za određenu putanju.

Evo nekoliko primera kako se SetHandler može koristiti:


Postavljanje PHP handlera za .php datoteke:

<LocationMatch "\.php$">

    SetHandler application/x-httpd-php

</LocationMatch>

U ovom primeru, SetHandler se koristi da se postavi handler za sve .php datoteke, tako da će Apache koristiti PHP interpreter za obradu ovih datoteka.


Postavljanje handlera za CGI skripte:

<Location /cgi-bin>

    SetHandler cgi-script

</Location>

Ovaj primer postavlja handler cgi-script za sve resurse unutar direktorijuma /cgi-bin, što omogućava izvršavanje CGI skripti na tim putanjama.


Postavljanje handlera za određene vrste sadržaja:

<Location /images>

    SetHandler image-handler

</Location>

Ovde, SetHandler se koristi za postavljanje custom handlera (image-handler) za sve resurse unutar direktorijuma /images.

SetHandler vam omogućava da precizno kontrolišete kako će Apache obrađivati različite tipove resursa na osnovu njihove putanje. Ovo je korisno za postavljanje specifičnih pravila za obradu različitih vrsta sadržaja na vašem web serveru.

AllowOverride direktiva

AllowOverride je Apache konfiguraciona direktiva koja se koristi u okviru <Directory> bloka kako bi se kontrolisalo koji tipovi konfiguracija i promena u konfiguracionim datotekama mogu biti primenjeni na određeni direktorijum i njegove potdirektorijume. Kada se postavi na vrednost "None" (AllowOverride None), to znači da se ne dozvoljava nikakvo nasleđivanje ili promene iz konfiguracijskih datoteka unutar tog direktorijuma.

Ovo se često koristi kao sigurnosna mera kako bi se onemogućilo potencijalno opasno ili neovlašćeno konfigurisanje iz .htaccess datoteka unutar tog direktorijuma. Kada je AllowOverride postavljen na "None", .htaccess datoteke unutar tog direktorijuma se ignorišu, i bilo kakve konfiguracije unutar tih datoteka se ne primenjuju.

Primer konfiguracije u Apache konfiguracionoj datoteci sa AllowOverride None izgledao bi ovako:

<Directory /putanja/do/direktorijuma>

    AllowOverride None

</Directory>

U ovom primeru, sve konfiguracije koje se nalaze u .htaccess datotekama unutar /putanja/do/direktorijuma i njegovih potdirektorijuma neće biti primenjene, bez obzira na šta je definisano u tim datotekama.

AllowOverride je korisna zaštita kada želite da ograničite promene u konfiguraciji za određene direktorijume kako biste spriječili potencijalne bezbednosne ranjivosti ili neovlašćene izmene u konfiguraciji.


Podešavanje SSL certifikata na CentOS

Evo osnovnih koraka:

  1. Instaliranje mod_ssl:
  2. Prvo, instalirajte mod_ssl, Apache modul koji omogućava SSL podršku. Koristite yum komandu za instalaciju:

    sudo yum install mod_ssl
  3. Podesite VirtualHost za HTTPS:
  4. Otvorite konfiguracionu datoteku vašeg Apache VirtualHosta za HTTPS, koja se obično nalazi u direktorijumu /etc/httpd/conf.d/. U tom fajlu, postavite sledeće direktive:

                <VirtualHost *:443>
                    ServerName example.com
                    DocumentRoot /var/www/html
    
                    SSLEngine on
                    SSLCertificateFile /putanja/do/ssl.crt
                    SSLCertificateKeyFile /putanja/do/ssl.key
                </VirtualHost>
            
  5. Ponovno pokrenite Apache server:
  6. Nakon što ste sačuvali izmene u konfiguracionoj datoteci, ponovo pokrenite Apache server da biste primenili promene:

    sudo systemctl restart httpd
  7. Proverite konfiguraciju:
  8. Pre nego što klijenti počnu da pristupaju vašem sajtu preko HTTPS-a, proverite konfiguraciju na greške. Koristite sledeću komandu:

    sudo httpd -t
  9. Omogućite firewall:
  10. Ako koristite firewall, ne zaboravite omogućiti dolazni saobraćaj na portu 443 (HTTPS port).

Ovo su osnovni koraci za postavljanje SSL certifikata na CentOS za Apache web server. Nakon izvršenih ovih koraka, vaš web sajt će biti dostupan preko HTTPS-a, pružajući sigurniju komunikaciju između servera i klijenata.

Podešavanje SSL certifikata na Debian-based sistemima

Prvo, instalirajte mod_ssl, Apache modul koji omogućava SSL podršku. Koristite a2enmod komandu za instalaciju:

sudo a2enmod ssl
Podesite VirtualHost za HTTPS:

Otvorite konfiguracionu datoteku vašeg Apache VirtualHosta za HTTPS, koja se obično nalazi u direktorijumu /etc/apache2/sites-available/. U tom fajlu, postavite sledeće direktive:


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

            SSLEngine on
            SSLCertificateFile /putanja/do/ssl.crt
            SSLCertificateKeyFile /putanja/do/ssl.key
        </VirtualHost>
    
Ponovno pokrenite Apache server:

Nakon što ste sačuvali izmene u konfiguracionoj datoteci, ponovo pokrenite Apache server da biste primenili promene:

sudo systemctl restart apache2
Proverite konfiguraciju:

Pre nego što klijenti počnu da pristupaju vašem sajtu preko HTTPS-a, proverite konfiguraciju na greške. Koristite sledeću komandu:

sudo apache2ctl configtest
Omogućite firewall:

Ako koristite firewall, ne zaboravite omogućiti dolazni saobraćaj na portu 443 (HTTPS port).

Ovo su osnovni koraci za postavljanje SSL certifikata na Ubuntu za Apache web server. Nakon izvršenih ovih koraka, vaš web sajt će biti dostupan preko HTTPS-a, pružajući sigurniju komunikaciju između servera i klijenata.

Podešavanje autentifikacije

Podešavanje autentifikacije na Apache web serveru omogućava vam zaštitu određenih resursa ili direktorijuma lozinkom. Evo osnovnih koraka za postavljanje autentifikacije na Apache:

  1. Instaliranje Apache modula za autentifikaciju:
  2. Pre nego što možete koristiti autentifikaciju, morate se pobrinuti da odgovarajući Apache moduli budu instalirani i omogućeni. Dva česta modula za autentifikaciju su mod_auth_basic i mod_authn_file.

  3. Podesite direktorijum koji zahteva autentifikaciju:
  4. Otvorite Apache konfiguracionu datoteku koja se obično nalazi u /etc/apache2/sites-available/ na Debian-based sistemima ili /etc/httpd/conf.d/ na CentOS-based sistemima. Unutar <Directory> ili <Location> bloka, dodajte sledeće direktive za postavljanje autentifikacije:

    
                <Directory /putanja/do/zasticenog-direktorijuma>
                    AuthType Basic
                    AuthName "Zaštićeni resursi"
                    AuthUserFile /putanja/do/htpasswd-datoteke
                    Require valid-user
                </Directory>
            
  5. Generisanje htpasswd datoteke:
  6. Da biste dodali korisnička imena i lozinke za autentifikaciju, koristite htpasswd alat. Na primer, za dodavanje korisnika izvršite sledeću komandu:

    sudo htpasswd -c /putanja/do/htpasswd-datoteke korisnik
  7. Ponovno pokrenite Apache server:
  8. Nakon što ste postavili autentifikaciju i generisali htpasswd datoteku, ponovo pokrenite Apache server kako biste primenili promene:

    sudo systemctl restart apache2

Sada ste postavili autentifikaciju na Apache web serveru. Kada korisnici pokušaju da pristupe zaštićenom resursu, biće im zatraženo da unesu korisničko ime i lozinku koje ste postavili.

Apache kao WAF

Mod_security je WAF (Web Application Firewall) modul za Apache server koji se koristi za zaštitu web aplikacija od različitih vrsta napada. Evo primera kako konfigurisati Apache server sa mod_security modulom:

Instaliranje mod_security:
Prvo, morate instalirati mod_security modul na vašem Apache serveru. Koristite sistemski paketni menadžer ili preuzmite mod_security sa zvanične web stranice modula.

Aktiviranje mod_security modula:
Nakon instalacije, morate aktivirati mod_security modul u Apache konfiguraciji. To se obično postiže uređivanjem konfiguracionih datoteka Apache servera.

Konfiguracija mod_security:
Konfiguraciona datoteka za mod_security obično se nalazi u /etc/modsecurity/modsecurity.conf na većini Linux sistema. Otvorite ovu datoteku i prilagodite postavke prema vašim potrebama. Evo primera osnovnih postavki:
<IfModule mod_security2.c>
    # Aktivira mod_security
    SecRuleEngine On

    # Putanja do osnovnih pravila
    IncludeOptional /etc/modsecurity.d/*.conf
</IfModule>
Podešavanje pravila:
Pored osnovnih postavki, možete definisati pravila koja će se primenjivati na HTTP zahtjeve i odgovore. Pravila se obično čuvaju u datotekama sa ekstenzijom .conf u direktorijumu /etc/modsecurity.d/. Evo primera pravila koja blokira SQL injection napade:
# Blokira SQL injection napade
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "\b(?:s(?:elect\b(?:\s+(?:length\b\([^)]+\)|.*?[\s\*]+[\w\*]+\s*[\*\(]|\.\s*from\b)|\s+from\b)|ys(?:tem\b\(|\.))|ql\b\(|x(?:(?:p\(|mltype\b\(.+\bdocument\.location|ss\b\()|ecute\s*\()" "id:900130,rev:5,severity:2,msg:'SQL Injection Attack'"
Restartovanje Apache servera:
Nakon što ste konfigurisali mod_security, trebate ponovo pokrenuti Apache server kako bi promene bile primenjene:
sudo systemctl restart apache2
Nakon ovih koraka, mod_security će biti aktiviran na vašem Apache serveru i primenjivaće se pravila za zaštitu od različitih vrsta napada na web aplikacije. Vodite računa o konfiguraciji i pravilima kako biste osigurali da se mod_security ponaša u skladu sa zahtjevima vaše aplikacije i pruža željeni nivo sigurnosti.


Evo još nekoliko primera SecRule direktiva za konfiguraciju mod_security pravila. Ovi primjeri prikazuju kako možete definisati pravila za različite vrste napada i zaštite vašu web aplikaciju:

Zaštita od XSS napada:
Ovaj primer pokazuje kako definisati pravilo koje blokira pokušaje Cross-Site Scripting (XSS) napada:
SecRule ARGS|REQUEST_COOKIES|REQUEST_BODY|REQUEST_HEADERS "script" "id:1001,phase:2,deny,status:403,msg:'XSS Attack Detected'"

Zaštita od SQL injection napada:
Ovaj primer blokira pokušaje SQL injection napada:
SecRule REQUEST_COOKIES|ARGS|REQUEST_HEADERS "((\%27)|(\'))|((\%23)|(\#))|((\%2f)|(/etc/passwd))" "id:1002,phase:2,deny,status:403,msg:'SQL Injection Attack'"

Zaštita od pristupa osetljivim datotekama:
Ovaj primer blokira pristup određenim osetljivim datotekama kao što je config.php:
SecRule REQUEST_URI "@rx config\.php" "id:1003,phase:1,deny,status:403,msg:'Access to Sensitive File Denied'"

Zaštita od brute force napada na autentifikaciju:
Ovaj primer može pomoći u sprečavanju brute force napada na autentifikaciju:
SecAction "phase:1,t:none,nolog,pass,initcol:ip=%{REMOTE_ADDR},initcol:user=%{REMOTE_ADDR},id:1004"
SecRule REQUEST_HEADERS:Authorization "Basic" "phase:2,deprecatevar:ip.user=3/600,pass,nolog,setvar:ip.user=+1,expirevar:ip.user=600,id:1005"
SecRule IP:bf_block "@gt 0" "phase:2,deny,status:401,log,id:1006,msg:'Brute Force Protection: IP Blocked'"

Zaštita od CSRF napada:
Ovaj primer pomaže u zaštiti od Cross-Site Request Forgery (CSRF) napada:
SecRule REQUEST_HEADERS:Referer "@rx ^$" "id:1007,phase:2,block,msg:'CSRF Attack Detected: Empty Referer Header'"
Ovi primjeri su samo nekoliko osnovnih pravila i tipova napada koje možete zaštiti koristeći mod_security. Prilagodite pravila prema specifičnim zahtjevima vaše aplikacije i potrebama za sigurnošću. Vodite računa o konfiguraciji i testiranju pravila kako biste osigurali da ne blokiraju legitimne zahteve.

No comments:

Post a Comment