Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / Autres / Créer un tunnel VPN IPSec point à point (en mode transport) sur Debian

Créer un tunnel VPN IPSec point à point (en mode transport) sur Debian

Par Pierre-Yves Landuré Dernière modification 06/12/2017 16:32

IPSec est un protocole de chiffrement de la couche IP des communications Internet. Ce guide crée un tunnel chiffré sécurisant les communications entre deux hôtes.

Ce guide est testé sur:

  • Debian 7.0 Wheezy

Paramètres

Renseignez l'adresse IP du pair distant:

REMOTE_IP="xx.xx.xx.xx"

Renseignez le nom de l'interface réseau connectée au réseau du pair distant:

LOCAL_INET="eth0"

Renseignez les clefs de chiffrement hmac-md5 du protocole AH (optionnel, doit être partagé entre les deux pairs):

# AH_KEY_LR="0x70f83693013f5b12b30a893dce771198"
# AH_KEY_RL="0x70f83693013f5b12b30a893dce771198"

Renseignez les Security Parameter Index (SPI) pour le protocole AH (optionnel, doit être partagé entre les deux pairs):

# AH_SPI_LR="15700"
# AH_SPI_RL="24500"

Renseignez les clefs de chiffrement 3des-cbc du protocole ESP (optionnel, doit être partagé entre les deux pairs):

# ESP_KEY_LR="0xb2dd4108a04b0c7dd087f1dd169036565ce4d7cb3549ed92"
# ESP_KEY_RL="0xb2dd4108a04b0c7dd087f1dd169036565ce4d7cb3549ed92"

Renseignez les Security Parameter Index (SPI) pour le protocole ESP (optionnel, doit être partagé entre les deux pairs):

# ESP_SPI_LR="15701"
# ESP_SPI_RL="24501"

Installation

Détectez l'adresse IP du pair local:

if [ -z "${LOCAL_IP}" ]; then
LOCAL_IP="$(command ifconfig "${LOCAL_INET}" \
  | command grep 'inet ' \
| command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"
fi

Générez les clefs de chiffrement hmac-md5 pour le protocole AH, si nécessaire:

if [ -z "${AH_KEY_RL}" -a -z "${AH_KEY_LR}" ]; then
  AH_KEY_RL="0x$(command hexdump -e '1/1 "%02x"' '/dev/urandom' -n 16)"
AH_KEY_LR="0x$(command hexdump -e '1/1 "%02x"' '/dev/urandom' -n 16)"
fi

Générez les Security Parameter Index (SPI) pour le protocole AH, si nécessaire:

if [ -z "${AH_SPI_RL}" -a -z "${AH_SPI_LR}" ]; then
  AH_SPI_RL="$((((${RANDOM} + ${RANDOM}) % 63488) + 256))"
AH_SPI_LR="$((((${RANDOM} + ${RANDOM}) % 63488) + 256))"
fi

Générez les clefs de chiffrement 3des-cbc pour le protocole ESP, si nécessaire:

if [ -z "${ESP_KEY_RL}" -a -z "${ESP_KEY_LR}" ]; then
  ESP_KEY_RL="0x$(command hexdump -e '1/1 "%02x"' '/dev/urandom' -n 24)"
ESP_KEY_LR="0x$(command hexdump -e '1/1 "%02x"' '/dev/urandom' -n 24)"
fi

Générez les Security Parameter Index (SPI) pour le protocole ESP, si nécessaire:

if [ -z "${ESP_SPI_RL}" -a -z "${ESP_SPI_LR}" ]; then
  ESP_SPI_RL="$((((${RANDOM} + ${RANDOM}) % 63488) + 256))"
ESP_SPI_LR="$((((${RANDOM} + ${RANDOM}) % 63488) + 256))"
fi

Déterminez le nom du fichier de configuration:

CONFIG_FILE="/etc/ipsec-tools.d/transport-${REMOTE_IP//\./-}.conf"

Préparation de l'environnement

Installez les logiciels nécessaires:

command apt-get install ipsec-tools

Mise en place du tunnel

Activez les règles d'initialisation de la configuration:

command sed -i \
    -e 's/# flush/flush/' \
    -e 's/# spdflush/spdflush/' \
  '/etc/ipsec-tools.conf'

Initialisez le fichier de configuration d'IPSec:

echo "#"\!"/usr/sbin/setkey

" > "${CONFIG_FILE}"

Configurez le protocole AH:

echo "
# AH SAs using 128 bit long keys
add ${REMOTE_IP} ${LOCAL_IP} ah ${AH_SPI_RL} -A hmac-md5 ${AH_KEY_RL};
add ${LOCAL_IP} ${REMOTE_IP} ah ${AH_SPI_LR} -A hmac-md5 ${AH_KEY_LR};
" >> "${CONFIG_FILE}"

Configurez le protocole ESP:

echo "
# ESP SAs using 192 bit long keys (168 + 24 parity)
add ${REMOTE_IP} ${LOCAL_IP} esp ${ESP_SPI_RL} -E 3des-cbc ${ESP_KEY_RL};
add ${LOCAL_IP} ${REMOTE_IP} esp ${ESP_SPI_LR} -E 3des-cbc ${ESP_KEY_LR};
" >> "${CONFIG_FILE}"

Configurez le tunnel utilisant les transports AH et ESP:

echo "# Tunnel setup
spdadd ${LOCAL_IP} ${REMOTE_IP} any -P out ipsec esp/transport//require ah/transport//require; spdadd ${REMOTE_IP} ${LOCAL_IP} any -P in ipsec esp/transport//require ah/transport//require;
" >> "${CONFIG_FILE}"

Sécurisez le fichier de configuration:

command chmod 750 "${CONFIG_FILE}"

Démarrez le tunnel:

/etc/init.d/setkey start

Configuration du pair distant

Exécutez la procédure d'installation de ce guide sur le pair distant avec les paramètres fournis par:

echo "# Remote peer setup parameters:
REMOTE_IP='${LOCAL_IP}'
LOCAL_IP='${REMOTE_IP}'
AH_KEY_RL='${AH_KEY_LR}'
AH_KEY_LR='${AH_KEY_RL}'
AH_SPI_RL='${AH_SPI_LR}'
AH_SPI_LR='${AH_SPI_RL}'
ESP_KEY_RL='${ESP_KEY_LR}'
ESP_KEY_LR='${ESP_KEY_RL}'
ESP_SPI_RL='${ESP_SPI_LR}'
ESP_SPI_LR='${ESP_SPI_RL}'
"

Une fois le pair distant configuré, les communications entre les deux hôtes sont chiffrées.

Remerciements