Статията има за цел да помогне на тези хора които ползват
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 или по висока.