4 203
modifications
Aucun résumé des modifications |
|||
(13 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[category:serveur]] | [[category:serveur]] | ||
[[category:debian]] | [[category:debian]] | ||
[[Category:networking]] | |||
[[Category:VPN]] | |||
[[Category:Openvpn]] | |||
'''<span style="color: red;">Tuto plus du tout à jour</span>''' | |||
[[Category:toupdate]] | |||
=Prérequis= | =Prérequis= | ||
Ligne 44 : | Ligne 50 : | ||
Nous allons maintenant générer le certificat du serveur openvpn puis le signer avec notre autorité vpn_ca : | Nous allons maintenant générer le certificat du serveur openvpn puis le signer avec notre autorité vpn_ca : | ||
<pre> | <pre> | ||
openssl req -nodes -newkey rsa:2048 -keyout vpn. | openssl req -nodes -newkey rsa:2048 -keyout vpn.domain.tld.key -out vpn.domain.tld.req | ||
openssl ca -name vpn_ca -extensions VPN_SERVER -in vpn. | openssl ca -name vpn_ca -extensions VPN_SERVER -in vpn.domain.tld.req -out vpn.domain.tld.pem | ||
</pre> | </pre> | ||
Ligne 56 : | Ligne 62 : | ||
<pre> | <pre> | ||
mkdir /etc/openvpn/ssl | mkdir /etc/openvpn/ssl | ||
mv vpn. | mv vpn.domain.tld.* /etc/openvpn/ssl/ | ||
mv dh2048.pem /etc/openvpn/ssl/ | mv dh2048.pem /etc/openvpn/ssl/ | ||
</pre> | </pre> | ||
Ligne 63 : | Ligne 69 : | ||
<pre>cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem /etc/ssl/vpn_ca/vpn_ca.pem > /etc/openvpn/ssl/ca_chain.pem</pre> | <pre>cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem /etc/ssl/vpn_ca/vpn_ca.pem > /etc/openvpn/ssl/ca_chain.pem</pre> | ||
Nous allons enfin générer une clé TLS pour bloquer les attaques DoS ainsi que le | Nous allons enfin générer une clé TLS pour bloquer les attaques DoS ainsi que le flood UDP en créant un firewall HMAC : | ||
<pre>openvpn --genkey --secret /etc/openvpn/ssl/ta.key</pre> | <pre>openvpn --genkey --secret /etc/openvpn/ssl/ta.key</pre> | ||
Ligne 83 : | Ligne 89 : | ||
#configuration ssl | #configuration ssl | ||
ca /etc/openvpn/ssl/ca_chain.pem | ca /etc/openvpn/ssl/ca_chain.pem | ||
cert /etc/openvpn/ssl/vpn. | cert /etc/openvpn/ssl/vpn.domain.tld.pem | ||
key /etc/openvpn/ssl/vpn. | key /etc/openvpn/ssl/vpn.domain.tld.key | ||
dh /etc/openvpn/ssl/dh2048.pem | dh /etc/openvpn/ssl/dh2048.pem | ||
Ligne 112 : | Ligne 118 : | ||
Pour l'instant, nous avons une configuration fonctionnelle, mais pas parfaite. En effet, nous avons créé une autorité de certification dédié à l'émission de certificats vpn, mais n'importe quel certificat signé par l'un des parents de cette autorité sera autorisé à se connecter. Par exemple, si vous signez un certificat client au moyen de l'autorité root_ca, ce certificat sera reconnu comme valide par openvpn (car du point de vue du protocole SSL, il l'est). | Pour l'instant, nous avons une configuration fonctionnelle, mais pas parfaite. En effet, nous avons créé une autorité de certification dédié à l'émission de certificats vpn, mais n'importe quel certificat signé par l'un des parents de cette autorité sera autorisé à se connecter. Par exemple, si vous signez un certificat client au moyen de l'autorité root_ca, ce certificat sera reconnu comme valide par openvpn (car du point de vue du protocole SSL, il l'est). | ||
Si vous n'avez qu'un seul serveur cela ne devrait pas poser de problème. Mais si vous en avez plusieurs il est possible que l'autorité root_ca soit sur un serveur, alors que l'autorité vpn_ca soit sur un autre serveur | Si vous n'avez qu'un seul serveur cela ne devrait pas poser de problème. Mais si vous en avez plusieurs il est possible que l'autorité root_ca soit sur un serveur, alors que l'autorité vpn_ca soit sur un autre serveur, or, seul ce dernier serveur devrait être capable d'émettre un certificat client pour notre vpn (sinon, pourquoi créer tant d'autorités ? :)).<br /> | ||
De même, le problème se pose si vous utilisez un certificat commercial que vous avez acheté (chez thawte par exemple). Étant donné que vous êtes obligé de préciser à openvpn le certificat root de thawte, toutes personnes ayant elle aussi un certificat thawte pourra se connecter à votre vpn (ce n'est pas exactement vrai étant donné que nous avons créé une clé tls propre à notre serveur (directive <code>tls-auth</code>)). | De même, le problème se pose si vous utilisez un certificat commercial que vous avez acheté (chez thawte par exemple). Étant donné que vous êtes obligé de préciser à openvpn le certificat root de thawte, toutes personnes ayant elle aussi un certificat thawte pourra se connecter à votre vpn (ce n'est pas exactement vrai étant donné que nous avons créé une clé tls propre à notre serveur (directive <code>tls-auth</code>)). | ||
Ligne 137 : | Ligne 143 : | ||
Par exemple : | Par exemple : | ||
<pre>C=01, ST=Epsilon Eridani System, L=Reach, O=UNSC, OU=Office of Naval Intelligence, CN=UNSC VPN CA/emailAddress=plop@ | <pre>C=01, ST=Epsilon Eridani System, L=Reach, O=UNSC, OU=Office of Naval Intelligence, CN=UNSC VPN CA/emailAddress=plop@domain.tld</pre> | ||
devient : | devient : | ||
<pre>/C=01/ST=Epsilon_Eridani_System/L=Reach/O=UNSC/OU=Office_of_Naval_Intelligence/CN=UNSC_VPN_CA/emailAddress=plop@ | <pre>/C=01/ST=Epsilon_Eridani_System/L=Reach/O=UNSC/OU=Office_of_Naval_Intelligence/CN=UNSC_VPN_CA/emailAddress=plop@domain.tld</pre> | ||
Créez le fichier <code>/etc/openvpn/allow.sh</code> contenant les lignes suivantes (adaptez la définissions des trois variables en fonction des noms des certificats que vous venez de transformer) : | Créez le fichier <code>/etc/openvpn/allow.sh</code> contenant les lignes suivantes (adaptez la définissions des trois variables en fonction des noms des certificats que vous venez de transformer) : | ||
Ligne 218 : | Ligne 224 : | ||
=Rediriger certains ports vers le VPN= | =Rediriger certains ports vers le VPN= | ||
==Modifications sur le serveur== | |||
Pour commencer, nous allons activer le forwarding ipv4. Modifiez le fichier <code>/etc/sysctl.conf</code> : | |||
<pre> | |||
net.ipv4.ip_forward=1 | |||
</pre> | |||
Surtout ne touchez pas à <code>net.ipv6.conf.all.forwarding</code> | |||
Validez vos modifications : | |||
<pre>sysctl -p</pre> | |||
Vous pouvez vérifier l'état du forwarding dans le fichier <code>/proc/sys/net/ipv4/ip_forward</code> | |||
<pre>cat /proc/sys/net/ipv4/ip_forward</pre> | |||
Il ne reste plus qu'a ajouter une règle iptables afin de rediriger le trafic vers l'une des ips de sortie de votre serveur (nat) | |||
<pre>iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source <adresse ip></pre> | |||
Si vous préférez préciser l'interface plutôt que l'adresse ip : | |||
<pre>iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE</pre> | |||
A titre d'information, vous pouvez lister vos règles nat avec : | |||
<pre>iptables -t nat --list</pre> | |||
En cas d'erreur, vous pouvez remettre votre nat à zero avec : | |||
<pre>iptables -t nat -F POSTROUTING</pre> | |||
==Modifications sur le client== | |||
Nous allons supposer que votre vpn vous a attribué l'ip 10.8.0.6 et que votre adresse ptp est 10.8.0.5. | |||
Pour commencer, désactivez la validation d'adresse source sur l'interface vpn tun0 : | |||
<pre> | |||
sysctl -w net.ipv4.conf.all.rp_filter=0 | |||
sysctl -w net.ipv4.conf.tun0.rp_filter=0 | |||
</pre> | |||
Nous allons ensuite marquer les paquets reçus par l'interface eth0 destinés au port 80 (http) : | |||
<pre>iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 0x1</pre> | |||
Nous faisons de même avec les paquets émis par le routeur vers internet : | |||
<pre>iptables -t mangle -A OUTPUT -o eth0 -p tcp --dport 80 -j MARK --set-mark 0x1</pre> | |||
Ensuite, nous allons router les paquets marqués avec une table de routage alternative (100) qui ne sera utilisée que pour les paquets marqués : | |||
<pre>ip rule add fwmark 0x1 table 100</pre> | |||
Il faut ensuite créer une route par défaut pour la table alternative : | |||
<pre>ip route add default dev tun0 via 10.8.0.5 table 100</pre> | |||
Enfin, NATer l'adresse source avec l'adresse que notre vpn nous a attribué : | |||
<pre>iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to 10.8.0.6</pre> | |||
=Rediriger la totalité de son trafic réseau vers le VPN= | =Rediriger la totalité de son trafic réseau vers le VPN= | ||
==Modifications sur le serveur== | ==Modifications sur le serveur== | ||
Pour commencer, nous allons activer le forwarding ipv4. Modifiez le fichier <code>/etc/sysctl.conf</code> : | |||
<pre> | |||
net.ipv4.ip_forward=1 | |||
</pre> | |||
Surtout ne touchez pas à <code>net.ipv6.conf.all.forwarding</code> | |||
Validez vos modifications : | |||
<pre>sysctl -p</pre> | |||
Vous pouvez vérifier l'état du forwarding dans le fichier <code>/proc/sys/net/ipv4/ip_forward</code> | |||
<pre>cat /proc/sys/net/ipv4/ip_forward</pre> | |||
Il ne reste plus qu'a ajouter une règle iptables afin de rediriger le trafic vers l'une des ips de sortie de votre serveur (nat) | |||
<pre>iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source <adresse ip></pre> | |||
Si vous préférez préciser l'interface plutôt que l'adresse ip : | |||
<pre>iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE</pre> | |||
A titre d'information, vous pouvez lister vos règles nat avec : | |||
<pre>iptables -t nat --list</pre> | |||
En cas d'erreur, vous pouvez remettre votre nat à zero avec : | |||
<pre>iptables -t nat -F POSTROUTING</pre> | |||
==Modifications sur le client== | ==Modifications sur le client== | ||
===KDE4 et networkmanager=== | |||
Dans l'onglet <code>adresse ip</code>, cliquez sur la barre déroulante indiquant <code>Réglage de base</code> et sélectionnez <code>Routes</code>. Décochez la case <code>Utilisez uniquement pour les ressources de cette connexion</code>. |