tiistai 10. joulukuuta 2024

Rocky Linux 9 asennus osa 6: Fail2ban

Fail2ban auttaa suojautumaan esimerkiksi koputtelijoilta, jotka kuormittavat palvelinta kokeilemalla kymmeniä erilaisia polkuja etsiessään haavoittuvia tiedostoja tai palveluita. Kun Fail2ban huomaa, että tietystä IP-osoitteesta tulee paljon pyyntöjä, niin Fail2ban blokkaa tilapäisesti IP-osoitteen palomuurista, joka hidastaa ja vaikeuttaa koputtelijan toimintaa.

Tarvitset fail2banin asentamiseen EPEL-pakettikirjaston. Jos koneellasi ei ole EPEL-pakettikirjastoa, niin asenna se kuten Apachen ohjeessa.

Asenna Fail2ban komennolla:

sudo yum install fail2ban

Luo tiedosto /etc/fail2ban/jail.local ja liitä tiedostoon koodi

[DEFAULT]
ignoreip = 127.0.0.1/8

[my-sshd-auth]
enabled = true
port = ssh
logpath = /var/log/secure
bantime = 20h
findtime = 10m
maxretry = 3

[my-sshd-flood]
enabled = true
port = ssh
logpath = /var/log/secure
bantime = 20h
findtime = 10m
maxretry = 10

[my-apache-badbots]
enabled = true
port = http,https
logpath = /var/log/httpd/access_log
bantime = 48h
findtime = 10m
maxretry = 1

[my-apache-nofile]
enabled = true
port = http,https
logpath = /var/log/httpd/access_log
bantime = 60m
findtime = 10m
maxretry = 10

[my-apache-flood]
enabled = true
port = http,https
logpath = /var/log/httpd/access_log
bantime = 30m
findtime = 1m
maxretry = 300

[my-apache-errors]
enabled = true
port = http,https
logpath = /var/log/httpd/error_log
bantime = 60m
findtime = 10m
maxretry = 3

Tallenna seuraavat tiedostot /etc/fail2ban/filter.d-hakemistoon.

my-apache-badbots.conf

[Definition]
badbots = Go-http-client|Mozilla/5\.0 zgrab|python-requests|Custom-AsyncHttpClient|l9explore|masscan|Mozilla/5\.0 Keydrop|Gregarius|Expanse|redtail-http
badfiles = \.env|\.git/+config

failregex = ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)*" \d+ (\d+|-) ".*" "(?:%(badbots)s).*"$
        ^[-0-9A-Za-z.]* <HOST> - - \S+ "\S+ /+(?:%(badfiles)s).*" \d+ (\d+|-) ".*" ".*"$
        ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)* HTTP/1.0" \d+ (\d+|-) ".*" ".*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})

my-apache-errors.conf

[INCLUDES]
before = apache-common.conf

[Definition]
failregex = ^%(_apache_error_client)s (?:(?:AH01623: )?client method denied by server configuration|(?:AH01630: )?client denied by server configuration|(?:AH10244: )?invalid URI path|(?:AH001[23][456]: )?Invalid (method|URI) in request\b|(?:AH00565: )?request failed: URI too long \(longer than \d+\)|request failed: erroneous characters after protocol string:|(?:AH00566: )?request failed: invalid characters in URI\b)

ignoreregex = 

my-apache-flood.conf

[Definition]
# Täsmää aivan kaikkiin pyyntöihin access_log tiedostossa.
# Huomaa, että ao. rivi olettaa, että Apachen vhost on määritelty tulostumaan rivin alkuun!
failregex = ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)*" \d+ (\d+|-) ".*" ".*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})

my-apache-nofile.conf

[Definition]
# Täsmää pyyntöihin access_log tiedostossa, joissa palvelin palauttaa 404 virhekoodin.
# Huomaa, että ao. rivi olettaa, että Apachen vhost on määritelty tulostumaan rivin alkuun!
failregex = ^[-0-9A-Za-z.]* <HOST> - - \S+ "([^\\"]|\\.)*" 404 (\d+|-) ".*" ".*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})

my-sshd-auth.conf

[Definition]

# Täsmää epäonnistuneisiin kirjautumisyrityksiin
failregex = sshd(-session)?\[\d+\]: (Invalid user \S* from|Disconnected from authenticating user \S*|Connection (reset|closed) by authenticating user \S*) <HOST> port \d+

ignoreregex =

my-sshd-flood.conf

[Definition]

# Täsmää kaikkiin yhteydenottoihin
failregex = sshd(-session)?\[\d+\]: (Received disconnect from|Connection (closed|reset) by( \S+ user \S*)?|Disconnected from \S+ user \S*|Unable to negotiate with) <HOST> port \d+

# Ohita onnistuneesti kirjautuneiden käyttäjien toiminta
ignoreregex = disconnected by user$

Käynnistä fail2ban ja aseta se käynnistymään automaattisesti

sudo systemctl start fail2ban sudo systemctl enable fail2ban

Tarkista lokista, että fail2ban käynnistyy oikein ja blokkaa haluttuja kutsuja

sudo tail -f /var/log/fail2ban.log

Jos blokkaat vahingossa oman IP-osoitteen, niin voit vapauttaa se komennolla

sudo fail2ban-client unban 80.82.77.202

missä 80.82.77.202 on oma IP-osoitteesi. Jos filterissa on korjattavaa, niin voit vapauttaa kaikki filtterin blokkaamat osoitteet kerralla

sudo fail2ban-client reload --unban my-apache-badbots

Tämä kirjoitus on kuudes osa seikkailua Rocky Linux 9:n parissa. Lue edellinen osa tästä blogista!


Päivitys 9.6.2026: sshd-prosessin nimi my-sshd-flood.conf ja my-sshd-auth.conf tiedostoissa päivitetty sisältämään sshd-session -prosessin

torstai 10. lokakuuta 2024

Rocky Linux 9 asennus osa 5: Postfix

Postfix auttaa toimittamaan sähköpostit turvallisesti ja varmasti perille. Tässä ohjeessa Postfix asennetaan välittämään palvelimella tuotettu sähköposti ulkoiselle SMTP-palvelimelle allekirjoitettavaksi, joka pienentää sähköpostien mahdollisuutta juuttua roskapostisuodattimiin. SMTP-palvelimen saat esimerkiksi Scalewayltä, Mailgunilta, SendGridiltä tai Postmarkilta, mutta voit rakentaa sen myös itse.

Asenna Postfix komennolla

sudo yum install postfix cyrus-sasl-plain cyrus-sasl-md5

Avaa sitten /etc/postfix/main.cf-tiedosto editoriin ja tee tiedostoon seuraavat muutokset

myhostname = localhost
mydomain = localdomain
myorigin = localdomain
inet_interfaces = localhost
mydestination = localhost.localdomain, localhost, localdomain
mynetworks = 127.0.0.0/8 10.0.0.0/24
relay_domains =
relayhost = [PALVELIN]:587

missä PALVELIN on palveluntarjoajasi SMTP-palvelin.

Lisää vielä /etc/postfix/main.cf-tiedoston loppuun rivit

smtp_generic_maps = hash:/etc/postfix/generic
smtp_helo_name = VERKKOTUNNUS
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_use_tls = yes

missä VERKKOTUNNUS on palvelimen oma verkkotunnus.

Luo salasanatiedosto

sudo vi /etc/postfix/sasl_passwd

Lisää tiedostoon rivi

[PALVELIN]:587<tab>TUNNUS:SALASANA

missä PALVELIN on palveluntarjoajasi SMTP-palvelimen nimi, <tab> on tabulaattorimerkki, TUNNUS on SMTP-palvelimen käyttäjätunnus (sisältää yleensä @-merkin ja palvelimen nimen), ja SALASANA on sähköpostin salasana.

Tallenna tiedosto, sulje editori ja valmistele tiedosto käyttöön komennoilla

sudo chmod 0600 /etc/postfix/sasl_passwd sudo postmap /etc/postfix/sasl_passwd

Luo ohjaustiedosto /etc/postfix/generic komennolla

sudo vi /etc/postfix/generic

Tallenna tiedostoon rivit

TUNNUS@localdomain<tab>no-reply@VERKKOTUNNUS
root@localdomain<tab>no-reply@VERKKOTUNNUS

missä TUNNUS on käyttäjätunnuksesi, <tab> on tabulaattorimerkki ja VERKKOTUNNUS on palvelimen oma verkkotunnus.

Tallenna tiedosto, sulje editori ja valmistele tiedosto käyttöön komennolla

sudo postmap /etc/postfix/generic

Avaa editoriin /etc/aliases tiedosto

sudo vi /etc/aliases

Muokkaa tiedostoon rivi

root:<tab>OMAOSOITE

missä OMAOSOITE on voimassa oleva sähköpostiosoitteesi.

Valmistele tiedosto komennolla

sudo newaliases

Tarkista Postfix-asetustiedoston formaatti

sudo postfix check

Jos komento ei raportoi virheitä, niin käynnistä postfix komennolla

sudo systemctl start postfix

Lähetä testiviesti

sendmail omaosoite

missä omaosoite on oma sähköpostiosoitteesi. Syötä viestin sisällöksi

Subject: testiviesti

testi
.

Pistemerkki lopussa katkaisee viestin kirjoituksen ja lähettää viestin matkaan.

Jos kaikki toimii oikein, niin aseta postfix käynnistymään automaattisesti

sudo systemctl enable postfix

Tämä kirjoitus on viides osa seikkailua Rocky Linux 9:n parissa. Lue edellinen osa tästä blogista!

maanantai 30. syyskuuta 2024

Rocky Linux 9 asennus osa 4: PHP ja PHP-FPM

PHP on ohjelmointikieli, jota tarvitaan useiden nettisovellusten kuten WordPressin tai Drupalin taustalla. PHP-FPM antaa mahdollisuuden suorittaa rinnakkain useita eri PHP:n versioita, joka helpottaa palvelimen päivitystä.

Lisää Remirepo Rocky Linux 9:n paketinhallintaan komennolla

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y

Katso tarjolla olevat PHP-versiot

sudo dnf module list php

Asenna PHP ja yleisimmin tarvittavat moduulit

sudo yum install php85-php-cli php85-php-fpm php85-php-gd php85-php-mbstring \ php85-php-mysqlnd php85-php-opcache php85-php-pdo php85-php-pecl-apcu \ php85-php-pecl-igbinary php85-php-pecl-imagick-im7 php85-php-pecl-zip \ php85-php-soap php85-php-xml

Avaa tekstieditoriin /etc/opt/remi/php85/php-fpm.d/www.conf tiedosto ja korvaa sisältö alla olevalla koodilla

[www]
user = apache
group = apache

listen = /var/opt/remi/php85/run/php-fpm/www.sock
listen.acl_users = apache
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

php_value[session.save_handler] = files
php_value[session.save_path] = /var/opt/remi/php85/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/opt/remi/php85/lib/php/wsdlcache

Lisää /etc/httpd/vhosts.d-hakemistoon Apache asetustiedosto, joka määrittelee PHP-sivuston. Valmis vhosts.d-tiedosto sisältää esimerkiksi koodin:

<Directory "/var/www/omasaitti">
    AllowOverride All
    Options FollowSymLinks
    Require all granted
    AllowMethods GET POST PUT DELETE OPTIONS
</Directory>

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName omasaitti.fi
    Include conf/vhost.conf

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =omasaitti.fi
    RewriteRule ^ https://omasaitti.fi%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/omasaitti
    ServerName omasaitti.fi
    Include conf/vhost.conf

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/omasaitti.fi/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/omasaitti.fi/privkey.pem

    DirectoryIndex index.php index.html
    <FilesMatch "\.(php|phar)$">
        SetHandler "proxy:unix:/var/opt/remi/php85/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

missä /var/www/omasaitti on hakemisto, jossa sivusto sijaitsee ja omasaitti.fi on sivustosi verkkotunnus.

Lisää itsesi Apache-ryhmään komennolla

sudo usermod -a -G apache teppo

missä teppo on käyttäjänumesi.

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

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

Asenna sivusto siirtämällä tiedostot /var/www-hakemiston alle. Jos PHP-koodi muokkaa tai tiedostoja asennushakemiston alla, niin anna PHP-FPM:lle kirjoitusoikeudet hakemistoon komennoilla

chmod -R g+w /var/www/omasaitti/tmp find /var/www/omasaitti/tmp -type d -exec setfacl -dm g::rwx,o::- {} \;

missä /var/www/omasaitti/tmp on kirjoitettava hakemisto.

Käynnistä PHP-FPM nyt ja aseta se käynnistymään jatkossa laitteen käynnistyksen yhteydessä

sudo systemctl start php85-php-fpm sudo systemctl enable php85-php-fpm

Tämä kirjoitus on neljäs osa seikkailua Rocky Linux 9:n parissa. Lue edellinen osa tästä blogista.

Päivitetty 18.6.2025: PHP versio 8.4

Päivitetty 12.4.2026: PHP versio 8.5

torstai 26. syyskuuta 2024

Rocky Linux 9 asennus osa 3: Let's Encrypt

Let's Encrypt luo SSL-sertifikaatteja, joita tarvitaan turvallisten ja salattujen yhteyksien toteuttamiseen. Jos palvelimella on yksikin nettisivu, johon kirjaudutaan salasanalla ja käyttäjätunnuksella, niin Let's Encrypt tai muu vastaava systeemi on välttämätön!

Asenna Let's Encrypt Rocky Linux 9 -virtuaalikoneeseen komennolla

sudo yum install certbot python3-certbot-apache

Luo työhakemisto Let's Encryptille

mkdir /var/www/certbot

Luo tiedosto /etc/httpd/conf.d/certbot.conf ja lisää sinne teksti:

Alias /.well-known "/var/www/certbot"
<Directory "/var/www/certbot">
    AllowOverride None
    Options FollowSymLinks
    Require all granted
</Directory>

Tarkista tiedoston formaatti

sudo apachectl configtest

ja käynnistä Apache uudelleen

sudo systemctl restart httpd

Luo SSL-sertifikaatti Apacheen määritellylle sivustolle komennolla

sudo certbot --apache certonly

Kun sertifikaatti on luotu, niin päivitä Apachen vhosts.d-tiedosto vastaavasti. Jos tiedosto ennen päivitystä sisälsi esimerkiksi koodin

<Directory "/var/www/omaverkkotunnus">
    AllowOverride All
    Options FollowSymLinks
    Require all granted
</Directory>

<VirtualHost *:80>
    DocumentRoot /var/www/omaverkkotunnus
    ServerName omaverkkotunnus.fi
    ServerAlias www.omaverkkotunnus.fi
    Include conf/vhost.conf
</VirtualHost>

niin SSL-sertifikaatin asennuksen jälkeen tiedostoon tulee koodi

<Directory "/var/www/omaverkkotunnus">
    AllowOverride All
    Options FollowSymLinks
    Require all granted
</Directory>

<VirtualHost *:80>
    # Ohjaa DocumentRoot tyhjään hakemistoon
    DocumentRoot /var/www/html
    ServerName omaverkkotunnus.fi
    ServerAlias www.omaverkkotunnus.fi
    Include conf/vhost.conf
    
    # Käännä kaikki liikenne HTTPS-porttiin
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =omaverkkotunnus.fi
    RewriteRule ^ https://omaverkkotunnus.fi%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:443>
    # Lataa sivuston tiedostot oikeasta hakemistosta
    DocumentRoot /var/www/omaverkkotunnus
    ServerName omaverkkotunnus.fi
    ServerAlias www.omaverkkotunnus.fi
    Include conf/vhost.conf

    # Lataa SSL-sertifikaatti
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/omaverkkotunnus.fi/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/omaverkkotunnus.fi/privkey.pem
</VirtualHost>

Tarkista tiedostojen formaatti

sudo apachectl configtest

Käynnistä Apache uudelleen komennolla

sudo systemctl restart httpd

Varmista, että HTTP-liikenne ohjautuu HTTPS-porttiin avaamalla nettiselain ja käymällä sivustosssa.

Certbotin asennus lisää sen automaattisesti systemctl:ään suoritettavaksi 12 tunnin välein. Henkilökohtaisesti pidän kuitenkin crontabia parempana ratkaisuna, koska ajastetut ohjelmat näkee samassa listassa ja on helpompi ajastaa työt eri aikoihin. Jos palvelimelle on asennettu sähköpostiohjelma, niin certbotin virheilmoitukset saadaan myös kätevästi tietoon.

Ota certbot pois systemctl:stä

sudo systemctl stop certbot-renew.timer sudo systemctl disable certbot-renew.timer

Avaa crontab-tiedosto muokattavaksi komennolla

sudo crontab -e

Lisää tiedostoon rivi

M H * * D /usr/bin/certbot renew -q

missä M on satunnainen minuutti 0-59, H on satunnainen tunti 0-23 ja D on satunnainen viikonpäivä 0-6 (0 sunnuntai, 1 maanantai jne). Certbot käynnistyy annettuna aikana ja päivittää kaikki vanhentumassa olevat sertifikaatit automaattisesti uusiin. Let's Encrypt sertifikaatit ovat voimassa 3 kuukautta kerrallaan.

Tämä on kolmas osa Rocky Linux 9 seikkailusta. Lue edellinen osa tästä blogista!

Rocky Linux 9 asennus osa 2: MariaDB

MariaDB on tietokanta, joka auttaa tallentamaan ja jäsentämään tietoa. MariaDB:tä käytetään esimerkiksi julkaisujärjestelmien kuten WordPressin taustalla.

Asenna MariaDB-pakettivalikoima Rocky Linux 9:iin komennoilla

curl -LO https://r.mariadb.com/downloads/mariadb_repo_setup chmod +x mariadb_repo_setup sudo ./mariadb_repo_setup --mariadb-server-version=11.6 --skip-maxscale

missä 11.6 on haluamasi MariaDB:n versio.

Asenna MariaDB-asiakas ja -palvelin pakettikirjastosta komennolla

sudo yum install MariaDB-server MariaDB-client mysql-selinux

Avaa /etc/my.cnf.d/server.cnf tiedosto editoriin ja lisää [mysql] osioon rivi:

bind-address=127.0.0.1

Rivi estää yhteydenotot MariaDB-tietokantoihin muilta laitteilta ja parantaa siten tietoturvaa.

Käynnistä MariaDB komennolla

sudo systemctl start mariadb

Alusta MariaDB tuotantokäyttöön komennolla

sudo mariadb-secure-installation

Kirjaudu roottina tietokantaan komennolla

sudo mariadb

Luo ensimmäinen tietokanta ja käyttäjä esimerkiksi SQL-lauseilla

CREATE DATABASE korppi DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'www'@'localhost' IDENTIFIED BY 'juustokeitto3M';
GRANT ALL ON korppi.* TO 'www'@'localhost' WITH GRANT OPTION;

missä korppi on tietokannan nimi (×2), www on tietokantakäyttäjän nimi (×2) ja juustokeitto3M on tietokantakäyttäjän salasana.

Tietokanta on nyt valmis käyttöön ja voit kirjautua siihen tietokantakäyttäjänä komennolla

mariadb -uwww -p'juustokeitto3M' korppi

Aseta loppuksi MariaDB käynnistymään automaattisesti laitteen käynnistyessä

sudo systemctl enable mariadb

Tämä teksti jatkaa seikkailua Rocky Linux 9:n parissa. Lue edellinen osa tästä blogista!

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

keskiviikko 3. heinäkuuta 2024

Sanalista

Kotimaisten kielten keskus julkaisee suomen kielen sanalistan osoitteessa www.kotus.fi. Sama löytyy Githubista siistityssä muodossa. Siistitty lista on kätevä, jos tarvitset esimerkiksi luoda satunnaisia salasanoja tai -lauseita suomalaisille käyttäjillesi!