GNU/Linux >> Tutoriales Linux >  >> Ubuntu

L2TP sobre IPsec usando OpenSwan con autenticación Freeradius en Ubuntu 16.04

Este artículo trata sobre el protocolo de túnel de capa 2 (L2TP) con IPsec para proporcionar cifrado de extremo a extremo en la VPN de capa 2 porque las funciones de seguridad no están disponibles en L2TP. Las implementaciones de código abierto de IPsec son StrongSwan y OpenSwan, ambas son compatibles con todas las distribuciones de Linux. En este tutorial, se utiliza OpenSwan para proporcionar el canal de seguridad para L2TP VPN. Freeradius es una conocida herramienta de código abierto que proporciona diferentes tipos de autenticación para los usuarios. Freeradius se utiliza para autenticar al usuario de VPN L2TP antes de establecer un canal seguro. Se utilizará un cliente basado en Android para el túnel seguro basado en L2TP.

Instalación de paquetes requeridos

Los siguientes paquetes importantes se instalarán en Ubuntu 16.04 LTS.

  • Servidor/Cliente Freeradius
  • Servidor emergente
  • xl2tpd
  • Openswan para IPsec
  • Servidor MySQL/cliente
  • Bisonte y Flex
  • Biblioteca de desarrollo GMP

Como se muestra a continuación, la mayoría de los paquetes necesarios están disponibles en el repositorio de Ubuntu 16.04 LTS.

apt-get update

apt-get install -y mysql-server mysql-client freeradius-mysql pptpd xl2tpd

La siguiente captura de pantalla muestra cómo se establece la contraseña para el usuario "raíz" del servidor de base de datos MySQL durante el proceso de instalación.

Los siguientes paquetes son necesarios para la instalación de OpenSwan desde el origen en la plataforma Ubuntu 16.04.

apt-get install -y build-essential libgmp3-dev bison flex

Los paquetes del cliente Freeradius y OpenSwan no están disponibles en el repositorio, por lo que ambas herramientas se han instalado desde el origen.

Instalación del cliente Freeradius

Descargue el último cliente de Freeradius desde el siguiente enlace:

wget https://github.com/FreeRADIUS/freeradius-client/archive/master.zip
unzip master.zip

mv freeradius-client-master freeradius-client
cd freeradius-client

Primero, ejecute el script de configuración con el interruptor de prefijo e instale el software usando el comando make.

./configure --prefix=/

make && make install

Instalación de OpenSwan

El código fuente de la herramienta OpenSwan IPsec está disponible en el siguiente enlace. Descargue el archivo y descomprímalo.

wget https://download.openswan.org/openswan/openswan-latest.tar.gz
tar -xzf openswan-latest.tar.gz
cd openswan-*

Ejecute el siguiente comando para compilar e instalar OpenSwan.

make programs

make install  

Configuración

Antes de comenzar con la configuración de los paquetes instalados, se requieren las siguientes configuraciones base (iptables y sysctl) en la plataforma Ubuntu.

Ingrese las siguientes reglas de iptables para ambas redes (10.20.30.0/24 y 10.10.10.0/24) en la 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

Las reglas anteriores deben guardarse en /etc/iptables.rc para aplicarlos en el momento del arranque.

chmod +x /etc/iptables.rc
sed -i "/iptables.rc/d" /etc/rc.local
sed -i "1a/etc/iptables.rc" /etc/rc.local


Agregue las siguientes líneas en /etc/sysctl.conf archivo para habilitar el reenvío en la máquina 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

Ejecute el siguiente comando para aplicar los cambios.

sysctl -p


Configuración del Servidor Freeradius

Ejecute el siguiente comando para cambiar la contraseña de freeradius.

sed -i "s/PASSWORD('radpass')/PASSWORD('test')/g" /etc/freeradius/sql/mysql/admin.sql

Los siguientes comandos MySQL configurarán el servidor Freeradius en Ubuntu.

mysql --protocol=tcp -h localhost -u root -ptest
create database radius  # create DB radius

mysql --protocol=tcp -h localhost -u root -ptest radio

mysql --protocol=tcp -h localhost -u root -ptest radius < /etc/freeradius/sql/mysql/cui.sql

Agregar una fecha adecuada para solucionar el problema del valor predeterminado no válido en /etc/freeradius/sql/mysql/cui.sql .

Después de la corrección en /etc/freeradius/sql/mysql/cui.sql archivo y vuelva a ejecutar el comando anterior para corregir el error anterior.

mysql --protocol=tcp -h localhost -u root -ptest radius < /etc/freeradius/sql/mysql/ippool.sql

mysql --protocol=tcp -h localhost -u root -ptest radius < /etc/freeradius/sql/mysql/nas.sql

mysql --protocol=tcp -h localhost -u root -ptest radius < /etc/freeradius/sql/mysql/schema.sql

mysql --protocol=tcp -h localhost -u root -ptest radius < /etc/freeradius/sql/mysql/wimax.sql


Ejecute el siguiente comando sed para cambiar la contraseña predeterminada del usuario "radius". En este tutorial, la contraseña del usuario "radius" es "test". Elija una contraseña segura en su servidor.

sed -i "s/password = \"radpass\"/password = \"test\"/g" /etc/freeradius/sql.conf

Creando un enlace suave para la configuración sql en el directorio de módulos del servidor Freeradius.

ln -sf /etc/freeradius/sql.conf /etc/freeradius/modules/sql


Los siguientes archivos no están presentes en Ubuntu 16.04, por lo tanto, cree todos los archivos necesarios con el contenido descrito .

  • /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 monthlytrafficcounter {
    counter-name = Monthly-Traffic
    check-name = Monthly-Traffic
    sqlmod-inst = sql
    key = User-Name
    reset = monthly
    query = "SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
}

El siguiente archivo es importante para la configuración del servidor freeradius. Nuestras configuraciones de ejecución se dan a continuación.

/etc/freeradius/sites-enabled/default

authorize {
    preprocess
    chap
    mschap
    digest
    suffix
    eap {
        ok = return
    }
    files
    sql
    expiration
    logintime
    pap
    hourlytrafficcounter
    dailytrafficcounter
    monthlytrafficcounter
}
authenticate {
    Auth-Type PAP {
        pap
    }
    Auth-Type CHAP {
        chap
    }
    Auth-Type MS-CHAP {
        mschap
    }
    digest
    unix
    eap
}
preacct {
    preprocess
    acct_unique
    suffix
    files
}
accounting {
    detail
    unix
    radutmp
    sql
    exec
    attr_filter.accounting_response
}
session {
    radutmp
    sql
}
post-auth {
    sql
    exec
    Post-Auth-Type REJECT {
        attr_filter.access_reject
    }
}
pre-proxy {
}
post-proxy {
    eap
}

Use el siguiente comando para reiniciar el servidor freeradius y verificar la configuración.

/etc/init.d/freeradius restart


Configuración del cliente Freeradius

El siguiente comando establece el nombre de host y el secreto en el archivo "servidores" del cliente freeradius.

echo -e "localhost\ttesting123" >> /etc/radiusclient/servers

Cree el archivo de configuración dictionary.microsoft para clientes basados ​​en Windows.

vi /etc/radiusclient/dictionary.microsoft
#
#       Microsoft's VSA's, from 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       string  Microsoft
ATTRIBUTE       MS-CHAP-Error           2       string  Microsoft
ATTRIBUTE       MS-CHAP-CPW-1           3       string  Microsoft
ATTRIBUTE       MS-CHAP-CPW-2           4       string  Microsoft
ATTRIBUTE       MS-CHAP-LM-Enc-PW       5       string  Microsoft
ATTRIBUTE       MS-CHAP-NT-Enc-PW       6       string  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Policy 7     string  Microsoft
# This is referred to as both singular and plural in the RFC.
# Plural seems to make more sense.
ATTRIBUTE       MS-MPPE-Encryption-Type 8       string  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Types  8     string  Microsoft
ATTRIBUTE       MS-RAS-Vendor           9       integer Microsoft
ATTRIBUTE       MS-CHAP-Domain          10      string  Microsoft
ATTRIBUTE       MS-CHAP-Challenge       11      string  Microsoft
ATTRIBUTE       MS-CHAP-MPPE-Keys       12      string  Microsoft encrypt=1
ATTRIBUTE       MS-BAP-Usage            13      integer Microsoft
ATTRIBUTE       MS-Link-Utilization-Threshold 14 integer        Microsoft
ATTRIBUTE       MS-Link-Drop-Time-Limit 15      integer Microsoft
ATTRIBUTE       MS-MPPE-Send-Key        16      string  Microsoft
ATTRIBUTE       MS-MPPE-Recv-Key        17      string  Microsoft
ATTRIBUTE       MS-RAS-Version          18      string  Microsoft
ATTRIBUTE       MS-Old-ARAP-Password    19      string  Microsoft
ATTRIBUTE       MS-New-ARAP-Password    20      string  Microsoft
ATTRIBUTE       MS-ARAP-PW-Change-Reason 21     integer Microsoft
ATTRIBUTE       MS-Filter               22      string  Microsoft
ATTRIBUTE       MS-Acct-Auth-Type       23      integer Microsoft
ATTRIBUTE       MS-Acct-EAP-Type        24      integer Microsoft
ATTRIBUTE       MS-CHAP2-Response       25      string  Microsoft
ATTRIBUTE       MS-CHAP2-Success        26      string  Microsoft
ATTRIBUTE       MS-CHAP2-CPW            27      string  Microsoft
ATTRIBUTE       MS-Primary-DNS-Server   28      ipaddr
ATTRIBUTE       MS-Secondary-DNS-Server 29      ipaddr
ATTRIBUTE       MS-Primary-NBNS-Server  30      ipaddr Microsoft
ATTRIBUTE       MS-Secondary-NBNS-Server 31     ipaddr Microsoft
#ATTRIBUTE      MS-ARAP-Challenge       33      string  Microsoft
#
#       Integer Translations
#
#       MS-BAP-Usage Values
VALUE           MS-BAP-Usage            Not-Allowed     0
VALUE           MS-BAP-Usage            Allowed         1
VALUE           MS-BAP-Usage            Required        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-Reason        Admin-Requires-Password-Change  3
VALUE   MS-ARAP-PW-Change-Reason        Password-Too-Short              4
#       MS-Acct-Auth-Type Values
VALUE           MS-Acct-Auth-Type       PAP             1
VALUE           MS-Acct-Auth-Type       CHAP            2
VALUE           MS-Acct-Auth-Type       MS-CHAP-1       3
VALUE           MS-Acct-Auth-Type       MS-CHAP-2       4
VALUE           MS-Acct-Auth-Type       EAP             5
#       MS-Acct-EAP-Type Values
VALUE           MS-Acct-EAP-Type        MD5             4
VALUE           MS-Acct-EAP-Type        OTP             5
VALUE           MS-Acct-EAP-Type        Generic-Token-Card      6
VALUE           MS-Acct-EAP-Type        TLS             13
END-VENDOR Microsoft

vi /etc/radiusclient/dictionary.merit
#
#       Experimental extensions, configuration only (for check-items)
#       Names/numbers as per the MERIT extensions (if possible).
#
ATTRIBUTE       NAS-Identifier          32      string
ATTRIBUTE       Proxy-State             33      string
ATTRIBUTE       Login-LAT-Service       34      string
ATTRIBUTE       Login-LAT-Node          35      string
ATTRIBUTE       Login-LAT-Group         36      string
ATTRIBUTE       Framed-AppleTalk-Link   37      integer
ATTRIBUTE       Framed-AppleTalk-Network 38     integer
ATTRIBUTE       Framed-AppleTalk-Zone   39      string
ATTRIBUTE       Acct-Input-Packets      47      integer
ATTRIBUTE       Acct-Output-Packets     48      integer
# 8 is a MERIT extension.
VALUE           Service-Type            Authenticate-Only       8

Agregue las siguientes líneas al /etc/radiusclient/dictionary archivo.

INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft
ATTRIBUTE Hourly-Traffic 1000 integer
ATTRIBUTE Daily-Traffic 1001 integer
ATTRIBUTE Monthly-Traffic 1002 integer


La siguiente es la configuración de ejecución del cliente RADIUS.

/etc/radiusclient/radiusclient.conf
# General settings
# specify which authentication comes first respectively which
# authentication is used. possible values are: "radius" and "local".
# if you specify "radius,local" then the RADIUS server is asked
# first then the local one. if only one keyword is specified only
# this server is asked.
auth_order    radius,local
# maximum login tries a user has
login_tries    4
# timeout for all login tries
# if this time is exceeded the user is kicked out
login_timeout    60
# name of the nologin file which when it exists disables logins. it may
# be extended by the ttyname which will result in
#a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable
# logins on /dev/ttyS2)
nologin /etc/nologin
# name of the issue file. it's only display when no username is passed
# on the radlogin command line
issue    /etc/radiusclient/issue
seqfile /var/run/freeradius/freeradius.pid

## RADIUS listens separated by a colon from the hostname. if
# no port is specified /etc/services is consulted of the radius
authserver     localhost
# RADIUS server to use for accouting requests. All that I
# said for authserver applies, too.
acctserver     localhost

# file holding shared secrets used for the communication
# between the RADIUS client and server
servers        /etc/radiusclient/servers
# dictionary of allowed attributes and values just like in the normal
# RADIUS distributions
dictionary     /etc/radiusclient/dictionary

# program to call for a RADIUS authenticated login
login_radius    /sbin/login.radius
# file which specifies mapping between ttyname and NAS-Port attribute
mapfile        /etc/radiusclient/port-id-map
# default authentication realm to append to all usernames if no
# realm was explicitly specified by the user
default_realm

# time to wait for a reply from the RADIUS server
radius_timeout    10
# resend request this many times before trying the next server
radius_retries    3
# local address from which radius packets have to be sent
bindaddr *
# program to execute for local login
# it must support the -f flag for preauthenticated login
login_local    /bin/login


La siguiente configuración (que está relacionada con IPv6) en el archivo /etc/radiusclient/dictionary debe ser comentado para ejecutar el cliente RADIUS.

ATTRIBUTE       NAS-Filter-Rule         92      string
ATTRIBUTE       Originating-Line-Info   94      string
ATTRIBUTE       NAS-IPv6-Address        95      string
ATTRIBUTE       Framed-Interface-Id     96      string
ATTRIBUTE       Framed-IPv6-Prefix      97      ipv6prefix
ATTRIBUTE       Login-IPv6-Host         98      string
ATTRIBUTE       Framed-IPv6-Route       99      string
ATTRIBUTE       Framed-IPv6-Pool        100     string
ATTRIBUTE       Error-Cause             101     integer
ATTRIBUTE       EAP-Key-Name            102     string
#
#       RFC6911 IPv6 attributes
#
ATTRIBUTE       Framed-IPv6-Address     168     ipv6addr
ATTRIBUTE       DNS-Server-IPv6-Address 169     ipv6addr
ATTRIBUTE       Route-IPv6-Information  170     ipv6prefix

Configuración del servidor Poptop

Agregue la siguiente configuración en /etc/pptpd.conf archivo.

localip 10.20.30.1
remoteip 10.20.30.2-254

Ejecute el siguiente comando sed en /etc/ppp/pptpd-options archivo.

sed -i "/^ms-dns/d" /etc/ppp/pptpd-options
sed -i -e "/radius.so/d" -e "/radattr.so/d" /etc/ppp/pptpd-options

Agregue las siguientes líneas en /etc/ppp/pptpd-options archivo.

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

Reinicie el servicio pptpd para aplicar los cambios anteriores.

service pptpd restart

Configuración de xl2tp

Incluya las siguientes líneas de configuración en /etc/xl2tpd/xl2tpd.conf archivo como se muestra en la siguiente figura.

[global]
ipsec saref = yes

[lns default]
ip range = 10.10.10.2-10.10.10.255
local ip = 10.10.10.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

Configuración de OpenSwan

Agregue la siguiente configuración del archivo secreto de ipsec en  /etc/ipsec.secrets .

192.168.15.4 %any  0.0.0.0: PSK "test"

La configuración de IPsec para el túnel L2TP se incluye en /etc/ipsec.conf archivo.

version 2.0    

config setup
        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  # used for SAref + MAST only
        interfaces="%defaultroute"
        oe=off

conn psk-l2tp
        pfs=no
        auto=add
        rekey=no
        # overlapip=yes   # for SAref + MAST
        # sareftrack=yes  # for SAref + MAST
        type=transport
        left=192.168.15.4
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any
        rightsubnet=vhost:%priv,%no
        authby=secret

Configuración del servidor PPP

Agregue la siguiente configuración en /etc/ppp/options.xl2tpd archivo.

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


Después de una configuración exitosa de todos los paquetes requeridos, ahora reinicie todos los servicios para probar L2TP VPN.

Reinicio de los servicios IPsec y xl2tp.

La siguiente figura muestra que el servidor freeradius se ejecuta en modo daemon, lo que es útil para identificar que el servidor está funcionando.

Inserte una cuenta de usuario en la base de datos MySQL para probar la configuración.

INSERT INTO radius.radcheck (username, attribute, op, value) VALUES ('username','User-Password',':=','userpassword');


El siguiente comando verifica que el servidor Freeradius esté funcionando en localhost.

radtest username userpassword localhost 0 testing123

Configuración del cliente Android L2TP

Vaya a configuración  ==> Más ==> VPN ==>Agregar red VPN en un teléfono Android y cree un nuevo L2TP PSK VPN como se muestra a continuación.

Después de la creación de una nueva VPN L2TP, haga clic en ella e ingrese el nombre de usuario/contraseña (configurado en el servidor freeradius).

La siguiente figura muestra que L2TP VPN se está conectando.

Las siguientes pantallas muestran que L2TP VPN se conectó con éxito mediante un cliente de Android.

Estado de VPN L2TP

Freeradius muestra la autenticación exitosa del cliente Android L2TP.

El siguiente comando muestra el estado del túnel IPsec

ip xfrm state

Registro de OpenSwan (/var/log/auth.log ) y registro xl2tp (/var/log/syslog ) también muestra el estado de L2TP VPN.

cola -f /var/log/auth.log

cola -f /var/log/syslog

En este tutorial, se utiliza el protocolo de tunelización de capa 2 con IPSec y Freeradius para proporcionar mecanismos de seguridad y autenticación. Se utiliza un cliente basado en Android para demostrar el funcionamiento de L2TP sobre IPsec.


Ubuntu
  1. Supervise el tráfico de red con vnStat en Ubuntu 20.04

  2. Cómo instalar Nginx con Google PageSpeed ​​en Ubuntu 20.04

  3. Cómo instalar Kubernetes con Minikube en Ubuntu 20.04

  4. ¿Usando Ubuntu con una configuración de dos pantallas?

  5. ¿Autenticación de proxy con Terminal Ubuntu 14.04?

Usando PHP-FPM con Apache en Ubuntu 16.04

Cómo configurar L2TP sobre IPsec usando Freeradius en Ubuntu

Cómo configurar una VPN en Ubuntu

Cómo probar las API REST con Postman en Ubuntu

Cómo usar la autenticación de dos factores con Ubuntu

Uso de WebDAV con ISPConfig 3 en Ubuntu 9.10