Webový server APACHE a skriptovací stroj PHP

Dvadsiateprvé storočie môžeme právom nazývať érou WEB-u, čo je obrovským prekvapením aj pre človeka Tima Berners-Leea, ktorý ako prvý prišiel s myšlienkou WEB-u, a ktorý počas pôsobenia v CERN-e navrhol, ako jazyk HTML, tak aj protokol HTTP. Tim Berners-Lee vôbec nepredpokladal takýto masívny rozmach tejto svojej technológie, no ako to môžeme hodnotiť dnes, jeho práca priniesla skutočne nesmierne výsledky. Prednáška sa bude preto zaoberať inštaláciou a konfiguráciou najrozšírenejšieho webového servera s názvom „Apache“, prostredníctvom, ktorého je možné zdieľať interaktívny obsah v počítačovej sieti vôbec. V prednáške sa budeme venovať aj skriptovaciemu stroju PHP, resp. jeho inštalácii a konfigurácii, pričom si zvlášť objasníme konfiguračné parametre, ktoré majú dopad na bezpečnosť celého webového systému.

Najznámejšie webové servery

Zdroj: Wikipedia - HTTP servery

 

Štatistika využiatia webových serverov

web_server.png

Zdroj: Netcraft.com

 

Stavové hlášky webového servera

Zoznam stavových hlášok

  • 1xx - informačné hlášky
  • 2xx - hlášky o úspešnej požiadavke
  • 3xx - presmerovanie
  • 4xx - chyba na strane klienta
  • 5xx - chyba na strane servera

 

(A) Inštalácia a spustenie Apache2

(1) Inštalácia

apt-get install apache2

(2) Spustenie

Štart Apache2:

 service apache2 start

Stop Apache2:

service apache2 stop

Test konfiguračných nastavení Apache2

service apache2 configtest

Reštart Apache2:

service apache2 restart

 

(3) Webové prehliadače

Lynx -   je textovo-založený webový browser (1992). Lynx: web site

apt-get install lynx

Links - je open source textový a grafický web browser. Links: web site

apt-get install links

 

Chybová hláška:

Restarting web server: apache2apache2: Could not reliably determine the server's fully  qualified domain name, using 158.197.31.59 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 158.197.31.59 for ServerName

Riešenie:

nano /etc/apache2/apache2.conf
Doplňte na koniec:
ServerName localhost

 

(B) Konfigurácia Apache2 - HTTP

(1) Adresárová štruktúra

  • /conf.d - adresár pre umiestnenie dodatočných konfiguračných súborov (napr. odkaz na phpmyadmin.conf)
  • /mods-available - adresár dostupných modulov 
  • /mods-enabled - adresár povolených modulov
  • /sites-available - adresár dpstupných webových sídiel 
  • /sites-enabled - adresár povolených webových sídiel
  • apache2.conf - základný konfiguračný súbor
  • envvars -  premenné prostredia apache2
  • magic - špeciálne reťazce na deteckiu typu súboru
  • ports.conf - nastavenie portov a IP adries
  • /var/www - defaultné umiestnenie webových sídel
  • /var/log/apache2 - umiestnenie logov pre apache2
 
(2) Nastavenie siete pre Apache2
 
nano /etc/apache2/ports.conf
ak chceme, aby počúval server na porte 80:
Listen 80
 
ak chceme, aby počúval server na porte 80 a na zvolenej IP (ak ich má niekoľko):
Listen 10.0.0.2:80 (IPv4)
Listen [2000:c1:c1:c2:d3:e5:f2:b2:]:80 (IPv6)
 
 

(2) Virtuálne hosty (webové sídla)

Virtuálny host - koncept, který slúži k prevádzke viacerých webových sídiel na jednom webovom serveri. 

  • Aktivovanie virtuálneho hostu: a2ensite
  • Deaktivovanie virtuálneho hostu: a2dissite
/etc/apache2/sites-available - adresár, ktorý obsahuje možné webové sídla
/etc/apache2/sites-enabled - adresár odkazov na webové sídla, ktoré sú aktívne

odkaz 000-default - dokazuje na defaultný virtuálny host

(3) Príklad virtuálneho hostu prvyweb.domena.sk

mkdir /var/www/domenask
mkdir /var/www/domenask/prvyweb
touch /var/www/domenask/prvyweb/index.html
nano /etc/apache2/sites-available/prvyweb-domena.sk
<VirtualHost *:80>        
               ServerAdmin janko.hrasko.windows.sk
               ServerName prvyweb.domena.sk
                    DocumentRoot /var/www/domenask/prvyweb
                   <Directory />
                       Options FollowSymLinks
                       AllowOverride None
              </Directory>
                 <Directory /var/www/domenask/prvyweb/>
                              Options Indexes FollowSymLinks MultiViews
                              AllowOverride None
                              Order allow,deny
                              allow from all
                   </Directory> 
                   ErrorLog /var/log/apache2/error.log 
                   LogLevel warn
                   CustomLog /var/log/apache2/prvyweb.domena.sk.access.log combined
</VirtualHost>
Spustenie prvyweb.domena.sk     
a2ensite prvyweb.domena.sk
/etc/init.d/apache2 restart

 

(4) Príklad virtuálneho hostu druhyweb.domena.sk

mkdir /var/www/domenask/druhyweb
touch /var/www/domenask/druhyweb/index.php
<VirtualHost *:80>        
               ServerAdmin janko.hrasko.windows.sk
               ServerName druhyweb.domena.sk
               ServerAlias *.druhyweb.domena.sk

                    DocumentRoot /var/www/domenask/druhyweb
                   <Directory />
                       Options FollowSymLinks
                       AllowOverride None
              </Directory>
                 <Directory /var/www/domenask/druhyweb/>
                              Options Indexes FollowSymLinks MultiViews
                              AllowOverride None
                              Order allow,deny
                              allow from all
                   </Directory> 
                   ErrorLog /var/log/apache2/error.log 
                   LogLevel warn
                   CustomLog /var/log/apache2/druhyweb.domena.sk.access.log combined
</VirtualHost>
Spustenie prvyweb.domena.sk    
a2ensite druhyweb.domena.sk
/etc/init.d/apache2 restart
 
(5) Hosts
 
Domény prvyweb.domena.sk a druhyweb.domena.sk nie sú zaregistrované na DNS serveri. Vzhľadom na túto skutočnosť, potrebujeme mať informáciu, na akej IP adrese počúva virtuálny host s daným doménovým menom.

Editujeme súbor host

nano /etc/hosts
158.197.31.59 prvyweb.domena.sk
158.197.31.59 druhyweb.domena.sk
 
(6) Direktívy
 
<VirtualHost> </VirtualHost>
  • ServerAdmin -  
  • ServerName -  
  • ServerAlias - 
  • DocumentRoot -  
  • ErrorLog  
  • LogLevel  -             
  • CustomLog - 
 
<Directoryt> </Directory>
  • Options   -  ktoré vlastnosti servera budú v adresári k dispozícii
  • AllowOverride - . umožnenie .htaccess súbora
  • Order  - riadenie prístupu 
    • Order deny,allow
    • Deny from 1.2.3.4
    • Allow from all
     

(C) Konfigurácia Apache2 - Moduly

Moduly - pomocou nich môžeme meniť funkčnosť webového servera, resp. pridávať alebo odoberať rôzne vlastnosti

(1) Spustenie/vypnutie

Aktivovanie modulu: 
a2enmod {nazov_modulu}
Príklad: a2enmod imagemap

Deaktivovanie modulu: 
a2dismod {nazov_modulu}
Príklad a2dismod

/etc/apache2/mods-available - adresár, v ktorom sú umiestnené možné moduly
/etc/apache2/mods-enabled - adresár odkazov na moduly, ktoré sú aktivované

(2)  Moduly

Zoznam apache modulov

 

(3) Modul Userdir

Aktivovanie modulu Userdir
a2enmod userdir

Konfigurácia modulu userdir  

nano /etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride All
                Options MultiViews Indexes SymLinksIfOwnerMatch
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

Zmena oprávení k domovskému adresáru užívateľa

chmod 755 /home/username/

 

(D) Konfigurácia Apache2 - SSL/HTTPS

 

(1) Modul mod_ssl

a2enmod ssl
service apache2 restart

 

(2) Defaultná šablóna pre virtuálny web cez SSL

/etc/apache2/sites-available/default-ssl

a2ensite default-ssl
service apache2 restart

 

(3) Certifikát 

  • Self-signed certifikát
    • ssl-cert balík (apt-get install ssl-cert) - previazanie s default-ssl
    • make-ssl-cert
  • Vlastný certifikát
    • vygenerovať:
    • cesta k certifikátom pre virtuálny host (napr. pre defaultný ssl host: /etc/apache2/sites-available/default-ssl):
      • SSLCertificateFile    /path/certificate.pem
      • SSLCertificateKeyFile /path/key.key

 

(E) Inštalácia "P" a konfigurácia PHP5

(1) Inštalácia

Inštalácia PHP:

apt-get install php5 php5-mysql 

Inštalácia Perl:

apt-get install perl libapache2-mod-perl2

Inštalácia Python:

apt-get install python libapache2-mod-python

 

(2) Test PHP

Vytvorenie a editácia test.php

nano /var/www/test.php

Vložte nasledujúci kód:

<?php phpinfo(); ?>

Test verzie:

php -v

 

(3) Konfigurácia PHP

/etc/php5/apache2/php.ini

 

(4)  php.ini pre každý web

/etc/apache2/php/php_prvyweb.ini

/etc/apache2/php/php_druhyweb.ini

 

<VirtualHost *:80>
(...)
PHPINIDir /etc/apache2/php/php_prvyweb.ini
(...)
</VirtualHost>

 

(F) Konfigurácia MySQL a PHPMyADMIN

(1) Inštalácia

apt-get install mysql-server
apt-get install phpmyadmin

(2) Konfigurácia MySQL

nano /etc/mysql/my.cnf
  • Ak chcete pristupovať k databáze z iného servera ako je localhost:
bind-address           = localhost

zmeniť na:

bind-address           = {server_DB_ip_adress}

Povolenie maximálneho prenosu packetov:

max_allowed_packet = 16M
query_cache_limit = 16M

(3) Konfigurácia PHPMyADMIN

symblická linka v /etc/apache2/conf.d/

 

(G) Bezpečnostné nastavenia Apache2 a Php5

(1) Php5

(1Redukcia PHP modulov

 
php -m
napr. rm /etc/php.d/sqlite3.ini
napr. mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable
 

(2) Obmedzenie PHP pristupovať k file systému

open_basedir = /secure/place
 

(3) Zakázanie nebezpečných PHP funkcií

 
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
 
disable_functions = mail,imap_mail,exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source,eval,exec, phpinfo,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_initgroups,posix_isatty,posix_kill,posix_mkfifo,posix_mknod,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname,posix_access,posix_ctermid
 

(4) Zákaz informácii o PHP

expose_php = Off
 

(5) Logovanie všetkých PHP chýb

 
display_errors=Off
log_errors=On
error_log=/var/log/apache2/php_scripts_error.log
 

(6) Upload súborov

 
file_uploads=Off
 
alebo
 
file_uploads=On
upload_max_filesize = 16M

(7) Vypnutie vykonávanie vzdialeného kódu

allow_url_fopen - injection zraniteľnosť
allow_url_fopen=Off
allow_url_include=Off
 
 

(8) Kontrola POST veľkosti

post_max_size = 32M
 

(9) Kontrola zdrojov (DoS kontrol)

- nastavenie maximálneho času (sekundy) pre spustenie každého php skriptu, resp. pre parsovanie požadovaných dát
max_execution_time = 40
max_input_time = 40
memory_limit = 40M
 

(10) Inštalácia Suhosin Advanced Protection System pre PHP

 
 

(11) Pravidelné aktualizácie systému

apt-get update && apt-get upgrade
 

(12) Kontrola logov

Apache logovacie súbory:
tail -f /var/log/apache2/error_log
 
PHP logovacie súbory:
tail -f /var/log/apache2/php_scripts_error.log

(13) Zmena dočasného adresára pre uploadované súbory

upload_tmp_dir = /home/tmp

(14) Zmeňte si znakovú sadu - nepoužívať defaultnú

;default_charset = "iso-8859-1"
 

(15) Nastavenie Cookies

session.cookie_lifetime = 1800
session.name = SESS
 

(2) Apache2

 

(A) Vypnutie výpisu adresára

Pridať mínus "-"  pred "Indexes
 
<Directory /var/www/>
    Options -Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
 
<Directory />
  Options None
  Order allow,deny
  Allow from all
</Directory>
 

(B) Predchádzanie Cross-Site-Tracing útoku

ak povolíme rewrite modul:
 
 V rámci "<VirtualHost *:80>" pridať nasledujúce riadky:
 
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]
</IfModule>
 
nano /etc/apache2/httpd.conf
TraceEnable off
 

(C) Predchádzanie HTTP-DoS, DDoS, or Brute Force útokom

apt-get install libapache2-mod-evasive
 

(D) Vypnutie zobrazovania informácii o serveri a Apache 

// vypnúť banner -  odozva servera v hlavičke, ktorý je zaslaný späť na klientov, obsahuje opis generického OS-typ servera, rovnako ako informácie o skompilovaných modulov.
ServerToken Prod
 
//  vypne riadok s číslom verzie servera a ServerName
ServerSignature Off
 

(E) Odfiltrovanie zlých URL požiadaviek

napr. /etc/shadow or MySQL injection
apt-get install libapache-mod-security mod-security-common
 

(F) Vyhnutie sa SYN útokom

nano /etc/sysctl.conf
 
#Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
aplikovať zmeny: sysctl -p 
 

(G) Reštrikcie k špecifickej adrese alebo sieti

<Directory /yourwebsite>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.20.0.0/24
</Directory>
 

(H) Používať len SSLv3 a TLS

- vypnúť SSLv2
 
nano /etc/apache2/httpd.conf
SSLProtocol -ALL +SSLv3 +TLSv1
 

(I) Vypnúť nepoužité moduly

 

(J) Vypnúť neplatné a slabé šifry

nano /etc/apache2/httpd.conf
 
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM