Webproxy mit nginx für HTTP und X.509 Zertifikate: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Webproxy mit Nginx für HTTP und X.509-Zertifikate = == Einführung == * Nginx kann als Reverse Proxy für HTTP- und HTTPS-Dienste verwendet werden. * X.509…“)
 
 
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= Webproxy mit Nginx für HTTP und X.509-Zertifikate =
 
= Webproxy mit Nginx für HTTP und X.509-Zertifikate =
 +
==Rocky Template klonen==
 +
netz: DMZ
 +
name: revproxy.it2XX.int
 +
ip: 10.88.2XX.41
 +
gw: 10.88.2XX.1
 +
nameserver: 10.88.2XX.21
  
 
== Einführung ==
 
== Einführung ==
Zeile 7: Zeile 13:
  
 
== Installation von Nginx ==
 
== Installation von Nginx ==
=== Debian/Ubuntu ===
+
=== RHEL/Rocky ===
* Nginx-Server installieren:
+
Nginx-Repository hinzufügen und installieren:
* sudo apt update
+
* sudo dnf install nginx
* sudo apt install nginx
+
Dienst starten und aktivieren:
* Dienst starten und aktivieren:
 
 
* sudo systemctl start nginx
 
* sudo systemctl start nginx
 
* sudo systemctl enable nginx
 
* sudo systemctl enable nginx
  
=== RHEL/CentOS ===
+
==Firewall konfigurieren==
* Nginx-Repository hinzufügen und installieren:
+
;HTTPS (Port 443) freigeben
* sudo yum install epel-release
+
*firewall-cmd --permanent --add-service=https
* sudo yum install nginx
+
;HTTP (Port 80) freigeben – z. B. für Weiterleitungen
* Dienst starten und aktivieren:
+
*firewall-cmd --permanent --add-service=http
* sudo systemctl start nginx
+
;Firewall neu laden
* sudo systemctl enable nginx
+
*firewall-cmd --reload
 
+
;Aktive Regeln anzeigen
== Grundlegende Proxy-Konfiguration ==
+
*firewall-cmd --list-all
* Beispielhafte Konfiguration für einen Reverse Proxy:
+
== Eine Webseite vorab um zu testen ob unser System soweit geht==
 +
*cat /etc/nginx/conf.d/revproxy.int.conf
 
<pre>
 
<pre>
 
server {
 
server {
     listen 80;
+
     listen 443 ssl;
     server_name proxy.example.com;
+
    listen [::]:443 ssl;
 +
 
 +
     server_name revproxy.it213.int;
 +
 
 +
    root /usr/share/nginx/html;
 +
    index index.html index.htm;
 +
 
 +
    ssl_certificate /etc/ssl/own.crt;
 +
    ssl_certificate_key /etc/ssl/own.key;
  
 
     location / {
 
     location / {
         proxy_pass http://backend.local;
+
         try_files $uri $uri/ =404;
        proxy_set_header Host $host;
 
        proxy_set_header X-Real-IP $remote_addr;
 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
 
     }
 
     }
 
}
 
}
 
</pre>
 
</pre>
* Datei speichern unter:
+
;Neu starten
* sudo nano /etc/nginx/sites-available/proxy
+
*systemctl restart nginx
* Aktivieren der Konfiguration:
+
 
* sudo ln -s /etc/nginx/sites-available/proxy /etc/nginx/sites-enabled/
+
== Grundlegende Proxy-Konfiguration ==
* Nginx neu laden:
 
* sudo systemctl reload nginx
 
  
 
== TLS/SSL mit X.509-Zertifikaten ==
 
== TLS/SSL mit X.509-Zertifikaten ==
* Selbstsigniertes Zertifikat erstellen:
+
*[[Zertifikat erstellen 5105|Zertifikat erstellen]]
* sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
 
 
 
* Beispielkonfiguration mit TLS:
 
 
<pre>
 
<pre>
 
server {
 
server {
 
     listen 443 ssl;
 
     listen 443 ssl;
     server_name secure.example.com;
+
     server_name revproxy.it2XX.int;
  
     ssl_certificate /etc/nginx/ssl/nginx.crt;
+
     ssl_certificate /etc/ssl/own.crt;
     ssl_certificate_key /etc/nginx/ssl/nginx.key;
+
     ssl_certificate_key /etc/ssl/own.key;
  
 
     location / {
 
     location / {
         proxy_pass http://backend.local;
+
         proxy_pass https://mail.it2XX.int;
 
         proxy_set_header Host $host;
 
         proxy_set_header Host $host;
 
         proxy_set_header X-Real-IP $remote_addr;
 
         proxy_set_header X-Real-IP $remote_addr;
Zeile 66: Zeile 72:
 
}
 
}
 
</pre>
 
</pre>
* Nginx neu laden:
+
;Nginx neu laden:
 
* sudo systemctl reload nginx
 
* sudo systemctl reload nginx
 +
=== Bei Problemen ===
 +
*ausearch -m avc -ts recent
 +
<pre>
 +
----
 +
time->Thu Mar 26 15:50:59 2026
 +
type=PROCTITLE msg=audit(1774536659.561:435): proctitle=6E67696E783A20776F726B65722070726F63657373
 +
type=SYSCALL msg=audit(1774536659.561:435): arch=c000003e syscall=42 success=no exit=-13 a0=d a1=5578211d9fb8 a2=10 a3=7ffcb154f60c items=0 ppid=33457 pid=33458 auid=4294967295 uid=985 gid=984 euid=985 suid=985 fsuid=985 egid=984 sgid=984 fsgid=984 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
 +
type=AVC msg=audit(1774536659.561:435): avc:  denied  { name_connect } for  pid=33458 comm="nginx" dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
 +
----
 +
time->Thu Mar 26 15:55:25 2026
 +
type=PROCTITLE msg=audit(1774536925.290:444): proctitle=6E67696E783A20776F726B65722070726F63657373
 +
type=SYSCALL msg=audit(1774536925.290:444): arch=c000003e syscall=42 success=no exit=-13 a0=d a1=561646091fb8 a2=10 a3=7ffd50ff423c items=0 ppid=33528 pid=33529 auid=4294967295 uid=985 gid=984 euid=985 suid=985 fsuid=985 egid=984 sgid=984 fsgid=984 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
 +
type=AVC msg=audit(1774536925.290:444): avc:  denied  { name_connect } for  pid=33529 comm="nginx" dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
 +
</pre>
 +
;nginx Netzwerk Zugriff freischalten
 +
*setsebool -P httpd_can_network_connect 1
  
== Automatische SSL-Zertifikate mit Let's Encrypt ==
 
* Certbot installieren:
 
* sudo apt install certbot python3-certbot-nginx
 
* Zertifikat ausstellen:
 
* sudo certbot --nginx -d example.com
 
* Automatische Erneuerung prüfen:
 
* sudo certbot renew --dry-run
 
  
 +
<!---
 
== Zugriffsbeschränkung nach IP ==
 
== Zugriffsbeschränkung nach IP ==
 
* Nur bestimmten IPs Zugriff gewähren:
 
* Nur bestimmten IPs Zugriff gewähren:
Zeile 113: Zeile 129:
 
* Implementiere eine Zugriffsbeschränkung nach IP-Adresse.
 
* Implementiere eine Zugriffsbeschränkung nach IP-Adresse.
 
* Setze Load Balancing zwischen mehreren Backend-Servern um.
 
* Setze Load Balancing zwischen mehreren Backend-Servern um.
 +
--->
  
 
== Fazit ==
 
== Fazit ==

Aktuelle Version vom 27. März 2026, 07:35 Uhr

Webproxy mit Nginx für HTTP und X.509-Zertifikate

Rocky Template klonen

netz: DMZ
name: revproxy.it2XX.int
ip: 10.88.2XX.41
gw: 10.88.2XX.1
nameserver: 10.88.2XX.21

Einführung

  • Nginx kann als Reverse Proxy für HTTP- und HTTPS-Dienste verwendet werden.
  • X.509-Zertifikate ermöglichen die TLS-Verschlüsselung für sichere Verbindungen.
  • Der Proxy kann Anfragen an interne Webserver weiterleiten und dabei SSL/TLS offloaden.

Installation von Nginx

RHEL/Rocky

Nginx-Repository hinzufügen und installieren:

  • sudo dnf install nginx

Dienst starten und aktivieren:

  • sudo systemctl start nginx
  • sudo systemctl enable nginx

Firewall konfigurieren

HTTPS (Port 443) freigeben
  • firewall-cmd --permanent --add-service=https
HTTP (Port 80) freigeben – z. B. für Weiterleitungen
  • firewall-cmd --permanent --add-service=http
Firewall neu laden
  • firewall-cmd --reload
Aktive Regeln anzeigen
  • firewall-cmd --list-all

Eine Webseite vorab um zu testen ob unser System soweit geht

  • cat /etc/nginx/conf.d/revproxy.int.conf
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name revproxy.it213.int;

    root /usr/share/nginx/html;
    index index.html index.htm;

    ssl_certificate /etc/ssl/own.crt;
    ssl_certificate_key /etc/ssl/own.key;

    location / {
        try_files $uri $uri/ =404;
    }
}
Neu starten
  • systemctl restart nginx

Grundlegende Proxy-Konfiguration

TLS/SSL mit X.509-Zertifikaten

server {
    listen 443 ssl;
    server_name revproxy.it2XX.int;

    ssl_certificate /etc/ssl/own.crt;
    ssl_certificate_key /etc/ssl/own.key;

    location / {
        proxy_pass https://mail.it2XX.int;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Nginx neu laden
  • sudo systemctl reload nginx

Bei Problemen

  • ausearch -m avc -ts recent
----
time->Thu Mar 26 15:50:59 2026
type=PROCTITLE msg=audit(1774536659.561:435): proctitle=6E67696E783A20776F726B65722070726F63657373
type=SYSCALL msg=audit(1774536659.561:435): arch=c000003e syscall=42 success=no exit=-13 a0=d a1=5578211d9fb8 a2=10 a3=7ffcb154f60c items=0 ppid=33457 pid=33458 auid=4294967295 uid=985 gid=984 euid=985 suid=985 fsuid=985 egid=984 sgid=984 fsgid=984 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1774536659.561:435): avc:  denied  { name_connect } for  pid=33458 comm="nginx" dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
----
time->Thu Mar 26 15:55:25 2026
type=PROCTITLE msg=audit(1774536925.290:444): proctitle=6E67696E783A20776F726B65722070726F63657373
type=SYSCALL msg=audit(1774536925.290:444): arch=c000003e syscall=42 success=no exit=-13 a0=d a1=561646091fb8 a2=10 a3=7ffd50ff423c items=0 ppid=33528 pid=33529 auid=4294967295 uid=985 gid=984 euid=985 suid=985 fsuid=985 egid=984 sgid=984 fsgid=984 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1774536925.290:444): avc:  denied  { name_connect } for  pid=33529 comm="nginx" dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
nginx Netzwerk Zugriff freischalten
  • setsebool -P httpd_can_network_connect 1


Fazit

  • Nginx ist ein leistungsfähiger Webproxy für HTTP und HTTPS.
  • TLS-Zertifikate bieten Sicherheit und Vertrauenswürdigkeit.
  • Load Balancing und Zugriffsbeschränkungen erhöhen die Skalierbarkeit und Sicherheit.