Pull to refresh

Создание макета для тестирования транспортного режима ipsec с использованием archlinux

Используем racoon и самоподписанные сертификаты X.509

Защищаем трафик между двумя машинами в автоматизированном режиме с использованием сертификатов x509.
Задача создать макет из двух виртуальных машин (vs1 и vs2). Макет готовился во время теоретической подготовки автора к работам с впн-шлюзами одной конторы и шпаргалка была записана в ЖЖ.

Сетевые настройки vs1:
eth0=192.168.111.10/24

Сетевые настройки vs2:
eth0=192.168.111.20/24

Создадим туннель между машинами:
vs1# modprobe ipip
vs1# ip tunnel add tun0 mode ipip remote 192.168.111.20 local 192.168.111.10 dev eth0
vs1# ip address add dev tun0 10.0.0.11 peer 10.0.0.216
vs1# ip link set tun0 up


vs2# modprobe ipip
vs2# ip tunnel add tun0 mode ipip remote 192.168.111.10 local 192.168.111.20 dev eth0
vs2# ip address add dev tun0 10.0.0.216 peer 10.0.0.11 dev tun0
vs2# ip link set dev tun0 up

vs1# ping 10.0.0.216
>>64 bytes from 10.0.0.216: icmp_req=1 ttl=64 time=1.49 ms
...


vs2# ping 10.0.0.11
>>64 bytes from 10.0.0.11: icmp_req=1 ttl=64 time=1.49 ms
...


Туннель работает.
Создавать контексты безопасности (SA), нам не нужно, т. к. они будут созданы racoon'ом на основе политик безопасности:
vs1# pacman -S ipsec-tools --noconfirm
vs1# vim /etc/ipsec.conf

#!/sbin/setkey -f
flush;
spdflush;
spdadd 10.0.0.11 10.0.0.216 any -P out ipsec
esp/transport//require
ah/transport//require;
spdadd 10.0.0.216 10.0.0.11 any -P in ipsec
esp/transport//require
ah/transport//require;


vs2# pacman -S ipsec-tools --noconfirm
vs2# vim /etc/ipsec.conf

#!/sbin/setkey -f
flush;
spdflush;
spdadd 10.0.0.216 10.0.0.11 any -P out ipsec
esp/transport//require
ah/transport//require;
spdadd 10.0.0.11 10.0.0.216 any -P in ipsec
esp/transport//require
ah/transport//require;


Создаем сертификаты:
vs1# openssl req -new -nodes -newkey rsa:1024 -sha1 -keyform PEM -keyout vs1.private -outform PEM -out request.pem
Отвечаем на вопросы. В результате получаем два файла: vs1.private (частный ключ) и request.pem (запрос сертификата).
vs1# openssl x509 -req -in request.pem -signkey vs1.private -out vs1.public
Получаем сертификат (vs1.public).
Запрос сертификата больше не нужен, его удаляем.
vs1# rm request.pem
Созданный приватный ключ(vs1.private) и сертификат (vs1.public) копируем в предварительно созданную директорию:
vs1# mkdir /etc/racoon/certs && mv vs1.private vs1.public /etc/racoon/certs

Повторяем указанное выше на машине vs2.
vs2# openssl req -new -nodes -newkey rsa:1024 -sha1 -keyform PEM -keyout vs2.private -outform PEM -out request.pem
Отвечаем на вопросы.
vs2# openssl x509 -req -in request.pem -signkey vs2.private -out vs2.public
vs2# rm request.pem
vs1# mkdir /etc/racoon/certs && mv vs1.private vs1.public /etc/racoon/certs


Теперь копируем публичные ключи противоположных машин в директорию с ключами:
vs1# scp 192.168.111.20:/etc/racoon/certs/vs2.private /etc/racoon/certs/
vs2# scp 192.168.111.10:/etc/racoon/certs/vs1.private /etc/racoon/certs/

Создаем конфиги racoon:
vs1# vim /etc/racoon.conf
path certificate "/etc/racoon/certs";
remote 10.0.0.216
{
exchange_mode aggressive,main;
my_identifier asn1dn;
peers_identifier asn1dn;

certificate_type x509 "vs1.public" "vs1.private";

peers_certfile "vs2.public";
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2 ;
}
}
sainfo anonymous
{
pfs_group 1;
lifetime time 2 min;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1;
compression_algorithm deflate ;
}

vs2# vim /etc/racoon.conf

path certificate "/etc/racoon/certs";
remote 10.0.0.216
{
exchange_mode aggressive,main;
my_identifier asn1dn;
peers_identifier asn1dn;

certificate_type x509 "vs2.public" "vs2.private";

peers_certfile "vs1.public";
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2 ;
}
}
sainfo anonymous
{
pfs_group 1;
lifetime time 2 min;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1;
compression_algorithm deflate ;


На файрволах обеих машин надо пропустить в обе стороны протоколы 50 и 51.
Также надо пропустить udp трафик с 500 порта (на этом порту работает IKE).

Запускаем ipsec:
vs1# service racoon start
vs2# service racoon start

Проверяем работу шифрования.Например, таким образом:
vs1# ping 10.0.0.216
>>64 bytes from 10.0.0.216: icmp_req=1 ttl=64 time=1.49 ms
..


vs2# tcpdump -i eth0 -q src host 10.0.0.11 and dst port not 22
>>

...
12:39:11.762682 IP 192.168.111.10 > 192.168.111.20: IP 10.0.0.11.isakmp > 10.0.0.216.isakmp: UDP, length 76 (ipip-proto-4)
12:39:11.762773 IP 192.168.111.10 > 192.168.111.20: IP 10.0.0.11.isakmp > 10.0.0.216.isakmp: UDP, length 76 (ipip-proto-4)
12:39:12.776876 IP 192.168.111.10 > 192.168.111.20: IP 10.0.0.11.isakmp > 10.0.0.216.isakmp: UDP, length 84 (ipip-proto-4)
..
12:39:55.787133 IP 10.0.0.11> 10.0.0.216: AH(spi=0x00003d54,seq=0x7673): ESP(spi=0x00003d55,seq=0x7673), length 88
..

Оригинальные IP-заголовки видны. Информация зашифрована. Заголовки AH и ESP присутствуют.
Кажется, все работает.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.