Содержание

IPSec Tools Racoon

Homepage: IPsec-Tools

IPsec-Tools это порт c FreeBSD использует утилиты setkey, racoon.

IPSec (сокращение от спецификации IP Security) - надстройка к протоколу IP, обеспечивающая безопасность протоколов более высокого уровня. IPSec был разработан для IPv6 протокола, а позже портирован на IPv4 протокол. IPSec шифрует IP-пакеты, ему безразличны интерфейсы (например gif) на шифрование которых он настроен вообще. IPSec обеспечивает IP-сжатие(IP Compression, IPcomp) пакетов перед их шифрованием. Протоколы IPsec работают на сетевом уровне (уровень 3 модели OSI). Другие защищённые протоколы, такие как Что такое SSL сертификат для сайта, почты и TLS, работают на транспортном уровне (уровни OSI 4 — 7).

IPSec для соединения может использовать предопределённые ключи(pre-shared key) или Что такое SSL сертификат для сайта, почты- сертификаты.
  1. Encapsulated Security Payload (ESP), защищающей данные IP пакета от вмешательства третьей стороны путем шифрования содержимого с помощью симметричных криптографических алгоритмов (таких как Blowfish,3DES, AES).
  2. Authentication Header (AH), защищающий заголовок IP пакета от вмешательства третьей стороны и подделки путем вычисления криптографической контрольной суммы и хеширования полей заголовка IP пакета защищенной функцией хеширования. К пакету добавляется дополнительный заголовок с хэшем, позволяющий аутентификацию информации пакета.

ESP и AH могут быть использованы вместе или по отдельности, в зависимости от обстоятельств.

esp и ah - пакеты ipsec, формируются ядром после того как хосты, при помощи racoon, договорятся о ключе по протоколу isakmp (500/udp).

Режимы работы IPsec(транспортный, туннельный)

Существует два режима работы IPsec: транспортный режим и туннельный режим(когда в транспортном режиме работают только маршрутизаторы).

IPsec может быть использован или для непосредственного шифрования трафика между двумя хостами (транспортный режим); или для построения "виртуальных туннелей" между двумя подсетями, которые могут быть использованы для защиты соединений между двумя корпоративными сетями (туннельный режим). Туннельный режим обычно называют виртуальной частной сетью (Virtual Private Network, Раздел VPN: Что это такое VPN).

В транспортном режиме шифруется (или подписывается) только информативная часть IP-пакета. Маршрутизация не затрагивается, так как заголовок IP пакета не изменяется (не шифруется). Транспортный режим как правило используется для установления соединения между хостами. Он может также использоваться между шлюзами, для защиты туннелей, организованных каким-нибудь другим способом (IP tunnel, GRE туннели и др.).

Транспортный режим
IP заголовок ESP/AH заголовок L4 payload

В туннельном режиме IP-пакет шифруется целиком. Для того, чтобы его можно было передать по сети, он помещается в другой IP-пакет. По существу, это защищённый IP-туннель. Туннельный режим может использоваться для подключения удалённых компьютеров к виртуальной частной сети или для организации безопасной передачи данных через открытые каналы связи (например, Интернет) между шлюзами для объединения разных частей виртуальной частной сети. В туннельном режиме инкапсулируется весь исходный IP пакет, и добавляется новый IP заголовок.

Туннельный режим
IP заголовок ESP/AH заголовок исходный IP заголовок L4 payload
Если используется IPsec совместно с GRE туннели, который инкапсулирует исходный пакет и добавляет новый IP заголовок, логично использовать транспортный режим.
Режимы IPsec не являются взаимоисключающими. На одном и том же узле некоторые SA могут использовать транспортный режим, а другие — туннельный.

Security Associations (SA). Для возможности проводить инкапсуляцию/декапсуляцию стороны участвующие в процессе обмена должны иметь возможность хранить секретные ключи, алгоритмы и IP адреса. Вся эта информация хранится в Ассоциациях Безопасности (SA), SA в свою очередь хранятся в Базе данных Ассоциаций Безопасности (SAD). Конфигурирование Security Association, позволяет задать например mode transport | tunnel | ro | in_trigger | beet - режим безопасной ассоциации. Соответственно, может принимать одно из значений, означающих транспортный, тоннельный, beet (Bound End-to-End Tunnel), оптимизации маршрута (route optimization) или in_trigger режимы. (последние два используются в контексте mobile ipv6).

Security Policy (SP) - политика безопасности, хранится в SPD (База данных политик безопасности). SA специфицирует, как IPsec предполагает защищать трафик, SPD в свою очередь хранит дополнительную информацию, необходимую для определения какой именно трафик защищать и когда. SPD может указать для пакета данных одно из трёх действий: отбросить пакет, не обрабатывать пакет с помощью IPSec, обработать пакет с помощью IPSec. В последнем случае SPD также указывает, какой SA необходимо использовать (если, конечно, подходящий SA уже был создан) или указывает, с какими параметрами должен быть создан новый SA. SPD является очень гибким механизмом управления, который допускает очень хорошее управление обработкой каждого пакета. Пакеты классифицируются по большому числу полей, и SPD может проверять некоторые или все поля для того, чтобы определить соответствующее действие. Это может привести к тому, что весь трафик между двумя машинами будет передаваться при помощи одного SA, либо отдельные SA будут использоваться для каждого приложения, или даже для каждого TCP соединения.

IPSec (сеть-сеть) между серверами FreeBSD

Теперь ping должны ходить между сетями.

Оставшаяся часть строки определяет, как эти пакеты будут зашифрованы. Будет использоваться протокол esp, а параметр tunnel показывает, что пакет в дальнейшем будет инкапсулирован в IPsec пакет. Повторное использование A.B.C.D и W.X.Y.Z предназначено для выбора используемых параметров безопасности, и наконец параметр require разрешает шифрование пакетов, попадающих под это правило.

Это правило соответствует только исходящим пакетам. Вам потребуется похожее правило, соответствующее входящим пакетам.

> ee /etc/ipsec.conf
spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;

Настройка на шлюзе #2 аналогична только меняются IP местами.

Настройка утилиты racoon

> ee /usr/local/etc/racoon/racoon.conf
path include "/usr/local/etc/racoon";
path certificate "/usr/local/etc/racoon/cert/";
# following line activates logging & should deactivated later
log debug;

# если директива listen не задана, racoon слушает все доступные
# адреса интерфейсов.

listen
{
        #isakmp ::1 [7000];
        isakmp 202.249.11.124 [500];
        #admin [7002];          # administrative port for racoonctl.
        #strict_address;        # requires that all addresses must be bound.
}

# описываем удалённый хост (на второй машине - идентично,
# тока другой 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.su.public";
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method rsasig;
                dh_group 2 ;
        }
}

sainfo anonymous
{
        pfs_group 2;
        encryption_algorithm 3des;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate;
}
#pass IPSec
pass in on $ext_if_a inet proto udp from { $esp_peers } to ($ext_if_a) port isakmp
pass in on $ext_if_a inet proto esp from { $esp_peers } to ($ext_if_a)
#
pass out on $ext_if_a inet proto udp from { $esp_peers } to ($ext_if_a) port isakmp
pass out on $ext_if_a inet proto esp from { $esp_peers } to ($ext_if_a)

Cмотрим логи /var/log/security и /var/log/messages.

Как только параметры безопасности установлены, вы можете просмотреть их используя setkey(8). Запустите

> /etc/rc.d/ipsec start
> /usr/local/etc/rc.d/racoon start
> setkey -D  # список созданных защищенных каналов
> setkey -DP # покажет список политик безопасности

на любом из хостов для просмотра информации о параметрах безопасности.

tcpdump Linux примеры использования должен показывать ESP пакеты.

IPSec (сеть-сеть) между серверами Linux

# aptitude install ipsec-tools racoon
  1. Настройка пакета racoon
  2. Создание политики безопасности
  3. Виртуальные интерфейсы. Они нужны для маршрутизации сетей находящихся в локальных сетях. Два соединенных сервера будут видеть себя без интерфейсов(иногда без них не заводится и между серверами, странно вообще-то).

Ниже приведены конфиги для случая с предопределёнными ключами.

> nano /etc/racoon/racoon.conf
path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
#path certificate "/etc/racoon/certs";

remote 10.5.21.23
{
        exchange_mode aggressive,main;
        doi ipsec_doi;
        situation identity_only;
        my_identifier address; #Определяет метод идентификации, который будет использоваться при проверке подлинности узлов.
        lifetime time 2 min; 
        initial_contact on;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key; # Определяет метод проверки подлинности, используемый при согласовании узлов.
                dh_group 2;
        }
        proposal_check strict;
}

sainfo anonymous # Отмечает, что SA может автоматически инициализировать соединение с любым партнёром при совпадении учётных сведений IPsec.
{
        pfs_group 2;
        lifetime time 2 min ;
        encryption_algorithm 3des, blowfish 448, des, rijndael ;
        authentication_algorithm hmac_sha1, hmac_md5 ;
        compression_algorithm deflate ;
}

Создадим политику безопасности

> nano pol.cfg
#!/sbin/setkey -f
flush;
spdflush;

spdadd  10.5.21.24 10.5.21.23 any -P out ipsec esp/transport//require;

spdadd 10.5.21.23 10.5.21.24 any -P in ipsec esp/transport//require;
> chmod +x pol.cfg
> ./pol.cfg

Создадим выполняемый файл для создания интерфейсов и запустим его.

>nano tun.sh
#!/bin/sh
ip tunnel del tun0
ip tunnel add tun0 mode ipip remote 10.5.21.23 local 10.5.21.24 dev eth0 # создаем интерфейс tun0 и устанавливаем туннель
                                                                         # между хостами (здесь нужно использовать реальные IP адреса сетевых интерфейсов).
ifconfig tun0 10.0.9.1 pointopoint 10.0.9.2                              # назначаем интерфейсу IP адреса, для текущего хоста и для другого конца
                                                                         # туннеля (не обязательно).
ifconfig tun0 mtu 1472
ifconfig tun0 up

# ниже можно прописать нужные нам маршруты, например так
route add -net ... netmask 255.255.255.0 gw ...
route add -net ... netmask 255.255.255.0 gw ...

> ./tun.sh
Для автоматической загрузки правил файл tun.sh правильно поместить для Операционная система Debian в директорию /etc/network/if-up.d

Все IPSec тунель между сетями настроен.

iptables IPSec

$IPT -A INPUT -p udp -m udp -s xxx.xxx.xxx.xxx -d xxx.xxx.xxx.xx --dport 500 -j ACCEPT
$IPT -A INPUT -p esp -j ACCEPT
$IPT -A INPUT -p ah -j ACCEPT 
$IPT -A INPUT -p ipencap -j ACCEPT
$IPT -A INPUT -p udp -m udp -s xxx.xxx.xxx.xxx -d xxx.xxx.xxx.xx --dport 4500 -j ACCEPT

IPsec «узел-узел» без виртуальных интерфесов

Задача. При помощи IPSec (pre_shared_key) соединить два сервера (Debian 5 и Debian 7). У обоих реальные IP. Никаких сетей пробрасывать не надо. Должен шифроваться трафик между этими IP. То есть строим транспортный режим (между двумя хостами).

Настройка сводится к двум пунктам

IPSec (GRE) (узел-сеть) между Debian и Cisco

Задача: построить IPsec в туннельном режиме. Описание RFC протокола SIP сигнализация между поставщиком (Cisco) и клиентом (Debian 5) шифруется IPsec, а RTP минуя туннель идет кратчайшим маршрутом через обычный Интернет.

да и перед настрокой туннеля (перед auto tun0) прописать pre-up modprobe ip_gre

# modprobe ip_gre

Скрипт для создания GRE туннели туннеля в Debian:

#!/bin/sh -e

modprobe ip_gre
#ip tunnel del tun0
ip tunnel add tun0 mode gre remote 62.xxx.xxx.xxx local 193.xxx.xxx.xxx dev eth0
ifconfig tun0 mtu 1472
ifconfig tun0 up
route add -net 62.xxx.237.xxx netmask 255.255.255.192 dev tun0
route add -net 62.xxx.246.xxx netmask 255.255.255.192  dev tun0

Утилиты

Мониторинг IPsec

Мониторинг IPsec в Операционная система Debian 5.0 2.6.26-2-686-bigmem i686. В уровень детализации логов log notify или log debug устанавливается в файле racoon.conf.

# tail -F /var/log/syslog | grep racoon

IPSec Openswan

OpenSWAN начал разрабатываться как форк прекратившего в настоящее своё существование проекта FreeS/WAN (Free Secure Wide-Area Networking), релизы продолжают выпускаться под свободной GNU General Public License. В отличие от проекта FreeS/WAN, OpenSWAN разрабатывается не только специально под операционную систему GNU/Linux. OpenSWAN обеспечивает стек протоколов IpSec: AH и ESP для ядра Linux,а также инструментарий для управления ими.

OpenSWAN для ветки ядра 2.6 предоставляет встроенную, NETKEY реализацию IpSec, так и собственную KLIPS.

CentOS 6.6 поддерживает только Openswan в основных пакетах.

Задача. Создать шифрованный туннель между CentOS теперь CentOS Stream 6.6 и Операционная система Debian 7.8 Wheezy. GRE туннели + Openswan (type=transport)

Диагностика IPSec Openswan

Запуск сервиса и поиск возникающих проблем.

Openwan logs (pluto): /var/log/auth.log /var/log/syslog /var/log/pluto/peer/a/b/c/d/a.b.c.d.log

Если на обоих серверах нет ошибок, то туннель должен сейчас подняться. Вы можете проверить туннель с помощью команды ping с следующим образом. Если туннель не поднят, то частная подсеть на стороне B не должна быть доступна со стороны А, т. е. команда ping не должна работать. После того, как туннель будет поднят , попробуйте команду ping для доступа к частной подсети на стороне B со стороны A. Это должно работать.

Кроме того, в таблице маршрутизации сервера должны появиться маршруты к частной подсети.

# ip route 
[siteB-private-subnet] via [siteA-gateway] dev eth0 src [siteA-public-IP]
default via [siteA-gateway] dev eth0

Читайте также: