Первая нода
EXT_IP – 10.10.1.43
INT_IP – 192.168.10.1
Внутренняя сеть за первой нодой
INT_NET-192.168.10.0/24
Вторая нода
EXT_IP – 10.10.1.46
INT_IP – 192.168.20.1
Внутренняя сеть за второй нодой
INT_NET-192.168.20.0/24
Задача: связать сети 192.168.10.0/24 192.168.20.0/24
Предпологается,что обе машины являются шлюзами по умолчанию для своих подсетей
Настройка GRE-туннеля.
Настройка второй ноды:
1.Загрузка модуля
1 |
# modprobe ip_gre |
2.Создание туннеля
1 |
# ip tunnel add r2r1ft mode gre remote 10.10.1.43 local 10.10.1.46 ttl 255 dev eth0 |
1 |
# ip tunnel show |
1 2 |
gre0: gre/ip remote any local any ttl inherit nopmtudisc r2r1ft: gre/ip remote 10.10.1.43 local 10.10.1.46 dev eth0 ttl 255 |
3.Установка адреса для тунеля
1 |
# ip addr add 172.16.16.2/32 dev r2r1ft |
1 |
# ip addr show label "r2r1ft" |
1 2 3 4 |
19: r2r1ft@eth0: <POINTOPOINT,NOARP> mtu 1476 qdisc noop state DOWN group default link/gre 10.10.1.46 peer 10.10.1.43 inet 172.16.16.2/32 scope global r2r1ft valid_lft forever preferred_lft forever |
4.Активирование туннеля
1 |
# ip link set r2r1ft up |
1 |
# ip addr show label "r2r1ft" |
1 2 3 4 |
19: r2r1ft@eth0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default link/gre 10.10.1.46 peer 10.10.1.43 inet 172.16.16.2/32 scope global r2r1ft valid_lft forever preferred_lft forever |
5.Установка маршрута для туннеля
1 |
# ip route add 172.16.16.1/32 dev r2r1ft |
6.Установка маршрута до удаленной локальной сети(192.168.10.0/24)
1 |
# ip route add 192.168.10.0/24 dev r2r1ft |
Настройка первой ноды
1 |
# modprobe ip_gre |
1 |
# ip tunnel add r1r2ft mode gre remote 10.10.1.46 local 10.10.1.43 ttl 255 dev eth0 |
1 |
# ip addr add 172.16.16.1/32 dev r1r2ft |
1 |
# ip link set r1r2ft up |
1 |
# ip addr show label "r1r2ft" |
1 2 3 4 |
10: r1r2ft@eth0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default link/gre 10.10.1.43 peer 10.10.1.46 inet 172.16.16.1/32 scope global r1r2ft valid_lft forever preferred_lft forever |
1 |
# ip route add 172.16.16.2/32 dev r1r2ft |
1 |
# ip route add 192.168.20.0/24 dev r1r2ft |
Со второй ноды
Проверяем доступность удаленного адреса на туннеле
1 |
# ping 172.16.16.1 |
1 2 3 |
PING 172.16.16.1 (172.16.16.1) 56(84) bytes of data. 64 bytes from 172.16.16.1: icmp_seq=1 ttl=64 time=0.759 ms 64 bytes from 172.16.16.1: icmp_seq=2 ttl=64 time=1.04 ms |
Проверяем доступность удаленной локальной сети
1 |
# ping 192.168.10.55 |
1 2 3 |
PING 192.168.10.55 (192.168.10.55) 56(84) bytes of data. 64 bytes from 192.168.10.55: icmp_seq=1 ttl=63 time=0.770 ms 64 bytes from 192.168.10.55: icmp_seq=2 ttl=63 time=0.931 ms |
С первой ноды
1 |
# ping 172.16.16.2 |
1 2 3 |
PING 172.16.16.2 (172.16.16.2) 56(84) bytes of data. 64 bytes from 172.16.16.2: icmp_seq=1 ttl=64 time=0.904 ms 64 bytes from 172.16.16.2: icmp_seq=2 ttl=64 time=0.861 ms |
1 |
# ping 192.168.20.55 |
1 2 3 |
PING 192.168.20.55 (192.168.20.55) 56(84) bytes of data. 64 bytes from 192.168.20.55: icmp_seq=1 ttl=63 time=0.964 ms 64 bytes from 192.168.20.55: icmp_seq=2 ttl=63 time=0.947 ms |
Скрипты для установки в автозагрузку
Нода2
1 |
# cat /usr/local/scripts/tunnel-on.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/bin/bash IP=/sbin/ip MODPROBE=$(which modprobe) REMOTE_NETWORK="192.168.10.0/24" $MODPROBE ip_gre # eth0: local area eth_lan=eth0 # routers fiber-optic ip router1_fo_ip=10.10.1.43 router2_fo_ip=10.10.1.46 # fiber-optic tunel ip r2r1fot_lip="172.16.16.2/32" r2r1fot_rip="172.16.16.1/32" #flush addresses & routing tables $IP route flush dev r2r1ft > /dev/null 2>&1 $IP address flush dev r2r1ft > /dev/null 2>&1 $IP tunnel del r2r1ft > /dev/null 2>&1 $IP tunnel add r2r1ft mode gre remote $router1_fo_ip local $router2_fo_ip ttl 255 dev $eth_lan $IP addr add $r2r1fot_lip dev r2r1ft $IP link set r2r1ft up $IP route add $r2r1fot_rip dev r2r1ft $IP route add $REMOTE_NETWORK dev r2r1ft |
Нода 1
1 |
# cat /usr/local/scripts/tunnel-on.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/bin/bash IP=$(which ip) MODPROBE=$(which modprobe) REMOTE_NETWORK="192.168.20.0/24" $MODPROBE ip_gre # eth0: local area eth_lan=eth0 # routers fiber-optic ip router1_fo_ip=10.10.1.43 router2_fo_ip=10.10.1.46 # fiber-optic tunel ip r1r2fot_lip="172.16.16.1/32" r1r2fot_rip="172.16.16.2/32" #flush addresses & routing tables $IP route flush dev r1r2ft > /dev/null 2>&1 $IP address flush dev r1r2ft > /dev/null 2>&1 $IP tunnel del r1r2ft > /dev/null 2>&1 $IP tunnel add r1r2ft mode gre remote $router2_fo_ip local $router1_fo_ip ttl 255 dev $eth_lan $IP addr add $r1r2fot_lip dev r1r2ft $IP link set r1r2ft up $IP route add $r1r2fot_rip dev r1r2ft $IP route add $REMOTE_NETWORK dev r1r2ft |
Установка и настройка IPSEC
IPSEC, в общем случае, служит для поддержки безопасных соединений между узлами и сетями в глобальной сети Интернет. Он может работать в конфигурации «узел-узел» (один компьютер соединяется с другим) или «сеть-сеть» (одна локальная/глобальная сеть соединяется с другой). Реализация IPsec использует протокол обмена ключами в Интернете (Internet Key Exchange, IKE) для взаимной проверки подлинности и соответствия параметров безопасности между подключающимися системами или сетями.
Процесс соединения IPsec разделяется на два логических этапа. На первом этапе узел IPsec устанавливает подключение к удалённому узлу или сети. Удалённый узел/сеть проверяет учётные данные запрашивающего узла и обе стороны согласуют способ проверки подлинности, применяемый в соединении. Обычно для проверки подлинности узла IPSec используется алгоритм с предварительным общим ключом. В случае с IPsec-соединением с применением предварительного общего ключа, оба узла должны использовать один ключ, и тогда они смогут перейти ко второму этапу установки соединения.
Второй этап соединения IPsec между узлами IPSec создаётся условным сравнением безопасности (security association, SA). При этом в базу данных SA вносится информация о конфигурации — метод шифрования, способы обмена секретными ключами сеанса и некоторые другие параметры. Этот этап и управляет соединением IPsec между узлами и сетями, разнесенными в пространстве глобальной сети.
Фаза 1.
узлы договариваются о методе шифрования, алгоритме, хэш-алгоритме и группе Diffie Hellman. Так же идентификация. Путем обмена 3 нешифрованными пакетами — aggressive mode, или шестью — main mode. В результате создается SA первой фазы (IKE SA).
Фаза 2.
Генерятся ключи, узлы договариваются о используемой политике. Все пакеты этой фазы шифруются. В результате создается phase 2 SA (IPSec SA).
SA — связь (ассоциация) безопасности. Это термин IPSec для обозначения соединения.
IPsec является набором стандартов Интернет и своего рода «надстройкой» над IP-протоколом. Его ядро составляют три протокола:
• Authentication Header (АН) обеспечивает целостность виртуального соединения (передаваемых данных), аутентификацию источника информации и функцию по предотвращению повторной передачи пакетов
• Encapsulating Security Payload (ESP) обеспечивает конфиденциальность (шифрование) передаваемой информации, ограничение потока конфиденциального трафика. Кроме этого, он может исполнять функции AH: обеспечить целостность виртуального соединения (передаваемых данных), аутентификацию источника информации и функцию по предотвращению повторной передачи пакетов. При применении ESP в обязательном порядке должен указываться набор услуг по обеспечению безопасности: каждая из его функций может включаться опционально.
• Internet Security Association and Key Management Protocol (ISAKMP) — протокол, используемый для первичной настройки соединения, взаимной аутентификации конечными узлами друг друга и обмена секретными ключами. Протокол предусматривает использование различных механизмов обмена ключами, включая задание фиксированных ключей, использование таких протоколов, как Internet Key Exchange, Kerberized Internet Negotiation of Keys (RFC 4430) или записей DNS типа IPSECKEY (RFC 4025).
Более подробная информация о работе IPSEC
https://ru.wikipedia.org/wiki/IPsec
http://www.ipsec-howto.org/x202.html
Протокол Обмена Ключами — IKE (Internet Key Exchange), позволяющий обмениваться сгенерированными, автоматически и случайным образом, ключами. Передача ключей осуществляется с помощью асимметричной технологии кодирования, в соответствии с предопределенными алгоритмами
В Linux IPSEC реализация выполнена в виде демона KAME ‘racoon’ IKE
В случае автоматической настройки, обновление и обмен ключевой информацией выполняется без нашего участия. Очевидно, что при этом «на лету» создаются защищенные каналы (SA), которые, как это ни странно, не обеспечиваются какой-либо политикой безопасности.
Таким образом, чтобы воспользоваться преимуществами IKE, необходимо установить для него политику безопасности. Для этого создается такая политика, которая не связана с каким-либо конкретным защищенным каналом (SA). Когда ядро обнаружит такую политику, то оно передаст ее демону IKE, который в свою очередь будет использовать ее в своей работе
Политика Безопасности определяет — ЧТО следует предпринять в том или ином случае, а Контекст Безопасности (защищенный канал) определяет — КАК производить обмен данными
Установка IPSEC
1 |
# apt-get install ipsec-tools racoon |
Первый способ аутентификации — на основе парольной фразы/пароля
Аутентификацимя на основе парольной фразы (pre-shared keys)
PSK — аутентификация по паролю. Если пароль подошел, генерятся сертификаты и сервера обмениваются ими автоматически по IKE
На первой ноде(10.10.1.43)
1 |
# nano /etc/racoon/psk.txt |
1 |
10.10.1.46 mypassword |
1 |
# chmod 600 /etc/racoon/psk.txt && chown root:root /etc/racoon/psk.txt |
На второй ноде(10.10.1.46)
1 |
# nano /etc/racoon/psk.txt |
1 |
10.10.1.43 mypassword |
1 |
# chmod 600 /etc/racoon/psk.txt && chown root:root /etc/racoon/psk.txt |
Определение политик безопасности — Security Police Database(SPD)
На первой ноде(10.10.1.43)
1 |
# nano /usr/local/scripts/ipsec-on.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/usr/sbin/setkey –f # Очищаем SAD и SPD flush; spdflush; # добавляем правило на трафик от ноды 1 (10.10.1.43) с любым портом на ноду 2 # (10.10.1.46) на любой порт по любому протоколу(any), трафик является исходящим(out), # шифруется(ipsec), используется esp в режиме транспорта(transport), обязательно(require). spdadd 10.10.1.43 10.10.1.46 any -P out ipsec esp/transport//require; # добавляем правило на трафик от ноды 2 (10.10.1.46) с любым портом на ноду 1 # (10.10.1.43) на любой порт по любому протоколу, трафик является входящим(in), # шифруется(ipsec), используется esp в режиме транспорта(transport), обязательно(require) spdadd 10.10.1.46 10.10.1.43 any -P in ipsec esp/transport//require; |
1 |
# chmod 700 /usr/local/scripts/ipsec-on.conf && chown root:root /usr/local/scripts/ipsec-on.conf |
На второй ноде(10.10.1.46)
1 |
# nano /usr/local/scripts/ipsec-on.conf |
1 2 3 4 5 |
#!/usr/sbin/setkey –f flush; spdflush; spdadd 10.10.1.46 10.10.1.43 any -P out ipsec esp/transport//require; spdadd 10.10.1.43 10.10.1.46 any -P in ipsec esp/transport//require; |
1 |
# chmod 700 /usr/local/scripts/ipsec-on.conf && chown root:root /usr/local/scripts/ipsec-on.conf |
Создание защищенных каналов SA (security )
Настройка Racoon
1 |
# cp /usr/share/doc/racoon/examples/samples/racoon.conf /etc/racoon/racoon.conf.example |
Конфигурационный файл Racoon на первой ноде(10.10.1.43)
1 |
# nano /etc/racoon/racoon.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#log debug; log notify; path pre_shared_key "/etc/racoon/psk.txt"; listen { isakmp 10.10.1.43 [500] ; } sainfo anonymous { lifetime time 45 min ; pfs_group 2; encryption_algorithm 3des; authentication_algorithm hmac_sha1; compression_algorithm deflate; } remote 10.10.1.46 { exchange_mode main,aggressive; my_identifier address; lifetime time 45 min ; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group modp1024; } } |
Конфигурационный файл Racoon на второй ноде(10.10.1.46)
1 |
# nano /etc/racoon/racoon.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#log debug; log notify; path pre_shared_key "/etc/racoon/psk.txt"; listen { isakmp 10.10.1.46 [500] ; } sainfo anonymous { lifetime time 45 min ; pfs_group 2; encryption_algorithm 3des; authentication_algorithm hmac_sha1; compression_algorithm deflate; } remote 10.10.1.43 { exchange_mode main,aggressive; my_identifier address; lifetime time 45 min ; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group modp1024; } } |
Для отладки работы Raccon временно включаем уровень логировнаия debug вместо notify
1 2 |
log debug; # log notify; |
Ряд базовых параметров используемых по умолчанию можно посмотреть в файле
1 |
/usr/share/doc/racoon/examples/samples/racoon.conf |
Запуск туннеля, SPD(через setkey), Racoon на обоих нодах
1 |
# cd /usr/local/scripts/ && ./tunnel-on.sh && ./ipsec-on.conf && systemctl restart racoon |
Мониторинг работы
Например, на второй ноде
1.Наличие маршрутов для пакетов с подсетей 192.168.10.0/24 (устанавливается через скрипт туннеля)
2.Наличие списка политик безопасности SPD (security police database) (устанавливается через setkey в скрипте ipsec-on.conf )
1 |
# setkey -DP |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
10.10.1.43[any] 10.10.1.46[any] 255 fwd prio def ipsec esp/transport//require created: Nov 3 11:39:38 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=34 seq=3 pid=1874 refcnt=1 10.10.1.43[any] 10.10.1.46[any] 255 in prio def ipsec esp/transport//require created: Nov 3 11:39:38 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=24 seq=4 pid=1874 refcnt=1 10.10.1.46[any] 10.10.1.43[any] 255 out prio def ipsec esp/transport//require created: Nov 3 11:39:38 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=17 seq=0 pid=1874 refcnt=1 |
3. Наличие списка защищенных каналов SA (security associate)
Выводит данные только в случае установленного соединения (канал уже существует) – если не было ни одного пакета в нужном направлении, то эта команда ничего не выведет
1 |
# setkey -D |
1 |
No SAD entries. |
1 |
# ping 192.168.10.54 |
1 2 3 4 5 6 |
PING 192.168.10.54 (192.168.10.54) 56(84) bytes of data. 64 bytes from 192.168.10.54: icmp_seq=1 ttl=62 time=0.462 ms ^C --- 192.168.10.54 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.462/0.462/0.462/0.000 ms |
1 |
# setkey -D |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
10.10.1.46 10.10.1.43 esp mode=transport spi=231198237(0x0dc7ce1d) reqid=0(0x00000000) E: 3des-cbc 3b52edcf 5d1558c7 fddf1013 df93b17f 7f2e47e9 cdc93e23 A: hmac-sha1 ea2d25fb 92f456ac 2af8aaa3 ff7b370f 6b8fbbb6 seq=0x00000000 replay=4 flags=0x00000000 state=mature created: Nov 3 11:41:42 2016 current: Nov 3 11:41:54 2016 diff: 12(s) hard: 900(s) soft: 720(s) last: Nov 3 11:41:42 2016 hard: 0(s) soft: 0(s) current: 176(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 2 hard: 0 soft: 0 sadb_seq=1 pid=1943 refcnt=0 10.10.1.43 10.10.1.46 esp mode=transport spi=197291696(0x0bc26eb0) reqid=0(0x00000000) E: 3des-cbc 5db9412a b52e2d5d f90030fc 22a0ac97 b2e7f1c1 c174ed32 A: hmac-sha1 fce15b2a 3d42a2a6 0a41920d 70f2220d fa25ce3e seq=0x00000000 replay=4 flags=0x00000000 state=mature created: Nov 3 11:41:41 2016 current: Nov 3 11:41:54 2016 diff: 13(s) hard: 900(s) soft: 720(s) last: Nov 3 11:41:42 2016 hard: 0(s) soft: 0(s) current: 176(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 2 hard: 0 soft: 0 sadb_seq=0 pid=1943 refcnt=0 |
4. Наличия трафика по протоколу esp на интерфейсе eth0
1 |
# tcpdump -n -nn -t -i eth0 host 10.10.1.43 |
1 2 3 4 |
IP 10.10.1.43 > 10.10.1.46: ESP(spi=0x0c347df0,seq=0x15), length 124 IP 10.10.1.46 > 10.10.1.43: ESP(spi=0x04606e86,seq=0x15), length 124 IP 10.10.1.43 > 10.10.1.46: ESP(spi=0x0c347df0,seq=0x16), length 124 IP 10.10.1.46 > 10.10.1.43: ESP(spi=0x04606e86,seq=0x16), length 124 |
Второй способ аутентификации — на основе предварительных ключей
Для каждого направления трафика генерируется пара ключей — публичный и приватный. Публичный раздается для шифрования — приватный оставляем для расшифровки.
Если каждая из сторон, использующих IPSEC, создаст открытый и закрытый ключи, то обе стороны, обменявшись своими открытыми ключами и настроив политику безопасности, смогут установить защищенное соединение.
В качестве инструмента для создания ключей используем утилиту openssl.
1 |
# cd /etc/racoon/certs/ |
Создание запроса на сертификат
1 |
# openssl req -new -nodes -newkey rsa:1024 -sha1 -keyform PEM -keyout debian.private -outform PEM -out debian.pem |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Generating a 1024 bit RSA private key ........++++++ ............++++++ writing new private key to 'debian.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]:UA State or Province Name (full name) [Some-State]:Kharkov Locality Name (eg, city) []:Kharkov Organization Name (eg, company) [Internet Widgits Pty Ltd]:ITCompany Organizational Unit Name (eg, section) []:IT-Department Common Name (e.g. server FQDN or YOUR name) []:debian Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: |
1 |
# ls -l |
1 2 3 |
total 8 -rw-r--r-- 1 root root 660 Nov 3 12:08 debian.pem -rw-r--r-- 1 root root 912 Nov 3 12:08 debian.private |
Создание самого сертификата, подписанного самим собой
1 |
# openssl x509 -req -in debian.pem -signkey debian.private -out debian.public |
1 2 3 |
Signature ok subject=/C=UA/ST=Kharkov/L=Kharkov/O=ITCompany/OU=IT-Department/CN=debian Getting Private key |
1 |
# ls -l |
1 2 3 4 |
total 12 -rw-r--r-- 1 root root 660 Nov 3 12:08 debian.pem -rw-r--r-- 1 root root 912 Nov 3 12:08 debian.private -rw-r--r-- 1 root root 871 Nov 3 12:12 debian.public |
Теперь можно удалить файл debian.pem
1 |
# rm debian.pem |
Аналогично повторяем процедуру на второй ноде
1 |
# cd /etc/racoon/certs/ |
1 |
# openssl req -new -nodes -newkey rsa:1024 -sha1 -keyform PEM -keyout debian2.private -outform PEM -out debian2.pem |
1 |
# openssl x509 -req -in debian2.pem -signkey debian2.private -out debian2.public |
1 |
# rm debian.pem |
Настройка Racoon
Настройка на первой ноде
1 |
# nano /etc/racoon/racoon.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
log notify; #log debug; #path pre_shared_key "/etc/racoon/psk.txt"; # Сообщаем racoon место размещения сертификатов path certificate "/etc/racoon/certs"; listen { isakmp 10.10.1.43 [500] ; } sainfo anonymous { lifetime time 45 min ; pfs_group 2; encryption_algorithm 3des; authentication_algorithm hmac_sha1; compression_algorithm deflate; } remote 10.10.1.46 { exchange_mode main,aggressive; # my_identifier address; # Локальный и удаленный идентификаторы будут извлекаться из открытых ключей my_identifier asn1dn; peers_identifier asn1dn; # Имена файлов с локальными открытым и секретным ключами certificate_type x509 "debian.public" "debian.private"; # Имя открытого ключа удаленного узла peers_certfile x509 "debian2.public"; lifetime time 45 min ; proposal { encryption_algorithm 3des; hash_algorithm sha1; # authentication_method pre_shared_key; # Использовать для аутентификации RSA открытый/секретный ключи authentication_method rsasig; dh_group modp1024; } } |
Настройка на второй ноде
1 |
# nano /etc/racoon/racoon.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
log notify; #log debug; #path pre_shared_key "/etc/racoon/psk.txt"; path certificate "/etc/racoon/certs"; listen { isakmp 10.10.1.46 [500] ; } sainfo anonymous { lifetime time 45 min ; pfs_group 2; encryption_algorithm 3des; authentication_algorithm hmac_sha1; compression_algorithm deflate; } remote 10.10.1.43 { exchange_mode main,aggressive; # my_identifier address; my_identifier asn1dn; peers_identifier asn1dn; certificate_type x509 "debian2.public" "debian2.private"; peers_certfile x509 "debian.public"; lifetime time 45 min ; proposal { encryption_algorithm 3des; hash_algorithm sha1; # authentication_method pre_shared_key; authentication_method rsasig; dh_group modp1024; } } |
Скопируем публичные ключи
С первой ноды на вторую
1 |
# scp /etc/racoon/certs/debian.public 10.10.1.46:/etc/racoon/certs/ |
Со второй ноды на первую
1 |
# scp /etc/racoon/certs/debian2.public 10.10.1.43:/etc/racoon/certs/ |
Проверяем, что контрольные суммы файлов публичных ключей одинаковы
На Ноде 1
1 |
# openssl dgst debian.public |
1 |
MD5(debian.public)= e984bf6dd511d7beda5e133afd618c64 |
1 |
# openssl dgst debian2.public |
1 |
MD5(debian2.public)= 01e6a62836cb9485bf1da5c7230c5a28 |
На Ноде 2
1 |
# openssl dgst debian.public |
1 |
MD5(debian.public)= e984bf6dd511d7beda5e133afd618c64 |
1 |
# openssl dgst debian2.public |
1 |
MD5(debian2.public)= 01e6a62836cb9485bf1da5c7230c5a28 |
Запуск туннеля, SPD(через setkey), Racoon на обоих нодах
1 |
# cd /usr/local/scripts/ && ./tunnel-on.sh && ./ipsec-on.conf && systemctl restart racoon |
Проверим доступность между подсетями
1 |
# ping 192.168.20.54 |
1 2 |
PING 192.168.20.54 (192.168.20.54) 56(84) bytes of data. 64 bytes from 192.168.20.54: icmp_seq=1 ttl=62 time=0.510 ms |
После чего провереям наличие безопасных каналов
1 |
# setkey -D |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
10.10.1.43 10.10.1.46 esp mode=transport spi=37126148(0x02368004) reqid=0(0x00000000) E: 3des-cbc b32cf09e 528be30d e7b32c37 bbe22474 fda09fcc 660f2cc0 A: hmac-sha1 7acad20e 1e16e066 10e30904 a711bc33 cde52fdf seq=0x00000000 replay=4 flags=0x00000000 state=mature created: Nov 3 15:29:02 2016 current: Nov 3 15:47:58 2016 diff: 1136(s) hard: 2700(s) soft: 2160(s) last: Nov 3 15:29:03 2016 hard: 0(s) soft: 0(s) current: 6363(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 46 hard: 0 soft: 0 sadb_seq=1 pid=24685 refcnt=0 10.10.1.46 10.10.1.43 esp mode=transport spi=260115384(0x0f810bb8) reqid=0(0x00000000) E: 3des-cbc 3d8029fe 6223bf2f d6e1bef5 22dbe188 1285255b 2a8b7b61 A: hmac-sha1 b9589f80 ebb4576f 64343b42 0e26be74 486b9e52 seq=0x00000000 replay=4 flags=0x00000000 state=mature created: Nov 3 15:29:02 2016 current: Nov 3 15:47:58 2016 diff: 1136(s) hard: 2700(s) soft: 2160(s) last: Nov 3 15:29:03 2016 hard: 0(s) soft: 0(s) current: 6767(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 58 hard: 0 soft: 0 sadb_seq=0 pid=24685 refcnt=0 |
Настройка iptables для IPSEC
Необходимо разрешить трафик:
1.Протокол esp, который используется для шифрования пакетов данных
2.Порт isakmp для обмена ключами (IKE) (используется Racoon) – UDP протокол и порт номер 500
Источник:
https://www.opennet.ru/docs/RUS/LARTC/x616.html
http://www.lissyara.su/articles/freebsd/security/ipsec2/
http://www.lissyara.su/archive/ipsec_old/
http://www.lissyara.su/archive/ipsec/