Apache2 Kit: Unterschied zwischen den Versionen
| (64 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
==Vorab== | ==Vorab== | ||
| − | *Klont das Template als Webserver laut Plan | + | *Klont das Template als Webserver laut Plan wenn noch nicht geschehen. |
| − | *Legt 4 neue A-Records (Ihr braucht keine PTR-Records) | + | *Legt 4 neue A-Records, server, docker, gelb und blau (Ihr braucht keine PTR-Records) |
| − | *Alles sollen auf die IP des | + | *Alles sollen auf die IP des Webservers zeigen |
| − | * | + | .:Zur Erinnerung |
| + | *In eurer it2XX.int Zone dort folgendes hinzufügen: | ||
| + | cat /var/cache/bind/it2XX.int | ||
| + | |||
| + | |||
| + | docker IN A 10.88.2XX.11 | ||
| + | gelb IN A 10.88.2XX.11 | ||
| + | blau IN A 10.88.2XX.11 | ||
| + | server IN A 10.88.2XX.11 | ||
| + | |||
| + | *Danach Zone neu signieren | ||
| + | dnssec-signzone -A -N INCREMENT -o it2XX.int -t /var/cache/bind/it2XX.int | ||
| + | *Named neu starten | ||
| + | rndc reload oder systemctl restart named | ||
| + | *Testet ob die Einträge ok sind | ||
== Vorbereitung == | == Vorbereitung == | ||
| + | |||
| + | =Zertifikate erstellen= | ||
| + | |||
| + | ==Auf dem Client== | ||
| + | ;Als '''kit''' user | ||
| + | für die Rechner '''server''' '''docker''' '''gelb''' '''blau''' | ||
| + | cd intermediate-ca/ | ||
| + | |||
| + | server, docker, gelb und blau | ||
| + | ;Varibeln setzen | ||
| + | CA=it213-ca | ||
| + | FQDN=www.it213.int | ||
| + | ;CSR erzeugen | ||
| + | openssl req -new -newkey rsa:2048 -nodes -keyout $FQDN.key -out $FQDN.csr -subj "/CN=$FQDN" | ||
| + | ;Signieren | ||
| + | openssl x509 -req -in $FQDN.csr -CA $CA.crt -CAkey $CA.key -CAcreateserial -out $FQDN.crt -days 365 -extfile <(printf "subjectAltName=DNS:$FQDN") | ||
| + | ;Fullchain erstellen | ||
| + | cat $FQDN.crt $CA.crt > $FQDN-fullchain.pem | ||
| + | ;Auf das Ziel kopieren | ||
| + | scp $FQDN-fullchain.pem $FQDN.key kit@www: | ||
| + | |||
| + | ==Auf dem www== | ||
| + | ;Verzeichnis erstellen | ||
| + | *sudo mkdir -p /etc/apache2/ssl | ||
| + | ;Alle KEY und Fullchains in dieses Verzeichnis kopieren. | ||
| + | |||
| + | |||
| + | |||
'''Installation Apache2 & OpenSSL''' | '''Installation Apache2 & OpenSSL''' | ||
*apt install -y apache2 openssl | *apt install -y apache2 openssl | ||
| Zeile 18: | Zeile 60: | ||
*a2enmod proxy_wstunnel | *a2enmod proxy_wstunnel | ||
*systemctl reload apache2 | *systemctl reload apache2 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Testinhalte bereitstellen == | == Testinhalte bereitstellen == | ||
'''Hilfsskript herunterladen''' | '''Hilfsskript herunterladen''' | ||
| + | *cd /root | ||
*wget https://xinux.de/downloads/html/webgen.sh | *wget https://xinux.de/downloads/html/webgen.sh | ||
*chmod +x webgen.sh | *chmod +x webgen.sh | ||
| Zeile 54: | Zeile 76: | ||
*bash webgen.sh gelb > /var/www/gelb/index.html | *bash webgen.sh gelb > /var/www/gelb/index.html | ||
*bash webgen.sh blau > /var/www/blau/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> | ||
<VirtualHost *:443> | <VirtualHost *:443> | ||
| − | ServerName server. | + | ServerName server.it2XX.int |
DocumentRoot /var/www/server | DocumentRoot /var/www/server | ||
SSLEngine on | SSLEngine on | ||
| − | SSLCertificateFile /etc/apache2/ssl/server. | + | SSLCertificateFile /etc/apache2/ssl/server.it2XX.int-fullchain.pem |
| − | SSLCertificateKeyFile /etc/apache2/ssl/server.key | + | SSLCertificateKeyFile /etc/apache2/ssl/server.it2XX.int.key |
<Directory /var/www/server> | <Directory /var/www/server> | ||
| Zeile 81: | Zeile 101: | ||
</VirtualHost> | </VirtualHost> | ||
</pre> | </pre> | ||
| + | |||
| + | |||
| + | a2ensite server.conf | ||
| + | systemctl reload apache2 | ||
| + | |||
'''Weitere Seiten''' | '''Weitere Seiten''' | ||
Dupliziere den Block für: | Dupliziere den Block für: | ||
| − | *docker. | + | *docker.it2XX.int → /var/www/docker |
| − | *gelb. | + | *gelb.it2XX.int → /var/www/gelb |
| − | *blau. | + | *blau.it2XX.int → /var/www/blau |
| + | |||
| + | Erstelle jeweils eine eigene Konfig Datei für Domains: | ||
Jeweils mit eigenem Logfile und DocumentRoot | Jeweils mit eigenem Logfile und DocumentRoot | ||
| Zeile 96: | Zeile 123: | ||
*a2ensite blau.conf | *a2ensite blau.conf | ||
*systemctl reload apache2 | *systemctl reload apache2 | ||
| + | == Break == | ||
== HTTP auf HTTPS umleiten == | == HTTP auf HTTPS umleiten == | ||
| − | Erstelle Datei: | + | Erstelle Datei: '''/etc/apache2/sites-available/redirect.conf''' |
<pre> | <pre> | ||
<VirtualHost *:80> | <VirtualHost *:80> | ||
| − | ServerName server. | + | ServerName server.it2XX.int |
| − | Redirect permanent / https://server. | + | Redirect permanent / https://server.it2XX.int/ |
</VirtualHost> | </VirtualHost> | ||
</pre> | </pre> | ||
| Zeile 125: | Zeile 153: | ||
<pre> | <pre> | ||
| − | <Directory /var/www/ | + | <Directory /var/www/server> |
| − | Require ip 10.88. | + | Require ip 10.88.2XX.0/24 |
</Directory> | </Directory> | ||
</pre> | </pre> | ||
| Zeile 145: | Zeile 173: | ||
== .htaccess in /var/www/gelb aktivieren == | == .htaccess in /var/www/gelb aktivieren == | ||
| − | '''In der Konfiguration von gelb. | + | '''In der Konfiguration von gelb.it2XX.int sicherstellen:''' |
<pre> | <pre> | ||
| Zeile 159: | Zeile 187: | ||
*echo "Hallo nur mit Authentifizierung" > /var/www/gelb/index.html | *echo "Hallo nur mit Authentifizierung" > /var/www/gelb/index.html | ||
| − | Erstelle Datei | + | Erstelle Datei '''/var/www/gelb/.htaccess''' mit folgendem Inhalt: |
<pre> | <pre> | ||
| Zeile 181: | Zeile 209: | ||
'''Test''': | '''Test''': | ||
| − | Rufe gelb. | + | Rufe gelb.it2XX.int im Browser auf – du solltest zur Anmeldung aufgefordert werden. |
'''Hinweis''': | '''Hinweis''': | ||
| − | Die Datei | + | Die Datei '''.htpasswd''' kann für mehrere Seiten verwendet werden – oder jede Seite bekommt eine eigene. |
| − | == | + | =Projekt Revproxy mit Websocket= |
| + | {{#drawio:revproxy-mit-websocket}} | ||
| − | + | ==Vorarbeiten== | |
| + | *[[Docker Debian Installation via Repository]] | ||
| + | ==Uptime Kuma== | ||
| + | ;Docker Verzeichnis | ||
| + | *mkdir /var/local/docker/ | ||
| + | ;Uptime Kuma Verzeichnis | ||
| + | *mkdir /var/local/docker/uptime-kuma | ||
| + | ;Wechseln in das Verzeichnis | ||
| + | *cd /var/local/docker/uptime-kuma | ||
| + | ;Der Bauplan docker-compose.yaml | ||
| + | services: | ||
| + | uptime-kuma: | ||
| + | image: louislam/uptime-kuma:latest | ||
| + | container_name: uptime-kuma | ||
| + | restart: unless-stopped | ||
| + | ports: | ||
| + | - "3001:3001" | ||
| + | volumes: | ||
| + | - ./data:/app/data | ||
| + | ;Der erste Start | ||
| + | *docker compose up -d | ||
| + | ;Die Logs | ||
| + | *docker compose logs -f | ||
| + | ;Der Zugriff | ||
| + | http://10.88.2XX.11:3001 | ||
| + | |||
| + | ==Reverse Proxy== | ||
| + | ;Benötigte Apache Module | ||
| + | *a2enmod proxy proxy_http proxy_wstunnel rewrite | ||
| + | *systemctl reload apache2 | ||
| + | ;VirtualHost Konfiguration | ||
| + | *vi /etc/apache2/sites-enabled/docker.conf | ||
<pre> | <pre> | ||
<VirtualHost *:443> | <VirtualHost *:443> | ||
| − | ServerName docker. | + | ServerName docker.it2XX.int |
| − | |||
SSLEngine on | SSLEngine on | ||
| − | SSLCertificateFile /etc/apache2/ssl/ | + | SSLCertificateFile /etc/apache2/ssl/docker.it2XX.int-fullchain.pem |
| − | SSLCertificateKeyFile /etc/apache2/ssl/ | + | SSLCertificateKeyFile /etc/apache2/ssl/docker.it2XX.int.key |
| − | |||
ProxyPreserveHost On | ProxyPreserveHost On | ||
| − | ProxyPass / | + | ProxyPass /socket.io/ ws://127.0.0.1:3001/socket.io/ |
| − | ProxyPassReverse / | + | ProxyPassReverse /socket.io/ ws://127.0.0.1:3001/socket.io/ |
| − | + | ProxyPass / http://127.0.0.1:3001/ | |
| − | ProxyPass / | + | ProxyPassReverse / http://127.0.0.1:3001/ |
| − | ProxyPassReverse / | ||
</VirtualHost> | </VirtualHost> | ||
</pre> | </pre> | ||
| + | ==Sicherheitsanpassung== | ||
| + | *cd /var/local/docker/uptime-kuma | ||
| + | ;Der Bauplan docker-compose.yaml | ||
| + | services: | ||
| + | uptime-kuma: | ||
| + | image: louislam/uptime-kuma:latest | ||
| + | container_name: uptime-kuma | ||
| + | restart: unless-stopped | ||
| + | ports: | ||
| + | - "127.0.0.1:3001:3001" | ||
| + | volumes: | ||
| + | - ./data:/app/data | ||
| + | ;Container neuladen | ||
| + | *docker compose down && docker compose up -d | ||
Aktuelle Version vom 9. Juni 2026, 09:48 Uhr
Vorab
- Klont das Template als Webserver laut Plan wenn noch nicht geschehen.
- Legt 4 neue A-Records, server, docker, gelb und blau (Ihr braucht keine PTR-Records)
- Alles sollen auf die IP des Webservers zeigen
.:Zur Erinnerung
- In eurer it2XX.int Zone dort folgendes hinzufügen:
cat /var/cache/bind/it2XX.int
docker IN A 10.88.2XX.11 gelb IN A 10.88.2XX.11 blau IN A 10.88.2XX.11 server IN A 10.88.2XX.11
- Danach Zone neu signieren
dnssec-signzone -A -N INCREMENT -o it2XX.int -t /var/cache/bind/it2XX.int
- Named neu starten
rndc reload oder systemctl restart named
- Testet ob die Einträge ok sind
Vorbereitung
Zertifikate erstellen
Auf dem Client
- Als kit user
für die Rechner server docker gelb blau
cd intermediate-ca/
server, docker, gelb und blau
- Varibeln setzen
CA=it213-ca FQDN=www.it213.int
- CSR erzeugen
openssl req -new -newkey rsa:2048 -nodes -keyout $FQDN.key -out $FQDN.csr -subj "/CN=$FQDN"
- Signieren
openssl x509 -req -in $FQDN.csr -CA $CA.crt -CAkey $CA.key -CAcreateserial -out $FQDN.crt -days 365 -extfile <(printf "subjectAltName=DNS:$FQDN")
- Fullchain erstellen
cat $FQDN.crt $CA.crt > $FQDN-fullchain.pem
- Auf das Ziel kopieren
scp $FQDN-fullchain.pem $FQDN.key kit@www:
Auf dem www
- Verzeichnis erstellen
- sudo mkdir -p /etc/apache2/ssl
- Alle KEY und Fullchains in dieses Verzeichnis kopieren.
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
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.it2XX.int
DocumentRoot /var/www/server
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.it2XX.int-fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/server.it2XX.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>
a2ensite server.conf systemctl reload apache2
Weitere Seiten
Dupliziere den Block für:
- docker.it2XX.int → /var/www/docker
- gelb.it2XX.int → /var/www/gelb
- blau.it2XX.int → /var/www/blau
Erstelle jeweils eine eigene Konfig Datei für Domains:
Jeweils mit eigenem Logfile und DocumentRoot
Aktivieren
- a2ensite server.conf
- a2ensite docker.conf
- a2ensite gelb.conf
- a2ensite blau.conf
- systemctl reload apache2
Break
HTTP auf HTTPS umleiten
Erstelle Datei: /etc/apache2/sites-available/redirect.conf
<VirtualHost *:80>
ServerName server.it2XX.int
Redirect permanent / https://server.it2XX.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/server>
Require ip 10.88.2XX.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.it2XX.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.it2XX.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.
Projekt Revproxy mit Websocket
Vorarbeiten
Uptime Kuma
- Docker Verzeichnis
- mkdir /var/local/docker/
- Uptime Kuma Verzeichnis
- mkdir /var/local/docker/uptime-kuma
- Wechseln in das Verzeichnis
- cd /var/local/docker/uptime-kuma
- Der Bauplan docker-compose.yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
- Der erste Start
- docker compose up -d
- Die Logs
- docker compose logs -f
- Der Zugriff
http://10.88.2XX.11:3001
Reverse Proxy
- Benötigte Apache Module
- a2enmod proxy proxy_http proxy_wstunnel rewrite
- systemctl reload apache2
- VirtualHost Konfiguration
- vi /etc/apache2/sites-enabled/docker.conf
<VirtualHost *:443>
ServerName docker.it2XX.int
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/docker.it2XX.int-fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/docker.it2XX.int.key
ProxyPreserveHost On
ProxyPass /socket.io/ ws://127.0.0.1:3001/socket.io/
ProxyPassReverse /socket.io/ ws://127.0.0.1:3001/socket.io/
ProxyPass / http://127.0.0.1:3001/
ProxyPassReverse / http://127.0.0.1:3001/
</VirtualHost>
Sicherheitsanpassung
- cd /var/local/docker/uptime-kuma
- Der Bauplan docker-compose.yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
- Container neuladen
- docker compose down && docker compose up -d
