J'essaie de rendre mon environnement de trafic sortant et entrant aussi légitime que possible du trafic SSL que possible. Y a-t-il un moyen de dpi mon propre trafic de s'assurer qu'il ressemble à la circulation SSL et non à OpenVPN Trafic? Et sur la base de mon configuration Configuration de tout le trafic Utilisez le port 443 qui est le port SSL?
Ma configuration est la suivante:
Stunnel sur ordinateur portable:
[openvpn]
# Set sTunnel to be in client mode (defaults to server)
client = yes
# Port to locally connect to
accept = 127.0.0.1:1194
# Remote server for sTunnel to connect to
connect = REMOTE_SERVER_IP:443
OpenVPN config sur ordinateur portable:
client
dev tun
proto tcp
remote 127.0.0.1 1194
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
Stunnel Config sur le serveur:
sslVersion = all
options = NO_SSLv2
;chroot = /var/lib/stunnel4/
; PID is created inside the chroot jail
pid = /stunnel4.pid
; Debugging stuff (may useful for troubleshooting)
debug = 7
output = /var/log/stunnel4/stunnel4.log
setuid = root
setgid = root
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
compression = zlib
[openvpn]
accept = REMOTE_SERVER_IP:443
connect = REMOTE_SERVER_IP:11440
cert=/etc/stunnel/server.pem
key=/etc/stunnel/server.key
Openvpn config sur le serveur:
local REMOTE_SERVER_IP
port 11440
proto tcp
Votre VPN utilise TCP comme un protocole de transport. L'instance Stunnel est utilisée pour encapsuler le contenu du TCP Stream dans TLS/TCP. Vous obtenez ce protocole empiler:
[IP] <---------------------------> [IP] [.____] [openvpn] <- -----------------------> [OpenVPN] [.____] [TLS] <~~~~~> [TLS] [.____] [TCP] <-> [TCP] <-----> [TCP] <-> [TCP] [.____] [IP] <-> [IP] <-----> [ IP] [] [] [] [] Serveur Stunnel Stunnel Client
Entre les instances stunels, vous avez cette pile de protocole sur le fil:
[IP] [.____] [OpenVPN] [.____] [TLS] [.____] [TCP (443)] [. ____] [. ..]
Comme la TLS crypte sa charge utile, un attaquant ne peut que voir:
[.____] [??? ] [TLS] [.____] [TCP (443)] [.____] [IP] [.____] [...] [...]
Donc, oui, c'est un trafic de TLS uni (il pourrait être http/tls, smtp/tls, pop/tls, pop/tls ou autre chose pour une personne qui regarde la circulation, mais elle ressemble beaucoup à HTTP/TLS comme TCP Port 443 est utilisé). Vous pouvez vérifier cela à l'aide de WireShark: enregistrez le trafic entre les instances stunels. Dans l'interface utilisateur Wireshark (bouton droite sur un paquet du flux), vous pouvez demander à WireShark d'interpréter le trafic comme TLS : Il le reconnaîtra en tant que trafic TLS (vous verrez les différents messages TLS mais pas la charge utile de la session TLS).
Vous pouvez utiliser [~ # ~] SNI [~ # ~] dans le client afin de ressembler à ce qu'est un navigateur moderne ferait. Vous pouvez utiliser [~ # ~] ALPN [~ # ~] aussi bien mais stunnel ne gère pas actuellement que.
En comparaison, si vous utilisez OpenVPN, vous aurez quelque chose comme ceci:
[IP] [.____] [OpenVPN] [.____] [TCP] [IP] [.____] [.____]
Qui ressemble à ceci:
[.____] [??? ] [openvpn] [.____] [TCP] [.____] [IP] [.____] [...] [.____]
La couche TLS intégrée n'envoie pas les paquets (IP, Ethernet) mais n'est utilisé que pour la configuration de la session et l'authentification:
[TLS] [.____] [openvpn] [.____] [TCP] [.____] [IP] [.____] [.____]
Dans ce cas, votre trafic est pas ressemble à un trafic ordinaire TLS mais est évidemment openvpn. Si vous interprétez ce trafic comme OpenVPN dans Wireshark, vous reconnaîtrez les messages OpenVPN et l'intérieur d'eux les messages TLS (mais pas la charge utile).
Vous devez savoir que si un attaquant passif ne sera pas capable de dire que votre serveur distant est en fait un serveur OpenVPN, un attaquant actif pourra le savoir: simplement en vous connectant à votre serveur sur TLS, il sera capable Pour confirmer que c'est non un serveur HTTP/TLS. En essayant de parler du protocole OpenVPN, il sera capable de détecter que votre serveur est un serveur OpenVPN/TLS.
Vous êtes inquiet à ce sujet, vous pouvez activer l'authentification client TLS: un attaquant ne sera pas en mesure d'initier une session TLS de travail et ne sera pas en mesure de deviner quelle charge utile est encapsulée sur TLS.
* AVERTISSEMENT: ** Je ne parle pas du support TLS intégré dans OpenVPN (voir ci-dessus pour en explication sur la raison pour laquelle cela ne vous aidera pas).
Une autre solution consiste à servir à la fois HTTP et OpenVPN sur la session TLS. sslh peut être utilisé pour détecter automatiquement la charge utile du protocole et expédier à un serveur HTTP/TCP ordinaire ou votre serveur OpenVPN/TCP. Le serveur ressemblera à un serveur HTTP/TLS standard, mais une personne qui tente de parler OpenVPN/TLS avec ce serveur sera capable de détecter qu'il s'agit également d'un serveur OpenVPN/TLS également.
OpenVPN/TCP [.____] ou http/tcp [.____] [1] .-------------. .-------. Http/tcp .---------------. -> | Stunnel | ----> | SSLH | --------> | Serveur http | [.____] '------------------' | '----------------' [.____] | .-------------------. [.____] '-------> | | OpenVPN Server | [.____] OpenVPN/TCP '----------------------' [.____] [.____] [1] = OpenVPN/TLS/TCP ou Http/tls/tcp
Une autre solution consiste à utiliser un serveur HTTP/TLS standard et utiliser HTTP Connect/TLS pour se connecter au serveur OpenVPN: il ressemblera à un serveur HTTP standard. Vous pouvez même avoir besoin d'une authentification du client afin d'autoriser la demande de connexion HTTP (Squid devrait pouvoir le faire).
OpenVPN a une option d'utiliser un proxy HTTP:
http-proxy proxy.example.com
Vous devriez être capable de le combiner avec une instance stunnel qui se connecte à un proxy distant HTTPS:
http-proxy 127.0.0.1 8443
remote vpn.example.com
Qui implémenterait cette pile de protocoles:
[IP] <---------------------------> [IP] [.____] [openvpn] <- -----------------------> [OpenVPN] [.____] [http] <----------------------> [http] [TLS] <~~~~~> [TLS] [.____] [TCP] <-> [TCP] <------> [TCP] <-> [TCP] [IP] <-> [IP] <-----> [IP] <-> [IP] [] [] [] [] [] Server HTTPS Proxy Stunnel Client