Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Security —> ipsec_vpnc

Настройка ipsec vpn концентратора для cisco vpn clients

Автор: Mad_caterpillar.


Постановка задачи:
Настроить  client-to-site  IPSec VPN, основными клиентами  которого  будут  Cisco  VPN clients. Авторизация должна осуществятся через Microsoft Active Directory.

Входные данные:
Cisco VPN client 5.0  -  ПО  со  стороны  клиента, используется преимущественно за NAT FreeBSD  6.2  release  -  VPN  концентратор  и  шлюз  в  Интернет по  совместительству

Лирическое отступление:
Изначально  поставленная  задача не совместима с требованием Cisco использовать их VPN Client только с концентраторами Cisco, но мы про это никому не скажем ;)
В  крайнем  случае можно использовать какой-нибудь другой клиент, поддерживающий IPSec например Shrew VPN Client.

Введение:
В качестве IPSec implementation будем использовать ipsec-tools от KAME. Авторизовать пользователей будем через RADIUS.  В роли последнего  решено использовать Microsoft IAS, дабы упростить себе жизнь с Active Directory и  не  задействовать samba В связи с особенностями реализации IPSec команией Cisco, их клиент и racoon  не  будут работать с  psk (pre-shared key), поэтому  мы  задействуем гибридную  аутентификацию с использованием x509 сертификатов. В качестве межсетевого экрана использован  packet filter (pf) — на мой взгляд, один из самых лучших брандмауэров для BSD систем.

Реализация:
Качаем и ставим  патч для ядра. Внимание (!) перед установкой патча,  убедитесь  что у вас есть исходники всей системы (src all).
cd /usr/src/sys
fetch  http://vanhu.free.fr/FreeBSD/patch-natt-freebsd6-2007-05-31.diff
patch < patch-natt-freebsd6-2007-05-31.diff
cd /usr/src/sys/i386/conf

в своем любимом редакторе добавляем строки в файл конфигурации ядра
# Для Fast IPSec
device          crypto
options         FAST_IPSEC
options         IPSEC_NAT_T

# Для pf — ALTQ по желанию :)
options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_PRIQ
options         ALTQ_NOPCC
device	         pf
device          pflog

Компилируем и ставим ядро
cd /usr/src
make buildkernel KERNCONF=MYKERN
make installkernel KERNCONF=MYKERN
reboot

После перезагрузки с новым ядром компилируем и ставим мир
cd /usr/src
make buildworld
make installworld
reboot

После перезагрузки:
uname -a
FreeBSD inet1 6.2-RELEASE FreeBSD 6.2-RELEASE #3: \
Mon Dec 29 16:55:30 EET 2008 root@inet1:/usr/obj/usr/src/sys/MYKERN i386

Ставим ipsec-tools
cd /usr/ports/security/ipsec-tools
make install clean
mkdir -p /usr/local/etc/racoon/cert
mkdir /var/run/racoon
touch /usr/local/etc/racoon/racoon.conf

В окне конфигурации я отметил следующие пункты:
[X] DEBUG      enable Debug support
[X] ADMINPORT  enable Admin port
[X] DPD        enable Dead Peer Detection
[X] NATT       enable NAT-Traversal (kernel-patch required)
[X] NATTF      require NAT-Traversal (fail without kernel-patch)
[X] FRAG       enable IKE fragmentation payload support
[X] HYBRID     enable Hybrid, Xauth and Mode-cfg support
[X] PAM        enable PAM authentication (Xauth server)
[X] RADIUS     enable Radius authentication (Xauth server)
[X] LDAP       enable LDAP authentication (Xauth server)

Генерируем сертификат.  Способ взят с netbsd.org.  Каждый, конечно, может выбрать  для себя любой другой, более удобный, способ. Генерируем  приватный  ключ   и  используем  его  для  создания   Запроса  на  Подпись Сертификата - Certificate Signing Request (CSR):
mkdir -p /etc/openssl/certs
сd /etc/openssl
umask 077
openssl genrsa > certs/vpngw.key
umask 022
openssl req -new -key certs/vpngw.key -out certs/vpngw.csr

Создаем свой собственный СА,  на основании него,  выписываем само-подписной сертификат
mkdir -p demoCA/newcerts
touch demoCA/index.txt
echo "00" > demoCA/serial
umask 077
openssl genrsa > certs/ca.key
umask 022
openssl req -days 3650 -x509 -key certs/ca.key -new > certs/ca.crt
openssl ca -in certs/vpngw.csr -keyfile certs/ca.key \
      -cert certs/ca.crt -out certs/vpngw.crt

Полученный сертификат,  вместе  с приватным  ключом  и СА  копируем в директорию  cert racoon'a
cp ./certs/*.crt ./certs/*.key /usr/local/etc/racoon/cert

Затем выполняем магическую процедуру
ln -s ca.crt `openssl x509 -noout -hash -in ca.crt`.0.

Вот так выглядит листинг директории у меня после всех этих процедур:
ll 
total 10 
lrwxr-xr-x  1 root  wheel     6 Dec 21 20:23 17814e12.0. -> ca.crt
-rw-r--r--  1 root  wheel  1208 Dec 18 11:26 ca.crt
-rw-------  1 root  wheel   493 Dec 18 11:26 ca.key
-rw-r--r--  1 root  wheel  3119 Dec 18 11:26 vpngw.crt
-rw-------  1 root  wheel   493 Dec 18 11:24 vpngw.key 

Мой конфигурационный файл racoon.conf
path include "/usr/local/etc/racoon" ;
path certificate "/usr/local/etc/racoon/cert";
listen { 
        isakmp my.public.ip.addr [500];
        isakmp_natt my.public.ip.addr [4500];
}

log notify;
#log debug2;                # используем на этапе тестирования

padding {
	maximum_length 20;  # максимальная длина дополнительного блока
	randomize off;      # включить случайную длину
	strict_check off;   # включить строгую проверку
	exclusive_tail off; # извлекать последний октет
}

listen {
        # для racoonctl, можно поставить в disabled;
	adminsock "/var/run/racoon/racoon.sock";


timer {
	# Эти параметры могут быть изменены удаленным узлом
	counter 5;         # максимальное число попыток для отправки
	interval 20 sec;   # максимальный интервал повтора пересылки
	persend 1;         # максимальное число пакетов на отправку
	# Таймер ожидания завершения каждой фазы
	phase1 30 sec;
	phase2 15 sec;
}

Параметры IKE фазы 1 для всех подключений (анонимных)
remote anonymous {
	exchange_mode aggressive; # режим обмена для IKE фазы 1
	nonce_size 16;            # размер случайного числа
	lifetime time 1440 min;   # sec, min, hour
	initial_contact on;
	proposal_check obey;      # подчинится инициатору предложения
	certificate_type x509 "vpngw.crt" "vpngw.key";
	my_identifier asn1dn;
	verify_identifier on;
	verify_cert off;
	weak_phase1_check on;
	support_proxy on;
	passive on;
	generate_policy on;      # автоматически генерировать IPsec политики
	dpd_delay 20;            # детектор мертвых соединений
	nat_traversal force;     # всегда использовать NAT-T
	ike_frag on;             # использовать фрагментацию IKE
	#esp_frag 552;           # использовать фрагментацию ESP на 552 байт

	proposal {
		encryption_algorithm 3des;
		hash_algorithm sha1;
            	authentication_method hybrid_rsa_server;
		dh_group modp1024;
	}
}

# Параметры конфигурации режима ISAKMP
mode_cfg {
	network4 192.168.1.2;
	netmask4 255.255.255.255;
	pool_size 200;             # размер IP VPN пула
	auth_source radius;        # авторизация через RADIUS
	#conf_source radius;       # IPv4 адрес выдаваемый RADIUS
	accounting radius;         # учет в RADIUS
	#auth_source pam;
	#conf_source local;
	dns4 10.100.10.12;         # IPv4 DNS сервер
	wins4 10.100.10.12;        # IPv4 WINS сервер
	banner "/usr/local/etc/racoon/motd"; # Сообщение для клиентов
	pfs_group 2;
       	split_network include 10.100.10.0/24;
}

# sayinfo спецификация для IKE фазы 2
sainfo anonymous {
	pfs_group 2;
	lifetime time 1 hour;
	encryption_algorithm 3des;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}

Конфигурационный файл /etc/radius.conf
auth radius.ip.addr testpass
acct radius.ip.addr testpass

Добавляем в rc.conf
racoon_enable=YES

На время тестирования запускаем так
racoon -F

SAD/SPD можно посмотреть коммандами
/usr/local/sbin/setkey -D
/usr/local/sbin/setkey -DP

Для того, чтобы логи писались в нужный нам файл, в  /etc/syslog.conf добавляем строки:
!racoon
*.*	/var/log/racoon.log

В файерволе  необходимо разрешить подключение по портам 500 и 4500, а также  протоколы esp и ipencap.
В IAS создаем клиента (наш  vpn концентратор) и  политику доступа —  метод доступа VPN аутентификация PAP.
Клиенту нужно скопировать  сертификат ca.crt и  импортировать его  в  cisco vpn client
При создании нового подключения, выбрать  Mutual group Authentication,  а в полях Name Password указать любую  информацию. Все  остальные  настройки  оставить  по  умолчанию

Проблемы которые могут возникнуть
1.Не собирается ipsec-tools. На этапе сборки выдает примерно следующее:
/usr/local/include/openssl/sha.h:194: error: previous declaration of
'SHA512_Final' was here
*** Error code 1

Решение: необходимо удалить\переместить каталог /usr/local/include/openssl

2.Не собирается ipsec-tool с поддержкой радиус. На этапе сборки выдает следующее:
isakmp_cfg.o(.text+0x33f8):/usr/ports/security/ipsec-tools/work/
ipsec-tools-0.7.1/src/racoon/isakmp_cfg.c:1632:
undefined reference to `rad_strerror'

Решение:  эта  ошибка  появляется  в  следствии  установленного  радиус сервера, типа freeradius, который  заменяет  стандартные  библиотеки системы  на свои собственные. Необходимо пересобрать радиус сервер с указанием  нестандартного размещения  библиотек Другой вариант, использовать радиус на отдельном сервере.

3.Демон racoon стартует, Cisco VPN Client  соединяется,  но пакеты  не ходят. Второй и последующие клиенты работают нормально.
Решение:такое наблюдалось только на тестовой машине, вышел из ситуации установкой vpnc и запуском его с пустым vpnc-script. На  свеже  установленной  системе этот глюк исчез

4.Не импортируется сертификат в Cisco VPN client
Решение: добавьте пустую строку после -----END CERTIFICATE-----



Ссылки:
http://www.tjhsst.edu/admin/livedoc/index.php/IPSec_VPN
http://www.netbsd.org/docs/network/ipsec/rasvpn.html
http://www.lacave.net/~fred/racoon/config.html
http://www.daemon-systems.org/man/racoon.conf.5.html
http://www.daemon-systems.org/man/setkey.8.html



размещено: 2009-03-04,
последнее обновление: 2009-03-05,
автор: Mad_caterpillar


Grass_snake, 2009-03-06 в 10:11:57

"В связи с особенностями реализации IPSec команией Cisco, их клиент и racoon  не  будут работать с  psk (pre-shared key)".

Тут мне не понятно. Цитата касается только случая Cisco  VPN clients (ПО, устанавливаемое на отдельный хост) <--->  IPSec VPN (racoon)? Или же речь идёт о двух маршрутизаторах, Cisco и BSD, реализующих туннель с IPSec между собой?

Просто второй вариант я делал. Именно с psk, если не ошибаюсь.

Mad_caterpillar, 2009-03-06 в 10:33:05

Да. Это касается только клиента cisco (Cisco VPN Client) http://www.cisco.com/en/US/products/sw/secursw/ps2308/



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1709 секунд
Из них PHP: 57%; SQL: 43%; Число SQL-запросов: 77 шт.
Исходный размер: 32017; Сжатая: 8715