CentOS – Apache Httpd

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.

Leave a Comment

Scroll to Top