Cet article concerne le protocole de tunnellisation de couche 2 (L2TP) avec IPsec pour fournir un chiffrement de bout en bout dans le VPN de couche 2, car les fonctionnalités de sécurité ne sont pas disponibles dans L2TP. Les implémentations open source d'IPsec sont StrongSwan et OpenSwan, toutes deux prises en charge sur toutes les distributions Linux. Dans ce didacticiel, OpenSwan est utilisé pour fournir le canal de sécurité pour le VPN L2TP. Freeradius est un outil open source bien connu qui fournit différents types d'authentification pour les utilisateurs. Freeradius est utilisé pour authentifier l'utilisateur VPN L2TP avant d'établir un canal sécurisé. Un client basé sur Android sera utilisé pour le tunnel sécurisé basé sur L2TP.
Installation des packages requis
Les packages importants suivants seront installés sur Ubuntu 16.04 LTS.
- Serveur/Client Freeradius
- Serveur Poptop
- xl2tpd
- Openswan pour IPsec
- MySQL Serveur/client
- Bison et Flex
- Bibliothèque de développement GMP
Comme indiqué ci-dessous, la plupart des packages requis sont tous disponibles dans le référentiel Ubuntu 16.04 LTS.
apt-obtenir la mise à jour
apt-get install -y mysql-server mysql-client freeradius-mysql pptpd xl2tpd
La capture d'écran suivante montre comment le mot de passe de l'utilisateur "root" du serveur de base de données MySQL est défini pendant le processus d'installation.
Les packages suivants sont requis pour l'installation d'OpenSwan à partir de la source sur la plate-forme Ubuntu 16.04.
apt-get install -y build-essential libgmp3-dev bison flex
Le client Freeradius et les packages OpenSwan ne sont pas disponibles dans le référentiel, les deux outils ont donc été installés à partir de la source.
Installation du client Freeradius
Téléchargez le dernier client Freeradius à partir du lien suivant :
wget https://github.com/FreeRADIUS/freeradius-client/archive/master.zip
décompressez master.zip
mv freeradius-client-master freeradius-client
cd freeradius-client
Tout d'abord, exécutez le script de configuration avec le commutateur de préfixe et installez le logiciel à l'aide de la commande make.
./configure --prefix=/
faire &&faire installer
Installation d'OpenSwan
Le code source de l'outil OpenSwan IPsec est disponible sur le lien suivant. Téléchargez l'archive et décompressez-la.
wget https://download.openswan.org/openswan/openswan-latest.tar.gz
tar -xzf openswan-latest.tar.gz
cd openswan-*
Exécutez la commande suivante pour compiler et installer OpenSwan.
faire des programmes
faire installer
Configuration
Avant de commencer la configuration des packages installés, les configurations de base suivantes (iptables et sysctl) sont requises sur la plate-forme Ubuntu.
Entrez les règles iptables suivantes pour les deux réseaux (10.20.30.0/24 et 10.10.10.0/24) sur le terminal.
iptables -t nat -I POSTROUTING -s 10.20.30.0/24 -j SNAT --to 192.168.15.4
iptables -t nat -I POSTROUTING -s 10.10.10.0/24 -j SNAT --to 192.168.15.4
Les règles ci-dessus doivent être enregistrées dans le fichier /etc/iptables.rc fichier pour les appliquer au démarrage.
chmod +x /etc/iptables.rc
sed -i "/iptables.rc/d" /etc/rc.local
sed -i "1a/etc/iptables.rc" /etc/rc.local
Ajoutez les lignes suivantes dans le /etc/sysctl.conf fichier pour activer le transfert sur la machine Linux.
net.ipv4.ip_forward =1
net.ipv4.conf.default.rp_filter =0
net.ipv4.conf.default.accept_source_route =0
net.ipv4.conf. all.send_redirects =0
net.ipv4.conf.default.send_redirects =0
net.ipv4.icmp_ignore_bogus_error_responses =1
Exécutez la commande suivante pour appliquer les modifications.
sysctl -p
Configuration du serveur Freeradius
Exécutez la commande suivante pour modifier le mot de passe de freeradius.
sed -i "s/MOT DE PASSE('radpass')/MOT DE PASSE('test')/g" /etc/freeradius/sql/mysql/admin.sql
Les commandes MySQL suivantes configureront le serveur Freeradius sur Ubuntu.
mysql --protocol=tcp -h localhost -u root -ptest
créer un rayon de base de données # créer un rayon de base de données
mysql --protocol=tcp -h localhost -u root -ptest radius
mysql --protocol=tcp -h localhost -u root -ptest radius
Ajout d'une date appropriée pour résoudre le problème de valeur par défaut non valide dans /etc/freeradius/sql/mysql/cui.sql .
Après correction dans le /etc/freeradius/sql/mysql/cui.sql fichier et réexécutez la commande ci-dessus pour corriger l'erreur ci-dessus.
mysql --protocol=tcp -h localhost -u root -ptest radius
mysql --protocol=tcp -h localhost -u root -ptest radius
mysql --protocol=tcp -h localhost -u root -ptest radius
mysql --protocol=tcp -h localhost -u root -ptest radius
Exécutez la commande sed suivante pour modifier le mot de passe par défaut de l'utilisateur "radius". Dans ce tutoriel, le mot de passe de l'utilisateur "radius" est "test". Choisissez un mot de passe sécurisé sur votre serveur.sed -i "s/password =\"radpass\"/password =\"test\"/g" /etc/freeradius/sql.conf
Création d'un lien logiciel pour la configuration sql dans le répertoire des modules du serveur Freeradius.
ln -sf /etc/freeradius/sql.conf /etc/freeradius/modules/sql
Les fichiers suivants ne sont pas présents sur Ubuntu 16.04, par conséquent, créez tous les fichiers requis avec le contenu décrit .
- /etc/freeradius/modules/hourlylytraffic
- /etc/freeradius/modules/dailytraffic
- /etc/freeradius/modules/monthlytraffic
/etc/freeradius/modules/hourlytraffic
sqlcounter hourlytrafficcounter {
counter-name =Hourly-Traffic
check-name =Hourly-Traffic
sqlmod-inst =sql
key =User-Name
reset =1h
query ="SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)> '%b'"
}
/etc/freeradius/modules/dailytraffic
sqlcounter dailytrafficcounter {
counter-name =Daily-Traffic
check-name =Daily-Traffic
sqlmod-inst =sql
key =User-Name
reset =daily
query ="SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)> '%b'"
}
/etc/freeradius/modules/monthlytraffic
sqlcounter monthtrafficcounter {
counter-name =Monthly-Traffic
check-name =Monthly-Traffic
sqlmod-inst =sql
key =User-Name
reset =month
query ="SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)> '%b'"
}
Le fichier suivant est important pour la configuration du serveur freeradius. Nos configurations d'exécution sont indiquées ci-dessous.
/etc/freeradius/sites-enabled/default
authorize {
preprocess
chap
mschap
digest
suffixe
eap {
ok =return
}
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
digest
unix
eap
}
preacct {
preprocess
acct_unique
suffixe
fichiers
}
comptabilité {
détail
unix
radutmp
sql
exec
attr_filter.accounting_response
}
session {
radutmp
sql
}
post-auth {
sql
exec
Post-Auth-Type REJETER {
attr_filter.access_reject
}
}
pré-proxy {
}
post-proxy {
eap
}
Utilisez la commande suivante pour redémarrer le serveur freeradius et vérifier la configuration.
/etc/init.d/freeradius restart
Configuration du client FreeradiusLa commande suivante définit le nom d'hôte et le secret dans le fichier "servers" du client freeradius.
echo -e "localhost\ttesting123">> /etc/radiusclient/servers
Créez le fichier de configuration dictionary.microsoft pour les clients Windows.
vi /etc/radiusclient/dictionary.microsoft#
# VSA de Microsoft, à partir de la RFC 2548
#
# \$Id :poptop_ads_howto_8.htm,v 1.8 2008/10/02 08:11:48 wskwok Exp \$
#
VENDOR Microsoft 311 Microsoft
BEGIN VENDOR Microsoft
ATTRIBUTE MS-CHAP-Response 1 chaîne Microsoft
ATTRIBUTE MS-CHAP-Error 2 Microsoft MS-CHAP-CPW-1 3 chaîne Microsoft
ATTRIBUTE MS-CHAP-CPW-2 4 chaîne Microsoft
ATTRIBUTE MS-CHAP-LM-Enc-PW 5 chaîne Microsoft
chaîne Microsoft
ATTRIBUTE MS CHAP -NT-Enc-PW 6 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
# Ceci est appelé à la fois singulier et pluriel dans la RFC.
# Pluriel semble avoir plus de sens.
ATTRIBUT MS-MPPE-Encryption-Type 8 chaîne Microsoft
ATTRIBUT MS-MPPE-Encryption-Types 8 chaîne Microsoft
ATTRIBUT MS-RAS-VENDOR 9 INTEGER Microsoft
Attribut MS-CHAP-DOMAIN 10 chaîne Microsoft
Attribut MS-Chap-Challenge 11 String Microsoft
Attribut MS-CHAP-MPPE-KEY =1
ATTRIBUT MS-BAP-Usage 13 entier Microsoft
ATTRIBUT MS-Link-Utilization-Threshold 14 entier Microsoft
ATTRIBUT MS-Link-Drop-Time-Limit 15 entier Microsoft
ATTRIBUTE MS-MPPE-Send-Key 16 chaîne Microsoft
ATTRIBUTE MS-MPPE-Recv-Key 17 chaîne Microsoft
ATTRIBUTE MS-RAS-Version 18 chaîne A ATTRIBUTE MS Microsoft
-Mot de passe 19 chaîne Microsoft
ATTRIBUT MS-New-ARAP-Password 20 chaîne Microsoft
ATTRIBUT MS-ARAP-PW-Change-Reason 21 entier Microsoft
ATTRIBUT MS-Filter chaîne 22 Microsoft />À TRIBUTE MS-Acct-Auth-Type 23 entier Microsoft
ATTRIBUTE MS-Acct-EAP-Type 24 entier Microsoft
ATTRIBUTE MS-CHAP2-Response 25 chaîne Microsoft
ces 2 ATTRIBUTE 2 MS 2 chaîne Microsoft
ATTRIBUT MS-CHAP2-CPW 27 chaîne Microsoft
ATTRIBUT MS-Primary-DNS-Server 28 ipaddr
ATTRIBUT MS-Secondary-DNS-Server 29 ipadr MS B - Primary-NBNS-Server 30 ipaddr Microsoft
ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft
#ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft
#
# Traductions d'entiers< Utilisation Obligatoire 2
# MS-ARAP-Password-Change-Reason Values
VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
VALUE MS-ARAP-PW-Change-Reason Expired-Password 2
VALUE MS-ARAP-PW-Change- Raison Admin-Requires-Password-Change 3
VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4
# Valeurs MS-Acct-Auth-Type
VALUE MS-Acct -Auth-Type PAP 1
VALUE MS-Acct-Auth-Type CHAP 2
VALUE MS-Acct-Auth-Type MS-CHAP-1 3- MS Auth-Type MS-CHAP-2 4
VALEUR MS-Acct-Auth-Type EAP 5
# Valeurs de type MS-Acct-EAP-Type
VALUE MS-Acct-EAP-Type MD5 > Valeur ms-acct-eap-type otp 5
valeur ms-acct-eap-type générique-carte 6
valeur ms-acct-eap-type tls 13
end-vendeur Microsoft
vi /etc/radiusclient/dictionary.merit#
# Extensions expérimentales, configuration uniquement (pour les éléments de contrôle)
# Noms/numéros selon les extensions MERIT (si possible).
#
ATTRIBUTE NAS- Identifiant 32 String
Attribute Proxy-State 33 String
Attribute Login-Lat-Service 34 String
attribut login-lat-node 35 String
attribut login-lat-group 36 String
ATTRIBUT Encadré-AppleTalk-Link 37 entier
ATTRIBUT Encadré-AppleTalk-Réseau 38 entier
ATTRIBUT Encadré-AppleTalk-Zone 39 chaîne
ATTRIBUT Acct-Input-Packets entier 47 >ATTRIBUTE Acct-Output-Packets 48 entier
# 8 est une extension MERIT.
VALUE Service-Type Authenticate-Only 8
Ajoutez les lignes suivantes au /etc/radiusclient/dictionary fichier.
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft
ATTRIBUT Trafic horaire 1000 entier
ATTRIBUT Trafic quotidien 1001 entier
ATTRIBUT Trafic mensuel 1002 entier
Ce qui suit est la configuration d'exécution du client radius./etc/radiusclient/radiusclient.conf# Paramètres généraux
# spécifiez quelle authentification vient en premier respectivement quelle
# authentification est utilisée. les valeurs possibles sont :"radius" et "local".
# si vous spécifiez "radius,local" alors le serveur RADIUS est demandé
# en premier puis le serveur local. si un seul mot-clé est spécifié, seulement
# ce serveur est interrogé.
auth_order radius,local
# nombre maximum d'essais de connexion pour un utilisateur
login_tries 4
# timeout pour tous login essaye
# si ce délai est dépassé l'utilisateur est expulsé
login_timeout 60
# nom du fichier nologin qui, lorsqu'il existe, désactive les connexions. il peut
# être étendu par le ttyname, ce qui entraînera
#un verrouillage spécifique au terminal (par exemple, /etc/nologin.ttyS2 désactivera
# les connexions sur /dev/ttyS2)
nologin /etc/nologin
# nom du fichier du problème. il ne s'affiche que lorsqu'aucun nom d'utilisateur n'est transmis
# sur la ligne de commande radlogin
issue /etc/radiusclient/issue
seqfile /var/run/freeradius/freeradius.pid
## RADIUS écoute séparé par deux-points du nom d'hôte. si
# aucun port n'est spécifié /etc/services est consulté du radius
authserver localhost
# serveur RADIUS à utiliser pour les requêtes comptables. Tout ce que j'ai
# dit pour authserver s'applique également.
acctserver localhost
# fichier contenant les secrets partagés utilisés pour la communication
# entre le client RADIUS et le serveur
servers /etc/radiusclient/servers
# dictionnaire des attributs et valeurs autorisés, comme dans le
# distributions RADIUS normales
dictionary /etc/radiusclient/dictionary
# programme pour appeler une connexion authentifiée RADIUS
login_radius /sbin/login.radius
# fichier qui spécifie le mappage entre ttyname et l'attribut NAS-Port
mapfile /etc/radiusclient/port- id-map
# domaine d'authentification par défaut à ajouter à tous les noms d'utilisateur si aucun
# domaine n'a été explicitement spécifié par l'utilisateur
default_realm
# temps d'attente pour une réponse depuis le serveur RADIUS
radius_timeout 10
# renvoyer la requête plusieurs fois avant d'essayer le serveur suivant
radius_retries 3
# adresse locale à partir de laquelle les paquets radius doivent être envoyés
bindaddr *
# programme à exécuter pour une connexion locale
# il doit prendre en charge l'indicateur -f pour une connexion pré-authentifiée
login_local /bin/login
La configuration suivante (liée à IPv6) dans le fichier /etc/radiusclient/dictionary doit être commenté pour exécuter le client radius.ATTRIBUTE NAS-Filter-Rule 92 chaîne
ATTRIBUTE Originating-Line-Info 94 chaîne
ATTRIBUTE NAS-IPv6-Address 95 chaîne
ATTRIBUTE string-Interface > Attribut encadré-ipv6-prefix 97 ipv6prefix
attribut login-ipv6-host 98 chaîne
attribut encadré-ipv6-routier 99 chaîne
attribut encadré-ipv6-pool 100 chaîne
attribut Error-Cause 101 integer
ATTRIBUTE EAP-Key-Name 102 string
#
# Attributs IPv6 RFC6911
#
ATTRIBUTEATTRIBUT DNS-Server-IPv6-Address 169 ipv6addr
ATTRIBUT Route-IPv6-Information 170 ipv6prefix
Configuration du serveur Poptop
Ajoutez la configuration suivante dans /etc/pptpd.conf fichier.
localip 10.20.30.1
remoteip 10.20.30.2-254
Exécutez la commande sed suivante sur /etc/ppp/pptpd-options fichier.
sed -i "/^ms-dns/d" /etc/ppp/pptpd-options
sed -i -e "/radius.so/d" -e "/radattr.so/d" /etc/ppp/pptpd-options
Ajoutez les lignes suivantes dans /etc/ppp/pptpd-options fichier.
ms-dns 8.8.8.8
ms-dns 8.8.4.4
plugin /usr/lib/pppd/2.4.7/radius.so
plugin /usr/lib/pppd/ 2.4.7/radattr.so
Redémarrez le service pptpd pour appliquer les modifications ci-dessus.
redémarrage du service pptpd
Configuration de xl2tp
Inclure les lignes de configuration suivantes dans /etc/xl2tpd/xl2tpd.conf fichier comme indiqué dans la figure suivante.
[global]
ipsec saref =yes
[lns default]
plage d'adresses IP =10.10.10.2-10.10.10.255
adresse IP locale =10.10.10.1
refuse chap =yes
refuse pap =yes
require authentication =yes
ppp debug =yes
pppoptfile =/etc/ppp/options.xl2tpd
bit de longueur =oui
Configuration d'OpenSwan
Ajoutez le paramètre suivant du fichier secret ipsec dans /etc/ipsec.secrets .
192.168.15.4 %any 0.0.0.0 :"test" PSK
La configuration IPsec pour le tunnel L2TP est incluse dans /etc/ipsec.conf fichier.
version 2.0
configuration de la configuration
nat_traversal=yes
virtual_private=%v4:192.168.0.0/16,%v4:10.0.0.0/8,%v4:172.16 .0.0/12,%v4:25.0.0.0/8,%v4:!10.254.253.0/24
protostack=netkey
#protostack=mast # utilisé uniquement pour les interfaces SAref + MAST
="%defaultroute"
oe=off
conn psk-l2tp
pfs=no
auto=add
rekey=no
# overip=yes # pour SAref + MAST
# sareftrack=yes # pour SAref + MAST
type=transport
left=192.168.15.4
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
rightsubnet=vhost:%priv,%no
authby=secretConfiguration du serveur PPP
Ajoutez la configuration suivante dans /etc/ppp/options.xl2tpd fichier.
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1200
mru 1200
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
plugin /usr/lib/pppd/2.4.7/radius.so
plugin /usr/lib/pppd/2.4.7/radattr.so
Après la configuration réussie de tous les packages requis, redémarrez maintenant tous les services pour tester le VPN L2TP.Redémarrage des services IPsec et xl2tp.
La figure suivante montre que le serveur freeradius s'exécute en mode démon, ce qui est utile pour identifier que le serveur fonctionne.
Insérez un compte utilisateur dans la base de données MySQL pour tester la configuration.
INSERT INTO radius.radcheck (nom d'utilisateur, attribut, op, valeur) VALUES ('username','User-Password',':=','userpassword');
La commande suivante vérifie que le serveur Freeradius fonctionne sur localhost.radtest username userpassword localhost 0 testing123
Configuration du client Android L2TP
Accédez aux paramètres ==> Plus ==> VPN ==>Ajouter un réseau VPN sur un téléphone Android et créez un nouveau L2TP PSK VPN comme indiqué ci-dessous.
![]()
Après la création d'un nouveau VPN L2TP, cliquez dessus et entrez le nom d'utilisateur/mot de passe (configuré sur le serveur freeradius).
La figure suivante montre que le VPN L2TP se connecte.
Les écrans suivants montrent que le VPN L2TP est connecté avec succès à l'aide d'un client Android.
![]()
![]()
État du VPN L2TP
Freeradius montre l'authentification réussie du client Android L2TP.
La commande suivante affiche l'état du tunnel IPsec
état ip xfrm
Journal OpenSwan (/var/log/auth.log ) et journal xl2tp (/var/log/syslog ) affiche également l'état du VPN L2TP.
tail -f /var/log/auth.log
tail -f /var/log/syslog
![]()
Dans ce didacticiel, le protocole de tunnellisation de couche 2 est utilisé avec IPSec et Freeradius pour fournir des mécanismes de sécurité et d'authentification. Un client basé sur Android est utilisé pour démontrer le fonctionnement de L2TP sur IPsec.