GNU/Linux >> Znalost Linux >  >> Ubuntu

L2TP přes IPsec pomocí OpenSwan s ověřováním Freeradius na Ubuntu 16.04

Tento článek je o tunelovacím protokolu vrstvy 2 (L2TP) s protokolem IPsec, který poskytuje end-to-end šifrování ve vrstvě 2 VPN, protože funkce zabezpečení nejsou v L2TP dostupné. Open source implementace IPsec jsou StrongSwan a OpenSwan, obě jsou podporovány ve všech distribucích Linuxu. V tomto tutoriálu se OpenSwan používá k poskytování bezpečnostního kanálu pro L2TP VPN. Freeradius je známý open source nástroj, který uživatelům poskytuje různé typy autentizace. Freeradius se používá k ověření uživatele L2TP VPN před vytvořením zabezpečeného kanálu. Pro zabezpečený tunel založený na L2TP bude použit klient se systémem Android.

Instalace požadovaných balíčků

Následující důležité balíčky budou nainstalovány na Ubuntu 16.04 LTS.

  • Server/klient Freeradius
  • Poptop Server
  • xl2tpd
  • Openswan pro IPsec
  • Server MySQL/klient
  • Bison &Flex
  • Knihovna vývoje GMP

Jak je uvedeno níže, většina požadovaných balíčků je k dispozici v úložišti Ubuntu 16.04 LTS.

aktualizace apt-get

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

Následující snímek obrazovky ukazuje, jak se během procesu instalace nastavuje heslo pro uživatele „root“ databázového serveru MySQL.

Následující balíčky jsou vyžadovány pro instalaci OpenSwan ze zdroje na platformě Ubuntu 16.04.

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

Klient Freeradius a balíčky OpenSwan nejsou v úložišti dostupné, takže oba nástroje byly nainstalovány ze zdroje.

Instalace klienta Freeradius

Stáhněte si nejnovějšího klienta Freeradius z následujícího odkazu:

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

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

Nejprve spusťte konfigurační skript s přepínačem předpony a nainstalujte software pomocí příkazu make.

./configure --prefix=/

provést &&provést instalaci

Instalace OpenSwan

Zdrojový kód nástroje OpenSwan IPsec je k dispozici na následujícím odkazu. Stáhněte si archiv a rozbalte jej.

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

Spuštěním následujícího příkazu zkompilujte a nainstalujte OpenSwan.

vytvářet programy

proveďte instalaci  

Konfigurace

Než začneme s konfigurací nainstalovaných balíčků, jsou na platformě Ubuntu vyžadovány následující základní konfigurace (iptables a sysctl).

Na terminálu zadejte následující pravidla iptables pro obě sítě (10.20.30.0/24 &10.10.10.0/24).

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

Výše uvedená pravidla by měla být uložena do /etc/iptables.rc soubor použít při spouštění.

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


Přidejte následující řádky do /etc/sysctl.conf soubor pro povolení přeposílání na počítači se systémem 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

Chcete-li použít změny, spusťte následující příkaz.

sysctl -p


Konfigurace serveru Freeradius

Spusťte následující příkaz pro změnu hesla pro freeradius.

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

Následující příkazy MySQL nakonfigurují server Freeradius na Ubuntu.

mysql --protocol=tcp -h localhost -u root -ptest
vytvořit radius databáze  # vytvořit poloměr databáze

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

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

Přidání správného data k vyřešení problému s neplatnou výchozí hodnotou v /etc/freeradius/sql/mysql/cui.sql .

Po opravě v /etc/freeradius/sql/mysql/cui.sql soubor a znovu spusťte výše uvedený příkaz, abyste opravili výše uvedenou chybu.

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  


Spusťte následující příkaz sed pro změnu výchozího hesla uživatele "radius". V tomto tutoriálu je heslo pro uživatele "radius" "test". Zvolte si na svém serveru bezpečné heslo.

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

Vytvoření měkkého odkazu pro konfiguraci sql v adresáři modules serveru Freeradius.

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


Na Ubuntu 16.04 nejsou přítomny následující soubory, proto vytvořte všechny požadované soubory s popsaným obsahem .

  • /etc/freeradius/modules/hourlylytraffic
  • /etc/freeradius/modules/dailytraffic
  • /etc/freeradius/modules/monthlytraffic

/etc/freeradius/modules/hourlytraffic

sqlcounter hourlytrafficcounter {
    counter-name =hodinový provoz
    check-name =hodinový provoz
    sqlmod-inst =sql
    klíč =uživatelské jméno
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 =Uživatelské jméno
    reset =denně
    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
    klíč =Uživatelské jméno
    reset =měsíčně
    query ="SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)> '%b'"


Následující soubor je důležitý pro konfiguraci freeradius serveru. Naše provozní konfigurace jsou uvedeny níže.

/etc/freeradius/sites-enabled/default

autorizovat {
    předběžné zpracování
    chap
    mschap
    digest
    přípona
    eap {
        ok =návrat
    }
    soubory
    sql
    vypršení platnosti
    čas přihlášení
    pap
    hodinový počítadlo návštěvnosti
    denní počítadlo návštěvnosti
    měsíční počítadlo návštěvnosti
}
ověření {
    Auth-Type PAP {
        pap
    }
    Auth-Type CHAP {
        kap
    }
    Auth-Type MS-CHAP {
        mschap
    }
    přehled
    unix
    eap
}
preacct {
    předzpracování
    acct_unique
    přípona
    soubory
}
účetnictví {
    podrobnosti
    unix
    radutmp
    sql
    exec
    attr_filter.accounting_response
}
relace {
    radutmp
    sql
}
post-auth {
    sql
    exec
    Post-Auth-Type ODMÍTNOUT {
        attr_filter.access_reject
    }
}
před proxy {
}
post-proxy {
    eap
}

Pomocí následujícího příkazu restartujte server freeradius a ověřte konfiguraci.

/etc/init.d/freeradius restart


Konfigurace klienta Freeradius

Následující příkaz nastaví název hostitele a tajný klíč v souboru "servers" klienta freeradius.

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

Vytvořte konfigurační soubor dictionary.microsoft pro klienty se systémem Windows.

vi /etc/radiusclient/dictionary.microsoft
#
#       VSA společnosti Microsoft, z RFC 2548
#
#       \$Id:poptop_ads_howto_8.htm,v 1.8 2008/10/02 08:11:48 wskwok Exp \$
#
VENDOR           Microsoft       311     Microsoft
ZAČÁTEK VENDORA    Microsoft
ATRIBUTE        MS-CHAP-Response         1         Řetězec 1         Řetězec  Microsoft              ŘETĚZC MS-CHAP-CPW-1           3       řetězec  Microsoft
ATTRIBUTE       MS-CHAP-CPW-2           4        řetězec  Microsoft
ATTRIBUTE         Microsoft                                                                        MS- -NT-Enc-PW       6        řetězec  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Policy 7     řetězec  Microsoft
# Toto je v RFC označováno jako jednotné i množné číslo.
# Množné číslo vypadá jako dává větší smysl.
ATTRIBUTE       MS-MPPE-Encryption-Type 8        řetězec  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Types  8     řetězec  Microsoft
ATTRIBUTE     MS-RAS-Vendor 9 Integer Microsoft
Atribut MS-Chap-domain 10 String Microsoft
Atribut MS-Chap-Challenge 11 String Microsoft
Atribut MS-CHAP-MPPE-keys 12 String Microsoft Encrypt =1
ATTRIBUTE       MS-BAP-Usage            13      celé číslo Microsoft
ATRIBUTE        MS-Link-Utilization-Threshold 14 celé číslo Microsoft   - - D pokles
ATTRIBUTE       MS-MPPE-Send-Key        16       řetězec  Microsoft
ATTRIBUTE       MS-MPPE-Recv-Key         17       řetězec Microsoft
ATRIBUTE MS        řetězec  Microsoft
ATRIBUTE MS- V     řetězec Micro -Password    19      string  Microsoft
ATTRIBUTE       MS-New-ARAP-Password    20      řetězec  Microsoft
ATTRIBUTE       MS-ARAP-PW-Change-Reason 21     FI  21 Microsoft    BR-   AT  řetězec       BR-   AT  integer  Microsoft />AT Tribute MS-ACCT-Auth-Type 23 Integer Microsoft
Atribut MS-ACCT-EAP-Type 24 Integer Microsoft
Atribut MS-CHAP2-Response 25 String Microsoft
Atribut MS-CHAP2-SUCCESS 26 řetězec  Microsoft
ATTRIBUTE       MS-CHAP2-CPW            27      řetězec  Microsoft
ATTRIBUTE       MS-Primary-DNS-Server   28       ipaddr
ATTRIBUTE 2 MS - atribut MS  pad MS    condar  MS Primární-NBNS-Server  30      ipaddr Microsoft
ATTRIBUTE       MS-Sekundární-NBNS-Server 31     ipaddr Microsoft
#ATTRIBUTE      MS-ARAP-Challenge       33   ># řetězec           Microsoft #       Microsoft              # br />#
#       Hodnoty využití MS-BAP
HODNOTA            Využití MS-BAP             Nepovoleno     0
VALUE            ed MS-BAP-Využití /                                        Použití            Vyžadováno        2
#       Hodnoty MS-ARAP-Password-Change-Reason
VALUE   MS-ARAP-PW-Change-Reason        Just-Change-Password             1
VALUE   MS-ARAP-PW-Change-Reason- P -        P -        P -        P -        P -        P -        P -        P -        P -        P -        P -        P -        Důvod        Admin-Requires-Password-Change  3
VALUE   MS-ARAP-PW-Change-Důvod        Heslo je příliš krátké               4
# cc<       Hodnota T-Acct A     VALUE  MS-Acct A   -Auth-type Pap 1
Hodnota MS-ACCT-AUTH-TYPE CHAP 2
Hodnota MS-ACCT-AUTH-TYPE MS-CHAP-1 3
Hodnota MS-ACCT-AUTH-TYPE MS-CHAP-2       4
VALUE           MS-Acct-Auth-Type       EAP             5
#       Hodnoty typu MS-Acct-EAP 5 
Hodnota MS-ACCT-EAP-TYPE OTP 5
Hodnota MS-ACCT-EAP-Type Generic-Token-Card 6
Hodnota MS-ACCT-EAP-TYPE TLS 13
End-Vendor Microsoft

vi /etc/radiusclient/dictionary.merit
#
#       Experimentální rozšíření, pouze konfigurace (pro kontrolní položky)
#       Názvy/čísla podle rozšíření MERIT (pokud je to možné).
#
ATTRIBUTE       NAS- Identifikátor 32 String
Atribut Proxy-State 33 String
Atribut přihlašovací-latovací-servis 34 String
Atribut Přihlašovací-lat-uzel 35 řetězec
atribut přihlašovací-lat-skupina 36 řetězec
Atribut Framed-AppleTalk-Link 37 Integer
Atribut Framed-AppleTalk-Network 38 Integer
Atribut Framed-AppleTalk-Zone 39 String
Attribute Acct-Input-Packets 47 Integer
ATTRIBUTE       Acct-Output-Packets     48      celé číslo
# 8 je rozšíření MERIT.
VALUE           Typ služby            Authenticate-Only <  / br>< > 8

Přidejte následující řádky do /etc/radiusclient/dictionary soubor.

ZAHRNUJTE /etc/radiusclient/dictionary.merit
ZAHRNUJTE /etc/radiusclient/dictionary.microsoft
ATTRIBUTE Hodinový provoz 1000 celé číslo
ATRIBUTE Denní provoz 1001 celé číslo
ATRIBUTE Měsíční návštěvnost 1002 celé číslo


Následující je konfigurace spuštění radius klienta.

/etc/radiusclient/radiusclient.conf
# Obecná nastavení
# určují, která autentizace je na prvním místě, respektive která
# autentizace se používá. možné hodnoty jsou:"radius" a "local".
# pokud zadáte "radius,local", pak se nejprve zeptá serveru RADIUS
# a poté místního. pokud je zadáno pouze jedno klíčové slovo, pouze
# je dotazován tento server.
auth_order    radius,local
# maximální počet pokusů o přihlášení uživatel má
login_tries    4
# časový limit pro všechny pokusy o přihlášení
# při překročení této doby je uživatel vyhozen
login_timeout    60
# název souboru nologin, který, pokud existuje, zakáže přihlášení. může být
# rozšířeno o ttyname, což povede k
# zámku specifickému pro terminál (např. /etc/nologin.ttyS2 zakáže
# přihlášení na /dev/ttyS2)
nologin /etc/nologin
# název souboru problému. zobrazí se pouze v případě, že není předáno žádné uživatelské jméno
# na příkazovém řádku radlogin
problém    /etc/radiusclient/issue
seqfile /var/run/freeradius/freeradius.pid

## RADIUS poslouchá oddělené dvojtečkou od názvu hostitele. pokud
# není zadán žádný port /etc/services je konzultován s okruhem
authserver     localhost
# RADIUS server, který se má použít pro účtování požadavků. Vše, co jsem
# řekl pro authserver, platí také.
acctserver     localhost

# soubor obsahující sdílená tajemství používaná pro komunikaci
# mezi klientem RADIUS a serverem
servery        /etc/radiusclient/servers
# slovník povolených atributů a hodnot stejně jako v normálních
# distribucích RADIUS
slovníku     /etc/radiusclient/dictionary

# program pro volání přihlášení ověřeného RADIUS
login_radius    /sbin/login.radius
# soubor, který určuje mapování mezi ttyname a atributem NAS-Port
mapfile        /etc/radiusclient/port- id-map
# výchozí autentizační sféra pro připojení ke všem uživatelským jménům, pokud uživatel výslovně nezadal žádnou
# sféru
default_realm

# čas čekání na odpověď ze serveru RADIUS
radius_timeout    10
# odešlete požadavek mnohokrát znovu, než vyzkoušíte další server
radius_retries    3
# místní adresa, ze které je třeba posílat pakety okruhu
bindaddr *
# program ke spuštění pro místní přihlášení
# musí podporovat příznak -f pro předem ověřené přihlášení
login_local    /bin/login


Následující konfigurace (která souvisí s IPv6)  v souboru /etc/radiusclient/dictionary by měla být zakomentován, aby bylo možné spustit klienta Radius.

Atribut NAS-FILTER-RULE 92 String
Atribut původně-line-info 94 String
Atribut NAS-IPV6-Address 95 String
Atribut Framed-Interface-Id 96 String
Atribut Framed-IPV6-PREFIX 97 IPv6PREFIX
Atribut Přihlašovací IPV6-hostitel 98 String
Atribut Framed-IPV6-ROTE 99 String
Atribut Framed-ipv6-Pool 100 Stributs
Error-Cause             101     celé číslo
ATTRIBUTE       Název klíče EAP            102      řetězec
#
# dr adresa  Add.  IP IP /adresa IP 8 atributy RFC 1 / brv6 Atributy RFC 1 / BR V6 >ATRIBUTE       DNS-Server-IPv6-Address 169     ipv6addr
ATTRIBUTE       Route-IPv6-Information  170     ipv6prefix

Konfigurace serveru Poptop

Přidejte následující konfiguraci do /etc/pptpd.conf soubor.

localip 10.20.30.1
remoteip 10.20.30.2-254

Spusťte  následující příkaz sed v /etc/ppp/pptpd-options soubor.

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

Přidejte následující řádky do /etc/ppp/pptpd-options soubor.

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

Chcete-li použít výše uvedené změny, restartujte službu pptpd.

restart služby pptpd

Konfigurace xl2tp

Zahrňte následující konfigurační řádky do /etc/xl2tpd/xl2tpd.conf soubor, jak je znázorněno na následujícím obrázku.

[globální]
ipsec saref =ano

[lns výchozí]
rozsah IP =10.10.10.2-10.10.10.255
místní IP =10.10.10.1
odmítnout chap =ano
odmítnout pap =ano
vyžadovat ověření =ano
ladit ppp =ano
pppoptfile =/etc/ppp/options.xl2tpd
bit délky =ano

Konfigurace OpenSwan

Přidejte následující nastavení tajného souboru ipsec do  /etc/ipsec.secrets .

192.168.15.4 %any  0.0.0.0:PSK "test"

Konfigurace IPsec pro tunel L2TP je součástí /etc/ipsec.conf soubor.

verze 2.0    

nastavení konfigurace
        nat_traversal=yes
        virtual_private=%v4:192.168.0.0/16,%v4:10.0.0.0/8,%v14:1 .0.0/12,%v4:25.0.0.0/8,%v4:!10.254.253.0/24
        protostack=netkey
        #protostack=mast  # používá se pouze pro rozhraní SAref + MAST 
   ="%defaultroute"
        oe=off

conn psk-l2tp
        pfs=no
        auto=add
        rekey=no
         # overlapip=yes   # pro SAref + MAST
        # sareftrack=yes  # pro SAref + MAST
        type=transport
        vlevo=192.168.15.4
   7 levý proto port right=%any
        rightprotoport=17/%any
        rightsubnet=vhost:%priv,%no
        authby=secret

Konfigurace serveru PPP

Přidejte následující konfiguraci do /etc/ppp/options.xl2tpd soubor.

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


Po úspěšné konfiguraci všech požadovaných balíčků nyní restartujte všechny služby a otestujte L2TP VPN.

Restartování služeb IPsec a xl2tp.

Následující obrázek ukazuje, že server freeradius běží v režimu démona, což pomáhá identifikovat, že server funguje.

Vložte uživatelský účet do databáze MySQL a otestujte konfiguraci.

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


Následující příkaz zkontroluje, zda server Freeradius funguje na localhost.

radtest uživatelské jméno uživatelské heslo localhost 0 testing123

Konfigurace klienta L2TP Android

Přejděte do nastavení  ==> Další ==> VPN ==>Přidat síť VPN na telefonu Android a vytvořte nový L2TP PSK VPN, jak je uvedeno níže.

Po vytvoření nové L2TP VPN na ni klikněte a zadejte uživatelské jméno/heslo (nakonfigurováno na serveru freeradius).

Následující obrázek ukazuje, že se L2TP VPN připojuje.

Následující obrazovky ukazují, že L2TP VPN je úspěšně připojena pomocí klienta Android.

Stav L2TP VPN

Freeradius ukazuje úspěšné ověření L2TP klienta Android.

Následující příkaz zobrazuje stav tunelu IPsec

stav xfrm ip

Protokol OpenSwan (/var/log/auth.log ) a protokol xl2tp (/var/log/syslog ) také zobrazuje stav L2TP VPN.

tail -f /var/log/auth.log

tail -f /var/log/syslog

V tomto kurzu je tunelovací protokol vrstvy 2 použit s IPSec a Freeradius k zajištění mechanismů zabezpečení a ověřování. K demonstraci fungování L2TP přes IPsec se používá klient založený na Androidu.


Ubuntu
  1. Monitorujte síťový provoz pomocí vnStat na Ubuntu 20.04

  2. Jak nainstalovat Nginx pomocí Google PageSpeed ​​na Ubuntu 20.04

  3. Jak nainstalovat Kubernetes s Minikube na Ubuntu 20.04

  1. Používáte Ubuntu s nastavením na dvou obrazovkách?

  2. Ověřování proxy pomocí terminálu Ubuntu 14.04?

  3. Zabezpečte SSH pomocí dvoufaktorové autentizace na Ubuntu 16.04

  1. Jak nastavit MongoDB Cluster pomocí 3 uzlů s Ubuntu 16?

  2. Jak nainstalovat Kubernetes s Minikube na Ubuntu 18.04 LTS

  3. Jak nainstalovat GitBucket s Nginx na Ubuntu 18.04 LTS