GNU/Linux >> Znalost Linux >  >> Linux

omráčit provoz vpn a zajistit, aby vypadal jako provoz SSL na portu 443

Řešení 1:

OpenVPN přes TLS

Vaše VPN používá TCP jako přenosový protokol. Instance stunnelu se používá k zapouzdření obsahu toku TCP v TLS/TCP. Získáte tento zásobník protokolů:

[IP     ]<------------------------>[IP     ]
[OpenVPN]<------------------------>[OpenVPN]
            [TLS   ]<~~~~~>[TLS]
[TCP    ]<->[TCP   ]<----->[TCP]<->[TCP    ]
[IP     ]<->[IP    ]<----->[IP ]<->[IP     ]
[       ]   [      ]       [   ]   [       ]
 Server      stunnel      stunnel  Client

Mezi instancemi stunnelu máte na drátě tento zásobník protokolů:

[IP      ]
[OpenVPN ]
[TLS     ]
[TCP(443)]
[IP      ]
[...     ]

Protože TLS šifruje svůj datový obsah, útočník vidí pouze:

[???     ]
[TLS     ]
[TCP(443)]
[IP      ]
[...     ]

Takže ano, je to prostý provoz TLS (může to být HTTP/TLS, SMTP/TLS, POP/TLS nebo cokoli jiného pro někoho, kdo se dívá na provoz, ale vypadá to hodně jako HTTP/TLS, protože se používá TCP port 443). Můžete to zkontrolovat pomocí wireshark:zaznamenejte provoz mezi instancemi stunnelu. V uživatelském rozhraní wireshark (pravé tlačítko na paketu streamu) můžete požádat wireshark, aby provoz interpretoval jako TLS:rozpozná jej jako provoz TLS (uvidíte různé zprávy TLS, ale ne užitečné zatížení relace TLS) .

Možná budete chtít použít SNI v klientovi, abyste vypadali jako moderní prohlížeč. Možná budete chtít použít také ALPN, ale stunnel to v současnosti nezvládá.

OpenVPN s vestavěným TLS

Pro srovnání, pokud používáte OpenVPN, budete mít něco takového:

[IP      ]
[OpenVPN ]
[TCP     ]
[IP      ]
[...     ]

Což vypadá takto:

[???     ]
[OpenVPN ]
[TCP     ]
[IP      ]
[...     ]

Vestavěná vrstva TLS nezapouzdřuje pakety (IP, Ethernet), ale používá se pouze pro nastavení relace a ověřování:

[TLS     ]
[OpenVPN ]
[TCP     ]
[IP      ]
[...     ]

V tomto případě váš provoz není vypadat jako prostý provoz TLS, ale je to zjevně OpenVPN. Pokud tento provoz interpretujete jako OpenVPN ve wireshark, rozpoznáte zprávy OpenVPN a uvnitř nich zprávy TLS (ale ne užitečné zatížení).

Upozornění

Měli byste si být vědomi toho, že pokud pasivní útočník nebude schopen říct, že váš vzdálený server je ve skutečnosti server OpenVPN, aktivní útočník to bude moci zjistit:jednoduše připojením k vašemu serveru přes TLS bude schopen pro potvrzení, že není HTTP/TLS server. Když se pokusí mluvit protokolem OpenVPN, bude schopen zjistit, že váš server je server OpenVPN/TLS.

OpenVPN přes TLS s ověřením klienta

Pokud se toho obáváte, můžete povolit ověřování klienta TLS:útočník nebude schopen zahájit pracovní relaci TLS a nebude schopen odhadnout, která datová část je zapouzdřena přes TLS.

*Upozornění:** Nemluvím o vestavěné podpoře TLS v OpenVPN (viz výše pro vysvětlení, proč vám to nepomůže).

Multiplexní OpenVPN/TLS a HTTP/TLS

Dalším řešením je obsluhovat HTTP i OpenVPN přes relaci TLS. sslh lze použít k automatické detekci užitečného zatížení protokolu a odeslání buď na prostý HTTP/TCP server, nebo na váš OpenVPN/TCP server. Server bude vypadat jako standardní HTTP/TLS server, ale někdo, kdo se pokusí mluvit OpenVPN/TLS s tímto serverem, bude schopen zjistit, že se ve skutečnosti také jedná o OpenVPN/TLS server.

        either OpenVPN/TCP
          or HTTP/TCP       
[1].---------.     .------.HTTP/TCP.-------------.
-->| stunnel |---->| sslh |------->| HTTP server |
   '---------'     '------'|       '-------------'
                           |       .----------------.
                           '------>| OpenVPN server |
                        OpenVPN/TCP'----------------'

[1]= Either OpenVPN/TLS/TCP or HTTP/TLS/TCP

OpenVPN přes HTTP CONNECT přes TLS

Dalším řešením je použít standardní HTTP/TLS server a použít HTTP CONNECT/TLS pro připojení k OpenVPN serveru:bude to vypadat jako standardní HTTP server. Můžete dokonce vyžadovat ověření klienta pro autorizaci požadavku HTTP CONNECT (chobotnice by to měla umět).

OpenVPN má možnost použít HTTP Proxy:

http-proxy proxy.example.com

Měli byste to být schopni zkombinovat s instancí stunnelu, která se připojuje ke vzdálenému HTTPS PROXY:

http-proxy 127.0.0.1 8443
remote vpn.example.com

Což by implementovalo tento zásobník protokolů:

[IP     ]<------------------------>[IP     ]
[OpenVPN]<------------------------>[OpenVPN]
            [HTTP  ]<------------->[HTTP   ]
            [TLS   ]<~~~~~>[TLS]
[TCP    ]<->[TCP   ]<----->[TCP]<->[TCP    ]
[IP     ]<->[IP    ]<----->[IP ]<->[IP     ]
[       ]   [      ]       [   ]   [       ]
 Server    HTTPS PROXY     stunnel   Client

Řešení 2:

Odpověď ysdx je skvělá a velmi dobře popisuje, jak bude provoz vypadat na drátě.

Nezmíněno však je, že analýza provozu může jít dlouhou cestou k identifikaci aplikací.

Předpokládejme, že vaše připojení OpenVPN vypadá stejně jako připojení https na drátě, takže útočník nemůže číst bajtový stream a vědět, o jaký druh připojení se jedná.

Typické připojení https nebude žít příliš dlouho. Možná váš prohlížeč udržuje otevřené připojení k vašemu poštovnímu serveru, nevím. Obecně však bude existovat spousta relativně krátkých připojení k mnoha různým vzdáleným serverům.

OTOH, připojení OpenVPN může trvat hodiny nebo dny a bude odesílat spoustu dat tam a zpět na server openvpn.

Dlouhotrvající připojení můžete zmírnit pravidelným rušením a restartováním připojení. To má pravděpodobně důsledky pro provoz vaší aplikace, ale mohlo by to být funkční. Vzorec velkého a velkého provozu mezi vámi a serverem openvpn však bude mnohem těžší maskovat.


Linux
  1. Najděte soubory a adresáře v Linuxu jako profík

  2. Jak otevřít port 80 a 443 ve FirewallD

  3. Jak zabezpečit název hostitele Plesk na portu 8443 pomocí certifikátu SSL

  1. sledovat konkrétní IP a port

  2. Povolit procesu bez oprávnění root navázat se na port 80 a 443?

  3. Zabránění jiným aplikacím ve spojení s porty 80 a 443

  1. Co je to SSL VPN?

  2. Jak opravit problém s protokolem Curl TLS SSL z kódu CLI a PHP

  3. Čtení a zápis na sériový port v C na Linuxu