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
P
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=secretKonfigurasi 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.
Cara menginstal Server Minimal Ubuntu 16.10 (Yakkety Yak) Cara Menginstal Django dengan PostgreSQL dan Nginx di Ubuntu 16.04Ubuntu