Webproxy mit nginx für HTTP und X.509 Zertifikate: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | = | + | === Das Template === |
| − | == | + | ;Wir nehmen das rocky-template |
| − | + | === Netzkonfiguration Reverse Proxy-Server (DMZ) === | |
| − | |||
| − | |||
| − | |||
| − | |||
| + | {| class="wikitable" style="background-color: #f2f2f2;" | ||
| + | ! Parameter !! Wert !! Erläuterung | ||
| + | |- | ||
| + | | '''Netzwerk (NIC)''' || DMZ || Interface-Zuweisung in VirtualBox | ||
| + | |- | ||
| + | | '''IP''' || 10.88.2XX.41 || Statische IP | ||
| + | |- | ||
| + | | '''CIDR''' || 24 || Classless Inter-Domain Routing Präfixlänge | ||
| + | |- | ||
| + | | '''GW''' || 10.88.2XX.1 || GATEWAY | ||
| + | |- | ||
| + | | '''NS''' || 10.88.2XX.21 || Resolver | ||
| + | |- | ||
| + | | '''FQDN''' || revproxy.it2XX.int || Fully Qualified Domain Name | ||
| + | |- | ||
| + | | '''SHORT''' || revproxy || Short Name | ||
| + | |- | ||
| + | | '''DOM''' || it2XX.int|| Domain Name | ||
| + | |} | ||
| + | ;Anpassen des Templates | ||
| + | Mit '''debian-setup.sh''' oder mit '''rocky-setup.sh''' | ||
| + | ;Eintragen auf dem Host unter '''~/.ssh/config''' | ||
== Einführung == | == Einführung == | ||
* Nginx kann als Reverse Proxy für HTTP- und HTTPS-Dienste verwendet werden. | * 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. | * X.509-Zertifikate ermöglichen die TLS-Verschlüsselung für sichere Verbindungen. | ||
| − | * Der Proxy | + | * Der Proxy terminiert TLS zum Client und leitet Anfragen an interne Webserver weiter. |
== Installation von Nginx == | == Installation von Nginx == | ||
| − | + | ;Nginx installieren | |
| − | Nginx | + | * dnf install nginx |
| − | * | + | ;Dienst starten und aktivieren |
| − | Dienst starten und aktivieren | + | * systemctl enable --now 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 | ||
| − | == | + | == Zertifikat erstellen == |
*[[Zertifikat erstellen 5105|Zertifikat erstellen]] | *[[Zertifikat erstellen 5105|Zertifikat erstellen]] | ||
| + | ;Ergebnis | ||
| + | /etc/ssl/own.crt | ||
| + | /etc/ssl/own.key | ||
| + | |||
| + | == Eine Webseite vorab um zu testen ob unser System soweit geht == | ||
| + | *cat /etc/nginx/conf.d/revproxy.int.conf | ||
<pre> | <pre> | ||
server { | server { | ||
listen 443 ssl; | listen 443 ssl; | ||
| + | listen [::]:443 ssl; | ||
| + | |||
server_name revproxy.it2XX.int; | server_name revproxy.it2XX.int; | ||
| + | |||
| + | root /usr/share/nginx/html; | ||
| + | index index.html index.htm; | ||
ssl_certificate /etc/ssl/own.crt; | ssl_certificate /etc/ssl/own.crt; | ||
| Zeile 34: | Zeile 69: | ||
location / { | location / { | ||
| − | + | try_files $uri $uri/ =404; | |
| − | |||
| − | |||
| − | |||
} | } | ||
} | } | ||
</pre> | </pre> | ||
| − | * | + | ;Konfiguration prüfen |
| − | * | + | * nginx -t |
| + | ;Neu starten | ||
| + | * systemctl restart nginx | ||
| + | ;Testen | ||
| + | * curl -k https://revproxy.it2XX.int | ||
| − | + | == Proxy-Konfiguration mit TLS == | |
| − | == | + | *cat /etc/nginx/conf.d/revproxy.int.conf |
| − | * | ||
<pre> | <pre> | ||
| − | + | server { | |
| − | + | listen 443 ssl; | |
| − | + | listen [::]:443 ssl; | |
| − | |||
| − | |||
| − | |||
| − | + | server_name revproxy.it2XX.int; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | ssl_certificate /etc/ssl/own.crt; | |
| − | + | ssl_certificate_key /etc/ssl/own.key; | |
| − | |||
location / { | location / { | ||
| − | proxy_pass http:// | + | proxy_pass http://mail-gw.it2XX.int:11334; |
| + | proxy_ssl_server_name on; | ||
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; | ||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| + | proxy_set_header X-Forwarded-Proto $scheme; | ||
} | } | ||
} | } | ||
</pre> | </pre> | ||
| + | ;Nginx neu laden | ||
| + | * 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 | ||
| + | </pre> | ||
| + | ;SELinux verbietet nginx ausgehende Verbindungen zum Backend | ||
| + | ;Nginx Netzwerk-Zugriff dauerhaft freischalten | ||
| + | * setsebool -P httpd_can_network_connect 1 | ||
| + | ;Prüfen | ||
| + | * getsebool httpd_can_network_connect | ||
== Fazit == | == Fazit == | ||
* Nginx ist ein leistungsfähiger Webproxy für HTTP und HTTPS. | * Nginx ist ein leistungsfähiger Webproxy für HTTP und HTTPS. | ||
* TLS-Zertifikate bieten Sicherheit und Vertrauenswürdigkeit. | * TLS-Zertifikate bieten Sicherheit und Vertrauenswürdigkeit. | ||
| − | * | + | * SELinux-Booleans steuern, ob der Proxy Verbindungen zum Backend aufbauen darf. |
Aktuelle Version vom 12. Juni 2026, 07:10 Uhr
Das Template
- Wir nehmen das rocky-template
Netzkonfiguration Reverse Proxy-Server (DMZ)
| Parameter | Wert | Erläuterung |
|---|---|---|
| Netzwerk (NIC) | DMZ | Interface-Zuweisung in VirtualBox |
| IP | 10.88.2XX.41 | Statische IP |
| CIDR | 24 | Classless Inter-Domain Routing Präfixlänge |
| GW | 10.88.2XX.1 | GATEWAY |
| NS | 10.88.2XX.21 | Resolver |
| FQDN | revproxy.it2XX.int | Fully Qualified Domain Name |
| SHORT | revproxy | Short Name |
| DOM | it2XX.int | Domain Name |
- Anpassen des Templates
Mit debian-setup.sh oder mit rocky-setup.sh
- Eintragen auf dem Host unter ~/.ssh/config
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 terminiert TLS zum Client und leitet Anfragen an interne Webserver weiter.
Installation von Nginx
- Nginx installieren
- dnf install nginx
- Dienst starten und aktivieren
- systemctl enable --now 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
Zertifikat erstellen
- Ergebnis
/etc/ssl/own.crt /etc/ssl/own.key
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.it2XX.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;
}
}
- Konfiguration prüfen
- nginx -t
- Neu starten
- systemctl restart nginx
- Testen
- curl -k https://revproxy.it2XX.int
Proxy-Konfiguration mit TLS
- cat /etc/nginx/conf.d/revproxy.int.conf
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name revproxy.it2XX.int;
ssl_certificate /etc/ssl/own.crt;
ssl_certificate_key /etc/ssl/own.key;
location / {
proxy_pass http://mail-gw.it2XX.int:11334;
proxy_ssl_server_name on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- Nginx neu laden
- 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
- SELinux verbietet nginx ausgehende Verbindungen zum Backend
- Nginx Netzwerk-Zugriff dauerhaft freischalten
- setsebool -P httpd_can_network_connect 1
- Prüfen
- getsebool httpd_can_network_connect
Fazit
- Nginx ist ein leistungsfähiger Webproxy für HTTP und HTTPS.
- TLS-Zertifikate bieten Sicherheit und Vertrauenswürdigkeit.
- SELinux-Booleans steuern, ob der Proxy Verbindungen zum Backend aufbauen darf.