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:offEgy 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" commonA 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 *:443Ettő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:80A 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.confSSL
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.confEzek 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.keyMint 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.huMint 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.confEzek 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.pemHitelesí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 OKHa 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.