simpler http/s Proxy

Wie kann man das Konfigurieren?
Post Reply
lenny
Posts: 406
Joined: October 4th, 2011, 12:47 pm

simpler http/s Proxy

Post by lenny » March 20th, 2019, 7:00 am

Hallo zusammen,

wie kann ich mit haproxy oder nginx auf der IPF einen reverse Proxy einrichten, welcher einen Webserver im grünen LAN "schützt"?

Viele Grüße

lenny
Posts: 406
Joined: October 4th, 2011, 12:47 pm

Re: simpler http/s Proxy

Post by lenny » March 26th, 2019, 6:04 am

hat das niemand im Einsatz? :(
ist doch gar nicht so abwägig... :-\

ummeegge
Community Developer
Community Developer
Posts: 5001
Joined: October 9th, 2010, 10:00 am

Re: simpler http/s Proxy

Post by ummeegge » March 26th, 2019, 6:38 am

Moin lenny,
es gibt da so einiges im Forum --> search.php?keywords=nginx+reverse aber auch im Wiki --> https://wiki.ipfire.org/nginx/start wärst du fündig geworden .
Hab da mal vor längerem was für Netdata gemacht --> viewtopic.php?t=16987#p99785 wobei Nginx da als Proxy für den Fire gedacht war.
Habe gerade eben ein Nginx update zur Mailingliste geschickt mit http2 Aktivierung im Nginx --> https://patchwork.ipfire.org/patch/2162/ und hatte das vorher unter obigem Szenario getestet. Es gibt mit dem OpenSSL Update ja mittlerweileTLSv1.3 und das wollte ich dann auch mal (only) ausprobieren aber zuerstmal wegen der nginx.conf und der Infra.:

EDIT:
Netdata (als backend) lauscht auf Localhost TCP 19999

Code: Select all

tcp        0      0 127.0.0.1:19999         0.0.0.0:*               LISTEN      30400/netdata
Nginx als Proxy (Frontend) lauscht auf TCP 1234

Code: Select all

tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      20683/nginx
[/EDIT]

Ich habe die hier -->

Code: Select all

worker_processes  1;

events {
  worker_connections  1024;
}


http {
  upstream backend {
    # the netdata server
    server 127.0.0.1:19999;
    keepalive 64;
  }

  server {
    listen       1234 ssl http2;
    server_name  192.168.123.234 # green0 IP;

    # Authentication
    auth_basic            "Protected";
    auth_basic_user_file  .htpasswd;

    # TLS settings
    ssl_certificate       /etc/nginx/ca/nginx.crt;
    ssl_certificate_key   /etc/nginx/ca/nginx.key;
    ssl_protocols         TLSv1.3;
    ssl_ciphers           TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-ARIA256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:ECDHE-ECDSA-ARIA128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ARIA256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ARIA128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-ARIA256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:DHE-RSA-ARIA128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384;
    ssl_prefer_server_ciphers   on;

    ssl_dhparam           /etc/nginx/ca/dh.pem;
    ssl_ecdh_curve        X25519:secp521r1:secp384r1;

    ssl_session_cache     shared:SSL:1m;
    ssl_session_timeout   5m;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; always";
 
    location / {
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://backend;
      proxy_http_version 1.1;
      proxy_pass_request_headers on;
      proxy_set_header Connection "keep-alive";
      proxy_store off;
    }

    # make sure there is a trailing slash at the browser
    # or the URLs will be wrong
    location ~ /netdata/(?<behost>.*) {
      return 301 /netdata/$behost/;
    }
  }
}

verwendet. Du musst aber derzeit noch 'http2' in der 'listen' Zeile rausnehmen also anstatt
listen 1234 ssl http2;
dann halt

Code: Select all

listen       1234 ssl;
dadas der derzeitige Nginx noch nicht kann aussserdem kannst du dir überlegen ob du hier

Code: Select all

ssl_protocols TLSv1.3;
nicht noch TLSv1.2 ranhängst.

Schnellerklärung: Da im 'upstream backend' bei mir alles auf localhost läuft und Nginx auf den Fire (netdata) umleitet würde da dann dein ensprechender 'server' reinkommen.

Konfig hat er aktzeptiert:

Code: Select all

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Crypto sieht gut aus (musst die CA und DH-Parameter noch entsprechend {hier unter /var/nginx/ca} erstellen):

Code: Select all

$ openssl s_client -connect 192.168.123.234:1234
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 C = DE, ST = HH, L = Hamburg, O = IPFire, OU = FZeit, CN = ipfire, emailAddress = ue@xx.xx
verify error:num=18:self signed certificate
verify return:1
depth=0 C = DE, ST = HH, L = Hamburg, O = IPFire, OU = FZeit, CN = ipfire, emailAddress = ue@xx.xx
verify return:1
---
Certificate chain
 0 s:C = DE, ST = HH, L = Hamburg, O = IPFire, OU = FZeit, CN = ipfire, emailAddress = ue@xx.xx
   i:C = DE, ST = HH, L = Hamburg, O = IPFire, OU = FZeit, CN = ipfire, emailAddress = ue@xx.xx
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEhzCCA2+gAwIBAgIUbVXZ3wvfp7USYXYecZ8Ut+yK9Q8wDQYJKoZIhvcNAQEL
BQAwgYExCzAJBgNVBAYTAkRFMQswCQYDVQQIEwJCVzESMBAGA1UEBxMJS2FybHNy
dWhlMQ8wDQYDVQQKEwZJUEZpcmUxDjAMBgNVBAsTBUZaZWl0MRYwFAYDVQQDEw1p
cGZpcmUtc2VydmVyMRgwFgYJKoZIhvcNAQkBFgl1ZUB1ZS5vcmcwHhcNMTkwMzI2
MDQ1NTE2WhcNMjAwMzI1MDQ1NTE2WjCBgTELMAkGA1UEBhMCREUxCzAJBgNVBAgT
AkJXMRIwEAYDVQQHEwlLYXJsc3J1aGUxDzANBgNVBAoTBklQRmlyZTEOMAwGA1UE
CxMFRlplaXQxFjAUBgNVBAMTDWlwZmlyZS1zZXJ2ZXIxGDAWBgkqhkiG9w0BCQEW
CXVlQHVlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8vteTv
UAOsUM2yr5ztEKeUL/nZAUSWJAeDFRik+j+fYRAFUb+EW7CWyeoC6DkLtp9F+TlQ
aAKdp1R4pRrS6I34o9+VWjd38E1DQTYYE0Bez87lXn0F1e7cXtHb6qZxjQSzXWJ6
4MhS4f7/WzA8c/golcoTFlREu3kQ4Qnqgmh+qMG/+U5Hir08x8IbGcKGtWwzHqfn
H8dUaNB/pCPxSI8LKXNxeNBMpwYfxXU0NsPYLTQxHVf8dHgNAN5ZbEXP8UfJSitn
WkwnZBf/x4WdVrcKMpRL17ncR9KbkKRpP2YW/1rqq2L/8uFj2T/QiBfr9dSuUxhR
hd9+jIZD2PAiMNECAwEAAaOB9DCB8TAdBgNVHQ4EFgQUDW6FO9A2qxb5DyqXKPhE
bO/T+cAwgcEGA1UdIwSBuTCBtoAUDW6FO9A2qxb5DyqXKPhEbO/T+cChgYekgYQw
gYExCzAJBgNVBAYTAkRFMQswCQYDVQQIEwJCVzESMBAGA1UEBxMJS2FybHNydWhl
MQ8wDQYDVQQKEwZJUEZpcmUxDjAMBgNVBAsTBUZaZWl0MRYwFAYDVQQDEw1pcGZp
cmUtc2VydmVyMRgwFgYJKoZIhvcNAQkBFgl1ZUB1ZS5vcmeCFG1V2d8L36e1EmF2
HnGfFLfsivUPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAEygarf2
Rh0q6M9F0ZzJ2QaAbHA1w0lg2KDCbzWXU6j6GTvzBXegeRzKM6V3Rp5ql8IHtu81
TUWbuJnwOpPVHANpRrcbjLO4BvMp5ezkNOXfn+X0gMzHEKXuih+iKfUDMrKrMdan
dxOxdGrA01nwHWQhTPm2LBalcQanX/IaBT7jDeguPoxIiLaEpSXipyYEHrNtIqK2
YhFWNmEekjLrn65HTfuU/YB5A1oYufeTXSXNuJMdjsGqixgH24KKEitC/u5+G/eV
sXqqPf2ZBwiDG0y2YhjMedtPeDWs+p1X9PB7xPFwQ3NJlT6d+Vo3FLMxyPc+Cyaq
MhhvDOe177Evymo=
-----END CERTIFICATE-----
subject=C = DE, ST = HH, L = Hamburg, O = IPFire, OU = FZeit, CN = ipfire, emailAddress = ue@xx.xx

issuer=C = DE, ST = HH, L = Hamburg, O = IPFire, OU = FZeit, CN = ipfire, emailAddress = ue@xx.xx

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1703 bytes and written 381 bytes
Verification error: self signed certificate
---
New, TLSv1.3, Cipher is TLS_CHACHA20_POLY1305_SHA256
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self signed certificate)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_CHACHA20_POLY1305_SHA256
    Session-ID: E7EA92FCDEF338D4E066330B0416F33660FF6E80BE3CB1695F8B6D53CA69D2F0
    Session-ID-ctx: 
    Resumption PSK: 55EE2B0BF68200B084BD45B6C272E3F4A8AFC6A8DB7229CF6F5073151839A2E0
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - ff 98 7e f6 17 a0 5b cf-e5 18 b0 4f 45 9d e6 fc   ..~...[....OE...
    0010 - 10 9e 8c 69 30 5a a3 09-7f d6 26 92 26 2b 78 b5   ...i0Z....&.&+x.
    0020 - 92 03 74 92 57 38 0b cd-a0 90 ff 15 38 40 09 a8   ..t.W8......8@..
    0030 - c4 2b 02 d9 c5 ea 4b c8-6b cb e9 3a 17 3b e1 d0   .+....K.k..:.;..
    0040 - a3 e0 bd a8 d9 ed 8f 0b-4b ec a0 48 e4 44 31 1f   ........K..H.D1.
    0050 - 5a ef d6 e6 d6 96 20 42-ad 6d 9c 2b 5f b5 c4 fe   Z..... B.m.+_...
    0060 - ce 2f 59 22 8a c4 2e 54-7f d7 66 52 7c 4e e9 3e   ./Y"...T..fR|N.>
    0070 - 0d a4 ad 01 fc 55 05 68-12 43 45 a1 c0 78 f9 42   .....U.h.CE..x.B
    0080 - 37 62 6c 8a d9 e2 ab 08-12 86 da 14 4d a6 61 98   7bl.........M.a.
    0090 - 22 26 78 a1 c0 a7 ea e5-a0 66 e0 a7 0c c0 b3 2d   "&x......f.....-
    00a0 - 57 7f a8 79 f2 5a ce e8-5e 1b fb a1 ec ae bd 93   W..y.Z..^.......
    00b0 - 74 67 33 89 9d ab f7 2f-a3 d8 62 60 6c 57 32 0c   tg3..../..b`lW2.
    00c0 - 6c 7d d4 44 5c 82 46 3a-0e 4e 7b bd fa 69 c1 a5   l}.D\.F:.N{..i..

    Start Time: 1553581128
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_CHACHA20_POLY1305_SHA256
    Session-ID: CBB4997B9E9AA94F5B95FBEC0DA89964A9E945CAEFDB0322DA36BFCE5EE92481
    Session-ID-ctx: 
    Resumption PSK: 1F1F02C7B8699A87248B0E4F8D3AC1E65AE0EFC8A1F292FC7CE2027DDDFE7773
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - ff 98 7e f6 17 a0 5b cf-e5 18 b0 4f 45 9d e6 fc   ..~...[....OE...
    0010 - ec c8 c0 6a b8 d2 28 b5-10 55 b6 bf a3 31 4e bb   ...j..(..U...1N.
    0020 - 54 3b 6b 76 1a 40 6e c2-ae a0 1d d3 d5 b1 ca 8e   T;kv.@n.........
    0030 - ab 1b 5c ca 3c 94 7c 0a-de eb de fb 6e be 0f d1   ..\.<.|.....n...
    0040 - 7e 1f ff f3 13 14 d9 cc-a8 8a dd 61 6d 8f 7c dc   ~..........am.|.
    0050 - 58 2e 4e 03 46 3e ef 73-05 88 d5 55 39 b9 08 55   X.N.F>.s...U9..U
    0060 - 74 09 ec ea 62 52 6a b0-78 63 d1 8d e9 9f 32 81   t...bRj.xc....2.
    0070 - 34 15 5d 7c 7a d7 ce 09-0d 06 e5 79 b8 77 3d 23   4.]|z......y.w=#
    0080 - 21 65 2d 92 e4 ee db 3a-55 82 c1 99 c1 3c b7 96   !e-....:U....<..
    0090 - 6e 63 2e d4 7b 08 ec d5-2f 4c 4d a6 6b 31 5e a3   nc..{.../LM.k1^.
    00a0 - 1c 3b f3 b0 cf 75 e8 2a-90 6b 08 26 35 5d be ea   .;...u.*.k.&5]..
    00b0 - 3a af b0 6f 1c a4 4d 2a-7b fb 32 53 fb a4 29 d2   :..o..M*{.2S..).
    00c0 - d4 43 1e c5 7f d0 b8 15-b3 c9 3f 9f 64 01 ce 2b   .C........?.d..+

    Start Time: 1553581128
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
closed

Generell würde ich mir alle Direktiven mal anschauen und gucken ob du das so haben willst.

Grüsse,

UE
Image
Image

lenny
Posts: 406
Joined: October 4th, 2011, 12:47 pm

Re: simpler http/s Proxy

Post by lenny » March 26th, 2019, 7:12 am

Das ist ausführlich, Dankeschön! ich bin daran gescheitert, mir aus 5 Quellen eine passende Konfig zu bauen.

Ich werde das mal die nächsten Tage bei mir einbauen, aber viel schiefgehen kann da fast nicht mehr. Vielen Dank!!

ummeegge
Community Developer
Community Developer
Posts: 5001
Joined: October 9th, 2010, 10:00 am

Re: simpler http/s Proxy

Post by ummeegge » March 29th, 2019, 12:57 pm

Jo bitte,
aber denk dran das ist nun relativ spezifisch für meine Anwendung da ist nichts wegen Caching (usw.) drinne da ich bei Netdata schnelle Aktualisierungen brauch, der Gedanke war dir eine Grundlage zu posten mit der du auf deinen Usecase event. aufbauen kannst :) .

Grüssle,

UE
Image
Image

Post Reply