« IPsec sous debian avec strongswan » : différence entre les versions

Aller à la navigation Aller à la recherche
(27 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:debian]]
[[Category:networking]]
[[Category:VPN]]
[[Category:IPsec]]
<pre>
<pre>
aptitude install strongswan strongswan-swanctl
aptitude install strongswan strongswan-swanctl
</pre>
</pre>


=Tunnel VTI, authentifié par clés RSA, compatible avec pfsense=
Basé sur https://wiki.strongswan.org/projects/strongswan/wiki/RouteBasedVPN <br><br>
Dans <code>/etc/strongswan.d/charon.conf</code>, ajoutez l'option suivante :
<pre>install_routes = no</pre>
==Définition des clés RSA==
Placer la CA dans <code>/etc/ipsec.d/cacerts</code> puis :
Placer la CA dans <code>/etc/ipsec.d/cacerts</code> puis :
<pre>
<pre>
Ligne 14 : Ligne 27 :
Il faut définir la clé privé dans <code>/etc/ipsec.secrets</code> sous le format <code>ID : TYPE KEY</code>. L'ID peut être vide, contenir une ip, un FQDN, user@FQSN, %any ou any6. TYPE est PSK ou RSA. KEY peut être soit une clé, soit un chemin vers une clé.  
Il faut définir la clé privé dans <code>/etc/ipsec.secrets</code> sous le format <code>ID : TYPE KEY</code>. L'ID peut être vide, contenir une ip, un FQDN, user@FQSN, %any ou any6. TYPE est PSK ou RSA. KEY peut être soit une clé, soit un chemin vers une clé.  
<pre>: RSA /etc/ipsec.d/private/mykey.key</pre>
<pre>: RSA /etc/ipsec.d/private/mykey.key</pre>
=VTI auth RSA=
/etc/strongswan.d/charon.conf -> install_routes = no


==ipsec.conf==
==ipsec.conf==
Ligne 63 : Ligne 73 :
         rightsubnet = 10.66.10.1
         rightsubnet = 10.66.10.1
         mark = 42
         mark = 42
        leftupdown = /etc/ipsec.updown
</pre>
</pre>
Notez l'option <code>mark = 42</code> qui devra être équivalente sur la définition du tunnel VTI au niveau de linux, sinon les paquets le traverserons pas ipsec.


==Lancement==
==Lancement==
Ligne 72 : Ligne 83 :
ipsec status
ipsec status
ipsec statusall
ipsec statusall
</pre>
Vous pouvez observer l'état des politiques de sécurité installés :
<pre>
ip xfrm state
ip xfrm policy
</pre>
</pre>


==création de l'interface==
==création de l'interface==
Afin de simplifier les règles, définissez les variables suivantes dans votre shell :
<pre>
<pre>
LOCAL_IP=211.124.34.153
LOCAL_IP=211.124.34.153
Ligne 80 : Ligne 98 :
LOCAL_TUNNEL=10.66.10.2
LOCAL_TUNNEL=10.66.10.2
REMOTE_TUNNEL=10.66.10.1
REMOTE_TUNNEL=10.66.10.1
</pre>


Création du tunnel VTI linux :
<pre>
ip tunnel add ipsec0 local $LOCAL_IP remote $REMOTE_IP mode vti okey 42 ikey 42
ip tunnel add ipsec0 local $LOCAL_IP remote $REMOTE_IP mode vti okey 42 ikey 42
ip link set ipsec0 up
ip link set ipsec0 up
ip addr add ${LOCAL_TUNNEL}/30 remote ${REMOTE_TUNNEL}/30 dev ipsec0
ip addr add ${LOCAL_TUNNEL}/30 remote ${REMOTE_TUNNEL}/30 dev ipsec0
sysctl -wq net.ipv4.conf.ipsec0.disable_policy=1 #recommandé
</pre>
</pre>


<code>okey</code> et <code>ikey</code> (qui peuvent être substitué par un seul et unique <code>key</code>) doivent être équivalent à la <code>mark</code> défini dans ipsec.conf
<br><br>
A ce stade, seul le tunnel sera joignable (10.66.10.1 et 10.66.10.2) car ipsec a installé une policy restrictive (<code>ip xfrm policy</code>).<br>
A ce stade, seul le tunnel sera joignable (10.66.10.1 et 10.66.10.2) car ipsec a installé une policy restrictive (<code>ip xfrm policy</code>).<br>
Si d'autres ranges doivent être joignable de part et d'autres du VPN (ce qui est probable sinon vous n'utiliseriez pas VTI) :
Si d'autres ranges doivent être joignable de part et d'autres du VPN (ce qui est probable sinon vous n'utiliseriez pas VTI), vous avez deux solutions : désactiver l'installation automatique des policy et installer votre policy manuellement, ou modifier la configuration d'ipsec.
===Solution 1 : installation manuelle des policy===
* Passez <code>installpolicy</code> à <code>no</code> dans <code>/etc/ipsec.conf</code>
* Passez <code>installpolicy</code> à <code>no</code> dans <code>/etc/ipsec.conf</code>
* Installez votre propre policy ouverte :
* Installez votre propre policy ouverte :
<pre>
<pre>
sysctl -wq net.ipv4.conf.ipsec0.disable_policy=1
ip xfrm policy add src 0.0.0.0/0 dst 0.0.0.0/0 dir fwd priority 368255 ptype main mark 0x2a tmpl src $REMOTE_IP dst $LOCAL_IP proto esp reqid 1 mode tunnel
ip xfrm policy add src 0.0.0.0/0 dst 0.0.0.0/0 dir fwd priority 368255 ptype main mark 0x2a tmpl src $REMOTE_IP dst $LOCAL_IP proto esp reqid 1 mode tunnel
ip xfrm policy add src 0.0.0.0/0 dst 0.0.0.0/0 dir in priority 368255 ptype main mark 0x2a tmpl src $REMOTE_IP dst $LOCAL_IP proto esp reqid 1 mode tunnel
ip xfrm policy add src 0.0.0.0/0 dst 0.0.0.0/0 dir in priority 368255 ptype main mark 0x2a tmpl src $REMOTE_IP dst $LOCAL_IP proto esp reqid 1 mode tunnel
ip xfrm policy add src 0.0.0.0/0 dst 0.0.0.0/0 dir out priority 368255 ptype main mark 0x2a tmpl src $LOCAL_IP dst $REMOTE_IP proto esp reqid 1 mode tunnel
ip xfrm policy add src 0.0.0.0/0 dst 0.0.0.0/0 dir out priority 368255 ptype main mark 0x2a tmpl src $LOCAL_IP dst $REMOTE_IP proto esp reqid 1 mode tunnel
</pre>
</pre>
===Solution 2 : modification de la configuration IPsec===
Note : Cette solution est compatible avec pfsense depuis la version 2.4.4-p3
Dans ipsec.conf :
* maintenez <code>installpolicy = yes</code>
* Modifiez leftsubnet et rightsubnet en y ajoutant <code>0.0.0.0/0</code> :
<pre>
leftsubnet = 10.66.10.2/30,0.0.0.0/0
rightsubnet = 10.66.10.1,0.0.0.0/0
</pre>
Note : c'est de cette manière que sont définis left|rightsubnet dans la configuration ipsec de pfsense.
===Note===
Dans les faits, la documentation recommande de définir <code>left|rightsubnet=0.0.0.0/0</code>. Cette configuration est tout à fait valable du moment que vous montez un tunnel dans lequel vous maîtrisez totalement la configuration des deux démons ipsec. Si l'un des démons est, par exemple, géré par pfsense, cette configuration risque de ne pas fonctionner correctement.
==Routage==
Avec cette configuration, il vous suffira de router votre range, par exemple 192.168.1.0/24, vers l'ip distante du tunnel.
Avec cette configuration, il vous suffira de router votre range, par exemple 192.168.1.0/24, vers l'ip distante du tunnel.
<pre>ip route add 192.168.1.0/24 via $REMOTE_TUNNEL dev ipsec0</pre>
<pre>ip route add 192.168.1.0/24 via $REMOTE_TUNNEL dev ipsec0</pre>


Note : il est aussi possible d'installer une policy (enfin, 3) restrictive, pour chaque range. Cela complexifie néanmoins grandement la configuration et supprime les bénéfices d'un tunnel VTI.
Cela fait passer les paquets par le tunnel VTI, qui applique la mark (42 ici), et la marqué détectée permet au paquet de passer par ipsec.
 
N'oubliez pas d'activer le forwarding ip si nécessaire (<code>/proc/sys/net/ipv4/ip_forward</code>)
 
==Automatisation==
Vous pouvez crée une copie de <code>/usr/lib/ipsec/_updown</code>.
Les sections qui nous intéressent ici sont <code>up-client:</code> et <code>down-client:</code>
 
=Plus d'informations=
https://wiki.strongswan.org/projects/strongswan/wiki/SecurityRecommendations
4 203

modifications

Menu de navigation