RaspberryPi (bis Bookworm) als Web-Server (Update)

• Imager:
mit dem Raspberry Pi Imager eine Micro-SD-Karte mit Fat32 konfigurieren
Achtung: das Tool ist toll, aber macht nur das, was es soll, also ggf. erst löschen,
dann installieren 😉 und die Karte darf nicht vorformatiert sein.

1. Start:
- sudo raspi-config
- Einstellungen GUI: sudo startx -> Einstellungen -> RaspberryPi Configuration

Einstellungen:
- Hostname: piXXX
- Passwort ändern: [individuell]
- Boot: CLI
- Schnittstellen: SSH
- Display: overscan (wenn der linke Bild-Rand abgeschnitten ist)
- Reboot: sudo shutdown -r 0
- Ausschalten: sudo shutdown -h 0
- Applikation deinstallieren: z.B. apt-get purge php7-common


2. Login:
- putty starten und verbinden (Host: pi2 / Port: 22 / ConnectionType: SSH)
- User: pi
- Kennwort: [individuell]
- root-Passwort ändern: sudo su -> passwd -> [individuell]
- Root-Rechte aktivieren: sudo bash (ggf. mit "cd /" ins Root-Verzeichnis wechseln)


3. Updates:
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get autoremove -y
sudo apt-get clean


4. Apache Web-Server installieren:
sudo apt-get install apache2 -y

- Dienst stoppen: service apache2 stop
- Dienst starten: service apache2 start
- Dienst neu starten: service apache2 restart
- Startseite: /var/www/html/index.html


5. Installation PHP8.4 (PHP = Personal Home Page, Tool für dynamische Webseiten):
sudo apt-get install php8.4 php8.4-cli php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-xsl php8.4-zip php8.4-bz2 libapache2-mod-php8.4 -y

Info anlegen:
sudo touch /var/www/html/index.php

Info bearbeiten:
sudo nano /var/www/html/index.php

Inhalt:
<?php
phpinfo();
?>

Mit [Strg] + o -> [Enter] -> [Strg] + x die Einträge speichern und den Editor beenden.
URL: http://piXXX/index.php


6. Installation MariaDB (Datenbank für dynamische Webseiten):
sudo apt-get install mariadb-server mariadb-client -y


7. Installation phpMyAdmin:
sudo apt-get install phpmyadmin -y
apache2 mit Leertaste auswählen

- User: phpmyadmin | [individuell]
- Administration: http://piXXX/phpmyadmin />- Pfad zur Webseite: /usr/share/phpmyadmin

Datenbank ohne phpMyAdmin anlegen (nicht empfohlen, sondern via Webmin):
Benutzer anlegen:
sudo mysql
CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'joomla'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

ggf. Datenbank anlegen:
create database joomla;
show databases;

exit


8. Installation Webmin:
manuelle Webmin-Installation:
sudo curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sudo sh setup-repos.sh

Webmin installieren:
sudo apt-get install webmin --install-recommends

URL: https://raspberrypi:10000


9. Joomla installieren:
sudo su
cd /var/www/html
mkdir [user]
cd [user]
mkdir joomla
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 777 /var/www/html

Download (zip-Datei)
a) nacheinander die Installationsordner anlegen und Besitzer und Berechtigung ändern:
b) per FTP-Programm (FileZilla) den Inhalt der Joomla ZIP-Datei in den erstellten Ordner kopieren.
c) Installation im Browser starten: http://piXXX/[user]/joomla


10. Joomla mit der zuvor erstellten Datenbank verbinden:
- Datenbanktyp: MySQL
- Servername: localhost
- Benutzername: joomla
- Kennwort: [individuell]
- Datenbankname: joomla
- Sprache: utf8mb4_general_ci
- Tabellenpräfix: jos_
- alte Datenbanktabellen: löschen
- beenden Sie die Installation, indem Sie das Installationsverzeichnis löschen (ggf. mit FileZilla)
oder in der Console:
sudo rm -r /var/www/html/[user]/joomla/Installation


11. Joomla Einstellungen:
Upload Limit erhöhen:
sudo nano /etc/php/8.4/apache2/php.ini

Einträge ändern:
memory_limit = 128M
upload_max_filesize = 100M
post_max_size = 128M

Mit [Strg] + o -> [Enter] -> [Strg] + x die Einträge speichern und den Editor beenden.
und Apache neu starten.


12. JCE - Editor:
die Installation erfolgt über Extensions -> Manage -> Install from Web, anschließend muss der Editor noch unter System -> Global Configuration -> Default Editor aktiviert werden.
Der JCE-Editor ist zum Erstellen der Beiträge viel komfortabler als der Standard-Editor, um aber "exotische" Dateien hochzuladen, müssen Diese erst freigegeben werden. Die Dateitypen ergänzen Sie unter Komponenten -> JCE Editor -> Editor Profiles -> Default (Edit) -> Plugin Parameters -> File Browser -> Permitted File Extensions -> [Edit-Symbol],
die maximale Upload Größe ändern Sie unter Komponenten -> JCE Editor -> Editor Profiles -> Default (Edit) -> Editor Parameters -> Filesystem -> 150000 kB,
die Schaltflächen lassen sich per Drag & Drop unter Komponenten -> JCE Editor -> Editor Profiles -> Default (Edit) -> Features & Layout anpassen.
Außerdem müssen Sie hier ggf. noch unter Editor Parameters und Plugin Parameters die Upload File Size erhöhen, die Maximalwerte lassen sich in PHP konfigurieren.


13. Akeeba Backup:
diese Erweiterung ist ein Muss für die Wiederherstellung der Webseiten von Joomla, hiermit wird neben dem Inhalt auch die nötige mySQL Datenbank gesichert.
Die Sicherung ist einfach, indem Sie unter "Komponenten" -> "Akeeba Backup" -> "Backup now" einen Speicherort auswählen und die Sicherung starten.
Sie erhalten dann eine komprimierte ".jpa"-Datei, die Sie unter "Manage Backups" oder mit einem FTP-Programm auf Ihrem PC sichern und auf der RaspberryPi löschen können.

Komplizierter gestaltet sich ggf. das Backup wieder einzuspielen. Hierfür müssen Sie nach einem Totalausfall erst Raspian, Apache, PHP, mySQL und phpMyAdmin installieren, danach legen Sie per FTP-Programm im Verzeichnis /var/www/html die entsprechenden Unterordner z.B. [user/joomla] an.
Dem untersten Ordner (in dem Fall "joomla") geben Sie vorübergehend die Dateiberechtigung "777" für untergeordnete Dateien und Verzeichnisse, anschließend kopieren Sie per FTP die ".jpa-Datei" und "kickstart.php" in dieses Verzeichnis.
Im Browser öffnen Sie die "http://raspberrypi/[user]/joomla/kickstart.php", wählen die ".jpa-Datei" aus und verknüpfen das Restore mit der zuvor installierten mySQL-Datenbank.


14. Formulare:
Joomla bietet intern nur ein einfaches Kontakt-Formular an, das sich ohne css-Kenntnisse nicht ändern oder umgestalten lässt.
Zunächst konfigurieren und prüfen Sie die E-Mail-Funktion von Joomla über Ihren E-Mail-Provider in:
System -> Konfiguration -> Server.

Zum Einrichten klicken Sie auf Komponenten -> Kontakte -> Kontakte -> Neu,
anschließend binden Sie den Kontakt in Ihr Menü ein, ferner sollten Sie noch ReCaptcha aktivieren:
System -> Konfiguration -> Komponente -> Kontakte -> Formular


15. Web-Zugriff kontrollieren und beschränken:
Apache protokolliert den Web-Zugriff in der Datei:
/var/log/apache2/access.log
Finden Hacker-Angriffe statt, bläht sich diese Datei innerhalb kurzer Zeit ziemlich auf, ferner erkennt man solche Angriffe im Online-Monitor der Fritz-Box.
Bei einem Hacker-Angriff trennen Sie erst mal Ihren Apache-Server vom Internet mit einer der Optionen:
- Fritz Box: Internet -> Freigaben -> Portfreigaben -> Bearbeiten -> Bearbeiten -> Freigabe aktivieren
- stoppen Sie den Apache Server via Putty: "sudo service apache2 stop"
- via Webmin: Server -> Apache Webserver -> Apache beenden

Als nächstes installieren Sie in Webmin unter "Nicht benutzte Module" das Modul "Fail2Ban Intrusionsdetektor".
Dieses Modul können Sie nach der Installation mit dem gleichnamigen Namen unter "Netzwerk" konfigurieren.
Hier aktivieren Sie, falls noch inaktiviert, "Filter Action Gefängnisse" die Optionen:
- ssh: sshd / Treffer: 3 / Verzögerung: 600 / Time: 86400
- apache: apache-auth / Treffer: 3 / Verzögerung: 600 / Time: 86400
- apache-overflows apache-overflows / Treffer: 3 / Verzögerung: 600 / Time: 86400

(In Putty verwenden Sie bitte den Befehl "sudo apt-get -y -f install fail2ban".)

Auch Joomla protokolliert fehlerhafte Login-Versuch ins Backend in der Datei
var/html/[user]/joomla/administrator/logs/error.php

Das Joomla Plugin "fail2ban" kopiert die Fehlereinträge richtig formatiert in die Datei
/var/log/apache2/error.log
und lässt sich dadurch per Fail2Ban überwachen.
Das Plugin muss nur installiert und aktiviert werden, Einstellungen sind nicht nötig.

Die jüngsten Angriffe erfolgen auf die Datenbank via phpMyAdmin, daher sollten Sie die Zugriffe auf lokale PCs beschränken:

sudo nano /etc/phpmyadmin/apache.conf

Einträge ergänzen / ändern:

<Directory /usr/share/phpmyadmin>
...
order deny,allow
deny from all
allow from 127.0.0.1
allow from 192.168.0.0/16
...
</Directory>

Mit [Strg] + o -> [Enter] -> [Strg] + x die Einträge speichern und den Editor beenden.

Änderungen aktivieren:
sudo service apache2 reload


16. Sperren von kompletten Bereichen, wie China:
erstellen Sie eine Datei "/var/www/html/.htaccess", die IP-Adress-Bereiche sperrt:
Datei anlegen:
sudo touch /var/www/html/.htaccess
sudo nano /var/www/html/.htaccess

Einträge ergänzen / ändern:

<Files *>
order allow,deny
allow from all
</Files>
# Beispiel Einzel-Adresse: deny from 100.200.100.50
deny from 118.0.0.0/8
deny from 119.0.0.0/8
deny from 218.0.0.0/8

Mit [Strg] + o -> [Enter] -> [Strg] + x die Einträge speichern und den Editor beenden.


17. ssl (https) aktivieren (optional, aktuell nicht empfohlen):
ssl aktivieren:
sudo a2enmod ssl

Apache neu starten:
sudo service apache2 restart

neuen Ordner erstellen:
sudo mkdir /etc/apache2/ssl

Zertifikat für 10 Jahre erstellen und im neuen Ordner speichern:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

sudo nano /etc/apache2/sites-available/default-ssl.conf

unter "SSLEngine on" die Zeilen einfügen und die vorhandenen auskommentieren:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

unter "ServerAdmin" den Eintrag ergänzen:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
</IfModule>

ssl aktivieren:
sudo a2ensite default-ssl.conf

headers aktivieren:
sudo a2enmod headers

Apache neu starten:
sudo service apache2 restart

ssl-Certificate:
Country: DE
Province Name: Bayern
Location Name: Ismaning
Company: mkoeglme
Unit Name: privat
Common Name: raspberrypi
E-Mail: Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


18. Beitrags-Änderungsdatum anzeigen:
Backend -> Beiträge -> Optionen -> Bearbeitungsdatum -> Anzeigen/verbergen