usługi prawne, ochrona danych, bezpieczne systemy informatyczne

Apache

Konfiguration des Webservers am Beispiel v. 2.4 - einschließlich anderer FAMP-Funktionen


A. Welche Pakete sind notwendig
Mit PKG sollen insbesondere folgende installiert werden:
pkg install <paket>
  • apache
  • php-fpm
  • php-xxx

B. Einzelne PHP-module
Welche sind installiert (auch fest einkompiliert)?
Befehl:
php -m
Wir haben folgende genommen (die meisten wegen nextcloud):
[PHP Modules]
apcu
bcmath bz2
Core ctype curl
date dom
exif
fileinfo filter
gd gmp hash
iconv imagick intl json
ldap libxml mbstring
mysqli mysqlnd openssl
pcre PDO pdo_mysql
posix redis Reflection
session SimpleXML SPL standard
xml xmlreader xmlwriter xsl
Zend OPcache zip zlib

[Zend Modules]
Zend OPcache


C. Konfiguration für PHP mit FPM [1]
mod_php soll nicht so sicher und nicht so performant sein. Also versuchen wir, PHP mit FPM (Fast CGI proxy) zu betreiben...

1. PHP-FPM Konfiguration

Konfigurationsdateien:
/usr/local/etc/php-fpm.conf (aber diese ist nicht so interessant...);
dafür diese:
/usr/local/etc/php-fpm.d/www.conf
edit:
listen = /tmp/php-fpm.sock
listen.owner = www
listen.group = www


2. Module in httpd.conf
In der config von apache (/etc/apache2/ unter Linux oder /usr/local/etc/apache24/ unter Freebsd) sollten folgende Module aktiviert werden:
""LoadModule"" mpm_event_module libexec/apache24/mod_mpm_event.so
#""LoadModule"" mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#""LoadModule"" mpm_worker_module libexec/apache24/mod_mpm_worker.so
""LoadModule"" proxy_module libexec/apache24/mod_proxy.so
""LoadModule"" proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
nur mpm_event_module soll aktiviert sein - keine weiteren mpms!


D. Virtual Hosts

Virtuelle Webseiten / Webserver ermöglichen mehrere Dienste auf einer Maschine. Dazu gelten folgende Empfehlungen:
  • in einem sollte die Direktive ServerName genutzt werden - sonst wird das ganze System der virtuellen Hosts nicht sinnvoll funktionieren;
  • separate logs je host laufen so:
       ServerName vhost1
       CustomLog /pfad/zu/logs/vhost1_log combined
       ErrorLog /pfad/zu/logs/vhost1_errorlog



E. phpMyAdmin
Das Tool funktioniert, wenn PHP richtig eingerichtet ist - insbesondere PHP-FPM muss laufen - und die Einstellungen auch sonst korrekt sind.

Mit mySQL 8.0 und PHP 7.4 war die Anmeldung anfangs nicht möglich. Dagegen hat geholfen:
  • mysql -u root -p
  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypwd';
  • exit


F. Zugrifssbeschränkungen
Wenn ein Verzeichnis auf dem Webserver mit einem Passwort geschützt werden soll, kann dies mit Apache eingerichtet werden. Früher setzte ich auf Digest-Authentication, aber diese ist gar nicht so sicher und aktuell muss man eh jede Seite mit SSL ausstatten. Deshalb ist die Basic-Authentication per SSL genauso gut...

1. Notwendige Module
Für die basic-authentication / authorization brauchen wir:
  • Authentication type: mod_auth_basic (auth-type)
  • Authentication provider: mod_authn_file (auth-basic-provider)
  • Authorization: mod_authz_groupfile / mod_authz_user
  • und in jedem Fall auch: mod_authn_core + mod_authz_core

2. Passwörter festlegen und speichern
htpasswd -c /usr/local/pfad/zu/passwordfile username

3. Konfiguration der entsprechenden Verzeichnisse
Am besten unter der Anweisung <Directory> die Konfiguration vornehmen:
    <Directory "/usr/local/hier/nur/mit/anmeldung">
        (Einstellungen wie sonst)
        ...
        AuthType Basic
        AuthName "Restricted Files"
        # (Following line optional)
        AuthBasicProvider file
        AuthUserFile "/usr/local/pfad/zu/passwordfile"
        Require user username
    <Directory>

4. Einige ältere Informationen zum Thema
Bezogen auf PHPmyAdmin:
  • add module "digest" to /etc/apache2/mods-enabled/
  • edit /etc/phpmyadmin/apache.conf:
  • AuthType Digest
    ...


a. benötigte Module
ln -s auth_digest.load in /etc/apache2/mods-enabled/

b. virtual hosts konfigurieren
edit /etc/apache2/sites-enabled/XXXX.conf
        Alias /path-in-browser /path/on/localfilesystem
        <Directory /path/on/localfilesystem>
            Options FollowSymLinks
            DirectoryIndex index.php
            <IfModule mod_authn_file.c>
                AuthType Digest
                AuthName "your_realm"
                AuthUserFile /path/to/filewithdigestpwd
            </IfModule>
            Require valid-user
        </Directory>





G. SSL Zertifikat mit Let's Encrypt
Folgende Anleitung haben wir genutzt:
https://certbot.eff.org/lets-encrypt/freebsd-apache.html
=> mit dem Unterschied, dass wir py37-certbot (statt py36-certbot) installieren mussten;
Aktualisierte Anleitung (falls die oben nicht auffindbar):
=> https://certbot.eff.org/instructions?ws=apache&os=freebsd
(im Juli 2022 war dann auch schon neuere Python-Version: also py38-certbot)

Nachdem das Skript durch war wurden die Zertifikatsdateien eingebunden in /usr/local/etc/apache24/httpd.conf:
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/domain.tld/privkey.pem"

Und zwar in jedem Virtual Host.

Für die automatische Aktualisierung mit certbot in folgender Umgebung: brauchen wir:
  • script, mit dem Webserver ausgeschaltet wird und certbot-renew erfolgt
Also konkret:
#!/bin/sh
LOG_FILE=/path/where/logfile/is/letsencrypt_log ;
date >> $LOG_FILE ;
echo "stop apache" >> $LOG_FILE ;
service apache24 stop >> $LOG_FILE ;
echo "renew certificates" >> $LOG_FILE ;
certbot renew >> $LOG_FILE ;
echo "start apache again" >> $LOG_FILE ;
service apache24 start >> $LOG_FILE ;
echo "if no error to see - operation succesful" >> $LOG_FILE ;
  • dieses script in crontab packen
crontab -e
44 4 * * 6 /path/where/script/is/letsencrypt_renew.sh => jeden Samstag um 4:44 Uhr prüfen!

H. WebDav in Apache einrichten
modules to load in httpd.conf

LoadModule dav_module mod_dav.so
LoadModule dav_fs_module mod_dav_fs.so


folder and permissions

mkdir /my_path_for_webserver_data/webdav
sudo chown _www:_www /my_path_for_webserver_data/webdav


host config in the httpd

        Alias /youralias "/path/to/webdav/foldername"
        <Directory "/path/to/webdav/foldername">
                Dav On
                Order Allow,Deny
                Allow from all
                AuthType Digest
                AuthName [realm]
                AuthUserFile "/path/to/file/file.name"
                AuthDigestProvider file
                require user [username]
        </Directory>

create passwords for login
htdigest "/path/to/file/file.name" [realm] [username]
if no password file existent:
htdigest -c "/path/to/file/file.name" [realm] [username]



[1] Gute Quelle zum Thema Apache / FreeBSD / PHP-FPM: https://medium.com/@clpo13/apache-and-php-fpm-on-freebsd-a41e832ae8cc.
[2] Falls eine Abkürzung gewünscht ist und gar nichts verstanden werden muss - es geht auch recht schnell mit Caddy 1.0 mit diesem Skript: https://www.ixsystems.com/community/resources/scripted-installation-of-nextcloud-19-in-iocage-jail.90/
Auf dieser Seite sind keine Kommentare vorhanden
Valid XHTML  |  Valid CSS  |  Powered by WikkaWiki