Sicherheit Konsolenzugriff hinter Reverse-Proxy

TobiasF

Free User
Mitglied seit
21. Juli 2020
Beiträge
6
Hallo,

bei mir lauft 3CX hinter einer Firewall mit nginx als Reverse-Proxy für den Konsolenzugriff auf port 443. Das gibt mir zusätzliche Sicherheit und macht die SSL-Zertifikatsvergabe mit Letsencrypt einfacher.

Das Problem ist dass die Sicherheitsfunktion "Zugriff nur auf bestimmte IP-Adressen beschränken" für den Kosolenzugriff damit ausgehebelt ist. Der Reverse Proxy meldet sich mit interner IP-Adresse und die ist in 3CX in der festen, nicht bearbeitbaren Ausnahmeliste.

Welches Feld, das ich über den Proxy senden könnte, wertet 3XC aus, sodass ein Zugriff als extern erkannt wird?
 
Wieso fügst du den die Interne IP Adresse nicht im Konsolenzugriff?
Oder habe ich dich falsch verstanden?
 
Mein Problem ist nicht, dass ich keinen Zugriff bekomme. Mein Problem ist, dass alle immer Zugriff bekommen, weil die interne Proxy-Adresse von 3CX als Client-Adresse interpretiert wird. Die 3CX-Funktion, den Zugriff auf nur interne Adressen zu beschränken, ist damit ausgehebelt.

Auf der Englischen Seite habe ich auch schon die Antwort erhalten. Es geht nicht, bzw. wird offiziell nicht unterstützt.
https://www.3cx.com/community/threads/security-client-ip-behind-reverse-proxy.74967/post-338681

Da unter der Haube in der Debian Version auch nur nginx werkelt habe ich die Lösung gefunden. Ich weiß nicht, ob es hier gerne gesehen wird, nicht offiziell supportete Lösungen zu posten. Deshalb lass ich es mal. Stichwort "real_ip_header" in der nginx-Konfiguration.
 
Hallo TobiasF,

Ich weiß nicht, ob es hier gerne gesehen wird, nicht offiziell supportete Lösungen zu posten.


Du kannst das gerne machen. Du kannst hier auch Sachen posten die nicht unterstützt werden.
Daher ist hier das Forum.
Hier kann jeder den anderen Helfen können auch wenn es um nicht unterstützte Lösungen geht.
 
Da unter der Haube in der Debian Version auch nur nginx werkelt habe ich die Lösung gefunden. Ich weiß nicht, ob es hier gerne gesehen wird, nicht offiziell supportete Lösungen zu posten. Deshalb lass ich es mal. Stichwort "real_ip_header" in der nginx-Konfiguration.
Hallo @TobiasF, würdest du das ein wenig näher ausführen?
Ich stehe aktuell vor dem gleichen Problem und komme nicht weiter.

Ich danke dir.
Pat
 
Für alle anderen, die evtl das gleiche Problem haben:

set_real_ip_from 127.0.0.1;
set_real_ip_from 10.0.1.101;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

wobei 10.0.1.101 die IP meines Proxys ist.
Ich hoffe ich habe alles richtig gemacht. Falls nicht, verbessert mich bitte.

Beste Grüße.
 

Anhänge

  • 2021-10-25 19_13_23-Window.png
    2021-10-25 19_13_23-Window.png
    12,7 KB · Aufrufe: 42
  • 2021-10-25 19_13_38-Window.png
    2021-10-25 19_13_38-Window.png
    18,7 KB · Aufrufe: 36
Hallo @TobiasF, würdest du das ein wenig näher ausführen?
Ich stehe aktuell vor dem gleichen Problem und komme nicht weiter.

Ja, Die Lösung ist, wie du mittlerweile selber herausgefunden hast.
Einträge in /etc/nginx/nginx.conf
Für alle anderen, die evtl das gleiche Problem haben:

set_real_ip_from 127.0.0.1;
set_real_ip_from 10.0.1.101;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
 
  • Like
Reaktionen: pat10_
Hallo zusammen,

ich bin gerade ebenfalls dabei unsere 3CX hinter einem vorhandenen Reverse Proxy zum Laufen zu bringen. Ich hatte das bereits vor einigen Jahren testweise eingerichtet, damals aber komplett in einem stream Block innerhalb der nginx Konfig. Das sorgte aber ebenfalls dafür, dass immer die IP des Reverse Proxy angezeigt wurde. Ich habe das nun mit einem ganz normalen Virtual Host im http Block konfiguriert, bekomme aber dennoch immer die IP des Reverse Proxy angezeigt. Die obenstehenden Änderungen an der nginx.conf der 3CX habe ich natürlich vorgenommen und im Virtual Host unseres Reverse Proxy verwende ich aktuell die untenstehenden Parameter. Hatte vorher eine deutlich kompliziertere Konfig für die einzelnen Locations aber testweise alles mal zusammengepackt. Vielleicht kann hier jemand seine Virtual Host Konfiguration für 3CX mal teilen, ich stehe hier irgendwie auf dem Schlauch.

Schon mal vielen Dank vorab!

Grüße,
Timo


Code:
    location / {
        proxy_pass https://FQDN3CX:5001;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection $connection_upgrade;
        proxy_set_header    Host $host:$server_port;
        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;
        proxy_buffering     off;
        proxy_buffers       8 16k;
        proxy_buffer_size   16k;
    }
 
Dies hier wäre nun die Konfig seitens des 3CX.

Code:
http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        set_real_ip_from 127.0.0.1;
        set_real_ip_from 10.0.1.132; #meine-proxy-ip
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

Ich hab damals was im Proxy konfiguriert, aber scheinbar ist das nicht notwendig.
Ich habs beim letzten mal dann Dokumentiert (siehe Screenshot)
 

Anhänge

  • 2022-06-28 11_12_13-3CX Real Ip Forwarding - OneNote.png
    2022-06-28 11_12_13-3CX Real Ip Forwarding - OneNote.png
    79,4 KB · Aufrufe: 7
  • 2022-06-28 11_13_17-3CX Phone System Management Console.png
    2022-06-28 11_13_17-3CX Phone System Management Console.png
    13,5 KB · Aufrufe: 7
Hi pat10_,

vielen Dank für die schnelle Antwort.

Folgendes habe ich auf dem 3CX Server in der nginx.conf unter /etc/nginx konfiguriert. Unser Reverse Proxy hat die IP 10.28.90.11.

Code:
http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    # Changes for Reverse Proxy
    set_real_ip_from 127.0.0.1;
    set_real_ip_from 10.28.90.11;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    # server_tokens off;
   
    ....

Mein Virtual Host für 3CX auf dem Reverse Proxy sieht aktuell so aus:

Code:
server {
    listen 5001 ssl;
    server_name **********;
   
    ssl_certificate /etc/letsencrypt/live/**********/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/**********/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    client_max_body_size 300m;

    location / {
        proxy_pass https://**********:5001;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection $connection_upgrade;
        proxy_set_header    Host $host:$server_port;
        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;
        proxy_buffering     off;
        proxy_buffers       8 16k;
        proxy_buffer_size   16k;
    }
}
 
Zuletzt bearbeitet:
Hi pat10_,

vielen Dank für die schnelle Antwort.
Code:
# ------------------------------------------------------------
# voip.domail.com
# ------------------------------------------------------------


server {
  set $forward_scheme https;
  set $server         "10.0.1.103";
  set $port           443;

  listen 80;
listen [::]:80;

listen 443 ssl http2;
listen [::]:443 ssl http2;


  server_name voip.domain.com;


  # Let's Encrypt SSL
  include conf.d/include/letsencrypt-acme-challenge.conf;
  include conf.d/include/ssl-ciphers.conf;
  ssl_certificate /etc/letsencrypt/live/npm-21/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/npm-21/privkey.pem;




# Asset Caching
  include conf.d/include/assets.conf;




  # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
  add_header Strict-Transport-Security "max-age=63072000; preload" always;





    # Force SSL
    include conf.d/include/force-ssl.conf;




proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;


  access_log /data/logs/proxy-host-21_access.log proxy;
  error_log /data/logs/proxy-host-21_error.log warn;







  location / {

  



  # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
  add_header Strict-Transport-Security "max-age=63072000; preload" always;





  
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;
  

    # Proxy!
    include conf.d/include/proxy.conf;
  }


  # Custom
  include /data/nginx/custom/server_proxy[.]conf;
}

Dies hier wäre meine Konfig seitens NGINX Reverse Proxy.
Den Webserver haste aber schonmal neugestartet oder ?
Vlg
 
Zuletzt bearbeitet:
Also prinzipiell sieht das fast gleich aus. Was steht denn in deiner proxy.conf und server_proxy.conf. ?

Neustart habe ich natürlich durchgeführt.

Habe es jetzt zwischendurch auch einmal hinbekommen und es wurde die korrekte IP angezeigt. Aktuell kann ich das Problem nicht nachvollziehen und werde weiter testen. Gebe Rückmeldung sobald ich herausgefunden habe woran es liegt.
 
Also prinzipiell sieht das fast gleich aus. Was steht denn in deiner proxy.conf und server_proxy.conf. ?
Kannst du mir sagen, wo ich die proxy.conf & die server_proxy.conf finde?
Mein Nginx Proxy Reverse rennt in einem Docker Container und ich kann die Daten in den Konfigurationsordnern nicht finden. Das bedeutet allerdings wohl auch, dass ich die Dateien bisher nicht angefasst habe.
 
Es liegt banaler Weise einfach nur an http2 hinter dem listen 5001 ssl. Nun läuft alles und bin dran den Rest der genutzten Ports über den Reverse Proxy laufen zu lassen.

Vielen Dank nochmal für den Schups in die richtige Richtung!
 
  • Like
Reaktionen: pat10_

Statistik des Forums

Themen
44.414
Beiträge
232.721
Mitglieder
78.331
Neuestes Mitglied
b2daniel