GNU/Linux >> Tutoriels Linux >  >> Ubuntu

L2TP sur IPsec en utilisant OpenSwan avec l'authentification Freeradius sur Ubuntu 16.04

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 Freeradius

La 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
#
ATTRIBUTE      ATTRIBUT       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=secret

Configuration 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.


Ubuntu
  1. Surveiller le trafic réseau avec vnStat sur Ubuntu 20.04

  2. Comment installer Nginx avec Google PageSpeed ​​sur Ubuntu 20.04

  3. Comment installer Kubernetes avec Minikube sur Ubuntu 20.04

  4. Utiliser Ubuntu avec une configuration à deux écrans ?

  5. Sécurisez SSH en utilisant l'authentification à deux facteurs sur Ubuntu 16.04

Utilisation de PHP-FPM avec Apache sur Ubuntu 16.04

Comment configurer L2TP sur IPsec en utilisant Freeradius sur Ubuntu

Comment configurer un VPN sur Ubuntu

Comment tester les API REST avec Postman sur Ubuntu

Comment utiliser l'authentification à deux facteurs avec Ubuntu

Utilisation de WebDAV avec ISPConfig 3 sur Ubuntu 9.10