GNU/Linux >> Belajar Linux >  >> Ubuntu

L2TP melalui IPsec menggunakan OpenSwan dengan otentikasi Freeradius di Ubuntu 16.04

Artikel ini tentang protokol tunneling layer 2 (L2TP) dengan IPsec untuk menyediakan enkripsi ujung ke ujung di VPN lapisan 2 karena fitur keamanan tidak tersedia di L2TP. Implementasi open source dari IPsec adalah StrongSwan dan OpenSwan, keduanya didukung di semua distribusi Linux. Dalam tutorial ini, OpenSwan digunakan untuk menyediakan saluran keamanan untuk L2TP VPN. Freeradius adalah alat open source terkenal yang menyediakan berbagai jenis otentikasi untuk pengguna. Freeradius digunakan untuk mengautentikasi pengguna VPN L2TP sebelum membuat saluran aman. Klien berbasis android akan digunakan untuk terowongan aman berbasis L2TP.

Instalasi paket yang diperlukan

Paket-paket penting berikut akan diinstal pada Ubuntu 16.04 LTS.

  • Server/Klien Freeradius
  • Server Pop-top
  • xl2tpd
  • Openswan untuk IPsec
  • MySQL Server/klien
  • Bison &Fleksibel
  • Perpustakaan pengembangan GMP

Seperti yang ditunjukkan di bawah ini, sebagian besar paket yang diperlukan semuanya tersedia di repositori Ubuntu 16.04 LTS.

apt-get update

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

Tangkapan layar berikut menunjukkan bagaimana kata sandi untuk "root" pengguna dari server database MySQL diatur selama proses instalasi.

Paket berikut diperlukan untuk instalasi OpenSwan dari sumber pada platform Ubuntu 16.04.

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

Klien Freeradius dan paket OpenSwan tidak tersedia di repositori, jadi kedua alat telah diinstal dari sumber.

Instalasi klien Freeradius

Unduh klien Freeradius terbaru dari tautan berikut:

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

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

Pertama, jalankan skrip configure dengan sakelar awalan dan instal perangkat lunak menggunakan perintah make.

./configure --prefix=/

buat &&lakukan pemasangan

Instalasi OpenSwan

Kode sumber alat OpenSwan IPsec tersedia di tautan berikut. Unduh arsip dan buka kemasannya.

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

Jalankan perintah berikut untuk mengkompilasi dan menginstal OpenSwan.

membuat program

lakukan pemasangan  

Konfigurasi

Sebelum kita mulai dengan konfigurasi paket yang diinstal, konfigurasi dasar berikut (iptables dan sysctl) diperlukan pada platform Ubuntu.

Masukkan aturan iptables berikut untuk kedua jaringan (10.20.30.0/24 &10.10.10.0/24) di 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

Aturan di atas harus disimpan ke dalam /etc/iptables.rc file untuk menerapkannya saat boot.

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


Tambahkan baris berikut di /etc/sysctl.conf file untuk mengaktifkan penerusan pada mesin 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

Jalankan perintah berikut untuk menerapkan perubahan.

sysctl -p


Konfigurasi Server Freeradius

Jalankan perintah berikut untuk mengubah kata sandi untuk freeradius.

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

Perintah MySQL berikut akan mengkonfigurasi server Freeradius di Ubuntu.

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

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

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

Menambahkan tanggal yang tepat untuk memperbaiki masalah nilai default yang tidak valid di /etc/freeradius/sql/mysql/cui.sql .

Setelah koreksi di /etc/freeradius/sql/mysql/cui.sql file dan jalankan kembali perintah di atas untuk memperbaiki kesalahan di atas.

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  


Jalankan perintah berikut untuk mengubah kata sandi default "radius" pengguna. Dalam tutorial ini, kata sandi untuk pengguna "radius" adalah "test". Pilih kata sandi yang aman di server Anda.

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

Membuat tautan lunak untuk konfigurasi sql di direktori modul server Freeradius.

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


File berikut tidak ada di Ubuntu 16.04, oleh karena itu, buat semua file yang diperlukan dengan konten yang dijelaskan .

  • /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 =1j
    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 =harian
    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 =Nama Pengguna
    reset =bulanan
    query ="SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime)> '%b'"
}

File berikut ini penting untuk konfigurasi server freeradius. Konfigurasi kami yang sedang berjalan diberikan di bawah ini.

/etc/freeradius/sites-enabled/default

otorisasi {
    preprocess
    chap
    mschap
    digest
    suffix
    eap {
       ok =return
    }
    file
    sql
    kedaluwarsa
    waktu login
    pap
    penghitung lalu lintas per jam
    penghitung lalu lintas harian
    penghitung lalu lintas bulanan
}
autentikasi {
    Auth-Type PAP {
        pap
    }
    Auth-Type CHAP {
       chap
    }
    Auth-Type MS-CHAP {
        mschap
    }
    digest
    unix
    eap
}
preacct {
    preprocess
    acct_unique
    suffix
    file
}
accounting {
    detail
    unix
    radutmp
    sql
    exec
    attr_filter.accounting_response
}
sesi {
    radutmp
    sql
}
post-auth {
    sql
    exec
    Post-Auth-Type TOLAK {
        attr_filter.access_reject
    }
}
pra-proksi {
}
post-proxy {
    eap
}

Gunakan perintah berikut untuk memulai ulang server freeradius dan untuk memverifikasi konfigurasi.

/etc/init.d/freeradius restart


Konfigurasi klien Freeradius

Perintah berikut menetapkan nama host dan rahasia di file "server" dari klien freeradius.

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

Buat file konfigurasi dictionary.microsoft untuk klien berbasis Windows.

vi /etc/radiusclient/dictionary.microsoft
#
#       Microsoft VSA, dari RFC 2548
#
#       \$Id:poptop_ads_howto_8.htm,v 1.8 2008/10/02 08:11:48 wskwok Exp \$
#
VENDOR         Microsoft       311     Microsoft
MULAI VENDOR    Microsoft
ATTRIBUTE      MS-CHAP-Response       1      string  Microsoft
     MS-TRIBUTE /ATTRIBUTE       MS-CHAP-CPW-2          4      string  Microsoft
ATTRIBUTE       MS-CHAP-LM   <  > MS-CHAP-LM   < PW> -NT-Enc-PW       6       string  Microsoft
ATTRIBUTE       MS-MPPE-Encryption-Policy 7     string  Microsoft
# Ini disebut sebagai singular dan plural di RFC.
# Plural tampaknya lebih masuk akal.
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        Microsoft<       string Microsoft =1
ATTRIBUTE       MS-BAP-Usage           13      integer Microsoft
ATTRIBUTE       MS-Link-Utilization-Threshold 14 integer       Microsoft
ATTRIBUTE       MS-Time-Limit>ATTRIBUTE       MS-MPPE-Send-Key        16      string  Microsoft
ATTRIBUTE       MS-MPPE-Recv-Key       17     string  Microsoft
ATTRIBUTE           Microsoft-Version MS-RAS -Password    19      string  Microsoft
ATTRIBUTE       MS-New-ARAP-Password    20     string  Microsoft
ATTRIBUTE      MS-ARAP-PW-Change-Reason 21     integer Microsoft
ATTRIBUTE    Microsoft
ATTRIBUTE />AT TRIBUTE       MS-Acct-Auth-Type       23     bilangan bulat Microsoft
ATTRIBUTE       MS-Acct-EAP-Type       24     bilangan bulat Microsoft
ATTRIBUTE      MS-CHAP     MS-CHAP2-Respons string  Microsoft
ATTRIBUTE       MS-CHAP2-CPW           27     string  Microsoft
ATTRIBUTE       MS-Primary-DNS-Server   28      ipaddr
ATTRIBUTE          MS-DNS-Server <   > Primary-NBNS-Server  30      ipaddr Microsoft
ATTRIBUTE      MS-Secondary-NBNS-Server 31     ipaddr Microsoft
#ATTRIBUTE      MS-ARAP-Challenge       33      string<  Microsoft
# br />#
#       MS-BAP-Usage Values
VALUE          MS-BAP-Usage           Not-Allowed     0
VALUE         MS-BAP-Usage            Penggunaan MS-BAP Penggunaan            Diperlukan        2
#      Nilai MS-ARAP-Password-Change-Reason
VALUE   MS-ARAP-PW-Change-Reason        Just-Change-Password           1
VALUE   MS-ARAP-PW-Change-Reason       Expired-Password        

Reason        Admin-Requires-Password-Change  3
VALUE   MS-ARAP-PW-Change-Reason        Password-Too-Short            4
#      MS-Acct-Auth-Auth MS-Type Values 
VALUE          MS-Acct-Auth-Type       CHAP          2
VALUE          MS-< Type  > MS-Auth-Type MS-CHAP-2       4
VALUE          MS-Acct-Auth-Type       EAP           5
#      MS-Acct-EAP-Type Nilai
VALUE                      >VALUE          MS-Acct-EAP-Type        OTP           5
NILAI          MS-Acct-EAP-Type       Generic-Token-Card      6<     >     NILAI Microsoft

vi /etc/radiusclient/dictionary.merit
#
#       Ekstensi eksperimental, konfigurasi saja (untuk item yang diperiksa)
#       Nama/nomor sesuai ekstensi MERIT (jika mungkin).
#
ATTRIBUT       NAS- Identifier 32 String
Atribut Proxy-State 33 String
Atribut Latin-Lat-Service 34 String
Atribut Login-Lat-Node 35 String
Atribut Login-Lat-Group 36 String
ATTRIBUTE       Framed-AppleTalk-Link   37      integer
ATTRIBUTE       Framed-AppleTalk-Network 38     integer
ATTRIBUTE      Framed-AppleTalk-Zone   39      integer Acct     BUTE
ATTRIBUTE      >ATTRIBUTE       Acct-Output-Packets     48      integer
# 8 adalah ekstensi MERIT.
VALUE         Service-Type          Authenticate-Only       8

Tambahkan baris berikut ke /etc/radiusclient/dictionary berkas.

TERMASUKKAN /etc/radiusclient/dictionary.merit
TERMASUKKAN /etc/radiusclient/dictionary.microsoft
ATTRIBUT Lalu Lintas Per Jam 1000 bilangan bulat
ATTRIBUT Lalu Lintas Harian 1001 bilangan bulat
ATTRIBUT Lalu Lintas Bulanan 1002 integer


Berikut adalah konfigurasi run radius client.

/etc/radiusclient/radiusclient.conf
# Pengaturan umum
# menentukan autentikasi mana yang didahulukan masing-masing
# autentikasi yang digunakan. nilai yang mungkin adalah:"radius" dan "local".
# jika Anda menentukan "radius,local" maka server RADIUS akan ditanyakan
# terlebih dahulu kemudian server lokal. jika hanya satu kata kunci yang ditentukan saja
# server ini akan ditanyakan.
auth_order    radius,local
# upaya login maksimum yang dilakukan pengguna
login_tries    4
# batas waktu untuk semua percobaan login
# jika waktu ini terlampaui, pengguna akan dikeluarkan
login_timeout    60
# nama file nologin yang jika ada akan menonaktifkan login. mungkin
# diperpanjang dengan ttyname yang akan menghasilkan
#kunci khusus terminal (mis. /etc/nologin.ttyS2 akan menonaktifkan
# login di /dev/ttyS2)
nologin /etc/nologin
# nama file masalah. itu hanya ditampilkan ketika tidak ada nama pengguna yang diteruskan
# pada baris perintah radlogin
issue    /etc/radiusclient/issue
seqfile /var/run/freeradius/freeradius.pid

## RADIUS mendengarkan dipisahkan oleh titik dua dari nama host. jika
# tidak ada port yang ditentukan /etc/services dikonsultasikan dengan radius
authserver     localhost
# server RADIUS yang akan digunakan untuk menghitung permintaan. Semua yang saya
# katakan untuk authserver juga berlaku.
acctserver     localhost

# file yang menyimpan rahasia bersama yang digunakan untuk komunikasi
# antara klien RADIUS dan server
servers        /etc/radiusclient/servers
# kamus atribut dan nilai yang diizinkan sama seperti di
# distribusi RADIUS
kamus     /etc/radiusclient/dictionary

# program untuk memanggil login yang diautentikasi RADIUS
login_radius    /sbin/login.radius
# file yang menentukan pemetaan antara ttyname dan atribut NAS-Port
mapfile        /etc/radiusclient/port- id-map
# ranah otentikasi default untuk ditambahkan ke semua nama pengguna jika tidak ada
# ranah ditentukan secara eksplisit oleh pengguna
default_realm

# waktu untuk menunggu balasan dari server RADIUS
radius_timeout    10
# kirim ulang permintaan ini berkali-kali sebelum mencoba server berikutnya
radius_retries    3
# alamat lokal dari mana paket radius harus dikirim
bindaddr *
# program yang dijalankan untuk login lokal
# harus mendukung flag -f untuk login yang telah diautentikasi
login_local    /bin/login


Mengikuti konfigurasi (yang terkait dengan IPv6)  di file /etc/radiusclient/dictionary harus berkomentar untuk menjalankan klien radius.

ATTRIBUTE       NAS-Filter-Rule        92      string
ATTRIBUTE       Originating-Line-Info   94      string
ATTRIBUTE       NAS-IPv6 -      Frame NAS-IPv6-Alamat 95> Atribut Framed-IPV6-Prefix 97 IPv6Prefix
Atribut Login-IPV6-Host 98 String
Atribut Framed-IPV6-Route 99 String
Atribut Framed-IPV6-POOL 100 String
Atribut Error-Penyebab            101     integer
ATTRIBUTE       EAP-Key-Name           102     string
#
#      Atribut IPv6 RFC6911
#ATRIBUT IP>ATTRIBUTE       DNS-Server-IPv6-Address 169     ipv6addr
ATTRIBUTE       Route-IPv6-Information  170     ipv6prefix

Konfigurasi server Poptop

Tambahkan konfigurasi berikut di /etc/pptpd.conf berkas.

locallip 10.20.30.1
remoteip 10.20.30.2-254

Jalankan  perintah sed berikut di /etc/ppp/pptpd-options berkas.

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

Tambahkan baris berikut di /etc/ppp/pptpd-options berkas.

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

Mulai ulang layanan pptpd untuk menerapkan perubahan di atas.

layanan pptpd restart

Konfigurasi xl2tp

Sertakan baris konfigurasi berikut di /etc/xl2tpd/xl2tpd.conf file seperti yang ditunjukkan pada gambar berikut.

[global]
ipsec saref =yes

[lns default]
rentang ip =10.10.10.2-10.10.10.255
ip lokal =10.10.10.1
menolak chap =ya
menolak pap =ya
memerlukan otentikasi =ya
ppp debug =ya
pppoptfile =/etc/ppp/options.xl2tpd
panjang bit =ya

Konfigurasi OpenSwan

Tambahkan setelan file rahasia ipsec berikut di  /etc/ipsec.secrets .

192.168.15.4 %any  0.0.0.0:PSK "test"

Konfigurasi IPsec untuk terowongan L2TP disertakan dalam /etc/ipsec.conf berkas.

versi 2.0    

penyiapan konfigurasi
        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  # hanya digunakan untuk antarmuka SAref + MAST
      ="%defaultroute"
        oe=off

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

Konfigurasi server PPP

Tambahkan konfigurasi berikut di /etc/ppp/options.xl2tpd berkas.

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


Setelah berhasil mengonfigurasi semua paket yang diperlukan, sekarang mulai ulang semua layanan untuk menguji VPN L2TP.

Memulai ulang layanan IPsec &xl2tp.

Gambar berikut menunjukkan bahwa server freeradius berjalan dalam mode daemon yang berguna untuk mengidentifikasi bahwa server berfungsi.

Masukkan akun pengguna di database MySQL untuk menguji konfigurasi.

INSERT INTO radius.radcheck (nama pengguna, atribut, operasi, nilai) VALUES ('username','User-Password',':=','userpassword');


Perintah berikut memeriksa apakah server Freeradius bekerja di localhost.

nama pengguna radtest userpassword localhost 0 testing123

Konfigurasi klien Android L2TP

Buka setelan  ==> Lainnya ==> VPN ==>Tambahkan Jaringan VPN di ponsel android dan buat L2TP PSK . baru VPN seperti yang ditunjukkan di bawah ini.

Setelah membuat VPN L2TP baru, klik dan masukkan nama pengguna/sandi (dikonfigurasi di server freeradius).

Gambar berikut menunjukkan bahwa VPN L2TP terhubung.

Layar berikut menunjukkan bahwa L2TP VPN berhasil terhubung menggunakan klien android.

Status VPN L2TP

Freeradius menunjukkan otentikasi klien android L2TP yang berhasil.

Perintah berikut menunjukkan status terowongan IPsec

status ip xfrm

Log OpenSwan (/var/log/auth.log ) dan log xl2tp (/var/log/syslog ) juga menunjukkan status L2TP VPN.

tail -f /var/log/auth.log

tail -f /var/log/syslog

Dalam tutorial ini, protokol tunneling layer 2 digunakan dengan IPSec dan Freeradius untuk menyediakan mekanisme keamanan dan otentikasi. Klien berbasis android digunakan untuk mendemonstrasikan cara kerja L2TP melalui IPsec.


Ubuntu
  1. Pantau Lalu Lintas Jaringan dengan vnStat di Ubuntu 20.04

  2. Otentikasi Proksi Dengan Terminal Ubuntu 14.04?

  3. Amankan SSH menggunakan otentikasi dua faktor di Ubuntu 16.04

  1. Cara Menginstal Nginx dengan Google PageSpeed ​​di Ubuntu 20.04

  2. Cara Menginstal Kubernetes dengan Minikube di Ubuntu 20.04

  3. Menggunakan Ubuntu Dengan Pengaturan Dua Layar?

  1. Bagaimana cara mengatur Cluster MongoDB menggunakan 3 node dengan Ubuntu 16?

  2. Cara Menginstal Kubernetes dengan Minikube di Ubuntu 18.04 LTS

  3. Cara Menginstal GitBucket dengan Nginx di Ubuntu 18.04 LTS