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