Apache2 Kit: Unterschied zwischen den Versionen
| (17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | = | + | ==Vorab== |
| + | *Klont das Template als Webserver laut Plan | ||
| + | *Legt 4 neue A-Records, server, docker, gelb und blau (Ihr braucht keine PTR-Records) | ||
| + | *Alles sollen auf die IP des Wenservers zeigen | ||
| + | *Spielt auf dem Webserver das ca.crt ein. | ||
== Vorbereitung == | == Vorbereitung == | ||
| Zeile 15: | Zeile 19: | ||
*systemctl reload apache2 | *systemctl reload apache2 | ||
| + | ==Zertifikate vorbereiten== | ||
==Zertifikate vorbereiten== | ==Zertifikate vorbereiten== | ||
| Zeile 20: | Zeile 25: | ||
*mkdir -p /etc/apache2/csr | *mkdir -p /etc/apache2/csr | ||
*mkdir -p /etc/apache2/ssl | *mkdir -p /etc/apache2/ssl | ||
| + | *export DOM="it113.int" | ||
| + | |||
| + | '''CSR und Key für server.it113.int''' | ||
| + | *export HOSTNAME="server" | ||
| + | *openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM" | ||
| + | |||
| + | '''CSR und Key für docker.it113.int''' | ||
| + | *export HOSTNAME="docker" | ||
| + | *openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM" | ||
| − | '''CSR und Key für | + | '''CSR und Key für gelb.it113.int''' |
| − | *openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/ | + | *export HOSTNAME="gelb" |
| + | *openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM" | ||
| − | '''CSR und Key für | + | '''CSR und Key für blau.it113.int''' |
| − | *openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/ | + | *export HOSTNAME="blau" |
| + | *openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM" | ||
| − | |||
| − | |||
| − | |||
| − | |||
'''Hinweis''' | '''Hinweis''' | ||
*Die Dateien *.key und *.crt werden nach der Signierung nach /etc/apache2/ssl/ verschoben | *Die Dateien *.key und *.crt werden nach der Signierung nach /etc/apache2/ssl/ verschoben | ||
| + | |||
| + | == Testinhalte bereitstellen == | ||
| + | |||
| + | '''Hilfsskript herunterladen''' | ||
| + | *cd /root | ||
| + | *wget https://xinux.de/downloads/html/webgen.sh | ||
| + | *chmod +x webgen.sh | ||
| + | |||
| + | '''Verzeichnisse erstellen''' | ||
| + | *mkdir -p /var/www/{server,docker,gelb,blau} | ||
| + | |||
| + | '''Inhalte generieren und ablegen''' | ||
| + | *bash webgen.sh server > /var/www/server/index.html | ||
| + | *bash webgen.sh docker > /var/www/docker/index.html | ||
| + | *bash webgen.sh gelb > /var/www/gelb/index.html | ||
| + | *bash webgen.sh blau > /var/www/blau/index.html | ||
== Virtuelle Hosts mit HTTPS == | == Virtuelle Hosts mit HTTPS == | ||
'''Standardkonfiguration für HTTPS''' | '''Standardkonfiguration für HTTPS''' | ||
| − | Erstelle Datei: | + | Erstelle Datei: '''/etc/apache2/sites-available/server.conf''' |
<pre> | <pre> | ||
| Zeile 47: | Zeile 75: | ||
SSLEngine on | SSLEngine on | ||
| − | SSLCertificateFile /etc/apache2/ssl/server.crt | + | SSLCertificateFile /etc/apache2/ssl/server.it1XX.int.crt |
| − | SSLCertificateKeyFile /etc/apache2/ssl/server.key | + | SSLCertificateKeyFile /etc/apache2/ssl/server.it1XX.int.key |
<Directory /var/www/server> | <Directory /var/www/server> | ||
| Zeile 78: | Zeile 106: | ||
== HTTP auf HTTPS umleiten == | == HTTP auf HTTPS umleiten == | ||
| − | Erstelle Datei: | + | Erstelle Datei: '''/etc/apache2/sites-available/redirect.conf''' |
<pre> | <pre> | ||
| Zeile 104: | Zeile 132: | ||
<pre> | <pre> | ||
| − | <Directory /var/www/ | + | <Directory /var/www/verwaltung> |
| − | Require ip 10. | + | Require ip 10.88.1XX.0/24 |
</Directory> | </Directory> | ||
</pre> | </pre> | ||
| Zeile 114: | Zeile 142: | ||
*tail -f /var/log/apache2/server_error.log | *tail -f /var/log/apache2/server_error.log | ||
*journalctl -fu apache2 | *journalctl -fu apache2 | ||
| + | |||
| + | == Kontrolle & Status == | ||
| + | |||
| + | *apachectl configtest | ||
| + | *systemctl restart apache2 | ||
| + | *ss -lntp | grep apache2 | ||
| + | *apachectl status (mod_status aktivieren falls gewünscht) | ||
| + | |||
| + | == .htaccess in /var/www/gelb aktivieren == | ||
| + | |||
| + | '''In der Konfiguration von gelb.it1XX.int sicherstellen:''' | ||
| + | |||
| + | <pre> | ||
| + | <Directory /var/www/gelb> | ||
| + | Options Indexes FollowSymLinks | ||
| + | AllowOverride All | ||
| + | Require all granted | ||
| + | </Directory> | ||
| + | </pre> | ||
| + | |||
| + | '''Datei .htaccess anlegen''' | ||
| + | |||
| + | *echo "Hallo nur mit Authentifizierung" > /var/www/gelb/index.html | ||
| + | |||
| + | Erstelle Datei */var/www/gelb/.htaccess* mit folgendem Inhalt: | ||
| + | |||
| + | <pre> | ||
| + | AuthType Basic | ||
| + | AuthName "Geschützter Bereich" | ||
| + | AuthUserFile /etc/apache2/.htpasswd | ||
| + | Require valid-user | ||
| + | </pre> | ||
| + | |||
| + | == Benutzer für Authentifizierung anlegen == | ||
| + | |||
| + | '''Erstelle Passwortdatei mit Benutzer admin''' | ||
| + | |||
| + | *htpasswd -c /etc/apache2/.htpasswd admin | ||
| + | |||
| + | (Beim Nachfragen Passwort vergeben, z. B. ''geheim'') | ||
| + | |||
| + | == Apache neu laden == | ||
| + | |||
| + | *systemctl reload apache2 | ||
| + | |||
| + | '''Test''': | ||
| + | Rufe gelb.it1XX.int im Browser auf – du solltest zur Anmeldung aufgefordert werden. | ||
| + | |||
| + | '''Hinweis''': | ||
| + | Die Datei `.htpasswd` kann für mehrere Seiten verwendet werden – oder jede Seite bekommt eine eigene. | ||
== Reverse Proxy Beispiel == | == Reverse Proxy Beispiel == | ||
| Zeile 122: | Zeile 200: | ||
<VirtualHost *:443> | <VirtualHost *:443> | ||
ServerName docker.it1XX.int | ServerName docker.it1XX.int | ||
| − | |||
SSLEngine on | SSLEngine on | ||
| − | SSLCertificateFile /etc/apache2/ssl/ | + | SSLCertificateFile /etc/apache2/ssl/docker.it1XX.int.crt |
| − | SSLCertificateKeyFile /etc/apache2/ssl/ | + | SSLCertificateKeyFile /etc/apache2/ssl/docker.it1XX.int.key |
| − | |||
ProxyPreserveHost On | ProxyPreserveHost On | ||
ProxyPass / http://127.0.0.1:3000/ | ProxyPass / http://127.0.0.1:3000/ | ||
ProxyPassReverse / http://127.0.0.1:3000/ | ProxyPassReverse / http://127.0.0.1:3000/ | ||
| − | |||
ProxyPass /socket ws://127.0.0.1:3000/socket | ProxyPass /socket ws://127.0.0.1:3000/socket | ||
ProxyPassReverse /socket ws://127.0.0.1:3000/socket | ProxyPassReverse /socket ws://127.0.0.1:3000/socket | ||
</VirtualHost> | </VirtualHost> | ||
| + | |||
</pre> | </pre> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Aktuelle Version vom 26. März 2025, 15:49 Uhr
Vorab
- Klont das Template als Webserver laut Plan
- Legt 4 neue A-Records, server, docker, gelb und blau (Ihr braucht keine PTR-Records)
- Alles sollen auf die IP des Wenservers zeigen
- Spielt auf dem Webserver das ca.crt ein.
Vorbereitung
Installation Apache2 & OpenSSL
- apt install -y apache2 openssl
Module aktivieren
- a2enmod ssl
- a2enmod rewrite
- a2enmod headers
- a2enmod proxy
- a2enmod proxy_http
- a2enmod proxy_wstunnel
- systemctl reload apache2
Zertifikate vorbereiten
Zertifikate vorbereiten
Verzeichnisse anlegen
- mkdir -p /etc/apache2/csr
- mkdir -p /etc/apache2/ssl
- export DOM="it113.int"
CSR und Key für server.it113.int
- export HOSTNAME="server"
- openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM"
CSR und Key für docker.it113.int
- export HOSTNAME="docker"
- openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM"
CSR und Key für gelb.it113.int
- export HOSTNAME="gelb"
- openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM"
CSR und Key für blau.it113.int
- export HOSTNAME="blau"
- openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/$HOSTNAME.$DOM.key -out /etc/apache2/csr/$HOSTNAME.$DOM.csr -subj "/CN=$HOSTNAME.$DOM"
Hinweis
- Die Dateien *.key und *.crt werden nach der Signierung nach /etc/apache2/ssl/ verschoben
Testinhalte bereitstellen
Hilfsskript herunterladen
- cd /root
- wget https://xinux.de/downloads/html/webgen.sh
- chmod +x webgen.sh
Verzeichnisse erstellen
- mkdir -p /var/www/{server,docker,gelb,blau}
Inhalte generieren und ablegen
- bash webgen.sh server > /var/www/server/index.html
- bash webgen.sh docker > /var/www/docker/index.html
- bash webgen.sh gelb > /var/www/gelb/index.html
- bash webgen.sh blau > /var/www/blau/index.html
Virtuelle Hosts mit HTTPS
Standardkonfiguration für HTTPS Erstelle Datei: /etc/apache2/sites-available/server.conf
<VirtualHost *:443>
ServerName server.it1XX.int
DocumentRoot /var/www/server
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.it1XX.int.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.it1XX.int.key
<Directory /var/www/server>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/server_error.log
CustomLog ${APACHE_LOG_DIR}/server_access.log combined
</VirtualHost>
Weitere Seiten Dupliziere den Block für:
- docker.it1XX.int → /var/www/docker
- gelb.it1XX.int → /var/www/gelb
- blau.it1XX.int → /var/www/blau
Jeweils mit eigenem Logfile und DocumentRoot
Aktivieren
- a2ensite server.conf
- a2ensite docker.conf
- a2ensite gelb.conf
- a2ensite blau.conf
- systemctl reload apache2
HTTP auf HTTPS umleiten
Erstelle Datei: /etc/apache2/sites-available/redirect.conf
<VirtualHost *:80>
ServerName server.it1XX.int
Redirect permanent / https://server.it1XX.int/
</VirtualHost>
Dupliziere und passe für alle vier Domains an. Dann:
- a2ensite redirect.conf (und weitere)
- systemctl reload apache2
Optionen testen
Ändere in einem <Directory>:
Options -Indexes +FollowSymLinks
Rufe eine Seite ohne index.html auf – Verzeichnis darf nun nicht mehr angezeigt werden.
Zugriff beschränken (IP)
<Directory /var/www/verwaltung>
Require ip 10.88.1XX.0/24
</Directory>
Logging kontrollieren
- tail -f /var/log/apache2/server_access.log
- tail -f /var/log/apache2/server_error.log
- journalctl -fu apache2
Kontrolle & Status
- apachectl configtest
- systemctl restart apache2
- ss -lntp | grep apache2
- apachectl status (mod_status aktivieren falls gewünscht)
.htaccess in /var/www/gelb aktivieren
In der Konfiguration von gelb.it1XX.int sicherstellen:
<Directory /var/www/gelb>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Datei .htaccess anlegen
- echo "Hallo nur mit Authentifizierung" > /var/www/gelb/index.html
Erstelle Datei */var/www/gelb/.htaccess* mit folgendem Inhalt:
AuthType Basic AuthName "Geschützter Bereich" AuthUserFile /etc/apache2/.htpasswd Require valid-user
Benutzer für Authentifizierung anlegen
Erstelle Passwortdatei mit Benutzer admin
- htpasswd -c /etc/apache2/.htpasswd admin
(Beim Nachfragen Passwort vergeben, z. B. geheim)
Apache neu laden
- systemctl reload apache2
Test: Rufe gelb.it1XX.int im Browser auf – du solltest zur Anmeldung aufgefordert werden.
Hinweis: Die Datei `.htpasswd` kann für mehrere Seiten verwendet werden – oder jede Seite bekommt eine eigene.
Reverse Proxy Beispiel
Websocket und Webapp auf Port 3000
<VirtualHost *:443>
ServerName docker.it1XX.int
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/docker.it1XX.int.crt
SSLCertificateKeyFile /etc/apache2/ssl/docker.it1XX.int.key
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ProxyPass /socket ws://127.0.0.1:3000/socket
ProxyPassReverse /socket ws://127.0.0.1:3000/socket
</VirtualHost>