Crée un VPN pour client mobile



  • Bonjour tout le monde, pour le moment mon PFsense (v2.2.6) n'est pas en prod,
    J'ai un WAN en 192.168.0.0/24 et un 192.168.1.0/24 en LAN.

    Le but premier de mon PFsense et de pouvoir crée un vpn vers ma petite SSII depuis un téléphone androïde ou un Windows 7/8/10 en plus de la facilité à géré les règles du firewall. J'ai tester OpenVPN mais je n'arrive pas à comprendre comment générer mon certificat et ma clé pour mon client ni trop comment lui "envoyer"
    j'ai suivie ce tuto à la lettre qui est super bien construit pour le L2TP depuis un client brancher sur le WAN mais, je n'arriver pas a me connecter, erreur 789
    https://doc.pfsense.org/index.php/L2TP/IPsec

    Voila je mouline dans le vide depuis quelques jours, si vous prouvez m’éclairer sur quel solution privilégier coter serveur et coter client

    ps: niveau règle dans le :
    WAN j'autorise le ICMP, le port 500 en UDP (pour le vpn !?) et je bloque le reste.
    LAN 80 et 443 (http/s) 8530 et 8531 (maj windows) 119 (srv de temps) 53 (dns) (icmp) 21 (ftp) 25,465,110(mail) et le reste est bloqué

    Si j'ai fait une ânerie, je vous autorise à hurler  :D



  • Je n'ai pas encore regardé ton lien mais j'ai l’impression que tu mélanges les ports OpenVPN et les port IPsec.
    Les certificats, tu peux les gérer sur pfSense facilement, même si les puristes préfèrent, et ça a du sens lorsque tu as besoin de gérer une vraie PKI, le faire sur un serveur externe. Il faut créer ta CA, générer un certificat pour le serveur pfSense et un certificat pour le compte utilisateur.

    Il existe ensuite un package très pratique qui permet de faire un bundle pour exporter à la fois le code OpenVPN client et les packages associés avec la bonne configuration.

    Bref, en mode "basique pour faire des tests", OpenVPN sur pfSense, c'est très facile

    En ce qui concerne les ports que tu ouvres:
    500 en UDP c'est pour IPSec, par pour OpenVPN

    sur les ports sortants: 110 signifie que tu fais du POP3, même pas du POP/S ?
    et 465…. bof  tu as vraiment un fournisseur de mail qui te demande cette conf ?  l'envoi de mail, c'est 587 (smtp mail submission)  465 c'est une invention ancienne de Microsoft mais je pensais que tout le monde l'avait laissé tomber  ???



  • quel solution privilégier coter serveur et coter client

    La question est bien : quelle solution privilégier côté client ? Ce qui induit le côté serveur nécessairement. L2TP : bof.
    Dans ce cas : Open vpn. Le seul port nécessaire sur l'interface wan de Pfsense est le 1194/UDP. Vous pouvez laisser de côté L2TP. Sinon Ipsec. Il faut installer un client OPenvpn sur le smartphone.
    Ensuite vous ajouterez des règles dans l'interface OpenVPN qui sera accessible dès lors que vous aurez activé votre serveur VPN sur Pfsense.



  • Pour commencer, merci pour vos réponses  ;D

    L2TP oui j'avais lu que c'était pas top, j'avais déjà essayer OpenVPN sur une debian du coup c'est ce que je voulais utiliser en premier, j'ai crée ma CA sur pfsense mais je ne sais pas trop quoi mettre dans mon certificat client ? Pour ma config coter client, quelle points important a mettre dans le .ovpn ?

    Le 465 c'est pour le téléphone d'un collègue apparemment ….



  • Il suffit de renseigner les champs comme demandé non ? Je ne comprend pas votre problème.

    Un .ovpn basique :

    dev tun
    persist-tun
    persist-key
    cipher AES-192-CBC
    auth SHA1
    tls-client
    client
    resolv-retry infinite
    remote ip 1194 udp
    lport 0
    verify-x509-name "srv.domaine.fr" name
    pkcs12 fichier.p12
    tls-auth user-tls.key 1
    ns-cert-type server
    route-method exe
    route-delay 2
    auth-user-pass
    auth-nocache
    

    route-method exe et route-delay 2 concerne principalement les clients win 7.
    auth sha1 n'est pas idéal, préférer sha256.



  • J'ai tester ton script mais quand je rentre un utilisateur et son mdp (il est dans le groupe admins ça devrai être bon) j'ai un échec de connexion, sinon avec un autre script que j'ai adapter j'ai l'impression que j'y suis presque !

    script:

    client
    dev tun
    proto udp
    port 1194
    remote 192.168.1.2 1194
    persist-key
    persist-tun
    ca ca.crt
    cert client1.crt
    key client1.key
    verb 4

    log client :

    Wed Apr 13 11:57:54 2016 us=495554 TLS: Initial packet from [AF_INET]192.168.1.2:1194, sid=f419a3e1 779258a4
    Wed Apr 13 11:57:54 2016 us=516054  VERIFY OK: depth=1, C=FR, ST=xxxxx, L=xxxx, O=xxxxx, emailAddress=g.sommer@xxxxx.com, CN=xxx.local
    Wed Apr 13 11:57:54 2016 us=516554 VERIFY OK: depth=0, C=FR, ST=xxxxxx, L=xxxxx, O=xxxxx, emailAddress=g.sommer@xxx.com, CN=xxx.local
    Wed Apr 13 11:58:54 2016 us=527054 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
    Wed Apr 13 11:58:54 2016 us=527054 TLS Error: TLS handshake failed

    log srv :

    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 Local Options String: 'V4,dev-type tun,link-mtu 1557,tun-mtu 1500,proto UDPv4,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 Expected Remote Options String: 'V4,dev-type tun,link-mtu 1557,tun-mtu 1500,proto UDPv4,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 Local Options hash (VER=V4): 'b7f67de4'
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 Expected Remote Options hash (VER=V4): '8326dbaa'
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 TLS: Initial packet from [AF_INET]192.168.1.98:1194, sid=f3543470 939c4d9d
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 VERIFY ERROR: depth=0, error=unsupported certificate purpose: C=FR, ST=xxxxxxx, L=xxxxxx, O=xxxxxx, emailAddress=g.sommer@xxxxxxxxx.com, CN=xxx.local
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 TLS_ERROR: BIO read tls_read_plaintext error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 TLS Error: TLS object -> incoming plaintext read error
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 TLS Error: TLS handshake failed
    Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 SIGUSR1[soft,tls-error] received, client-instance restarting
    Apr 13 11:58:38 openvpn[67463]: MANAGEMENT: Client connected from /var/etc/openvpn/server1.sock
    Apr 13 11:58:38 openvpn[67463]: MANAGEMENT: CMD 'status 2'
    Apr 13 11:58:38 openvpn[67463]: MANAGEMENT: CMD 'quit'
    Apr 13 11:58:38 openvpn[67463]: MANAGEMENT: Client disconnected



  • Apr 13 11:57:54 openvpn[67463]: 192.168.1.98:1194 TLS: Initial packet from [AF_INET]192.168.1.98:1194,

    Comment réalisez vous le test ? (Les connexions depuis le lan ne permettent pas un test correct).



  • Que de mélanges ! (Ipsec vs OpenVPN et maintenant User vs certificat)

    je rentre un utilisateur et son mdp (il est dans le groupe admins ça devrai être bon)

    Les users du firewall n'ont presque aucun intérêt et ne doivent pas être confondus avec les certificats !!

    OpenVPN peut (doit) s'appuyer sur les certificats générés par 'Cert Manager' (par exemple).
    Il faut créer une CA (Autorité de certification), un certificat 'Serveur' à renseigner dans le serveur OpenVPN, des certificats 'Users' qui seront indiqués dans le fichier côté client.
    De plus, le serveur OpenVPN indique une clé 'tls' à indiquer côté client. (faire un fichier et l'indiquer dans la ligne tls). Cela est manquant et clairement indiqué comme erreur dans les logs !

    Concernant le test, il est clair qu'il doit être fait … de l'extérieur !



  • ccnet non pour le moment mon lan est en 192.168.0.0 et mon wan en 192.168.1.0, plus tard en prod ce sera le contraire. Pourquoi je ne commence pas directement dans le bon sens ? Pour ne pas toucher au paramètre ip de mon routeur …

    jdh, oui j'avais compris qu'il ne servais pas a grand chose les users de mon pfsense, du coup quoi renseigner quand il me pose la question ? Oui je doit avouer que j'ai du mal avec la notion d'autorité de certification et les certifia délivrés.  :(





  • Non.
    Avez vous bien créé un certificat (signé par la CA) et une clé pour le serveur avant de tenter une connexion ?
    Il ne serait pas inutile de lire un de littérature sur le fonctionnement des certificats et leurs principes d'utilisation.



  • ENFIN !!!! j'utilisais le certificat appeler "User Cert" du coup je m'en suis crée un qui s'appel "client1" en internal Certificate
    Key length: 1024 bits
    Digest Algorithm: sha1 (je sais que le sha1 a été casser je passerai a mieux)
    Certificate Type: User Certificate

    Bingo ^^ connecter avec l'ip assignée 192.168.0.6. Je savais que j'était pas loin, j'ai juste changer mon télécharger mon client1.crt et .key depuis le précédent post avec les mêmes config, je vais voir pour améliorer le truck puis mettre en prod

    Des bisous tous le monde  :-* merci de votre aide ça ma bien avancé !

    ps: si jamais vous avez d'autre remarque points important je suis preneur :D

    edit: je suis repasser avec un certificat en sha256 et connexion en aes-192-cbc et ça passe tout debout !



  • Key length: 1024 bits

    La recommandation pour la protection d'informations à l'horizon 2020 est d'utiliser des clés de 2048 bits.
    Pensez à filtrer les flux sur l'interface OPenvpn.
    Forcez le routage des connexions vers internet par l'infrastructure distante et non directement depuis le PC : push "redirect-gateway".



  • En sus de ccnet, outre des clés de longueur 2048 bits,

    il faut aussi activer la ligne 'tls-auth xxxxx.key 1' avec xxxxx.key fichier qui contient la clé tls visible dans le serveur OpenVPN

    cf site Openvpn : https://openvpn.net/index.php/open-source/documentation/howto.html

    Hardening OpenVPN Security

    One of the often-repeated maxims of network security is that one should never place so much trust in a single security component that its failure causes a catastrophic security breach. OpenVPN provides several mechanisms to add additional security layers to hedge against such an outcome.
    tls-auth

    The tls-auth directive adds an additional HMAC signature to all SSL/TLS handshake packets for integrity verification. Any UDP packet not bearing the correct HMAC signature can be dropped without further processing. The tls-auth HMAC signature provides an additional level of security above and beyond that provided by SSL/TLS. It can protect against:

    DoS attacks or port flooding on the OpenVPN UDP port.
        Port scanning to determine which server UDP ports are in a listening state.
        Buffer overflow vulnerabilities in the SSL/TLS implementation.
        SSL/TLS handshake initiations from unauthorized machines (while such handshakes would ultimately fail to authenticate, tls-auth can cut them off at a much earlier point).

    Using tls-auth requires that you generate a shared-secret key that is used in addition to the standard RSA certificate/key:

    openvpn –genkey --secret ta.key

    This command will generate an OpenVPN static key and write it to the file ta.key. This key should be copied over a pre-existing secure channel to the server and all client machines. It can be placed in the same directory as the RSA .key and .crt files.

    In the server configuration, add:

    tls-auth ta.key 0

    In the client configuration, add:

    tls-auth ta.key 1



  • Pour Les 2048 bits, c'est bon par contre pour le tls j'ai deux questions.
    Je coche les deux casses Enable authentication of TLS packets et automatically generate a shared TLS authentication key, juste le premier ou pas besoin ? (je pense pas)
    Il sort d'où le ta.key ? ??? Faut crée un certificat et le mettre sur serveur et le client !? Faut mettre quelque chose de particulier ? Ou alors c'est la key de mon CA ?



  • Re à tous, pourquoi chercher compliquer quand c'est simple !?  ::)

    ajouter la ligne dans la conf client : tls-auth ta.key 1

    cocher Enable authentication of TLS packets dans la conf serveur openVPN, on copie/colle dans un block note que l'on renomme en ta.key et c'est tout bon

    la version 2.2.6 est vraiment bien pour les néophyte de FreeBSD et puis c'est plus pratique que putty