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