unix 2014-02-09 22-00-46
Создание макета для тестирования транспортного режима 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 присутствуют.
Кажется, все работает.
http://habrahabr.ru/sandbox/40918/