The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка шифрованного туннеля во FreeBSD с использованием IPSEC (ipsec freebsd tunnel racoon crypt)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ipsec, freebsd, tunnel, racoon, crypt,  (найти похожие документы)
From: Алексей Кеда (lissyara) <admin@lissyara.su.> Date: Sun, 10 Mar 2008 17:02:14 +0000 (UTC) Subject: Настройка шифрованного туннеля во FreeBSD с использованием IPSEC Оригинал: http://www.lissyara.su/?id=1328 Итак. Старая статья устарела :). Да и понадобилось сделать на 6.2, в отличие от описанной там 4.11, заодно прикрутить сертификаты - для надёжности. Посему, пишу заново. Подробности о том, как всё сделать "руками", плюс дополнительные объяснения можно глянуть в старой версии статьи, тут будет лишь описание, как сделать туннели, и прочее по теме чисто штатными средствами (раньше половина подымалась своими скриптами). Исходные условия - две машины, первая - 217.15.62.49, 192.168.160.254 (via.epia); вторая 217.15.62.200, 192.168.170.254 (test.lissyara.su), задача - связать сети 192.168.x.x. Предполагается, что обе машины - default router для своих сетей, иначе придётся внутри сети рулить пакеты дополнительно. Поехали. Для начала пересобираем ядро с такими опциями: # firewall (необязательно, можете загрузить модулем.) # Однако, сам по себе файрволл всё же нужен, ибо неплохо ограничить # хосты которые могут коннектится на порты ракона - на всякий случай... options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=1000 options TCP_DROP_SYNFIN # IPSEC options IPSEC options IPSEC_ESP options IPSEC_DEBUG # необязательно, но облегчит поиск проблем Пока собирается ядро, обновляем порты такой командой: test.lissyara.su # csup -g -L 2 -h cvsup5.ru.freebsd.org \ ? /usr/share/examples/cvsup/ports-supfile && cd /usr/ports/ \ ? && make fetchindex После обновления ставим racoon, из коллекции ipsec-tools: /usr/home/lissyara/>cd /usr/ports/security/ipsec-tools/ /usr/ports/security/ipsec-tools/>make install clean Лезет такое окошко: +--------------------------------------------------------------------+ | Options for ipsec-tools 0.6.6 | | +----------------------------------------------------------------+ | | |[X] DEBUG enable Debug support | | | |[ ] IPV6 enable IPV6 support | | | |[ ] ADMINPORT enable Admin port | | | |[ ] STATS enable Statistics logging function | | | |[X] DPD enable Dead Peer Detection | | | |[ ] NATT enable NAT-Traversal (kernel-patch required) | | | |[ ] NATTF require NAT-Traversal (fail without kernel-patch)| | | |[X] FRAG enable IKE fragmentation payload support | | | |[ ] HYBRID enable Hybrid Mode-cfg and Xauth support | | | |[ ] PAM enable PAM authentication | | | |[ ] GSSAPI enable GSS-API authentication | | | |[ ] RADIUS enable Radius authentication | | | |[ ] SAUNSPEC enable Unspecified SA mode | | | |[ ] RC5 enable RC5 encryption (patented) | | | |[ ] IDEA enable IDEA encryption (patented) | | +-+----------------------------------------------------------------+-+ | [ OK ] Cancel | +--------------------------------------------------------------------+ Опции, которые я выбрал - указаны. После инсталляции, идём создавать директории (странно, но хотя стартовые скрипты инсталлялся, директории которые требуются - не создаются, хотя в этих самых скриптах они указаны), заодно копируем дефолтовый конфиг, который тоже не инсталлится куда положено: /usr/home/lissyara/>mkdir -p /usr/local/etc/racoon/cert /usr/home/lissyara/>cp /usr/local/share/examples/ipsec-tools/racoon.conf /usr/local/etc/racoon/racoon.conf До рихтовки конфига, надо нагенерить сертификатов. Честно говоря с OpenSSL особо не разбирался, сама операция откуда-то чесно дёрнута, и подрихтована под свои нужды, посему даю как есть: /usr/home/lissyara/>cd /usr/local/etc/racoon/cert/ /usr/local/etc/racoon/cert/>openssl req -new -nodes -newkey rsa:1024 \ -sha1 -keyform PEM -keyout via.epia.private -outform PEM \ -out via.epia.pem Generating a 1024 bit RSA private key ..............................++++++ ..++++++ writing new private key to 'via.epia.private' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:SU State or Province Name (full name) [Some-State]:USSR Locality Name (eg, city) []:Moscow Organization Name (eg, company) [Internet Widgits Pty Ltd]:Home Network Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:Alex Keda Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: /usr/local/etc/racoon/cert/> /usr/local/etc/racoon/cert/>ll total 4 -rw-r--r-- 1 root wheel 676 15 мар 14:44 via.epia.pem -rw-r--r-- 1 root wheel 887 15 мар 14:44 via.epia.private /usr/local/etc/racoon/cert/>openssl x509 -req -in via.epia.pem -signkey via.epia.private -out via.epia.public Signature ok subject=/C=SU/ST=USSR/L=Moscow/O=Home Network/CN=Alex Keda/[email protected] Getting Private key /usr/local/etc/racoon/cert/>ll total 6 -rw-r--r-- 1 root wheel 676 15 мар 14:44 via.epia.pem -rw-r--r-- 1 root wheel 887 15 мар 14:44 via.epia.private -rw-r--r-- 1 root wheel 899 15 мар 14:48 via.epia.public /usr/local/etc/racoon/cert/> Для второй машины тоже генерируем ключи, и копируем с одной на другую файлики *.public. В принципе, имена ключей неважны, можно называть и по IP, с соответствующими расширениями. Далее, рисуем конфиги, для обоих одинаковые, тока меняются местами все IP и ключи: /etc/rc.conf # added by lissyara 2007-03-15 in 14:32 # Включем racoon racoon_enable="YES" # создаём gif-интерфейс cloned_interfaces="gif0" # пробиваем туннель gif_interfaces="gif0" gifconfig_gif0="217.15.62.49 217.15.62.200" ifconfig_gif0="inet 192.168.160.254 192.168.170.254 netmask 0xffffffff" # Включаем IPSEC ipsec_enable="YES" # вводим статический роутинг static_routes="RemoteLan" route_RemoteLan="192.168.170.0/24 -interface gif0" /etc/ipsec.conf # тут описывается как шифруется проходящая # в туннеле инфа. Для второй машины надо просто поменять IP местами spdadd 217.15.62.49/32 217.15.62.200/32 ipencap -P out ipsec esp/tunnel/217.15.62.49-217.15.62.200/require; spdadd 217.15.62.200/32 217.15.62.49/32 ipencap -P in ipsec esp/tunnel/217.15.62.200-217.15.62.49/require; /usr/local/etc/racoon/racoon.conf # $KAME: racoon.conf.sample,v 1.28 2002/10/18 14:33:28 itojun Exp $ # "path" затрагивает директиву "include". "path" должен быть задан до любых # директив "include" с относительным путём к файлу. # Вы можете перезадать директиву "path" впоследствии, однако, это может # привести большому замешательству. path include "/usr/local/etc/racoon" ; #include "remote.conf" ; # файл должен содержать пару ключей ID/key, для аутентификации по ключам. #path pre_shared_key "/usr/local/etc/racoon/psk.txt" ; # racoon будет искать файл сертификата в директории, если передан полезный # запрос certificate/certificate. path certificate "/usr/local/etc/racoon/cert/" ; # "log" определяет уровень логгирования. Он сопровождается одним из # "notify", "debug" или "debug2". log debug2; # "padding" задаёт некоторые параметры формирования пакетов (если я верно понял) # Ничего тут не трогайте. (Ага, конечно! - прим. lissyara) padding { maximum_length 20; # максимальная длинна набивки (?). randomize off; # включение случайной длинны. strict_check off; # включить строгую проверку. exclusive_tail off; # извлекать один последний октет. } # если директива listen не задана, racoon слушает все доступные # адреса интерфейсов. listen { #isakmp ::1 [7000]; isakmp 217.15.62.49 [500]; #admin [7002]; # административный порт для racoonctl. #strict_address; # требует что все адреса должны быть ограничены . } # Задание различных дефолтовых таймеров. timer { # Эти значения могут быть изменены удалённым узлом. counter 5; # максимальный счётчик попыток отсыла. interval 20 sec; # максимальный интерал для повторной посылки. persend 1; # число отсылаемых пакетов. # максимальное время ожидания для завершения каждой фазы. phase1 30 sec; phase2 15 sec; } # описываем удалённый хост (на второй машине - идентично, # тока другой IP и ключи) remote 217.15.62.200 { exchange_mode aggressive,main; my_identifier asn1dn; peers_identifier asn1dn; # сертификаты этой машины certificate_type x509 "via.epia.public" "via.epia.private"; # сертификат удлённой машины peers_certfile x509 "test.lissyara.su.public"; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method rsasig; dh_group 2 ; } } # Вначале хотел вообще без этой секции, # но неподнялось, с такой руганью в логах: # racoon: ERROR: failed to get sainfo. sainfo anonymous { pfs_group 5; lifetime time 60 min; encryption_algorithm 3des ; authentication_algorithm hmac_sha1; compression_algorithm deflate ; } Думается, к этому моменту ядро уже пересобралось, и проинсталлилось. Можно перезагружатья. После перезагрузки смотрим: /usr/home/lissyara/>ifconfig vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.160.254 netmask 0xffffff00 broadcast 192.168.160.255 ether 00:40:63:d8:23:6d media: Ethernet autoselect (100baseTX <full-duplex>) status: active vr1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 217.15.62.49 netmask 0xffffffc0 broadcast 217.15.62.63 ether 00:40:63:d8:23:3c media: Ethernet autoselect (100baseTX <full-duplex>) status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 tunnel inet 217.15.62.49 --> 217.15.62.200 inet 192.168.160.254 --> 192.168.170.254 netmask 0xffffffff /usr/home/lissyara/> /usr/home/lissyara/>ps -ax | grep racoon 859 ?? Is 0:00,01 /usr/local/sbin/racoon 1091 p0 R+ 0:00,01 grep racoon /usr/home/lissyara/> Всё нормально, все интерфейсы создались, racoon запущен. Надо заметить, что пока в фаерволле не прокрутили дырки для протоколов и портов, по которым пашет туннель, по нему ничё не пойдёт. Также учтите, что ядро собранное с вышеуказанными (которые про firewall, а не про ipsec) опциями, включает файроволл при загрузке, в режиме запрета всего. Поэтому до перезагрузки лучше настроить файрволл, или иметь физический доступ к машине. Настраиваем фаервол: /usr/home/lissyara/>ipfw show | head -4 00100 48 4032 allow ip from any to any via gif0 00200 2 1656 allow udp from 217.15.62.200 to me dst-port 500 00300 35 5600 allow esp from me to 217.15.62.200 00400 35 5600 allow esp from 217.15.62.200 to me Ну и пробуем попинговаться: /usr/home/lissyara/>ping 192.168.170.254 PING 192.168.170.254 (192.168.170.254): 56 data bytes 64 bytes from 192.168.170.254: icmp_seq=4 ttl=64 time=3.160 ms 64 bytes from 192.168.170.254: icmp_seq=5 ttl=64 time=2.355 ms ^C --- 192.168.170.254 ping statistics --- 6 packets transmitted, 2 packets received, 66% packet loss round-trip min/avg/max/stddev = 2.355/2.758/3.160/0.402 ms /usr/home/lissyara/> Первые 4 пакета потерялись, при поднятии туннеля, затем всё забегало. В случае проблем, смотрим логи (/var/log/security). У меня там (/var/log/messages) нашлась интересная строка: Mar 16 10:51:31 epia kernel: WARNING: pseudo-random number generator used for IPsec processing Рыскания по инету ни к чему не привели. В рассылке lists.freebsd.org рекомендуют ставить железный генератор случайных чисел :). P.S. Рекомендую ознакомиться со старой версией статьи для понимания происходящего.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, speechless (?), 14:03, 02/04/2009 [ответить]  
  • +/
    а не было у тебя опыта настройки туннеля между FreeBSD И Microsoft ISA Server 2004?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру