torstai 26. syyskuuta 2024

Rocky Linux 9 asennus osa 1: Apache

Tässä sarjassa tehdään Rocky Linux 9 -palvelimesta nettiserveri, jossa voidaan ajaa esimerkiksi WordPressiä tai Drupalia. Sarjan ensimmäisessä osassa asennetaan Apache. Apache on palvelinohjelma, jota tarvitaan HTML-sivujen ja nettipalveluiden toteuttamiseen.

Jos asennat Apachea uuteen Rocky Linux 9 -virtuaalikoneeseen, niin asenna ensimmäiseksi EPEL-pakettikirjasto. Tarvitse asentamiseen sudon.

sudo dnf upgrade --refresh sudo dnf install dnf-utils dnf-plugins-core sudo dnf config-manager --set-enabled crb sudo dnf install \ https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \ https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm

Asenna sitten Apache

sudo yum install httpd mod_ssl brotli

Luo SSL-sertifikaatti oletussivustolle

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -nodes \ -subj "/C=XX/ST=State/L=City/O=Company/OU=Section/CN=CommonName" \ -keyout /etc/pki/tls/private/localhost.key \ -out /etc/pki/tls/certs/localhost.crt

Käy läpi Apachen asetustiedostot /etc/httpd-hakemistossa ja päivitä tiedostot tarpeesi mukaan. Alla esimerkki, miltä tiedostot saattavat näyttää, kun tarpeettomat ominaisuudet ja esimerkkikoodi poistetaan.

/etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"
DocumentRoot "/var/www/html"
Listen 80
User apache
Group apache
Include conf.modules.d/*.conf
Include conf.d/*.conf
Include vhosts.d/*.conf

/etc/httpd/conf/vhost.conf (Sama hakemisto kuin httpd.conf-tiedostolla)

RewriteEngine on

# Älä palvele pahoja botteja
RewriteCond %{HTTP_USER_AGENT} "Go-http-client|Mozilla/5.0 zgrab|python-requests|Custom-AsyncHttpClient|l9explore|^-?$"
RewriteRule ^ - [R=404,L]

# Estä pääsy arkaluontoisiin tiedostoihihn
RewriteRule \.(htpasswd|htaccess|env|ini|yml|conf|git|orig|bak|aws|sql)$ - [R=404,L]
RewriteRule (^|/)composer\.(json|lock)$ - [R=404,L]
RewriteRule (^|/)(package|package-lock)\.json$ - [R=404,L]

# Älä uudelleenohjaa tiedostoja, joita meillä ei varmasti ole
RewriteRule ^/?(cgi-bin|vendor|backup)(/|$) - [R=404,L]

# Älä palvele HTTP/1.0 asiakkaita
RewriteCond %{SERVER_PROTOCOL} ^HTTP/1\.0$
RewriteRule ^ - [R=404,L]

# Ohjaa Apple-asiakkaat suoraan faviconiin
RedirectMatch 301 (?i)/apple-touch-icon(.*)?.png /favicon.ico

/etc/httpd/conf.modules.d/00-base.conf

# Minimaalinen setti moduuleita
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule filter_module modules/mod_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule status_module modules/mod_status.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule version_module modules/mod_version.so

/etc/httpd/conf.modules.d/00-dav.conf

# (tyhjä tiedosto)

/etc/httpd/conf.modules.d/00-lua.conf

# (tyhjä tiedosto)

/etc/httpd/conf.modules.d/00-proxy.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

/etc/httpd/conf.d/autoindex.conf

# (tyhjä tiedosto)

/etc/httpd/conf.d/errors.conf

ErrorDocument 400 "E400"
ErrorDocument 401 "E401"
ErrorDocument 403 "E403"
ErrorDocument 404 "E404"
ErrorDocument 405 "E405"
ErrorDocument 408 "E408"
ErrorDocument 410 "E410"
ErrorDocument 411 "E411"
ErrorDocument 412 "E412"
ErrorDocument 413 "E413"
ErrorDocument 414 "E414"
ErrorDocument 415 "E415"
ErrorDocument 500 "E500"
ErrorDocument 501 "E501"
ErrorDocument 502 "E502"
ErrorDocument 503 "E503"
ErrorDocument 506 "E506"

/etc/httpd/conf.d/http2.conf

Protocols h2 h2c http/1.1
ProtocolsHonorOrder Off

/etc/httpd/conf.d/log.conf

# Kaikkien sivustojen loki samaan tiedostoon
ErrorLog "/var/log/httpd/error_log"
CustomLog "/var/log/httpd/access_log" combined
LogLevel warn

# Lisää palvelimen nimi lokitiedostoon
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" common

/etc/httpd/conf.d/limits.conf

# Rajoita pyynnön koko 10 megatavuun
LimitRequestBody 10000000

# Katkaise yhteys 30 sekunnin kuluttua
RequestReadTimeout handshake=5 header=5-10,MinRate=1000 body=5-30,MinRate=1000
TimeOut 30
ProxyTimeout 30

/etc/httpd/conf.d/mime.conf

<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>
AddDefaultCharset UTF-8
AddCharset UTF-8 .html .js .css

/etc/httpd/conf.d/security.conf

# Piilota palvelimen versio
ServerTokens Prod
ServerSignature Off

# Lisää HTML-dokumentteihin turvallisuustiedot
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" "expr=%{CONTENT_TYPE} =~ m#text/html#i"
Header always set X-Content-Type-Options "nosniff" "expr=%{CONTENT_TYPE} =~ m#text/html#i"
Header always set X-Frame-Options "SAMEORIGIN" "expr=%{CONTENT_TYPE} =~ m#text/html#i"
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'; frame-ancestors 'self';" "expr=%{CONTENT_TYPE} =~ m#text/html#i"
Header always set Referrer-Policy "same-origin" "expr=%{CONTENT_TYPE} =~ m#text/html#i"

# Estä pääsy tiedostoihin /var/www-hakemiston ulkopuolella
<Directory "/">
    AllowOverride none
    Options None
    Require all denied
</Directory>

/etc/httpd/conf.d/ssl.conf

Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLCryptoDevice builtin

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLOpenSSLConfCmd Curves X25519:prime256v1:secp384r1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off

/etc/httpd/conf.d/welcome.conf

# (tyhjä tiedosto)

/etc/httpd/vhosts.d/000-default.conf

<Directory "/var/www/html">
    AllowOverride None
    Options FollowSymLinks
    Require all granted
    AllowMethods GET
    DirectoryIndex index.html
</Directory>

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName default.local
    Include conf/vhost.conf
    
    RewriteEngine on
    RewriteRule "\.(php|phps)$" - [R=404,L]
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/html
    ServerName default.local
    Include conf/vhost.conf
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
   
    RewriteEngine on
    RewriteRule "\.(php|phps)$" - [R=404,L]
</VirtualHost>

Kun olet päivittänyt asetustiedostot, niin tarkista asetustiedostojen syntaksi ja käynnistä Apache

sudo apachectl configtest sudo systemctl start httpd

Lisää itsesi apache-ryhmään

sudo usermod -a -G apache teppo

missä teppo on oma käyttäjätunnuksesi

Anna /var/www-hakemisto apache-ryhmän hallintaan

sudo chown -R teppo:apache /var/www chmod -R g+rxs,o-rwx /var/www find /var/www -type d -exec setfacl -dm g::rx,o::- {} \;

Alusta /var/www/html hakemisto

echo "OK" > index.html touch favicon.ico touch robots.txt

Avaa portit 80 ja 443 liikenteellä lisäämällä http ja https palvelut palomuuriin

sudo firewall-cmd --permanent --add-service="http" sudo firewall-cmd --permanent --add-service="https" sudo firewall-cmd --reload

Avaa nettiselain ja menee palvelimen ip-osoitteeseen. Jos näet tekstin OK, niin Apache toimii.

Aseta lopuksi Apache käynnistymään bootissa komennolla

sudo systemctl enable httpd

Tämä on ensimmäinen osa Rocky Linux 9 asennuksesta. Lue seuraava osa tästä blogista!

22.9.2015: lisätty tuki TLS v1.3 protokollalle