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/openssl2.Не собирается ipsec-tool с поддержкой радиус. На этапе сборки выдает следующее: