Apache2
Apache on avoimen lähdekoodin perustuva HTTP - palvelinohjelmisto (webbiserveri). Tämän voi myös asentaa Windowssille ja on integroituna Mac OSX - käyttöjärjestelmään. Tämä on ollut pitkään internetin suosituin webbipalvelin ohjelmisto. Tämä palvelin ja datatekniikka.fi sivustot käyttää myöskin Apachea.
Lisäksi tämän rinnalle suositellaan asentamaan Php5 ja Mysql - tietokanta.
Sisällysluettelo
Asentaminen
Apachen asennetaan komennolla:
aptitude install apache2
Voit testata sivujasi menemällä selaimella osotteeseen http://palvelimen_ip_osoite. Sivun tulisi näyttää seuraavanlaisena:
It works! This is the default web page for this server. The web server software is running but no content has been added, yet.
Apachen oletusverkkosivuhakemisto sijaitsee:
/var/www/
Apachen konfigurointi tiedostot löytyvät täältä:
/etc/apache2
Oletusverkkosivun asetukset löytyvät täältä ja voit avata sen tekstieditoriin:
nano /etc/apache2/sites-enabled/default
Apachen kanssa voi käyttää myös Php5 ja Mysql.
Konfigurointi
Apachen konfigurointi hakemistosta
cd /etc/apache2/
löytyy tälläisiä tiedostoja ja hakemistoja:
apache2.conf envvars magic mods-enabled/ sites-available/ conf.d/ httpd.conf mods-available/ ports.conf sites-enabled/
apache2.conf on pääkonfigurointi tiedosto. Tähän tiedostoon voidaan tehdä kaikki apachen määritykset, vaikka suositeltavaa käyttää erillisiä tiedotoja selkeyden vuoksi.
ports.conf Tänne määritetään portit ja virtuaali isännät vastaavat pyyntöihin. Tarkista jos määrität SSL apacheen.
conf.d Hakemistossa on erityisiä määrityksiä Apachen kokoonpanoon. Täällä on myös charcet tiedosto josta voi sallia UTF-8 merkistökoodauksen.
sites-available/ Hakemistossa on kaikki virtuaali isäntä kokoonpanojen määritys tiedostot.
sites-enabled/ Hakemistossa määritetään mitä todellisuudessa virtuaali isäntiä käytetään
mods-available/ Moduulien määritykset.
mods-enabled/ Moduulit jotka käytössä
apache2.conf
nano /etc/apache2/apache2.conf
Parametrit tiedotossa:
Timeout Oletuksena määritettu 300s. Tämä kertoo kuinka kauan palvelin vastaa pyyntöön. Suositellaan pienentämään 60, sillä monet palvelimet eivät pysty vastaamaan 300s pyyntöihin.
KeepAlive Jos vaihtoehto on "On" mahdollistaa useiden pyyntöjen toteuttamisen. Jos "Off" niin kaikki pyynnöt käsitellään erikseen, joka voi kasvattaa palvelimen kuormaa.
MaxKeepAliveRequests Rajoitetaan pyyntöjen määrä samaanaikaisena. Pidä tämä mahdollisimman korkealla, palvelimen kuormituksen takia. Jos on määritetty "0", niin palvelin sallii rajoittamattoman pääsyn.
KeepAliveTimeout Pyyntöjen aikakatkaisu aika. Jos pyyntö kestää yli aikakatkaisu ajan, niin yhteys katkaistaan.
sites-available/ (Virtual Host)
Oletuksena tässä hakemistossa on tiedosto default, jonka sisältö näyttää tältä:
<VirtualHost *:80> ServerAdmin webmaster@localhost #Palvelimen ylläpitäjän sähköpostiosoite ServerName example.com #Palvimen nimi tai verkko-osoite (voi olla useita ja käyttää IP-osoitetta) DocumentRoot /var/www #päähakemisto, jossa verkkosivut sijaitsevat <Directory /> Options FollowSymLinks AllowOverride None #Salli konfigurointien yliajamisen (.htaccess) </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> . . .
Oletuksena virtuaali isäntä vastaa kaikkiin pyyntöihin portissa 80, oletus HTTP portti. Kun haluat luoda toisen virtuaali isännän, niin muokkaa tämä tiedostoa ja tallenna toisella nimellä.
Tämän jälkeen laitat sivun käyttöön (Käytössä olevat sivut löytyvät /etc/apache2/sites-enabled/ hakemiston alta):
a2ensite sivun_nimi
Esimerkiksi
a2ensite intra
Tämän jälkeen apachen täytyy laittaa lukemaan asetustiedostot uudelleen:
service apache2 reload
Tämän jälkeen lisää tarvittaessa ports.conf tiedostoon:
NameVirtualHost isäntänimi:portti
Lisätietoa:
Sivuston poistaminen käytöstä:
a2dissite sivun_nimi
Sivun nimi on sama kuin /etc/apache2/sites-available/[sivusi_nimi]
service apache2 reload
Virtuaali Hakemistot
Virtuaali Directory mahdollistaa Apachen webbihakemiston hakemisen eri sijannista kuin root hakemisto on
Alias /webbialihakemisto/ /polku/ # Verkkosivupolku (/webbihakemisto) ja fyysinen polku ("/polku") <Directory "/polku/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory>
Esimerkki:
Alias /wwwtesti /var/wwwtesti/ <Directory "/var/wwwtesti/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory>
Käyttäjien omat verkkosivut
Lisää tämä Virtuaali isännälle, ja luo kotikansion alle public_html kansio. Kotikansion verkko-osoite on palvelimenosoite/~käyttäjätunnus.
<IfModule mod_userdir.c>
Kansion nimi josta tulee verkkohakemisto
UserDir public_html
Ei käytettävissä root käyttäjällä
UserDir disabled root
Hakemiston lisäasetukset (valinnainen)
<Directory /home/*/public_html> AllowOverride AuthConfig Options FollowSymLinks Options +Indexes </Directory>
Mahdollistaa aliaksena palvelinnimi/käyttäjätunnus yhdistämisen
AliasMatch ^/([a-zA-Z0-9]+)/?(.*) /home/$1/public_html/$2 </IfModule>
conf.d/charset
Tässä tiedostossa voit määrittää Apachen oletusmerkistökoodaukseski UTF-8.
1. Avaa konfigurointitiedosto:
nano /etc/apache2/conf.d/charset
2. Poista risuaita # merkki pois kohdasta:
AddDefaultCharset UTF-8
3. Käynnistä Apache uudelleen
service apache2 restart
Lisämoduulit
Lisäominaisuuksia ja lisäturvallisuutta Apachen käyttöön.
Määrittäminen .htaccess tai virtuaali-isäntään
<IfModule mod_[moduulinnimi].c> ... # Määritä tähän kaikki konffit .. </IfModule>
mod_dir
Tämä ominaisuus päättää oletustiedosto jos annetaan esimerkiksi www.example.com. Yleensä tämä on index.html, index.php tai index.htm.
Ominaisuus on oletuksena käytössä ja sitä voi muuttaa
/etc/apache2/mod-available/dir.conf
Sisältä on oletuksena seuraavanlainen:
<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm </IfModule>
mod_evansive
Tämä Apachen lisäosa estää DDOS (palvelunestohyökkäykset) webbipalvelimeen. Suositeltavaa on asentaa Apacheen. Tämä rajoittaa verkkosivusi latauksia seuraavalla tavalla
- Pyytämällä samalla sivulla enemmän kuin pari kertaa sekunnissa
- Estää yli 50 samanaikaisia pyyntöjä samalle laitteelle sekunnissa
- Estää mitään pyyntöjä taas väliaikaisesti mustalla listalla (eli estolistalle)
Asentaminen
apt-get install libapache2-mod-evasive
Käynnistä Apache uudelleen
service apache2 restart
Luodaan kansio lokitiedostoja varten:
mkdir -p /var/log/apache2/evasive
ja määritetään käyttöoikeudet
chown -R www-data:root /var/log/apache2/evasive
Konfigurointi
Avataan konfigurointi tiedosto
nano /etc/apache2/mods-available/mod-evasive.load
Lisätään jos ei ole tiedostoon:
LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
Avataan virtuaali host (esimerkissä default):
nano /etc/apache2/sites-available/default
ja lisätään rivit jokaiseen virtual hostiin:
... </Directory> <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 5 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSLogDir “/var/log/apache2/evasive” #DOSSystemCommand "sudo -u root /sbin/iptables -A INPUT -s %s -j DROP" </IfModule> ...
DOSPageCount = Sivun pyyntöjen rajoitukset, jos ylittyy niin estolistalle
DOSSiteCount = Sivuston pyyntöjen kokonaismäärän ylitys
DOSPageInterval = Aikaväli sivun pyynnöille
DOSSiteInterval = Aikaväli sivuston pyynnöille
DOSBlockingPeriod = Estoaika
DOSLogDir = Loki
DOSSystemCommand = Lisäparametrejä (poistettu käytöstä, kehittyneimille)
Tarkista asetukset apache2.conf tiedostosta:
nano /etc/apache2/apache2.conf
Ja nämä rivit pitäisi olla tiedostossa
# Include module configuration: Include mods-enabled/*.load Include mods-enabled/*.conf
mod_expires
Tämä mahdollistaa välimuistiin tallennettujen elementtien viimeisen voimassaoloajan määrittämisen.
Asennus
Tämä ominaisuus on valmiina Apachen asennuspaketissa. Ota ominaisuus käyttöön komennolla
a2enmod expires
Käynnistä Apache uudelleen
service apache2 restart
Konfigurointi
Voit määrittää konfiguroinnin suoraan virtuaali isäntään ja .htacess tiedostoon.
Esimerkki:
## EXPIRES CACHING ## <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 30 days" </IfModule> ## EXPIRES CACHING ##
Eli oletuksena 30 päivää, jolloin vaaditaan uudelleenlataus palvelimelta kaikille tiedostoille, jotka ladattu selaimen välimuistiin.
Lisää:
ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" ExpiresDefault "access plus 2 days"
Kuville 1 vuoden viimeinen voimassaoloaika, pdf-tiedostoille, javascript sekä flash on kuukausi. Ikoneille yksi vuosi ja oletus muille on kaksi päivää.
mod_rewrite
Uudellenohjaus moduuli, mahdollistaa verkkosivuihin uudelleenohjauksia.
Asennus
Tämä on asennettu valmiina Apacheen, sinun tulee ottaa toiminto käyttöön:
a2enmod rewrite
Käynnistä Apache uudelleen
service apache2 restart
Konfigurointi
Esimerkki: HTTP -> HTTPS
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}
Eli uudelleenohjataan samaan sijaintiin HTTPS kanssa, kun pyydetään.
Esimerkki: Uudelleenohjaus UserAgentin avulla
RewriteCond %{HTTP_USER_AGENT} (iPhone|Blackberry|Android) RewriteRule ^/$ /mobile.html [L] RewriteRule ^/$ /std.html [L]
Eli Iphone, Blackberry ja Android laitteet uudelleenohjataan /mobile.html sivulle. Lisääthän tarvittavat UserAgent tiedot että tämä toimisi kaikilla haluamallasi selaimilla tai laitteilla.
Esimerkki: Uudelleenohjaa kaikki index.php tiedostoon, ellei ole olemassa. Muuten tulisi virhe 404 Not Found.
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
Sinun tulee määrittää DocumentRoot polku samaan sijainnilla kuin /index.php määritetty.
mod_security
Tällä estetään SQL injektiot ja CSR. Lisätietoa https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_security-with-apache-on-debian-ubuntu
Asennus
apt-get install libapache2-modsecurity
Käynnistä Apache uudelleen
service apache2 restart
Muuta oletuskonfigurointi tiedoston nimi
/etc/modsecurity/modsecurity.conf{-recommended,} (tallenna uudelleen *.conf päätteeksi)
Lataa Apachen konfigurointi tiedosto uudelleen
service apache2 reload
Löydät loki tiedoston Apachen loki hakemistosta /var/log/apache2/
root@droplet:~# ls -l /var/log/apache2/modsec_audit.log -rw-r----- 1 root root 0 Oct 19 08:08 /var/log/apache2/modsec_audit.log
Konfigurointi
Avaa konfigurointi tiedosto
nano /etc/modsecurity/modsecurity.conf
Etsi rivi:
SecRuleEngine DetectionOnly
ja muuta se:
SecRuleEngine On
Etsi rivi:
SecResponseBodyAccess On
ja muuta se
SecResponseBodyAccess Off
Näillä voit rajoittaa lähettettyjen tietojen määrää:
SecRequestBodyLimit SecRequestBodyNoFilesLimit
mod_ssl
Tämä moduuli mahdollistaa HTTPS yhteyden palvelimeen.
Asennus
Tämä on asennettu apache2-common paketin mukana. Sinun tulee ottaa käyttöön
a2enmod ssl
Käynnistä Apache uudelleen
service apache2 restart
Konfigurointi
Esimerkki: SSL konffit
SSLEngine on SSLCertificateFile /etc/ssl/ssl.crt SSLCertificateKeyFile /etc/ssl/ssl.key
Tallenna tilaamasi sertifikaatti hakemistoon ja määritä se virtuaali isäntään.
256 bittinen salaus
256bittiseen salaukseen on muokattava Apachen konffeihin:
nano /etc/apache2/mod-available/ssl.conf
Ja muuta riviä:
SSLCipherSuite AES256-SHA
mod_userdir
Tämä moduuli mahdollistaa jokaiselle tai osalle palvelimen käyttäjätilille omat verkkosivut.
Asennus
Tämä moduuli on valmiina asennettu Apachen mukana, sinun tulee laittaa se käyttöön
a2enmod userdir
Käynnistä Apache uudelleen
service apache2 restart
Konfigurointi
Esimerkki: Sallitaan kaikille käyttäjille käyttää tätä toimintoa. Käyttäjän tulee luoda /home/ hakemistoon public_html niminen kansio.
UserDir public_html UserDir enabled
Esimerkki: Sallitaan kaikille käyttäjätileille käyttää tätä toimintoa, paitsi root käyttäjälle. Käyttäjän tulee luoda /home/ hakemistoon public_html niminen kansio.
UserDir public_html UserDir disabled root UserDir enabled
Esimerkki: Sallitaan vain käyttäjän user1 ja user2 käyttää tätä toimintoa. Käyttäjän tulee luoda /home/ hakemistoon public_html niminen kansio.
UserDir public_html UserDir disabled UserDir enabled user1 user2
Verkkopolku on käyttäjien kotisivuille http://ip-osoite/~username.
Esimerkki konfigurointi:
UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride AuthConfig Options FollowSymLinks +Indexes </Directory> AliasMatch ^/users/([a-zA-Z0-9]+)/?(.*) /home/$1/public_html/$2
Eli kaikille käyttäjille sallittu, paitsi root käyttäjälle. Lisäksi sallitaan /home/*/public_html hakemistoon (verkkosivuhakemistoon) AuthConfig eli .htaccess tiedostoon luominen kirjautiminen näkymä. AliasMatch mahdollistaa uudelleenohjata kotisivuhakemisto esimerkiksi tässä http://ip-osoite/users/username
HTTPS / SSL
HTTPS - yhteyttä käyttäessä tarvitaan SSL sertifikaattia varmentamaan sivuston aitouden. Näin saadaan lisäturvaa verkkosivulle. Virallisen sertifikaatin pitää tilata viralliselta varmentajalta. Tämä virallinen vahvistus maksaa 20€-> useisiin satoihin asti.
Virallisia SSL sertifikaatin varmentajia
- Startssl - Ilmainen mutta ei luetettava.
- GeoTrust RapidSSL - Luettava ja toimiva, ei liikennetoiminnalle.
Epävirallinen SSL sertifikaatti
Toinen tapa on saada ilmaiseksi on käytettävä itseallekirjoitettavia SSL sertifikaatteja. Näihin selaimet eivät oletuksena luota jonka takia ei voi käyttää yleisessä käytössä. Sertifikaatit tulee asentaa manuaalisesti koneelle. Tässä ohje Openssl käyttöön, jolla on helppo tehdä itseallekirjoitettavia sertifikaatteja.
Määritetään Apacheen SSL avaamalla /etc/apache2/sites-available/default-ssl
nano /etc/apache2/sites-available/default
SSLEngine on
SSLCertificateFile /etc/ssl/localcerts/ssl.crt SSLCertificateKeyFile /etc/ssl/localcerts/ssl.key
Käynnistetään SSL sivut
a2ensite default-ssl
Lisätään SSL moduuli Apacheen
a2enmod ssl
Lataa Apachen konfigurointi tiedostot uudelleen
service apache2 reload
12. Sallitaan SSL Apacheen
a2enmod ssl
ja käynnistetään Apache uudelleen
service apache2 restart
Nyt on valmista, jos tuli virhe niin tuli vika konfiguraatioon
256bittiseen salaukseen on muokattava Apachen konffeihin:
nano /etc/apache2/mod-available/ssl.conf
SSLCipherSuite AES256-SHA
.htaccess
.htaccess tiedosto mahdollistaa konfigurointi tiedostojen tallentamisen suoraan verkkosivuhakemistoon, esimerkiksi /var/www/.htaccess.
Sallitaan .htaccess tiedoston ylikirjoittamaan entiset konfiguroinnit:
/etc/apache2/sites-available/default
seuraavanlaiseksi:
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
Käynnistä Apache uudelleen:
service apache2 restart
Luodaan .htaccess tiedosto /var/www/.htaccess
nano /var/www/.htaccess
Salasanasuojaus verkkosivulle
!! htpasswd httpd-2.4.4 on rikki. Odota päivitystä. !!
Kirjoita alla olevat rivit .htaccess tiedotoon:
AuthUserFile /var/.htpasswd AuthName "Anna kirjautumisen tiedot" AuthType Basic require user [käyttäjänimet]
Tallenna tiedosto ja tämän jälkeen luodaan esimerkiksi /var/.htpasswd tiedosto jossa on käyttäjänimet ja salasanat, jolla oikeudet kirjautua sivulle. Suositellaan erityisesti salasanojen kryptaamista. Huomaa, että polut pitää olla palvelimen fyysisiä polkuja, ei verkkopolkuja!
käyttäjänimi:salasana
Sinun tulee käyttää Debianissa htpasswd työkalua. Internetissä on myös htpasswd työkaluja saatavilla.
Esimerkki:
htpasswd -B /polku/.htpasswd Käyttäjätunnus Salasana
Tallenna tiedosto ja kokeile kirjautua sivullesi.
htpasswd bugin väliaikaisen korjaus
Bugi ei anna kuin Debianissa generoituja salasanojen kirjautumisen järjestelmään.
Voit generoida salasanan tällä komennolla:
htpasswd -nb user password
Kopioi ja tallenna htpasswd tiedostoon, näin pitäisi toimia
Virhesivut
Kirjoita alla olevat .htaccess tiedostoon. Muuta polut vastaamaan palvelimessasi olevaa polkua.
ErrorDocument 400 /errors/badrequest.html ErrorDocument 401 /errors/authreqd.html ErrorDocument 403 /errors/forbid.html ErrorDocument 404 /errors/notfound.html ErrorDocument 500 /errors/serverr.html
Määritä polut oikein vastaamaan palvelimesi polkuja missä virhesivusi sijaitsevat
Apachen suojaaminen
Webbipalvelimen suojaaminne ulkopuolisten hyökkäyksiltä kannattaa tehdä. mod_evansive ja mod_security auttavat siinä. Olen heiman kuitenkin koonnut lisää konffeja jolla voi suojata Apachea paremmi.
Piilota Apachen versio ja muut tiedot
/etc/apache2/conf.d/secure
ServerSignature Off ServerTokens Prod
Poista kansioden selaus käytöstä
.htaccess
Options -Indexes
Määritä Timeout
/etc/apache2/apache2.conf
Timeout 45
Rajoita pyyntöjä
/etc/apache2/apache2.conf
LimitRequestBody 1048576