class: center, middle # Linux Web/Mail/Datenbank-Server ### Installation, Konfiguration, Absicherung #### Hauke Goos-Habermann --- ### Über mich / Wie kam ich zu diesem Vortrag? - Entwickler des Softwareverteilungssystems m23 - Dienstleistungen zu Linux und Freier Software - Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen, Support und Beratung - quasi alles, was mit Linux zu tun hat - Ich installiere, konfiguriere und warte Webserver: Als Dienstleistung (
https://goos-habermann.de
) und ehrenamtlich (
https://kieler-linuxtage.de
). - Umstellung von mehreren Servern auf Debian 10 - Sichtung der vorhandenen Konfiguration und Daten der alten Server - Grundinstallation von Debian 10 - Weitestgehende Automation nach nachfolgenden Konfiguration - Dokumentation als Teil der Skripte - Wiederherstellung von Daten(banken) --- ### Worum geht es? ![img20r](gfx/lamp.png) - Installation und Konfiguration - **L**inux - **A**pache - **M**ariaDB - **P**HP - Mailserver: Dovecot (imap/pop3) und Postfix (SMTP) - Dodger-Tools: Skriptsammlung - Sicherheit - SSH-Server absichern - Intrusion-Prevention-Systeme: SSHGuard und fail2ban - SSL-Zertifikate: Let's Encrypt - Automatisierte Systemaktualisierungen: dt-cron-apt - Zugriffsrechte: Mailkonten und WWW - Beispielseite bzw. Anwendung - Informationen über PHP und Module: phpinfo.php - Webbasierte Datenbankadministration: phpMyAdmin --- ### Zum Ablauf - Ein paar Folien - Demonstration auf einer Debian-10-VM - Viel Automatisierung - Erklärung z.B. an dahinterliegenden BASH-Skripten - Fragen in *Öffentlicher Chat* (links oben) schreiben --- ### Los geht's Auf VM als *root* einloggen: ```bash ssh -o ServerAliveInterval=15 root@kielux.seppel42.de ``` **Alles**, was nun kommt, wird auf der VM ausgeführt Skriptbibliothek herunterladen und laden: ```bash wget https://goos-habermann.de/commonInstall.inc -O /tmp/commonInstall.inc . /tmp/commonInstall.inc ``` ![img20r](gfx/info.png) Beim Herstellen einer SSH-Verbindung mit einem *noch unbekannten Server* wird der SSH-Client fragen, ob man dem Zielsystem und dessen Hash-Summe vertrauen möchte. Diese werden auf dem **Zielsystem** folgendermaßen berechnet: ```bash ls /etc/ssh/*.pub | xargs -n1 ssh-keygen -lf ``` Um sicherzugehen sollten die Hashes vom Serverbetreiber auf einem *sicheren Kanal* an den Nutzer gesendet werden. --- ### Ein paar Parameter zum Anfang Webadresse (FQDN), unter dem die VM erreichbar ist: ```bash export DT_INST_hostname='kielux.seppel42.de' ``` Liste mit Domains, für die der Mailserver zuständig ist (mehrere mit Komma und Leerzeichen trennen): ```bash export DT_INST_domain='kielux.seppel42.de' ``` Admin-eMail-Adresse und Zeitpunkt (hier 4 Uhr morgens) für automatische Updates festlegen: ```bash CI_setAdminMailAndDtCronAptRuntime "admin@kielux.de" 4 ``` Dodger-Tools installieren: ```bash CI_inst_dodgerTools ``` .cls[.copyright[FQDN:
https://de.wikipedia.org/wiki/Domain_(Internet)#Fully_Qualified_Domain_Name_(FQDN)
]] --- ### Dodger-Tools ![img33l](gfx/Dodger-Tools-logo.png) Über die Jahre stetig erweiterte Sammlung von BASH-Werkzeugen und Debian-Paketen für Linux/Debian-Nutzer und -Administratoren Enthalten sind unter anderem: - *"Intelligentes"* Editieren von Dateien - Automatisiertes Aktualisieren von Servern - Werkzeuge für das Erstellen von Backups über das Netzwerk - Monitoring - Erstellung von Debian-Paketen und -Paketquellen - Setzen von IP-Adressen - Generierung von Vorschaubildern - etc. .cls[Mehr Informationen:
http://dodger-tools.sf.net
] --- ### Installation und Konfiguration Grundlegende Server-Pakete (z.B. dt-cron-apt, rkhunter, fail2ban) installieren: ```bash CI_installBasicServerDebs ``` SSH-Server absichern: SSHGuard + Zugriff nur über SSH-Schlüssel: ```bash CI_secureSSHd ``` Dovecot (imap/pop3) und Postfix (SMTP) installieren: ```bash CI_mailServerInstall ``` Apache und PHP installieren: ```bash CI_installApachePHP ``` --- ### Webseite testen Im Browser aufrufen (wichtig noch kein HTTP**S**): http://kielux.seppel42.de/ ![img80](gfx/Apache2_Debian_Default_Page_It_works.png) --- ### MariaDB installieren MariaDB-Server installieren und starten: ```bash CI_installMariaDB ``` Kontrolle mit: ```bash mariadb ``` ![img80](gfx/mariadb-client.png) --- ### PHP-Infoseite Datei für die PHP-Infoseite anlegen: ```bash echo '' > /var/www/html/info.php ``` Im Browser abrufen: http://kielux.seppel42.de/info.php ![img80](gfx/phpinfo.png) --- ### PHP-Infoseite löschen ![img20r](gfx/achtung.png) Aus Sicherheitsgründen sollte die Seite wieder entfernt werden: ```bash rm /var/www/html/info.php ``` --- ### phpMyAdmin phpMyAdmin herunterladen und entpacken: ```bash cd /var/www wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip unzip phpMyAdmin-5.0.2-all-languages.zip rm phpMyAdmin-5.0.2-all-languages.zip mv phpMyAdmin-5.0.2-all-languages phpMyAdmin ``` Zugriffsrechte für phpMyAdmin auf Apache-Benutzer und -Gruppe setzen: ```bash chown www-data:www-data -R phpMyAdmin/ ``` --- ### phpMyAdmin: Apache-Seitenkonfiguration Konfigurationsdatei schreiben: ```bash echo '
DocumentRoot "/var/www/phpMyAdmin" ServerName kielux.seppel42.de ServerSignature Off
AllowOverride All
' > /etc/apache2/sites-available/phpmyadmin.conf ``` Standardseite deaktivieren und phpMyAdmin-Seite aktivieren: ```bash a2ensite phpmyadmin a2dissite 000-default systemctl reload apache2 ``` --- ### phpMyAdmin: Seite aufrufen Im Browser abrufen: http://kielux.seppel42.de/ ![img33l](gfx/phpMyAdmin.png) --- ### Let's Encrypt Einrichten und SSL-Zertifikat holen: ```bash CI_installLetsEncrypt ``` ![img80](gfx/letsencrypt.png) Hier die Option *2: Redirect - Make all requests redirect to secure HTTPS access.* wählen. Im Browser abrufen: http://kielux.seppel42.de/ Leitet nun automatisch weiter auf: https://kielux.seppel42.de/ --- ### Zugriffsschutz für WWW-Verzeichnisse Neuen Benutzer *db* in **neuer** Nutzerdatenbank anlegen: ```bash htpasswd -c /etc/phpmyadmin.htpasswd db ``` Zusätzlichen Benutzer *db2* in **vorhandener** Nutzerdatenbank hinzufügen: ![img20r](gfx/info.png) ```bash htpasswd /etc/phpmyadmin.htpasswd db2 ``` Benutzer *db* aus Nutzerdatenbank entfernen: ```bash htpasswd -D /etc/phpmyadmin.htpasswd db ``` Zugriff auf */var/www/phpMyAdmin* schützen: ```bash echo 'AuthUserFile /etc/phpmyadmin.htpasswd AuthName GeschlosseneGesellschaft AuthType Basic
require valid-user
' > /var/www/phpMyAdmin/.htaccess ``` --- ### Zugriffsschutz testen Im Browser abrufen: http://kielux.seppel42.de/ ![img80](gfx/htaccess.png) --- ### MariaDB-Administrator anlegen MariaDB-Client starten: ```bash mariadb ``` Neuen Benutzer *admin* mit allen Rechten und Paßwort *ganzGeheimesPassw0rt* anlegen: ```sql CREATE USER 'admin'@'localhost' IDENTIFIED BY 'ganzGeheimesPassw0rt'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; QUIT; ``` --- ### phpMyAdmin: Konfiguration MariaDB-Server-Zugriffsinformationen in Konfigurationsdatei hinterlegen: ```bash echo ' /var/www/phpMyAdmin/config.inc.php ``` --- ### phpMyAdmin: Konfiguration testen Im Browser abrufen: http://kielux.seppel42.de/ ![img80](gfx/phpMyAdmin2.png) --- ### Mailserver einrichten und Konten anlegen Selbstsigniertes Dovecot-SSL-Zertifikat gegen Let's Encrypt Zertifikat austauschen: ```bash CI_replaceDovecotSSLKeysWithLetsEncrypt "/etc/letsencrypt/live/$DT_INST_hostname" ``` Zwei Mailkonten für die Nutzer *tux* und *tux2* einrichten: ```bash adduser --shell /bin/false tux; adduser --shell /bin/false tux2 ``` ![img20r](gfx/achtung.png) **Nach jedem Anlegen** eines neuen Mailkontos muß die Datenbank für postfix aktualisiert werden, da ansonsten die Mails **nicht zugestellt** werden: ```bash newaliases systemctl restart postfix ``` Mailkonto *tux* löschen: ```bash deluser --remove-home tux ``` --- ### Mailprogramm einrichten Die Mailkonten werden im Mailprogramm (hier beispielhaft in *Claws Mail*) eingerichtet: ![img50](gfx/claws-mail2.png) ![img50](gfx/claws-mail3.png) --- class: center, middle # Danke für die Aufmerksamkeit ### Fragen in *Öffentlicher Chat* (links oben) schreiben ### Informationen: https://goos-habermann.de