от Georgi Ivanov(22-06-2004)

рейтинг (10)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

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