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

Aller à la navigation Aller à la recherche
aucun résumé des modifications
Aucun résumé des modifications
 
(18 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
apt install strongswan strongswan-swanctl
</pre>
</pre>


Note : sous Openvz, vous aurez aussi besoin du paquet <code>libcharon-extra-plugins</code> qui fournit l'implémentation <code>kernel-libipsec</code> (au travers d'une interface TUN au lieu de VTI)
=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 29 :
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, compatible 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>


==ipsec.conf==
==ipsec.conf==
Ligne 66 : Ligne 75 :
         rightsubnet = 10.66.10.1
         rightsubnet = 10.66.10.1
         mark = 42
         mark = 42
        leftupdown = /etc/ipsec.updown
</pre>
</pre>


Ligne 77 : Ligne 85 :
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 suivant dans votre shell :
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 98 : Ligne 112 :
<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
<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>
<br><br>
NB : si vous montez un tunnel avec des IPv6, il faudra utiliser : <code>ip -6 tunnel add ipsec0 local $LOCAL_IP remote $REMOTE_IP mode vti6 okey 42 ikey 42</code>
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), vous avez deux solutions : désactiver l'installation automatique des policy et installer votre policy manuellement, ou modifier la configuration d'ipsec.
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.
Ligne 123 : Ligne 140 :


===Note===
===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.
Dans les faits, la documentation recommande de définir <code>left|rightsubnet=0.0.0.0/0</code> (et uniquement cela). 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==
==Routage==
Ligne 130 : Ligne 147 :


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.
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>.<br>
Les sections du fichier qui nous intéressent ici sont <code>up-client:</code> et <code>down-client:</code>
Pour invoquer automatiquement le fichier, il faut ajouter cette directive à votre <code>conn</code> dans <code>/etc/ipsec.conf</code> :
<pre>leftupdown = /path/to/ipsec.updown</pre>
Le fichier <code>/path/to/ipsec.updown</code> doit être exécutable.
==Sécurisation iptables==
Pour n'autoriser que le serveur distant à contacter le démon ipsec, vous aurez besoin de l'une (ou des deux) lignes suivantes dans votre firwall iptables :
<pre>
iptables -t filter -A INPUT -i ens192 -p udp -m multiport --dports 500,4500 -s $REMOTE_IP -j ACCEPT
iptables -t filter -A INPUT -i ens192 -p esp -s $REMOTE_IP -j ACCEPT
</pre>
==Logs==
Afin de réduire un peu la taille des logs, modifiez cela dans le fichier <code>/etc/strongswan.d/charon-logging.conf</code> :
<pre>
    syslog {
        daemon {
                default = 1
                net = 0
                enc = 0
        }
        auth {
                default = 1
                net = 0
                enc = 0
        }
    }
</pre>
=Plus d'informations=
https://wiki.strongswan.org/projects/strongswan/wiki/SecurityRecommendations
4 206

modifications

Menu de navigation