Apache2 Kit: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(41 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==Wichtig==
+
==Vorab==
*Spielt auf unseren Templates da ca.crt ein
+
*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 ==
 
== 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 16: Zeile 61:
 
*systemctl reload apache2
 
*systemctl reload apache2
  
==Zertifikate vorbereiten==
+
== Testinhalte bereitstellen ==
  
'''Verzeichnisse anlegen'''
+
'''Hilfsskript herunterladen'''
*mkdir -p /etc/apache2/csr
+
*cd /root
*mkdir -p /etc/apache2/ssl
+
*wget https://xinux.de/downloads/html/webgen.sh
 +
*chmod +x webgen.sh
  
'''CSR und Key für server.it1XX.int'''
+
'''Verzeichnisse erstellen'''
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/server.key -out /etc/apache2/csr/server.csr -subj "/CN=server.it1XX.int"
+
*mkdir -p /var/www/{server,docker,gelb,blau}
  
'''CSR und Key für docker.it1XX.int'''
+
'''Inhalte generieren und ablegen'''
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/docker.key -out /etc/apache2/csr/docker.csr -subj "/CN=docker.it1XX.int"
+
*bash webgen.sh server > /var/www/server/index.html
 
+
*bash webgen.sh docker > /var/www/docker/index.html
'''CSR und Key für gelb.it1XX.int'''
+
*bash webgen.sh gelb > /var/www/gelb/index.html
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/gelb.key -out /etc/apache2/csr/gelb.csr -subj "/CN=gelb.it1XX.int"
+
*bash webgen.sh blau > /var/www/blau/index.html
 
 
'''CSR und Key für blau.it1XX.int'''
 
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/blau.key -out /etc/apache2/csr/blau.csr -subj "/CN=blau.it1XX.int"
 
 
 
'''Hinweis'''
 
*Die Dateien *.key und *.crt werden nach der Signierung nach /etc/apache2/ssl/ verschoben
 
  
 
== Virtuelle Hosts mit HTTPS ==
 
== Virtuelle Hosts mit HTTPS ==
  
 
'''Standardkonfiguration für HTTPS'''
 
'''Standardkonfiguration für HTTPS'''
Erstelle Datei: */etc/apache2/sites-available/server.conf*
+
Erstelle Datei: '''/etc/apache2/sites-available/server.conf'''
  
 
<pre>
 
<pre>
 
<VirtualHost *:443>
 
<VirtualHost *:443>
     ServerName server.it1XX.int
+
     ServerName server.it2XX.int
 
     DocumentRoot /var/www/server
 
     DocumentRoot /var/www/server
  
 
     SSLEngine on
 
     SSLEngine on
     SSLCertificateFile /etc/apache2/ssl/server.crt
+
     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 61: 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.it1XX.int → /var/www/docker
+
*docker.it2XX.int → /var/www/docker
*gelb.it1XX.int → /var/www/gelb
+
*gelb.it2XX.int → /var/www/gelb
*blau.it1XX.int → /var/www/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 76: 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: */etc/apache2/sites-available/redirect.conf*
+
Erstelle Datei: '''/etc/apache2/sites-available/redirect.conf'''
  
 
<pre>
 
<pre>
 
<VirtualHost *:80>
 
<VirtualHost *:80>
     ServerName server.it1XX.int
+
     ServerName server.it2XX.int
     Redirect permanent / https://server.it1XX.int/
+
     Redirect permanent / https://server.it2XX.int/
 
</VirtualHost>
 
</VirtualHost>
 
</pre>
 
</pre>
Zeile 123: Zeile 171:
 
*apachectl status (mod_status aktivieren falls gewünscht)
 
*apachectl status (mod_status aktivieren falls gewünscht)
  
== Testinhalte bereitstellen ==
 
 
*mkdir -p /var/www/server
 
*echo "Hallo von server.it1XX.int" > /var/www/server/index.html
 
*usw. für docker, gelb, blau
 
 
== .htaccess in /var/www/gelb aktivieren ==
 
== .htaccess in /var/www/gelb aktivieren ==
  
Zeile 178: Zeile 221:
 
<VirtualHost *:443>
 
<VirtualHost *:443>
 
     ServerName docker.it1XX.int
 
     ServerName docker.it1XX.int
 
 
     SSLEngine on
 
     SSLEngine on
     SSLCertificateFile /etc/apache2/ssl/server.crt
+
     SSLCertificateFile /etc/apache2/ssl/docker.it1XX.int.crt
     SSLCertificateKeyFile /etc/apache2/ssl/server.key
+
     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 24. März 2026, 07:49 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

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/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>