Monday, October 16th, 2017

Настройка шифрованного туннеля во FreeBSD с использованием IPSEC

Published on Апрель 23, 2009 by   ·   Комментариев нет

Итак. Старая статья устарела :). Да и понадобилось сделать на

buy online cigars

6.2,  в отличие от описанной там 4.11, заодно прикрутить сертификаты —
для надёжности. Посему, пишу заново.
MB3-861
070-457
Подробности  о  том, как всё сделать «руками», https://www.acheterviagrafr24.com/viagra-prix-france-wikipedia/ плюс дополнительные
объяснения  можно  глянуть  в  старой  версии  статьи,  тут будет лишь
описание,  как  сделать  туннели,  и  прочее  по  теме  чисто штатными
средствами (раньше половина подымалась своими скриптами).

Исходные   условия   —   две   машины,   первая  —  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 []:admin@lissyara.su

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/emailAddress=admin@lissyara.su
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
[cc lang="bash" tab_size="2" lines="-1"]
# $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;        # требует что все адреса должны быть ограничены
.
}

# Задание различных дефолтовых таймеров.
[cc lang="bash" tab_size="2" lines="-1"]    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.  Рекомендую  ознакомиться  со старой версией статьи для понимания
происходящего.

zp8497586rq































Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]