Next: Az Apache fordítása Up: Az Apache konfigurálása Previous: AddType és AddHandler   Tartalomjegyzék
A következőkben a MASCO Kft-hez hangolom a rendszert. A cégnek profilja szerint két divíziója van: egy biztonságtechnikai és egy nyílászáró automatizálási részleg. Mivel a két divízió eléggé különböző piaccal, PR-el és termékkel rendelkezik, ezért két külön Web-helyet hozunk létre nekik. A „fő” Web-hely a cég általános információit tartalmazza és linkeket a két másik, specifikusabb hely felé. Mivel jelen esetben csak egy IP címet vásároltunk, ezért az Apache NameVirtualHost funkcióját fogjuk használni. Így képesek leszünk arra, hogy a kliens böngészője által kért Web-helyet adjuk vissza neki név szerint. Mivel az egyetlen IP címünket lefogja a NameVirtualHost, ezért a fő Web-szerver nem fog szolgáltatni ezen, csak a hurok interfészen. Ezért három virtuális szervert készítünk. Egy a főcég és kettő a két divízió tartalmát tárolja és szolgáltatja.
Az alapbeállítás szerint az Apache csomag csak a 80-as portot használja. Mi azonban azt szeretnénk, hogy a 443-as porton SSL szolgáltatást is nyújtson a rendszer. Ha az SSL kapcsolatot akarjuk igénybe venni, akkor a http://www.masco.hu/ helyett a https://www.masco.hu/ címen kell a szerverhez fordulni.
Nem csak azokat a beállításokat fogom felsorolni, melyeket meg kell változtatni, hanem nagyrészt azokat is, melyek alapbeállításai jók. Ezt azért teszem, hogy az olvasó minél könnyebben megértse a paraméterek jelentését, és szükség szerint finomhangolhassa azt saját igényeihez. A paramétereket kommentezett megjegyzésekkel próbálom érthetővé tenni.
#
- Általános beállítások----------------------------------------
ServerType
Standalone # a szerver indításkor betöltődik,
nem az inetd indítja
#Port 443 #
#Port 80 #
Listen 443 # ezeket a portokat figyelje a szerver, ez a https port
Listen 80 # ez a szabványos http port
HostNameLookups off # ne keresse meg a kliens nevét, elég az IP címe
# a DNS keresés nagyon lelassíthatja a működést
User nodoby
Group nobody # milyen jogokkal fusson a szerver, semmiképp se root!
ServerAdmin admin@masco.hu # ide küldje a leveleket hiba esetén
ServerRoot /etc/httpd # hol vannak a konfig’ fájlok
BindAddress 212.108.200.69 # ezen a címen vagyunk elérhetőek (ha esetleg több
# IP címünk is lenne – több hálókártya )
NameVirtualHost 212.108.200.69:80 # virtuális szervereink ezt az IP címet fogják
NameVirtualHost 212.108.200.69:443 # figyelni a 80-as és 443-as portokon
# ServerName # mi legyen a fő szerver neve? - erre itt nincs szükség
UseCanonicalName on # linkek kiegészítése a saját névvel
Timeout 300 # kacsolat bontása másodpercben
KeepAlive on # tartós kapcsolatok fenntartása a kliensekkel
MaxKeepAliveRequests 100 # hány db kérést tartson fenn
KeepAliveTimeout 15 # Mennyi másodpercig tartsa fenn a kapcsolatot
MinSpareServers 5 # Minimálisan hány “felesleges” szerver fusson
MaxSpareServers 10 # Maximálisan hány “felesleges” szerver fusson
StartServers 8 # Induláskor hány szervert indítson el
MaxClients 150 # Maximálisan hány kapcsolat élhet
MaxRequestsPerChild 100 # 100 kérés teljesítése után “megöli” a gyermek processzt
#---------------------- Modulok ---------------------------------
# Melyik modulokat töltsük be? Azokat, amelyeket én nem láttam szükségesnek
# kikommenteztem. Ha az olvasónak szüksége van valamelyikre, válasszon tetszés
# szerint
# A virtuális szerverek álnév támogatása
LoadModule vhost_alias_module modules/mod_vhost_alias.so
# Környezeti változók átadása CGI script-eknek
# LoadModule env_module modules/mod_env.so
# Testre szabható naplózás
LoadModule config_log_module modules/mod_log_config_ssl.so
# Objektum típus megállapítása tartalomból
LoadModule mime_magic_module modules/mod_mime_magic.so
# Objektumtípus megállapítása fájlkiterjesztésből
LoadModule mime_module modules/mod_mime_ssl.so
# Tartalom “tárgyalás”
LoadModule negotiation_module modules/mod_negotiation.so
# a szerver állapotának megjelenítése weblapként (autentikáció szükséges)
LoadModule status_module modules/mod_status.so
# Szerver beállítási információk
LoadModule info_module modules/mod_info.so
# Szerveroldalon előállított objektumok
LoadModule includes_module modules/mod_include.so
# Automatikus könyvtár listázás
LoadModule autoindex_module modules/mod_autoindex.so
# Alapszintű könyvtárkezelés
LoadModule dir_module modules/mod_dir.so
# CGI script-ek meghívása
#LoadModule cgi_module modules/mod_cgi.so
#
Az “.asis” fájl kezelő
# LoadModule asis_module modules/mod_asis.so
# Kép-térkép fájlkezelő
# LoadModule imap_module modules/mod_imap.so
# A felhasználók könyvtárait kezeli (listázás, letöltés)
# LoadModule userdir_module modules/mod_userdir.so
# HTTP gyorsítótár
# LoadModule proxy_module modules/libproxy.so
# Álnevek és átirányítások
LoadModule alias_module modules/mod_alias.so
# Az access.conf értelmezéséhez
LoadModule access_module modules/mod_access.so
# Felhasználó azonosítás szöveg fájlokkal
LoadModule auth_module modules/mod_auth.so
# ftp stílusú anonimusz felhasználó azonosítás
# LoadModule anon_auth_module modules/mod_auth_anon.so
# felhasználó azonosítás DBM fájlokkal
# LoadModule dbm_auth_module modules/mod_auth_dbm.so
# felhasználó azonosítás a Berkeley-féle DB (adatbázis) fájlokkal
# LoadModule db_auth_module modules/mod_auth_db.so
# MD5 felhasználó azonosítás
LoadModule digest_module modules/mod_digest.so
# Fejlécek erőforrásokhoz (pl. meddig érvényes egy oldal)
LoadModule expires_module modules/mod_expires.so
# Tetszőleges HTTP fejlécek beépítése
LoadModule headers_module modules/mod_headers.so
# Felhasználó-követés sütik segítségével
# LoadModule usertrack_module modules/mod_usertrack.so
# Környezeti változók beállítása kliens információk alapján
LoadModule setenvif_module modules/mod_setenvif.so
# A fontos PHP3 modul
LoadModule php3_module modules/libphp3.so
# A Perl modul
# LoadModule perl_module modules/libperl.so
# Itt töltődik be az ssl modul
LoadModule ssl_module modules/libssl.so
#----- Naplózás -----------------------------------------------------------
# itt tárolja induláskor a folyamat azonosító számát
PidFile /var/run/httpd.pid
ErrorLog /var/log/httpd/error.log # A hibaüzenetek ide menjenek
LogLevel warn # mit loggoljon? debug/info/notice/warn/error/crit
# mi legyen a naplózás formája?
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %v" full
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat
"%{Referer}i -> %U" referer
LogFormat
"%{User-agent}i" agent
#
Egyéni naplófájlok:
# Vigyázat! Ha nagy a forgalom nagyra dagadhat a fájl. Biztonsági szempontból
# előnyös, hiszen minden egyes kérés naplózva lesz IP címmel. Ha támadás gyanú van,
# akkor mindenképp kapcsoljuk be. Továbbá a statisztikákat is ezekből készítjük.
CustomLog /var/log/httpd/access.log common # naplózhatjuk a hozzáférést is
#
Ezzel naplózzuk azt az oldalt, ahonnan idelépett a kliens
# CustomLog /var/log/httpd/referer.log referer
A kliens böngészőinformációit naplózza
# CustomLog /var/log/httpd/agent.log agent
# SSL beállítások --------------------------------
# SSL Globális környezet
AddType application/x-x509-ca-cert .crt # A tanúsítvány mint fájl típus
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin # Ezt célszerű így hagyni.
# Szerver gyorsító a kulcsok számára
SSLSessionCache dbm:logs/ssl_scache # Gyorsító
SSLSessionCacheTimeout 300 # Időzítő
SSLMutex file:logs/ssl_mutex #
SSLRandomSeed startup builtin #
SSLRandomSeed connect builtin #
# Logging:
SSLLog logs/ssl_engine_log
SSLLogLevel info
SSLCertificateFile conf/server.crt # A szerver igazolása
SSLCertificateKeyFile conf/server.key # A szerver kulcs fájlja
SSLCACertificatePath conf/ssl.crt # A szerver CA igazolásának helye
SSLCACertificateFile conf/ssl.crt/ca.crt # A szerver CA igazolása
# SSLVerifyClient beállításai
# 0 ha nincs szükség igazolásra
# 1 ha a kliens adhat igazolást
# 2 ha a kliensnek kötelező az igazolás
SSLVerifyClient 0 # A kliens ellenőrzés típusa
SSLVerifyDepth 10
# SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars
# SSL tranzakciók naplózása
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
# ---Virtuális gépek ------------------------
# Itt definiáljuk a két tevékenységi kör külön oldalait
<VirtualHost www.masco.hu:80> # virtuális szerver ezen a néven a 80-as porton
#ServerAdmin
# lehetne külön webmestere mindnek
SSLDisable # itt kikapcsoljuk az SSL-t
DocumentRoot /home/masco/httpd/html # mindenkinek a saját gyökerét
ServerName www.masco.hu # és a saját nevét adjuk meg
ServerAlias masco.hu *.masco.hu # az erre hivatkozókat is ide irányítjuk
# külön is kérhetjük a log-okat.
ErrorLog
/var/log/httpd/masco-error.log
#
Az összes kérést és forgalmat is lehet külön naplózni,
# ebből készülnek a statisztikák.
CustomLog /var/log/httpd/masco-access.log common
#TransferLog
/var/log/httpd/masco-access.log
</VirtualHost>
<VirtualHost www.masco.hu:443> # ugyanazt kikínáljuk SSL-el is
SSLEnable
DocumentRoot /home/masco/httpd/html
ServerName
www.masco.hu
ServerAlias
masco.hu *.masco.hu
ErrorLog
/var/log/httpd/masco-ssl-error.log
CustomLog /var/log/httpd/masco-ssl-access.log common
</VirtualHost>
<VirtualHost www.gateautomation.hu:80> # ezek a kapumozgatással foglalkozó
DocumentRoot /home/ateautomation/httpd/html # oldalak
SSLDisable
ServerName www.gateautomation.hu
ServerAlias gateautomation.hu *.gateautomation.hu
ErrorLog
/var/log/httpd/gateautomation-error.log
CustomLog /var/log/httpd/gateautomation-access.log common
</VirtualHost>
<VirtualHost www.gateautomation.hu:443>
SSLEnable
DocumentRoot /home/gateautomation/httpd/html
ServerName www.gateautomation.hu
ServerAlias gateautomation.hu *.gateautomation.hu
ErrorLog
/var/log/httpd/gateautomation-ssl-error.log
CustomLog /var/log/httpd/gateautomation-ssl-access.log common
</VirtualHost>
<VirtualHost www.mascosecurity.hu:80> # ezek a biztonságtechnikai oldalak
DocumentRoot /home/mascosecurity/httpd/html
SSLDisable
ServerName www.mascosecurity.hu
ServerAlias mascosecurity.hu *.mascosecurity.hu
ErrorLog
/var/log/httpd/mascosecurity-error.log
CustomLog /var/log/httpd/mascosecurity-access.log common
</VirtualHost>
<VirtualHost www.mascosecurity.hu:443>
SSLEnable
DocumentRoot /home/mascosecurity/httpd/html
ServerName www.mascosecurity.hu
ServerAlias mascosecurity.hu *.mascosecurity.hu
ErrorLog
/var/log/httpd/mascosecurity-ssl-error.log
CustomLog /var/log/httpd/mascosecurity-ssl-access.log common
</VirtualHost>
Minden könyvtárra külön szabályokat állíthatunk fel. Az itteni beállítások is a httpd.conf fájlba kerülnek.
<Directory /home/httpd>
# none: semmi, all: az összes következő, Indexes: a kliens listázhatja,
# Includes: futtathat szerver-oldali scripteket,
# FollowSymlinks: követi a szimbolikus linkeket – veszélyes lehet!
# ExecCGI: CGI scripteket futtathatunk innen – veszélyes!
# olvassuk el a dokumentációt! /usr/share/doc/apache/manual/mod/core.html#options
Options none
AllowOverride none # olvassuk el a dokumentációt!
Order deny,allow
# deny from gonosz.betörő.domén
allow from all
</Directory>
#A
CGI-ket tartalmazó könyvtár. Nézzük meg mi van benne. Ha üres, akkor
#
kommentezzük ki innen is.
<Directory /home/httpd/cgi-bin>
AllowOverride None
Options ExecCGI FollowSymLinks
</Directory>
Az alkönyvtárak ezeket a beállításokat öröklik. Az alkönyvtárak beállításait egyenként felülbírálhatjuk.
Ha egyes könyvtárakhoz való hozzáféréshez felhasználó azonosítást szeretnénk, megtehetjük az adott könyvtárban elhelyezett .htaccess rejtett fájlban is. A kódoláshoz és azonosításhoz több féle authentikációs modul használható:
mod_auth |
alapfunkciós, crypt() függvényt használ |
mod_digest |
MD5 kódolást használ |
mod_auth_sys |
a /etc/passwd
fájlt használja |
mod_auth_pam |
a PAM függvényeit használja |
Nekünk a PAM lenne jobb, de az /etc/shadow fájlt nem látja, ezért azt olvashatóvá kellene tenni az Apache számára, ami komoly veszélyeket rejt magában. Az árnyékjelszó miatt az auth_sys sem működik sajnos. Az MD5-ös kódolás jó választás lenne, de a legtöbb böngésző (pl. Netscape 4.x) még nem támogatja. Így kénytelenek vagyunk a hagyományos azonosítást használni. Itt használhatunk sima szöveges, DB és DBM formátumú fájlokat is. Mivel nem sok felhasználót kell tárolnunk, megfelel a szöveges fájlt is.
Ha betöltöttük a status modult, akkor Weben keresztül is lekérdezhető a szerver állapota. Vigyázat, ennek nyilvánossá tétele megkönnyíti a betörők helyzetét! Alkalmazzunk SSL-es kódolást és azonosítást. Csak a rendszer és Web-gazdák tekinthessék meg a szerver állapotát. Ehhez először is létre kell hoznunk egy jelszófájlt. Ez a fájl nem lehet a /home/httpd könyvtár alatt, hiszen ekkor azt mások könnyen meg tudják szerezni. Helyezzük el az /etc/httpd/conf könyvtárban, pl. info.pwf néven. Így hozhatjuk létre:
htpasswd –c jelszófájl felhasználó
chmod 0640 jelszófájl
chgrp nobody jelszófájl
Vigyázzunk, hogy ha más authentikációs modul is be van
töltve, az lesz érvényes és ezért esetleg nem fog helyesen működni a mod_auth.
<Location /server-status>
SetHandler server-status # ez esetben a server-status modul veszi át a tartalmat
order deny,allow
#deny from all
allow from all # ide azt írjuk be, hogy honnan lehessen lekérdezni.
SSLRequireSSL # ide csak SSL-el lehet belépni
# AuthPam_Enable off # ha betöltöttük a mod_auth_pam modult, most kapcs. ki
AuthType Basic # crypt() függvényt használó azonosítás
AuthName Status # ez jelenik meg a jelszó kérésekor
AuthGroupFile /dev/null # a csoport lista most üres (nem kötelező)
AuthUserFile /etc/httpd/conf/info.pwf # ebben a fájlban tároljuk a jelszavakat
require user rgazda wgazda # csak ezek a felhasználók férhetnek hozzá az infókhoz
</Location>
# A szerver beállításait tartalmazó információkkal is ugyanígy járjunk el:
<Location /sever-info>
SetHandler server-info
order deny,allow
#deny from all
allow from all # ide azt írjuk be, hogy honnan lehessen lekérdezni.
SSLRequireSSL # ide csak SSL-el lehet belépni
# AuthPam_Enable off # ha betöltöttük a mod_auth_pam modult, most kapcs. ki
AuthType Basic
AuthName Info
AuthUserFile /etc/httpd/conf/info.pwf
require user rgazda wgazda
</Location>
# Ez a phf típusú betörési kísérleteket naplózza
Location /cgi-bin/phf*>
deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>
#
Kiadhatjuk a dokumentációt, hogy könnyebb legyen a konfigurálás.
<Directory /home/httpd/html/manual>
Options Indexes FollowSymLinks
AllowOverride None
order allow,deny
allow from 127.0.0.1 “rendszergazdaIP-je”
deny from all
SSLRequireSSL # ide csak SSL-el lehet belépni
AuthType Basic
AuthName Documents
AuthUserFile /etc/httpd/conf/info.pwf
require user rgazda wgazda
</Directory>
#A felhasználók – bár nem lesznek - ne tudjanak symlink-támadást csinálni.
<DirectoryMatch ^/home/.*/public_html>
Options Indexes SymLinksIfOwnerMatch
AllowOverride None
</DirectoryMatch>
# Biztonsági okokból ezeknek a fájloknak a forgalmát letilthatjuk
<Files .htaccess>
order allow,deny
deny from all
</Files>
<Files .htpasswd>
order allow,deny
deny from all
</Files>
Next: Az Apache fordítása Up: Az Apache konfigurálása Previous: AddType és AddHandler   Tartalomjegyzék
Misóka Zoltán 2000. 10. 05.