Введение:
Итак, у нас есть тунель - труба, по которой ходит наш трафик. По сути сейчас там только трафик между 2мя ИП адресами, но в дальнейшем может мы заходим что-то ещё? Я бы хотел думать, что это мой локальная сеть, что она защищена, что бы каждый раз не париться, защитил я тот или иной интерфейс или протокол. Потому будем шифровать всё, что попадает к нам с тунель - то есть шифранём всю трубу. Для шифрования будем использовать IPSec.
Реализация:
Давайте опять начнём с cisco:
Опишем клиента - а именно: пропишем ИП адрес клиента (YYY.YYY.YYY.YYY), пароль для соединения (P@SSw0rd), а так же для удобства присвоим клиенту имя (Akey).
Так же создадим профиль (CAipsec) шифрования: где опишем клиента (CAisakmp) а так же создадим общий профиль, которым будем шифровать тунель (EXAMPLE).
Код: Выделить всё
crypto keyring Akey
pre-shared-key address YYY.YYY.YYY.YYY key 6 P@SSw0rd
!
crypto isakmp policy 10
encr aes
hash md5
authentication pre-share
group 2
!
crypto isakmp profile CAisakmp
keyring Akey
match identity address YYY.YYY.YYY.YYY 255.255.255.255
!
crypto ipsec security-association lifetime seconds 28800
!
crypto ipsec transform-set EXAMPLE esp-aes esp-md5-hmac
!
crypto ipsec profile CAipsec
set transform-set EXAMPLE
set isakmp-profile CAisakmp
!
Теперь изменим наш тунель - приведём его к такому виду:
Код: Выделить всё
interface Tunnel3
ip address 172.16.0.1 255.255.255.248
ip mtu 1400
tunnel source Dialer1
tunnel destination 188.166.12.113
tunnel protection ipsec profile CAipsec
Как видим тут добавился только профиль шифрования - всё остальное из предыдущего поста
Теперь перейдём на сервер - тут не всё так просто - как минимум надо будет пересобрать ядро со следующими опциями
Справедливости ради отмечу что у меня ядро собрано с опциями
Код: Выделить всё
device crypto
options IPSEC
options IPSEC_FILTERTUNNEL
options IPSEC_DEBUG
[/color]
После того как пересобрали и перегрузились поставим
/usr/ports/security/ipsec-tools - я выбрал следующие параметры
Код: Выделить всё
┌─────────────────────────── ipsec-tools-0.8.1_7 ──────────────────────────────┐
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ [ ] ADMINPORT Enable Admin port │ │
│ │ [x] DEBUG Build with debugging support │ │
│ │ [ ] DOCS Build and/or install documentation │ │
│ │ [x] DPD Dead Peer Detection │ │
│ │ [x] FRAG IKE fragmentation payload support │ │
│ │ [ ] GSSAPI GSSAPI Security API support │ │
│ │ [x] HYBRID Hybrid, Xauth and Mode-cfg support │ │
│ │ [ ] IDEA IDEA encryption (patented) │ │
│ │ [ ] IPV6 IPv6 protocol support │ │
│ │ [ ] LDAP LDAP authentication (Xauth server) │ │
│ │ [x] NATT NAT-Traversal (kernel-patch required) │ │
│ │ [ ] NATTF require NAT-Traversal (fail without kernel-patch) │ │
│ │ [ ] PAM PAM authentication (Xauth server) │ │
│ │ [ ] RADIUS Radius authentication (Xauth server) │ │
│ │ [ ] RC5 RC5 encryption (patented) │ │
│ │ [ ] SAUNSPEC Unspecified SA mode │ │
│ │ [x] STATS Statistics logging function │ │
│ └──────────────────────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────────────────────┤
│ < OK > <Cancel> │
└──────────────────────────────────────────────────────────────────────────────┘
поставилось без проблем - переходим к настройкам. Давайте создадим файл
/usr/local/etc/racoon/ipsec.conf следующего содержания
Код: Выделить всё
spdflush;
spdadd YYY.YYY.YYY.YYY/32 XXX.XXX.XXX.XXX/32 gre -P out ipsec esp/tunnel/YYY.YYY.YYY.YYY-XX.XXX.XXX.XXX/require;
spdadd XXX.XXX.XXX.XXX/32 YYY.YYY.YYY.YYY /32 gre -P in ipsec esp/tunnel/XXX.XXX.XXX.XXX-YYY.YYY.YYY.YYY/require;
Переходим в файл
/etc/rc.conf добавим автозапуск этого дела, а так же сразу нашего racoon, что бы не возвращаться сюда несколько раз
Код: Выделить всё
ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/ipsec.conf"
racoon_enable="YES"
racoon_flags="-f /usr/local/etc/racoon/racoon.conf"
racoon_flags="-l /var/log/racoon.log"
Ну и вернёмся обратно в директорию
/usr/local/etc/racoon/ где создадим файлик ключей - это файл, где будет хранится IP адрес удалённой стороны и пароль для соединения. Так как в файле важная информация - сразу выставим права доступа на него
Содержимое файла следующее:
Между IP-адресом и паролем следует поставить либо пробел либо таб - несколько пробелов поставите и работать не будет
Тут же создаём файл
racoon.conf содержимое которого я привожу полностью
Код: Выделить всё
path include "/usr/local/etc/racoon";
path pre_shared_key "/usr/local/etc/racoon/key.txt";
log debug2;
padding
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}
listen
{
isakmp YYY.YYY.YYY.YYY [500];
}
timer
{
counter 5;
interval 20 sec;
persend 1;
phase1 30 sec;
phase2 15 sec;
}
remote XXX.XXX.XXX.XXX [500]
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;
generate_policy off;
proposal_check obey;
my_identifier address YYY.YYY.YYY.YYY;
peers_identifier address XXX.XXX.XXX.XXX;
lifetime time 28800 sec;
passive off;
proposal
{
encryption_algorithm aes;
hash_algorithm md5;
authentication_method pre_shared_key;
lifetime time 28800 sec;
dh_group 2;
}
}
sainfo anonymous
{
lifetime time 28800 sec;
encryption_algorithm aes;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
Ну что тут сказать - следите что бы параметры были такие же как и на cisco.
Если всё сделано верно, то тунель должен заработать, но помним про то, что его надо поднять - пустив по нему трафик - до этого момента любой дебаг будет молчать как рыба.
Код: Выделить всё
# ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1): 56 data bytes
64 bytes from 172.16.0.1: icmp_seq=0 ttl=255 time=66.467 ms
64 bytes from 172.16.0.1: icmp_seq=1 ttl=255 time=66.661 ms
Итак, трафик есть - посмотреть на сам тунель можно командой
Если тунеля нет - вы ничего не увитиде, а если есть - увидите 2 тунеля - туда и обратно
Циска же это покажет как один тунель
Теперь наше соединение защищено
Траблешутинг:
1) Дебаг - на юниксе он включается в конфиге (на приведённом примере он включен с максимальной детализацией) а на cisco за это отвечает команда
debug crypto isakmp
2) Внимательно относимся к параметрам - они должны совпадать с обеих сторон
3) У меня тунель не хотел подниматься, потому что у меня на cisco был уже другой линк с таким паролем (причём даже не работающий) - пришлось сменить пароль.