Apache2 Kit: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 19: Zeile 19:
 
*systemctl reload apache2
 
*systemctl reload apache2
  
 +
==Zertifikate vorbereiten==
 
==Zertifikate vorbereiten==
 
==Zertifikate vorbereiten==
  
Zeile 24: 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.it1XX.int'''
+
'''CSR und Key für server.it113.int'''
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/server.key -out /etc/apache2/csr/server.csr -subj "/CN=server.it1XX.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.it1XX.int'''
+
'''CSR und Key für docker.it113.int'''
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/docker.key -out /etc/apache2/csr/docker.csr -subj "/CN=docker.it1XX.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"
  
'''CSR und Key für gelb.it1XX.int'''
 
*openssl req -new -nodes -newkey rsa:2048 -keyout /etc/apache2/csr/gelb.key -out /etc/apache2/csr/gelb.csr -subj "/CN=gelb.it1XX.int"
 
  
'''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'''
 
'''Hinweis'''
Zeile 43: Zeile 51:
  
 
'''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 63:
 
*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: */etc/apache2/sites-available/server.conf*
+
Erstelle Datei: '''/etc/apache2/sites-available/server.conf'''
  
 
<pre>
 
<pre>
Zeile 68: 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 99: Zeile 106:
 
== 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>
Zeile 193: Zeile 200:
 
<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 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

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>