Professional Documents
Culture Documents
1. Uvod
Prvo je potrebno definirati ta je to web server. Web server je raunarski program odgovoran za prihvatanje HTTP (Hypertext Transfer Protocol) zahtjeva od web klijenata, znanih kao web browser-i, i opsluivanje HTTP odgovora sa opcionalnim sadrajem kao to su HTML dokumenti, vezani objekti, slike, itd... Web serverom se naziva i raunar na kojem se vrti program opisan gore, ali emo u daljnjim razmatranjima pod web serverom podrazumijevati raunarski program ili skup programa i usluga [1]. I ako se web serveri razlikuju u detaljima, od programa do programa, svi oni dijele skup zajednikih osobina: HTTP: svaki web server program prihvata HTTP zahtjeve od klijenta i daje HTTP odgovore. HTTP odgovori se sastoje obino od HTML dokumenata, ali to moe biti i bilo koji dokument, slika, itd... Ako se desi greka prilikom opsluivanja zahtjeva web server mora poslati broj i opis greke krajnjem korisniku; LOGIRANJE (eng. Logging): obino web serveri imaju mogunost prikupljanja detaljnih informacija o zahtjevima klijenata i odgovorima servera u tzv. log dokumente koji koriste web urednicima za statistike analize. U praksi mnogi web serveri implementiraju i sljedee funkcije: Autorizacija: zahtjev za korisnikim imenom i lozinkom prije nego se dozvoli pristup dijelu ili cijelom resursu; Rukovanje sa statikim ili dinamikim sadrajima podravajui jedno ili vie suelja: SSI, CGI, SCGI, FastCGI, JSP, PHP, ASP, ASP.NET, ServerAPI kao to je NSAPI ili ISAPI, itd... HTTPS podrka (SSL ili TLS) za sigurnu ifriranu konekciju na port 443 umjesto uobiajenog porta 80; Komprimiranje sadraja (npr. gzip kodiranje) da se smanji veliina odgovora; Virtualni hosting za opsluivanje mnogo web stranica koritenjem jedne IP adrese; Podrka velikim fajlovima ija je veliina vea od 2GB na 32-bitnim operativnim sistemima; BANDWIDTH THROTTLING limitiranje brzine odgovora u cilju da se ne zagui mrea i da se opslui vie klijenata.
3
U ovom radu koristie se Apache Web Server, u daljnjem tekstu server, open source projekt ali i snano komercijalno podran, koji predstavlja set internet baziranih usluga za web servere koji koriste sve vodee operativne sisteme.
Uputstvo za kuni Web server Apache server zauzima trenutno pola svjetskog trita i najee je smjeten na nekoj Linux platformi zajedno sa MySQL-om, PHP/Perl/Python popularno nazvano LAMP.[1]
Ideja ovog rada je da se kunom PC-u dodjeli dodatna funkcija web servera na kojem bi bilo smjeteno nekoliko web stranica. Za direktnu vezu sa internetom koristie se ADSL linija bez statike adrese. U ovom poglavlju bie opisani postupci instalacije osnovnog programskog paketa Apache-ja na Windows NT platformu, podeavanje ADSL router-a, firewall-a, otvaranje porta 80, koritenje usluge dinamikog DNS-a, te osnovna konfiguracija servera za virtual hosting i testiranje konekcije.
Uputstvo za kuni Web server Potrebno je zatim otii na Advance Firewall Port Forwarding i unijeti nove vrijednosti tako da nakon snimanja vrijednosti i restartovanja routera unos izgleda kao na slici 1:
Slika 1. Otvaranje porta 80 na routeru U ovom sluaju IP adresa servera je 192.168.1.64 i koristi se defaultni port 80 koji nije blokiran od strane naeg ISP-a. U sluaju da je port blokiran morao bi se otvoriti neki drugi port i omoguiti usluga dinamikog DNS-a sa preusmjeravanjem porta ili birati port direktno sintaksom URL:port iz browser-a. Ovaj drugi nain rada, biranje nekog nestandardnog porta, je daleko sigurniji i pogodan za sve web servere koji ne slue za smjeaj web stranica ili usluga koje se javno koriste.
Slika 2. Testiranje otvorenosti porta Na kraju, potrebno je naglasiti da svaki otvoren port prema internetu predstavlja sigurnosnu prijetnju, posebno ako je to neki od standardnih portova, 21, 80, 3389 i sl. tako da treba voditi rauna o sigurnosti raunarskog sistema kojem smo praktino otvorili stranja vrata za sve mogue zlonamjerne skripte i programe. Stranice potencijalno tetnog sadraja obavezno treba posjeivati preko proxy-ja da se zadri anonimnost tj. sakrije IP adresa servera.
Uputstvo za kuni Web server ServerAdmin ilija.mrenica@gmail.com ServerName www.mrenica.no-ip.biz:80 (administrativna adresa) (default-na domena)
Za dodavanje virtualnih hostova na postojei web server, moramo kreirati <VirtualHost> blok i za postojeeg default-nog hosta, kao i za ostale domene koje e biti smjetene na serveru. ServerName i DocumentRoot ukljueni u dodani virtualni host trebaju biti isti kao globalni ServerName i DocumentRoot. Ovaj virtualni host se dodaje prvi u konfiguracijski fajl tako da bude default-ni[3]. Za nae tri domene dio koji moramo dodati u httpd konfiguracijski fajl izgleda ovako: NameVirtualHost 192.168.1.64:80 <VirtualHost 192.168.1.64:80> ServerName www.mrenica.no-ip.biz:80 ServerAlias mrenica.no-ip.biz *.mrenica.no-ip.biz DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" </VirtualHost> <VirtualHost 192.168.1.64:80> ServerName www.dxn.hopto.org:80 ServerAlias dxn.hopto.org *.dxn.hopto.org DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/Sites/dxn.hopto.org" </VirtualHost> <VirtualHost 192.168.1.64:80> ServerName www.e.3utilities.com:80 ServerAlias e.3utilities.com *.e.3utilities.com DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/Sites/e.3utilities.com" </VirtualHost> gdje su domene koje koristimo sljedee: http://mrenica.no-ip.biz http://dxn.hopto.org http://e.3utilities.com Da bi sve radilo ispravno web stranice trebaju biti smjetene u gore navedene direktorije i moraju imati poetnu index.html stranicu. Provjeru uneene sintakse uradiemo sa httpd S iz Apache-jevog bin direktorija i ako nema greaka poeemo provjeravati jednu po jednu domenu browser-om. Provjeravanje domena moemo izvriti sa unutranje strane router-a na sljedei nain npr: http://192.168.1.64/sites/dxn.hopto.org ili sa vanjske strane router-a koristei samo ime domene npr: http://dxn.hopto.org ali preko nekog proxy servera npr. http://www.internetproxy.net jer emo samo u tom sluaju, sa vanjske strane router-a dobiti na web server i domenu koju traimo, dok sa unutranje strane routera dobijamo uvijek router.
7
Uputstvo za kuni Web server Index.html fajlovi se trebaju napraviti razliiti i pomou dva gore navedena naina testiranja moemo lako ispitati rad servera i utvrditi gdje je greka ako je ima. Moe se uraditi i reverzna provjera za server na gore navedenoj stranici http://www.yougetsignal.com/tools/web-sites-on-web-server koja e za ime neke od domena dati sve domene koje su smjetene na istom web serveru. Rezultat ove usluge ne mora biti taan, ali u ovom sluaju jeste i prikazan je na slici 3.
Uputstvo za kuni Web server U c:\php se nalaze dva php.ini fajla, dist i recommended, recommended kao to mu samo ime govori je onaj koji autori preporuuju za standardne instalacije, pa emo njega otvoriti i snimiti pod imenom php.ini i to e biti glavni konfiguracijski fajl za PHP. Unutar php.ini datoteke, u sekciji Paths and Directories, treba je nai dio gdje pie doc_root = i dodati tu DocumentRoot web servera pa e taj redak u naem sluaju izgledati ovako: doc_root = C:/Program Files/Apache Software Foundation/Apache2.2/htdocs Sad je PHP instaliran na maini i potrebno ga je povezati sa Apache serverom, to emo uraditi na sljedei nain. U httpd konfiguracijskom fajlu Apache servera potrebno je dodati sljedea tri retka koji slue za uitavanje PHP modula, ekstenzije i upuuju na direktorijj gdje je php.ini: LoadModule php5_module "C:/php/php5apache2_2.dll" AddType application/x-httpd-php .php PHPIniDir "C:/php" Nakon ovog potrebno je restartovati raunar. Potrebno je napraviti jednu hello world php stranicu za potrebe testiranja pa emo slijedei kod snimiti kao hello.php u DocumentRoot servera: <html> <head> <title>PHP Test</title> </head> <body> <?php echo '<p>Hello World</p>'; ?> </body> </html> Provjeru ispravnosti konfiguracije moemo izvriti browser-om lokalno sa: http://192.168.1.64/hello.php i preko proxy-ja sa: http://mrenica.no-ip.biz/hello.php. Za dobro konfigurisan server browser e ispisati Hello World na praznoj stranici, a sve ostalo znai greku u konfiguraciji. Detaljnije parametre konfiguracije moemo dobiti ako testiramo php stranicu koja e sadravati sljedei kod, tj. poziv ugraene funkcije phpinfo(): <?php phpinfo( ); ?> Ako se koristi PHP verzija 5 ili vie poeljno je u php.ini nai dio koji odreuje vremensku zonu servera i ukucati tekst koji odgovara naoj vremenskoj zoni: date.timezone = Europe/Paris
9
10
i u dijelu Authentication type promijeniti gdje treba vrijednosti da odgovaraju parametrima servera i omoguiti koritenje mysqli ekstenzije: $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['host'] = '192.168.1.64'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; /* Select mysqli if your server has it */ $cfg['Servers'][$i]['extension'] = 'mysqli';
Datoteku config.php.inc je potrebno kopirati u prazni config direktorij koji smo prethodno napravili i restartovati web server. Uvijek se preporuuje zaustavljanje i ponovno pokretanje servera radije nego restartovanje. Testiranje konfiguracije izvriemo pomou browser-a kucajui sljedeu adresu: http://192.168.1.64/phpMyAdmin/index.php i trebamo nakon logiranja dobiti prikaz kao na slici 4.
Slika 4. phpMyAdmin - ispravna konfiguracija Isti prikaz trebamo dobiti i sa vanjske strane routera preko proxy-ja kucajui u browser npr. http://mrenica.no-ip.biz/phpMyAdmin/index.php to znai da imamo na raspolaganju administrativni alat za kreiranje i ureivanje baza podataka na samom serveru. U svrhu testiranja koristei phpMyAdmin kreirau gostujueg korisnika i bazu podataka 'kolege' sa jednom tabelom 'adresar' i sljedeim poljima: id, ime, prezime, telefon i email koje u napuniti sa tri zapisa. Koristei sljedei PHP kod snimljen kao adresar.php u Apache htdocs direktorij povezau se sa bazom podataka i izlistati podatke u njoj koristei browser. Autor: Ilija Mrenica, ing.el.
11
<html><head><title>Adresar uposlenika</title></head><body> <?php $db_host = '192.168.1.64:3306'; $db_user = 'guest'; $db_pwd = ' '; $database = 'kolege'; $table = 'adresar'; if (!mysql_connect($db_host, $db_user, $db_pwd)) die("Ne mogu se povezati na bazu podataka..."); if (!mysql_select_db($database)) die("Ne mogu selektirati bazu podataka..."); // slanje upita $result = mysql_query("SELECT * FROM {$table}"); if (!$result) { die("Upit nad tabelom nije mogue prikazati..."); } $fields_num = mysql_num_fields($result); echo "<h1>Table: {$table}</h1>"; echo "<table border='1'><tr>"; // ispisivanje header-a tabele for($i=0; $i<$fields_num; $i++) { $field = mysql_fetch_field($result); echo "<td>{$field->name}</td>"; } echo "</tr>\n"; // izlistavanje redova tabele while($row = mysql_fetch_row($result)) { echo "<tr>"; // $row je niz... foreach( .. ) ispisuje svaki element // reda $row u $cell variajablu foreach($row as $cell) echo "<td>$cell</td>"; echo "</tr>\n"; } mysql_free_result($result); ?> </body></html>
12
Uputstvo za kuni Web server U Passive Mode Settings, s obzirom da koristimo dinamiki DNS, biramo opciju Retrieve external address from gdje kucamo naziv glavne dinamike domene iz htdocs, u ovom sluaju to je http://mrenica.no-ip.biz. Ne koristimo eksternu IP za lokalne konekcije i biramo Custom port range: 5000-5001. Omoguujemo Mode Z protokol za kompresovani transfer dokumenata, ali ne unutar lokalne mree da ne optereujemo CPU.
Sve postavke imaju objanjenje sa desne strane tako da je ostale postavke lako namjestiti po potrebi, glavne su postavke objanjene. Nakon namjetanja postavki potrebno je napraviti jedan korisniki raun i odrediti neki direktorij za download, te odrediti privilegije tog korisnika tj. ta mu je dozvoljeno raditi u tom direktoriju. Npr. ja sam postavio user-a guest bez passworda na direktorij e:/muzika gdje se nalaze mp3 datoteke i tu dozvolio samo download. U svrhu testiranja pozvao sam kolege da skinu malo besplatne muzike. Pristup ide FTP klijentom preko DDNS-a: ftp://mrenica.no-ip.biz. Brzina download-a sa servera je ograniena brzinom upload-a ADSL-a to kod nas iznosi 10 puta asimetrinih 25,6kB/s. Program FileZilla ima i podrku za SSL-TLS ijim koritenjem moemo uspostaviti enkripciju nad fajlovima koji se razmjenjuju uz pomo certifikata to moe biti vrlo korisno. Sigurnosni problem kod FTP servera je download u ASCII formatu pa na to treba obratiti panju ako FTP postane zauzet, kao i na raspon portova za pasivni transfer.
Uputstvo za kuni Web server MOVE (premjeta dokumente) MKCOL (kreira novu kolekciju) PROPFIND (radi upit nad meta podacima) LOCK-UNLOCK (zakljuava-otkljuava resurs)
Konfiguracija DAV-a za Apache je iznimno jednostavna s obzirom da je Apache-jev modul mod_dav spreman za uitavanje pa potrebno je samo uiniti par izmjena u httpd.conf fajlu Apache servera. Potrebno je skinuti komentar sa sljedeih linija u httpd.conf i time omoguiti uitavanje modula: LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so Zatim je potrebno dodati liniju koda s kojom emo postaviti dav_lock bazu podataka unutar logs direktorija servera i tu e biti smjetene informacije o akviziciji i otputanjima resursa: DavLockDB logs/dav_lock_db Nakon toga manualno kreiramo direktorij davdocs u direktoriju htdocs Apache servera, a unutar httpd, conf postavimo putanju na njega to bi vailo i za <VirtualHost> kontejnere ako omoguujemo DAV u vie razliitih domena: <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/davdocs"> Dav On </Directory> Postaviemo za izabrani direktorij read-only pravo pristupa na sljedei nain: <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/davdocs"> Dav On <LimitExcept GET POST OPTIONS PROPFIND> Order allow,deny Deny from all </LimitExcept> </Directory> Na kraju emo runo ubaciti par fajlova u direktorij i testirati unutar lokalne i sa vanjske mree koristei Network Places Add New Network Place kao to je to prikazano na slici 6.
15
Slika 6. DAV folder unutar lokalne mree Uz upotrebu gore spomenutih pogodnosti enkripcije i identifikacije, sigurno je da WebDAV predstavlja vrlo zanimljivo korporativno rjeenje.
4. Zakljuak
Ovaj rad predstavlja uputstvo za brzo postavljanje osnovnih servisa WAMP i FTP servera koritenjem dinamikog DNS-a. Iako ovakav servis moe posluiti kao okruenje za testiranje PHP-a i MySQL-a i openito za razvoj web aplikacija preporuujem puno jednostavniju i bru instalaciju XAMPP servera. Nadogradnju ovog rada vidim dalje u sljedeim aktivnostima uglavnom vezanim za proirenje mogunosti i podizanje ukupnog nivoa sigurnosti instaliranog Apache servera: postavljanje osnovnih ogranienja pristupa korisnika i grupa (mod_auth modul) menadment korisnikog prostora (Mod_bandwidth modul) uspostavljenje enkripcijskih protokola (SSH i SSL) postavljanje proxy servera (mod_proxy modul)
Sve gore navedene aktivnosti bi u stvari trebale posluiti samo kao uvod, tj. sticanje osnovnih znanja, za administraciju nekog profesionalnog servera baziranog na Linux platformi.
16
5. Literatura
[1] Wiki online enciklopedia http://en.wikipedia.org/wiki/Wiki [2] Learn Apache in 24 hours Arthur Knowles [3] Apache Cookbook Ken Coar i Rich Bowen [4] Apache HTTP Server Online Documentation http://httpd.apache.org/docs/2.2 [5] The PHP Group http://php.net [6] Sun Microsystems MySQL http://dev.mysql.com
17