Ha a “Csomagok kezelése” bejegyzés útmutatásait hűen követtük, akkor most van egy feltelepített Apache Httpd szerverünk, amelyet némiképp be kell állítanunk, hogy célszerűen működjön. Elsőképp azt állítsuk be, hogy a szerver újraindításakor automatikusan elinduljon:
# chkconfig httpd on
# chkconfig --list | grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Egy frissen feltelepített szerver nem tud sokmindent, a teljes tudását megtekinthetjük a http://ip-cím oldalon, ahol egy CentOS üdvözlő képernyő fogadja azt az óvatlan látogatót, aki nem megfelelő címet ír be a böngészője címsorába. Ezért a viselkedésért a welcome.conf állomány felel a /etc/httpd/conf.d/ alatt:
# This configuration file enables the default "Welcome"
# page if there is no default index page present for
# the root URL. To disable the Welcome page, comment
# out all the lines below.
#
<LocationMatch "^/+$">
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>
Érdemes meghagyni ezt az állományt, mivel így könnyen rá tudunk jönni a hibára, ha valami nem jönne be, mert ez az oldal eléggé feltűnő.
Konfiguráció
Az Apache Httpd szervernek van néhány hátránya, az előnye viszont az, hogy széleskörűen konfigurálható, úgyhogy szanaszét fogjuk konfigurálni…
Naplózás
A /etc/httpd/conf/httpd.conf fájlban érdemes a naplózást kissé megváltoztatni, hogy a /var/log/httpd/access_log állományba íródjon bele az aktuálisan kiszolgált virtuális domain neve, tehát keressük meg az alábbi sorokat:
LogFormat "%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
LogFormat "%h %l %u %t \\"%r\\" %>s %b" common
A httpd.conf állományhoz többé nem nyúlunk, minden mást aconf.d könyvtár alá fogunk tenni.
Virtuális hosztok
Minden bizonnyal több domain-t szeretnénk kiszolgálni majd, ezért hozzunk létre egy mod_vhost.conf nevű fájlt és írjuk bele az alábbit:
NameVirtualHost *:80
NameVirtualHost *:443
Ettől kezdve a Httpd szerver tudni fogja, hogy név alapján térnek el a virtuális hosztok és a megadott két porton kell majd kiszolgálni.
A szerver neve
Ne hagyjuk a szervernek, hogy találgasson, adjuk meg a szerver nevét:
ServerName javaforum.hu:80
A server-info engedélyezése
A server-info hasznos abban az esetben, amikor hibát keresünk, illetve az Apache Httpd futási információit szeretnénk megtekinteni:
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from localhost
</Location>
Érdemes figyelni arra, hogy lehetőleg csak a localhost domain-ről engedélyezzük az elérését.
A server-status engedélyezése
A server-status a fenti párja, amely az információk helyett a szerver státuszát adja vissza (monitorozás esetén jól jön):
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
</Location>
Ez esetben is érdemes arra figyelni, hogy csak a localhost legyen engedélyezve.
Authz-ldap modul
Ha telepítettünk LDAP szervert (lásd “OpenLDAP” poszt), akkor célszerűen feltelepedett egy mod_authz_ldap csomag, amelyet nevezzünk át, más teendőnk nincs ezzel, amíg hozzáférést nem szeretnénk szabályozni LDAP-ból (Subversion szerver esetén ez gyakorta előfordul):
# mv /etc/httpd/conf.d/authz_ldap.conf /etc/httpd/conf.d/mod_authz_ldap.conf
SSL
A mai világban nem nevezhető biztonságosnak, ami nincs titkosítva, ezt Apache Httpd esetén a mod_ssl csomaggal tudjuk biztosítani, telepítsük fel, majd nevezzük át a feltelepült konfigurációs állományt:
# yum install mod_ssl.x86_64
# mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/mod_ssl.conf
Ezek után szerkesszük a tartalmát, és konfiguráljunk be egy virtuális hosztok kiszolgálására alkalmas SSL modult:
LoadModule ssl_module modules/mod_ssl.so
Listen *:443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
#SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/javaforum.pem
SSLCertificateKeyFile /etc/pki/tls/certs/javaforum.key
Mint láthatjuk, az SSLEngine direktíva ki van kommentezve, ezt majd az egyes VirtualHost blokkokon belül bekapcsoljuk.
A fenti konfigurációban két hivatkozást látunk, amelyek nem létező állományokra mutatnak:
- /etc/pki/tls/certs/javaforum.pem
- /etc/pki/tls/certs/javaforum.key
Ezek létrehozására egy rövidebb közös út után két lehetőségünk van:
- saját magunk írjuk alá az SSL certification-t
- egy hiteles SSL szolgáltató aláírja nekünk
Közös lépések
Első lépésként létre kell hoznunk egy CSR (Certificate Signing Request) állományt, amely több domain-t támogat, ezért kell egy OpenSSL konfigurációt létrehoznunk:
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
req_extensions = req_ext # The extentions to add to the self signed cert
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Illinois
localityName = Locality Name (eg, city)
localityName_default = Chicago
organizationName = Organization Name (eg, company)
organizationName_default = Example, Co.
commonName = Common Name (eg, YOUR name)
commonName_max = 64
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = doc.javaforum.hu
DNS.2 = fisheye.javaforum.hu
DNS.3 = id.javaforum.hu
DNS.4 = jenkins.javaforum.hu
DNS.5 = lists.javaforum.hu
DNS.6 = munin.javaforum.hu
DNS.7 = sonar.javaforum.hu
DNS.8 = wiki.javaforum.hu
DNS.9 = jum.javaforum.hu
DNS.10 = mail.javaforum.hu
DNS.11 = nexus.javaforum.hu
DNS.12 = svn.javaforum.hu
DNS.13 = svnadmin.javaforum.hu
DNS.14 = traq.javaforum.hu
Mint láthatjuk, előre felsoroltuk azokat a domain neveket, amelyeket SSL védelme alatt szeretnénk használni, ezt úgy hívják, hogy UCC (Unified Communications Certificate). Lehetőségünk van ún. WildCard Certificate létrehozására is, ezt azonban általában drágább hitelesíttetni.
A fentebb létrehozott konfigurációs állományt és OpenSSL-t használva létrehozzuk a CSR-t:
# openssl req -newkey rsa:2048 -nodes -keyout javaforum.key -out javaforum.csr -config javaforum.conf
Ezek után válik ketté a folyamat.
Self signed certification
Ha nem akarunk fizetni a hiteles SSL tanusítványért, akkor önmagunk is aláírhatjuk, ekkor a titkosításra megfelelő lesz, hitelesítésre viszont nem:
# openssl x509 -req -days 365 -in javaforum.csr -signkey javaforum.key -out javaforum.pem
Hitelesített tanusítvány
Ebben az esetben a tanusítványunk hiteles is lesz, amellett, hogy az adatátvitel megfelelően titkos marad, ám ez általában sokba kerül (10-100eFt/év között), a folyamat hosszadalmas, a hitelességi fokozat szerint személyes kontaktussal és közjegyzővel jár, de a folyamat végén a kezünkben lesz egy javaforum.pem állomány, amely digitálisan hiteles tanusítvány.
Másolás
A keletkezett két állományt kell a megfelelő helyre másolnunk és már működik is az SSL:
# cp javaforum.key javaforum.pem /etc/pki/tls/certs/
Alapértelmezett konfiguráció
Érdemes létrehoznunk egy alapértelmezett konfigurációt, mondjuk _default.conf néven:
<VirtualHost *:80>
ServerAdmin auth.gabor@javaforum.hu
DocumentRoot /var/www/html/
ServerName 193.178.119.31
<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ProxyVia On
ProxyPreserveHost On
</VirtualHost>
<VirtualHost *:443>
ServerAdmin auth.gabor@javaforum.hu
DocumentRoot /var/www/html/
ServerName 193.178.119.31
SSLEngine on
<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ProxyVia On
ProxyPreserveHost On
</VirtualHost>
Ezt mintaként tudjuk használni a többi VirtualHost létrehozása esetén. Észre kell vennünk, hogy a 443-as portot hordozó konfiguráció mindössze a SSLEngine on direktívában különbözik a 80-as port konfigurációjától.
Konfiguráció tesztelése
Amikor hozzányúlunk az Apache Httpd konfigurációjához, akkor célszerű az újraindítás előtt letesztelni, hogy nem írtunk-e el valamit:
# service httpd configtest
Syntax OK
Ha a fentitől eltérő kimenetet látunk, akkor nézzük át a módosításainkat, hogy mit írunk el, ha a konfiguráció az Apache Httpd szerint megfelelő, akkor indítsuk újra az alábbi két parancs egyikével:
# service httpd graceful # kiesésmentes újraindítás, nagy forgalom esetén sokáig eltarthat
# service httpd restart # teljes leállítás, elindítás
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
Az Apache Httpd beállítsa befejeződött, pihenjünk egyet…
Mentés
A fenti konfiguráció mellett létre fogunk hozni néhány virtuális domain-t, ezért célszerű egy mentést beállítani, amely összetömöríti a /etc/httpd tartalmát, a mintát már ismerhetjük az előző bejegyzésekből.