anfass
Goto Top

Iptables outbound redirect zu forward proxy

Hallo in die Runde,

habe ein kniffeliges Thema.
Möchte in einer ziemlich abgeschotteten Umgebung eine Software betreiben (unter Linux), die leider die Umgebungsvariablen
http_proxy
https_proxy
ignoriert.
Konsequenz:
Anfragen der Anwendung nach außen gehen über das Standard-Gateway, es muss aber der Proxy genutzt werden.
Das sah eigentlich vielversprechend aus.
iptables -t nat -A OUTPUT -p tcp  --dport 443 -j DNAT --to-destination 172.17.20.254:8080
Vorher:
# telnet www.zdf.de 443
Trying 23.42.173.131...
^C

Nachher
# iptables -t nat -A OUTPUT -p tcp  --dport 443 -j DNAT --to-destination 172.17.20.254:8080
[# telnet www.zdf.de 443
Trying 23.42.173.131...
Connected to www.zdf.de.
Escape character is '^]'.  
sf
 400 badrequest
Connection: Close

Somit geht die Anfrage durch, aber - das McAfee Web Gateway zickt.

Test mit Curl:
über den Standardweg (https_proxy gesetzt):

# curl -I https:{{comment_single_line_double_slash:0}}
HTTP/1.0 200 Connection established

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Pragma: cache

Mit dem iptables-Ansatz

curl -I https://www.zdf.de
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number

Werde auch mal ein Ticket bei McAfee aufmachen, aber vielleicht kennt ja jemand diese Thematik (ist aber schon sehr speziell).

LG
Andreas

Content-ID: 62416041347

Url: https://administrator.de/contentid/62416041347

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

10138557388
10138557388 15.01.2024 aktualisiert um 12:08:19 Uhr
Goto Top
Bei einem DSTNAT auf das Webgateway muss der Proxy im Transparent Router Mode laufen.
Siehe Handbuch zum McAffee Web Gateway.
Topics im Handbuch
  • Network modes
  • Transparent Proxy with WCCP mode
  • Redirecting web traffic under WCCP

pj.
anfass
anfass 15.01.2024 um 14:13:43 Uhr
Goto Top
Hi, vielen Dank schon mal für die erste Antwort.

Das ist aber vermutlich nicht die Lösung, die gebraucht wird.

You can configure one of the following setups:
• Proxy HA (High Availability)
• Proxy with external load balancing
• Transparent router
• Transparent bridge

Und vermutlich gilt das dann für alle anderen Zugriffe.
Frage - gibt es eine Möglichkeit per iptables noch etwas zu ändern? Ich habe da die Option "Masquerade" gesehen, bin mir aber nicht sicher, wie man das dann konfigurieren würde.

Oder müsste man dann eine eigene Appliance auf dem Webgateway konfigurieren, die dann im Transparent Router Mode läuft. Kenne das Produkt leider überhaupt nicht.
anfass
anfass 15.01.2024 um 15:11:09 Uhr
Goto Top
Noch ein update:
Für http Traffic funktioniert das DNAT.

$ curl -I http://www.zdf.de
HTTP/1.1 301 Moved Permanently
Date: Mon, 15 Jan 2024 14:06:56 GMT
Location: https://www.zdf.de/
X-Varnish: 283774197
Für https aber nicht:
$ curl -I https://www.zdf.de
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
10138557388
10138557388 15.01.2024 aktualisiert um 15:22:57 Uhr
Goto Top
Zitat von @anfass:
Das ist aber vermutlich nicht die Lösung, die gebraucht wird.
Doch.
Und vermutlich gilt das dann für alle anderen Zugriffe.
Nein nur die bei denen du als Default GW den Proxy einträgst.
Frage - gibt es eine Möglichkeit per iptables noch etwas zu ändern? Ich habe da die Option "Masquerade" gesehen, bin mir aber nicht sicher, wie man das dann konfigurieren würde.
Das brauchst du hier nicht du willst ja nicht die Absender-IP umschreiben
Oder müsste man dann eine eigene Appliance auf dem Webgateway konfigurieren, die dann im Transparent Router Mode läuft. Kenne das Produkt leider überhaupt nicht.
Kommt drauf an wie dein Netz aussieht.
anfass
anfass 15.01.2024 um 16:28:22 Uhr
Goto Top
Hi,

noch mal danke. Ich habe das mal so an den Webproxy Betrieb gegeben, bzw. die machen auch ein Ticket auf bei Skyhigh (McAfee hat das Produkt verkauft).
https://success.myshn.net/Skyhigh_Secure_Web_Gateway_(On_Prem)/Secure_We ...
anfass
anfass 15.01.2024 um 16:36:47 Uhr
Goto Top
Ich habe auch noch was gefunden :
https://superuser.com/questions/1754642/ssl-error-wrong-version-number
da war der Hinweis "Proxy Konfiguration" zusehen.

noch mal der Unterschied mit mehr Infos via Curl:
- ohne Env-Variable http-proxy gesetzt (mit iptables redirect)
$ curl -vLk https://www.zdf.de 
* Rebuilt URL to: https://www.zdf.de/
*   Trying 23.67.164.215...
* TCP_NODELAY set
* Connected to www.zdf.de (23.67.164.215) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number

mit variable gesetzt:
#  curl -vLk https:{{comment_single_line_double_slash:0}}
* Uses proxy env variable https_proxy == 'http://proxy.xxx.de:8080/'  
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 172.17.20.254...
* TCP_NODELAY set
* Connected to proxy.xxx.de (172.17.20.254) port 8080 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to www.zdf.de:443
> CONNECT www.zdf.de:443 HTTP/1.1
> Host: www.zdf.de:443
> User-Agent: curl/7.61.1
> Proxy-Connection: Keep-Alive
> 
< HTTP/1.0 200 Connection established
< 
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* CONNECT phase completed!
* CONNECT phase completed!
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, [no content] (0):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [35 bytes data]
* TLSv1.3 (IN), TLS handshake, [no content] (0):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [3624 bytes data]
* TLSv1.3 (IN), TLS handshake, [no content] (0):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.3 (IN), TLS handshake, [no content] (0):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=DE; ST=Rheinland-Pfalz; L=Mainz; O=Zweites Deutsches Fernsehen A?R; CN=www.zdf.de
*  start date: May  9 00:00:00 2023 GMT
*  expire date: May  8 23:59:59 2024 GMT
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS RSA SHA256 2020 CA1
*  SSL certificate verify ok.
} [5 bytes data]
* TLSv1.3 (OUT), TLS app data, [no content] (0):
} [1 bytes data]
> GET / HTTP/1.1
> Host: www.zdf.de
> User-Agent: curl/7.61.1
10138557388
10138557388 15.01.2024 aktualisiert um 16:59:38 Uhr
Goto Top
Du musst wie gesagt auf transparent Mode umstellen sonst klappt https nicht.
Der Port auf den du weiterleitest läuft im Transparent Mode nur mit http, https hat andere Protokoll-Voraussetzungen durch die SSL Verschlüsselung, das geht so nicht!
Wie oft denn noch?
RTFM!
anfass
anfass 15.01.2024 um 17:17:28 Uhr
Goto Top
Hi,

klar - RTFM ist natürlich auch mein Credo face-smile
Habe das ja auch den Kollegen gegeben, aber wollte nur noch mal nachfragen, ob es andere Optionen gibt.

Dann warten wir mal ab.

Besten Dank schon mal,

LG