Archive for the ‘Web’ Category

Kao što većina administratora i ljudi koji se na neki način kreću u informatičkom svijetu zna, Apache je jedan od najpopularnijih web servera. To, naravno, ima svojih pozitivnih ali i negativnih strana, a jedna od negativnih je i ta da zbog velike rasprostranjenosti zlonamjerni korisnici traže nedostatke baš za Apache kako bi napravili štetu. Slično je bilo i sa Internet preglednikom Mozilla Firefox koji u početku nije imao mnogo sigurnosnih propusta baš zbog toga što ih nitko nije niti tražio jer sam preglednik nije bio odveć popularan pa su ga rijetki koristili. No, kako mu je popularnost rasla, tako su se uočavali i propusti. Da se razumijemo - ja ne tvrdim da je Firefox loš proizvod (u svakom slučaju meni je puno bolji od Internet Explorera) nego samo da se ga napravili ljudi, a tko radi taj i griješi. Ali da ne duljim previše, donosim vam nekoliko savjeta za sigurnost Apache web servera.

Sakrijte osjetljive informacije od korisnika

Sigurno ste do sad naišli na neku adresu kod koje vam se javila popularna greška 404 (ako niste, probajte otvoriti neku izmišljenu adresu, s tim da domena mora biti prava). Kod takvih grešaka, na dnu se po defaultnim postavkama Apache-a ispisuje verzija i moduli koji su instalirani na serveru. Budući da to nekome može poslužiti za napad, bolje je to spriječiti.

Otvorite postavke Apache-a (datoteka /etc/apache2/apache2.conf) i u njoj napravite slijedeće promjene. Pronađite

ServerTokens Full
ServerSignature On

i promijenite u

ServerTokens Prod
ServerSignature Off

Opcija ServerTokens određuje koje informacije će server poslati u HTTP response headeru (najmanje što možete odrediti je da se šalje naziv proizvoda - Apache), a opcija ServerSignature određuje hoće li se ispisivati potpis Apache servera na stranicama koje generira sam Apache (npr. stranice sa 404 greškom, listanje direktorija putem FTP-a). Jedino što treba zapamtiti da ovime ne određujemo da se verzija Apache-a i slične informacije neće prikazivati ukoliko smo odredili prikazivanje proizvoljnih stranica (npr. proizvoljne stranice sa greškom 404).

Nedavno sam imao potrebu na jednom serveru postaviti nekoliko Internet stranica. Možda neki (malo manje upućeni) misle da na Internetu vrijedi “1 site = 1 server” no to nije tako. Vrlo često se kod manje zahtjevnih site-ova (koji nemaju previše pageview-ova dnevno) koristi jedan server za nekoliko Internet stranica. Ovdje ću opisati kako na jednostavan način na jedan Apache2 server smjestiti 3 Internet stranice (za primjer ću koristiti domene www.prva.com, www.druga.com i www.treca.hr).

Dakle, imate server na kojem je instaliran Apache i to u verziji 2.x. Ako malo bolje pogledate u direktorij /etc/apache2, vidjet ćete slijedeće:

  • apache2.conf datoteku - u njoj se nalazi veći dio konfiguracije Apache web servera
  • conf.d direktorij - sve datoteke koje se nalaze u njemu Apache smatra konfiguracijskima i pokušati će ih pročitati kod pokretanja
  • httpd.conf - datoteka ovog naziva je u verziji 1.x sadržavala konfiguraciju koja je sad prebačena u apache2.conf. Budući da u njoj vjerojatno nema ništa, a Apache ju po defaultu čita kod pokretanja, možete ju koristiti za vlastitu konfiguraciju Apache-a
  • mods-available direktorij - u njemu se nalaze konfiguracijske datoteke modula koji su dostupni za instalaciju (neki su možda već i instalirani)
  • mods-enabled direktorij - sadrži soft linkove na konfiguracijske datoteke modula, a ti linkovi se stvaraju automatski kad se modul instalira
  • ports.conf datoteka - popis portova na kojima Apache sluša
  • sites-available direktorij - u njemu se nalaze konfiguracijske datoteke za svaku web stranicu koja je dostupna Apache-u
  • sites-enabled direktorij - sadrži soft linkove na konfiguraciju svake instalirane web stranice

Kreiranje direktorija za svaku stranicu

Prvo ćemo kreirati jedan direktorij u koji ćemo smjestiti sve Internet stranice koje ćemo imati na serveru. Taj direktorij možete kreirati bilo gdje, samo što korisnik pod kojim je pokrenut Apache servis (na nekim distribucijama to je www-data, a na drugima je httpd) mora imati prava za čitanje iz tog direktorija. Ja ću direktorij kreirati u home direktoriju.

mkdir /home/www

Nakon toga kreirajte direktorije za svaku stranicu koju ćete imati, a u svakom direktoriju stranice napravite dodatne direktorije htdocs, logs i cgi-bin.

mkdir /home/www/www.prva.com
mkdir /home/www/www.prva.com/htdocs
mkdir /home/www/www.prva.com/logs
mkdir /home/www/www.prva.com/cgi-bin
mkdir /home/www/www.druga.com
mkdir /home/www/www.druga.com/htdocs
mkdir /home/www/www.druga.com/logs
mkdir /home/www/www.druga.com/cgi-bin
mkdir /home/www/www.treca.com
mkdir /home/www/www.treca.com/htdocs
mkdir /home/www/www.treca.com/logs
mkdir /home/www/www.treca.com/cgi-bin

Naravno, ukoliko ćete imati isti sadržaj za sve stranice (npr. ukoliko imate isti naziv domene, ali različite vršne domene - www.stranica.com, www.stranica.net, www.stranica.org…) nema smisla kreirati različite direktorije nego treba koristiti soft linkove.

Konfiguracija

Nakon što smo kreirali direktorije za svaku web stranicu, moramo u Apache konfiguraciji omogućiti korištenje virtualnih hostova. Najjednostavnije je u direktoriju /etc/apache2/conf.d napraviti datoteku virtual.conf i u nju upisati slijedeće:

NameVirtualHost *

Kao što sam već rekao, Apache prilikom pokretana čita sve datoteke u direktoriju conf.d pa će pročitati i datoteku virtual.conf.

Nakon toga, u direktoriju /etc/apache2/sites-available ćemo kreirati konfiguracijsku datoteku za svaku Internet stranicu. Dakle, u datoteku /etc/apache2/sites-available/www.prva.com upišite slijedeće:

#  Prva.com (/etc/apache2/sites-available/www.prva.com)
<VirtualHost *>
ServerAdmin webmaster@prva.com
ServerName  www.prva.com
ServerAlias prva.com, *.prva.com

# Indexes + Directory Root.
DirectoryIndex index.html, index.php
DocumentRoot /home/www/www.prva.com/htdocs/

# CGI Directory
ScriptAlias /cgi-bin/ /home/www/www.prva.com/cgi-bin/
<Location /cgi-bin>
Options +ExecCGI
</Location>

# Logfiles
ErrorLog  /home/www/www.prva.com/logs/error.log
CustomLog /home/www/www.prva.com/logs/access.log combined
</VirtualHost>

Nakon toga u istom direktoriju kreirajte još i datoteke www.druga.com te www.treca.com. U njih možete staviti istu konfiguraciju kao i u www.prva.com, samo napravite logične promjene (npr. umjesto Server name www.prva.com upišite Server name www.druga.com te Server name www.treca.com).

Naravno, u svaku od datoteka možete dodati i neki proizvoljni konfiguracijski redak koji će se odnositi samo na tu web stranicu.

Instaliranje internet stranica na serveru

Iako sam ovo poglavlje nazvao instaliranje internet stranica, to je ustvari dozvola korištenja stranice Apache-u.

Da ponovimo - sada imamo 3 stranice koje se još ne koriste jer Apache ne vidi virtualne hostove koje smo definirali. To je zato što se njihova konfiguracija još ne nalazi u direktoriju sites-enabled već samo u sites-available. Pomoću slijedećih naredbi ćemo Apache-u dozvoliti korištenje stranica:

a2ensite www.prva.com
a2ensite www.druga.com
a2ensite www.treca.com

Ukoliko iz nekog razloga želimo privremeno zabraniti korištenje neke stranice Apache-u, to ćemo napraviti sa naredbom a2dissite:

a2dissite www.druga.com

Nakon što smo sve napravili slijedi ponovno pokretanje Apache servera i to je to.

/etc/init.d/apache2 reload

Korisni linkovi

Još jedna zgodna stvar kod Apache-a je što možete imati mnogo Internet stranica sa istom konfiguracijom. Dobar članak o tome možete pronaći ovdje.

U ovom postu ću poći od pretpostavke da budući da ste ovdje, sigurno znate koje su prednosti “pravog” web servera sa root pristupom u odnosu na “obični” hosting Internet stranica - možete instalirati programske pakete koji su vam potrebni bez gnjavaže oko supporta od strane hosting tvrtke, možete smjestiti više web stranica na jednom serveru… Uglavnom, dosta je prednosti ali ima i jedan nedostatak - uglavnom ste sami odgovorni ako server padne zbog pogrešne konfiguracije. No to vas ne bi trebalo brinuti ukoliko znate nešto o konfiguraciji web servera.

Ukoliko ste se susretali sa smještanjem Internet stranica na web serveru, onda sigurno znate i koliko su skupi tzv. dedicated serveri. Budući da se kod njih radi o kompletnom serveru koji je rezerviran isključivo za kupca, takve usluge imaju i odgovarajuću, dosta visoku cijenu.

VPS - virtualni privatni server

Usluga virtualnog privatnog servera je način da se root pristup serveru ponudi korisnicima po osjetno nižoj cijeni - kvaka je u tome što kod VPS-a ne dobijete pravi server u najam već se pomoću virtualizacijskog softvera jedan server podijeli na više virtualnih servera od kojih je svaki zasebna cjelina i ne utječu jedan na drugoga.

Koliko je meni poznato, u Hrvatskoj ne postoji tvrtka koja pruža ovakvu vrstu usluge, ali nema razloga zašto ne biste nekoj tvrtki iz Amerike platili za ovakvu uslugu. Jedna od boljih i jeftinijih je VPSLink, tvrtka koja nudi nekoliko vrsti virtualnih privatnih servera koji dolaze sa predinstaliranim operativnim sustavom Windows ili Linux (postoji nekoliko različitih distribucija među kojima su i Debian i Ubuntu). Budući da je za svaki VPS pod Windows operativnim sustavom potrebno platiti licencu Microsoftu, takve usluge su nešto skuplje od Linux baziranih VPS-ove.

Kod većine tvrtki koje nude uslugu VPS-a možete dobiti LAMP server - web server sa predinstaliranim Linux OS-om, Apache web serverom, MySQL bazom podataka i PHP-om. Na ovaj način možete dobiti server koji je spreman za hosting Internet stranica bez prethodnog konfiguriranja. Ipak, za bilo kakav napredniji način korištenja VPS-a (npr. za smještanje više stranica na jedan server) ipak je potrebno znati konfigurirati Apache jer smještanje jedne Internet stranice na VPS nema smisla - jeftinije i jednostavnije je uzeti običan hosting.

Prednosti i mane

Već sam naveo glavnu prednost ovakve usluge - relativno jeftin način dobivanja root pristupa web serveru. Razlog jeftinije usluge je što VPS server obično ima manje radne memorije, manji kapacitet diska no za manje zahtjevne korisnike to je i više nego dovoljno. Naravno, tvrtke nude različita ograničenja kod VPS servera pa tako tvrtka VPSLink u ponudi ima diskovne kapacitete od 2.5 GB do 160 GB, mjesečni bandwith od 100 GB do 5.000 GB, količinu memorije od 128 MB do 4096 MB… Dakle, za svakoga ima ponešto. Nekima će biti zanimljivo da neke tvrtke dozvoljavaju i preprodaju hostinga pa tako možete kupiti najjači VPS hosting plan i preprodavati pojedinačnim korisnicima.