LINUX-BG   Адрес : http://www.linux-bg.org
VPN на базата на OpenSwan, OpenSSL, L2TPD
От: Georgi Ivanov
Публикувана на: 22-06-2004
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=362574900

Статията има за цел да помогне на тези хора които ползват Linux ядро 2.6.x и искат да изградят VPN сървър ползвайки софтуер различен от стандартния IPSec модул включен в ядрата 2.6.x . Понеже новата версия на FreeSwan 2.06 е премахнала опцията transport като тип на връзката и няма възможност за поддръжка на L2TP (по ранните версии на FreeSwan не се подържат от 2.6.x ядра) , инструмента към който се насочих е OpenSwan .

Инструменти който ви трябват са:
Openswan 2.1.2
OpenSSL 0.9.7
l2tpd 0.69

Инструментите са тествани на Debian 3.0r2 unstable с ядро 2.6.7

Забележка: Предполага се , че сте се занимавали с Linux и можете да компилирате и инсталирате ядро!

Сценарият е следния:

Работите като Системен Администратор в частна фирма мрежата на която се състои от 40-50 компютъра и един сървър примерно който служи за gateway и firewall, и шефът ви иска работниците в извън работно време независимо от това къде се намират да могат да достъпват по някакъв начин вътрешната мрежа на фирмата.

1.Настройка на ядрото:
Ядрото трябва да е компилирано с поддръжка на IPSec,ESP,AH,PF_KEY и PPP

CONFIG_NET_KEY=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_XFRM_USER=y
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=y

Инсталирате opeswan,openswan-modules-source:

apt-get install openswan openswan-modules-source

(важи само за Debian), след което отивате в директория /usr/src/kernel-patches/all/openswan и прилагате поправката в ядрото:

make kpatch

след което компилирате и инсталирате ядрото.

2. Генериране на X509 Сертификати.
Първо защо ползвам сертификати а не preshared keys , защото се предполага , че клиентите които ще ползват VPN сървъра ще са с операционна система Windows, но Windows 2000 не подържа preshared keys, също така недостатъка поне според сценария който съм описал, ако се ползват preshared keys трябва и да се опише ip address от който ще се свърже клиента, а това противоречи на сценария "Да ползват сървъра независимо от това каде са".

Инсталиране на OpenSSL за Debian:

apt-get install openssl libssl0.9.7 libssl-dev .

Инструментите CA.pl CA.sh с които ще се генерират сертификатите се намират в /usr/lib/ssl/misc

Конфигурация на OpenSSL.
За конкретният случай има само едно нещо което трябва да се включи в конфигурационния файл на OpenSSL и това е

unique_subject = no

Следва генериране на CA Trust Certificate и CA private key

cd /usr/lib/ssl/misc
./CA.sh -newca


След което ще бъдете подканени да въведете парола за частният ключ и информация за него . В следствие на горната команда ще бъде създадена директория demoCA (ако не сте я променили изрично в openssl.cnf) Частният ключ по подразбиране е cakey.pem и седи в /usr/lib/ssl/misc/demoCA/private/cakey.pem, a CA Trust Certificate седи по подразбиране в /usr/lib/ssl/misc/demoCA/cacert.pem

Следва генериране на private key за OpenSwan:

/usr/lib/ssl/misc/CA.sh -newreq

в следствие на което , ще се създаде файл с име newreq.pem . Следва самоподписване:

/usr/lib/ssl/misc/CA.sh -sign

в следствие на което ще бъдете запитани дали да се подпише сертификата отговаряте с "y".
Забележка: При всеки подпис ще бъдете подканвани да въведете паролата на CA private key тоест cakey.pem който генерирахме.

Следва създаване на сертификат за самия клиент който става по същият начин както и за OpenSwan.

Създаваме и CRL(Certifikate Revokation List)
openssl ca -config /etc/ssl/openssl.cnf -genrcl -out crl.pem
Копирате създаденият CRL файл в /etc/ipsec.d/crls.
За да отмените сертификат
openssl ca -revoke /etc/ipsec.d/client-cert.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for /usr/lib/ssl/misc/asCA/private/CAkey.pem:
DEBUG[load_index]: unique_subject = "no"
Revoking Certificate 02.
Data Base Updated

Преди да генерирате клиентският сертификат преименувайте newreq.pem и newcert.pem на нещо значимо за вас примерно:

mv newcert.pem openswan-cert.pem
mv newreq.pem openswan-priv.pem


Важно: newreq.pem е частният ключ , а newcert.pem е подписаният сертификат.

След като преименувахме сертификата за Openswan правим същото и с клиентският сертификат.

mv newreq.pem client-priv.pem
mv newcert.pem client.priv.pem


И копираме сертификатите на техните места:

cp demoCA/cacert.pem /etc/ipsec.d/cacerts/
cp openswan-priv.pem /etc/ipsec.d/private/
cp client-priv.pem /etc/ipses.d/private/
cp openswan-cert.pem /etc/ipsec.d/
cp client-cert.pem /etc/ipsec.d/


Понеже PKCS12 е най масово използван формат за съхранение на потребителски сертификати тук ще изгенерираме такъв сертификат който ще се даде на потребителят използващ VPN сървъра.

Генериране на PKCS12.

openssl pkcs12 -export -in /etc/ipsec.d/client-cert.pem \
-inkey /etc/ipsec.d/private/client-priv.pem \
-certfile /usr/lib/ssl/misc/demoCA/cacert.pem -out /etc/ipsec.d/client.p12


Сертификата се дава на клиента в този формат и паролта с която е заключен самият client.p12

3. Конфигуриране на OpenSwan
Конфигурационният файл се намира в директория /etc , а самият файл се казва ipsec.conf

Конфигурация:

version 2.0
config setup
interfaces=%defaultroute
klipsdebug=all
plutodebug=dns
uniqueids=no

conn %default
keyingtries=1
compress=yes
disablearrivalcheck=yes
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
leftcert=/etc/ipsec.d/freeswan-cert.pem
left=%defaultroute

conn l2tp
type=transport
pfs=no
leftprotoport=udp/0
rightprotoport=udp/1701
right=%any
auto=add

conn block
auto=ignore
conn clear
auto=ignore
conn private
auto=ignore
conn private-or-clear
auto=ignore
conn clear-or-private
auto=ignore
conn packetdefault
auto=ignore

include /etc/ipsec.d/examples/no_oe.conf

Добавяме следният ред в /etc/ipsec.secrets

: RSA openswan-priv.pem "password" където password е паролата на ключа

4. Конфигурация на l2tpd за Debian
Инсталираме l2tpd посредством

apt-get install l2tpd

и редактираме файла /etc/l2tpd/l2tpd.conf

[global]
port = 1701 # Порта на който слуша самия демон
listen-addr = x.z.y.u # Адреса на самия gateway

[lns default]
ip range = 192.168.7.2 - 192.168.7.245 # range от адреси, който ще бъдат присвоявани на клиентите

local ip = 192.168.7.1 # Локалният адрес на l2tpd
require chap = yes # Задължителна CHAP автентичност
refuse pap = yes # Отхвърляне на PAP
require authentication = yes # Задължително удостоверяване
hostname = some.example.com # хост на сървъра
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd # Файл с опции
length bit = yes


След това създавате файла /etc/ppp/options.l2tpd

ipcp-accept-local
ipcp-accept-remote
ms-dns 192.168.1.12
ms-wins 192.168.1.15
auth
crtscts
idle 1800
mtu 1400
mru 1400
nodefaultroute
nodetach
debug
lock
connect-delay 5000


Сървърът е готов за ползване.
Препоръчително е за клиентската част да се използва SSHSentinel за Windows2000 за WindowsXP версията на SSHSentinel трябва да е 1.3 или по висока.

<< Пример за употреба на Access Control Lists с Линукс | Що е то SPF и как ще ни помогне да се защитим от спам >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.18 usr + 0.02 sys = 0.20 CPU)