Ласкаво просимо


RichIM
- сервер миттєвого обміну повідомленнями та інформацією про присутність між користувачами в Інтернет. Працює на базі сервісу Jabber та протоколу XMPP (eXtensible Messaging and Presence Protocol). Jabber має ті ж базові можливості, що й такі комерційні системи швидкого обміну повідомленнями як AIM, ICQ, MSN і Yahoo! Messenger. Головною перевагою цієї технології є розподіленість, як в SMTP, та підтримка шлюзів в інші мережі обміну повідомленнями такі як ICQ.

Запрошуємо приєднатись, для цього пройдіть реєстрацію використовуючи одну з клієнтських програм і спілкуйтесь з друзями та колегами.


Сервіс мігровано на нову платформу. Для реєстрації jabber акаунту використовуйте клієнтське ПО (наприклад PSI).

Виртуальная частная сеть (часть I).

Виртуальная частная сеть (часть I).
О-о, это странное место Камчатка,
О-о, это сладкое слово "Камчатка".
В. Цой.

Введение.


VPN (Virtual Private Network — виртуальная частная сеть) — название семейства технологий, позволяющих обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например, Интернет). В зависимости от применяемых протоколов и назначения, VPN может обеспечивать соединения трёх видов: узел-узел, узел-сеть и сеть-сеть.
Материал из Википедии — свободной энциклопедии.


В статье будем рассматривать практическое применение данной технологии на основе набора протоколов IPsec.

Краткий обзор IPsec.


IPsec (IP Security) – это расширение протокола IPv4, которое предоставляет шифрование и аутентификацию в сети. Изначально IPsec был разработан для IPv6 и является неотъемлемой его частью. IPsec работает на сетевом уровне модели OSI, что дает возможность реализовать прозрачную работу для пользователей и приложений.

IPsec состоит из протоколов для инкапсуляции, аутентификации, шифрования и обмена ключами AH (Authentication Header – Заголовок Аутентификации), ESP (Encapsulating Security Payload – Инкапсулированные Защищенные Данные) и IKE (Internet Key Exchange – Обмен Ключами через Интернет).

AH несет аутентификационную информацию, обычно это ключи в MD5 или SHA. AH используется только для аутентификации и проверяет, что отправители действительно те, за кого себя выдают. AH не производит шифрования.

ESP может использоваться как для шифрования, так и для аутентификации. Он может использоваться как с AH, так и без него (лучше без него). Обычно шифрование происходит с использованием блочного шифра (симметричный или раздельно-ключевой шифр, состоящий из текстовых блоков фиксированного размера) и 3DES.

IKE устанавливает параметры соединения, включая инициализацию, обработку и обновление ключей шифрования. Аутентификация производится с использованием общих секретов (например, секретных фраз) или криптографических RSA ключей, которые гарантируют идентичность обеих частей.

Различают два режима применения ESP и AH (а также их комбинации) - транспортный и туннельный.

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

Туннельный режим предполагает шифрование всего пакета, включая заголовок сетевого уровня. Туннельный режим применяется в случае необходимости скрытия информационного обмена организации с внешним миром. При этом, адресные поля заголовка сетевого уровня пакета, использующего туннельный режим, заполняются межсетевым экраном организации и не содержат информации о конкретном отправителе пакета. При передаче информации из внешнего мира в локальную сеть организации в качестве адреса назначения используется сетевой адрес межсетевого экрана. После расшифровки межсетевым экраном начального заголовка сетевого уровня пакет направляется получателю.

Для работы IPsec использует так называемые Security Associations (Ассоциации Безопасности) и Security Policy (Политики Безопасности). Для практической части этой статьи нам необходимо иметь базовое представление о них.

Security Associations (SA). Для возможности проводить инкапсуляцию/декапсуляцию стороны участвующие в процессе обмена должны иметь возможность хранить секретные ключи, алгоритмы и IP адреса. Вся эта информация хранится в Ассоциациях Безопасности (SA), SA в свою очередь хранятся в Базе данных Ассоциаций Безопасности (SAD).

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

На этом, обзор технологии закончим, за дополнительной информацией обращайтесь к литературе.

Тип соединения «сеть-сеть».


Логическая схема.
Начнём с наиболее подходящей (на мой взгляд) интерпретации хитрой аббревиатуры VPN, то есть соединение «сеть-сеть».



На рис. выше отображена виртуальная сеть 10.0.0.0/8 состоящая из трёх удалённых друг от друга департамента. Сплошной линией обозначено физические сетевые подключения, точечной линией обозначено виртуальные соединения (туннельный режим IPsec). Желтое облако – локальная сеть (все соединения внутри доверенные). Серое облако – внешняя сеть Internet (небезопасная сеть). Синий цилиндр – маршрутизатор (также выполняет функцию IPsec маршрутизатора). Кирпичная стена – брандмауэр (независимое устройство, либо программный процесс на маршрутизаторе).
Давайте подробно рассмотрим сеть.
Локальная сеть с маршрутизатором “AIR” – сеть класса B с адресом 10.10.0.0/16. В сети машины взаимодействуют между собой, любое внешнее соединение проходит через маршрутизатор. При поступлении IP пакета на маршрутизатор будет проверен адрес назначения:


  • пункт назначения одна из сетей маршрутизатора (внешняя или внутренняя) – поиск аппаратного адреса получателя и отправка (также обработка пакета SNAT, если требуется);

  • пункт назначения одна из сопряжённых виртуальных сетей (10.20.0.0/16 или 10.30.0.0/16) – создание туннеля (если до этого туннеля не было) и отправка пакета в криптованный туннель;

  • пункт назначения внешний адрес – обработка пакета SNAT и отправка на маршрутизатор провайдера.

Упрощённая схема взаимодействия на рисунке ниже.



Искренне надеюсь, что сейчас я смог передать идею. Ведь пора перейти к практическим действиям.

Конфигурация.

Приведённая ниже конфигурация применима для соединения локальных сетей в одну виртуальную частную сеть. Пример реализации будет основан на двух сетях с маршрутизаторами AIR и WATER, третий (четвёртый, пятый...) настраивается по образу и подобию. Требования к окружению следующие:


  • маршрутизаторы настроены для базового предоставления сервиса шлюза своим локальным сетям (имеют минимум 2 сетевых интерфейса, включена функция форвардинга и NATа)

  • «внешний» сетевой интерфейс маршрутизаторов имеет статический, публичный (не находится за NATом) IP-адрес.

  • Операционная система GNU/Linux (kernel >= 2.6.10). Для настройки «по шагам» требуется Debian GNU/Linux или Ubuntu. (между прочим: при написании статьи для AIR использовалась Ubuntu8.04, для WATER - Debian5.0).

Для работы нам необходимы пакеты ipsec-tools и racoon.
ipsec-tools — утилиты конфигурирования ассоциаций и политик безопасности ядра linux (да-да IPsec встроен в ядро).
racoon — даемон обмена ключами. Ведет «переговоры» между сопряжёнными сетями устанавливая ассоциации безопасности первой (для себя ISAKMP SA) и второй (IPsec SA) фазы.
Устанавливаем

$ sudo apt-get update
$ sudo apt-get install racoon // ipsec-tools указан в зависимостях, можно явно не указывать

Во время установки ракун (racoon) потребует первоначальной конфигурации

Выбираем «Редактирование вручную» (в английской консоли «direct»).

Маршрутизатор AIR:
Учитывайте, что внешний адрес для AIR я пишу как 93.x.x.x, для WATER 94.x.x.x. Вы же используйте свои адреса.
Политики безопасности находятся в конфигурационном файле /etc/ipsec-tools.conf
Пропишем их:

flush; #сбросить ассоциации безопасности (SAD)
spdflush; # сбросить политики безопасности (SPD)

spdadd 10.10.0.0/16 10.20.0.0/16 any -P out ipsec
esp/tunnel/93.x.x.x-94.x.x.x/require; # добавление (SPD), исходящий трафик

spdadd 10.20.0.0/16 10.10.0.0/16 any -P in ipsec
esp/tunnel/94.x.x.x-93.x.x.x/require; # добавление (SPD), входящий трафик

Ассоциации безопасности генерируются автоматически в процессе переговоров участвующих сторон даемоном racoon, конфигурационный файл racoon /etc/racoon/racoon.conf

path pre_shared_key "/etc/racoon/psk.txt"; # путь к файлу содержащему шаренные ключи
path certificate "/etc/racoon/certs"; # путь к директории с сертификатами

listen {
isakmp 93.x.x.x[500]; # установка прослушивания даемона ip[port]
#isakmp_natt 93.x.x.x[4500]; # установка прослушивания используя NAT-T
strict_address;
}

remote 94.x.x.x { # IP нашего пира, тоесть публичный адрес маршрутизатора WATER
exchange_mode main,aggressive; # режим обмена, main - более безопасный
lifetime time 24 hour; # время жизни первой фазы
proposal { # секция определения предложений
encryption_algorithm 3des; # алгоритм криптования
hash_algorithm sha1; # алгоритм хеширования
authentication_method pre_shared_key; #метод аутентификации, у нас - шаренные ключи
dh_group modp1024; # группа Диффи-Хеллмана
}
generate_policy off; # отключаем генерацию политик безопасности
#nat_traversal (on | off | force); # пример использования nat-traversal
nat_traversal off; # отключаем nat-traversal
#ike_frag on; # фрагментация ike, используется для NAT-T, неиспользуем.
#esp_frag 552; # фрагментация esp пакета, используется для NAT-T, неиспользуем.
}

sainfo address 10.10.0.0/16 any address 10.20.0.0/16 any { # IPSEC SA
#pfs_group modp768;
pfs_group modp1024; # группа Диффи-Хеллмана
lifetime time 1 hour; # время жизни второй фазы
#lifetime time 5 min;
encryption_algorithm 3des; # алгоритм криптования
#authentication_algorithm hmac_md5;
authentication_algorithm hmac_sha1; # алгоритм аутентификации
compression_algorithm deflate; # алгоритм компрессии
}

Создаём шаренный ключ

$ dd if=/dev/urandom count=16 bs=1| xxd -ps
e2c1f209d41b9beb44e5a176af9eab41

Ключ необходимо прописать в файл /etc/racoon/psk.txt следующим образом:

94.x.x.x e2c1f209d41b9beb44e5a176af9eab41 # ip нашего пира (другой стороны)

Ключи указанные для примера в файле закомментируйте. Для своих конфигураций генерируйте свой ключ, не используйте приведённый здесь.

Маршрутизатор WATER:
/etc/ipsec-tools.conf:

flush; #сбросить ассоциации безопасности (SAD)
spdflush; # сбросить политики безопасности (SPD)

spdadd 10.20.0.0/16 10.10.0.0/16 any -P out ipsec
esp/tunnel/94.x.x.x-93.x.x.x/require;

spdadd 10.10.0.0/16 10.20.0.0/16 any -P in ipsec
esp/tunnel/93.x.x.x-94.x.x.x/require;

/etc/racoon/racoon.conf:

path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

listen {
isakmp 94.x.x.x[500];
#isakmp_natt 94.x.x.x[4500];
strict_address;
}

remote 93.x.x.x {
exchange_mode main,aggressive;
lifetime time 24 hour;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
generate_policy off;
nat_traversal off;
#ike_frag on;
#esp_frag 552;
}

sainfo address 10.20.0.0/16 any address 10.10.0.0/16 any {
#pfs_group modp768;
pfs_group modp1024;
lifetime time 1 hour;
#lifetime time 5 min;
encryption_algorithm 3des;
#authentication_algorithm hmac_md5;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}

/etc/racoon/psk.txt:

93.x.x.x e2c1f209d41b9beb44e5a176af9eab41

Настройки туннелей закончены, перезапускаем сервисы на сопряжённых маршрутизаторах:

$ sudo /etc/init.d/setkey restart
$ sudo /etc/init.d/racoon restart


Настройка IP-таблиц.

Добавьте в iptables следующие правила, ай-пи адреса и внешний сетевой интерфейс (eth0) измените на свои:

AIR

-A INPUT -i eth0 -s 94.x.x.x -p udp --sport 500 --dport 500 -j ACCEPT
-A INPUT -s 94.x.x.x -p esp -j ACCEPT
-A INPUT -s 10.20.0.0/16 -d 10.10.3.254 -m policy --dir in --pol ipsec --proto esp --mode tunnel --tunnel-src 94.x.x.x -j ACCEPT
-A FORWARD -s 10.20.0.0/16 -d 10.10.0.0/16 -m policy --dir in --pol ipsec --proto esp --mode tunnel --tunnel-src 94.x.x.x -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -d 10.20.0.0/16 -m policy --dir out --pol ipsec --proto esp --mode tunnel --tunnel-dst 94.x.x.x -j ACCEPT

Если используете политику по умолчанию DROP в цепочке OUTPUT, то необходимы дополнительные правила:

-A OUTPUT -o eth0 -d 94.x.x.x -p udp --sport 500 --dport 500 -j ACCEPT
-A OUTPUT -d 94.x.x.x -p esp -j ACCEPT
-A OUTPUT -s 10.10.3.254 -d 10.20.0.0/16 -m policy --dir out --pol ipsec --proto esp --mode tunnel --tunnel-dst 94.x.x.x -j ACCEPT

WATER

-A INPUT -i eth0 -s 93.x.x.x -p udp --sport 500 --dport 500 -j ACCEPT
-A INPUT -s 93.x.x.x -p esp -j ACCEPT
-A INPUT -s 10.10.0.0/16 -d 10.20.3.254 -m policy --dir in --pol ipsec --proto esp --mode tunnel --tunnel-src 93.x.x.x -j ACCEPT
-A FORWARD -s 10.10.0.0/16 -d 10.20.0.0/16 -m policy --dir in --pol ipsec --proto esp --mode tunnel --tunnel-src 93.x.x.x -j ACCEPT
-A FORWARD -s 10.20.0.0/16 -d 10.10.0.0/16 -m policy --dir out --pol ipsec --proto esp --mode tunnel --tunnel-dst 93.x.x.x -j ACCEPT
Для политики по умолчанию DROP в цепочке OUTPUT:
-A OUTPUT -o eth0 -d 93.x.x.x -p udp --sport 500 --dport 500 -j ACCEPT
-A OUTPUT -d 93.x.x.x -p esp -j ACCEPT
-A OUTPUT -s 10.20.3.254 -d 10.10.0.0/16 -m policy --dir out --pol ipsec --proto esp --mode tunnel --tunnel-dst 93.x.x.x -j ACCEPT

Оба сервера скорей всего предоставляют сервис шлюза во внешнюю сеть Internet, и используют трансляцию адресов. Для туннелей трансляцию необходимо запретить, например:

-t nat -A POSTROUTING -o eth0 -s 10.10.0.0/16 -d ! 10.20.0.0/16 -j SNAT --to-source 93.x.x.x

для конкретного туннеля, или для всех

-t nat -I POSTROUTING 1 -p esp -j ACCEPT

Перезагрузите iptables.

За информацией по поводу настройки iptables можете обратиться к статьям «Брандмауэр - внешняя защита компьютера (iptables)» и «Брандмауэр - шлюз в интернет для локальной сети (iptables)» либо к исчерпывающей документации по ай-пи таблицам «Руководство по iptables».

Маршрутизация.

Связь по туннелю между маршрутизаторами не работает. Обусловлено это тем, что адрес отправителя не соответствует политикам безопасности (SP). Решается добавлением правила в таблицу маршрутизации следующего вида:

$sudo ip route add 10.20.0.0/16 dev eth0 src 10.10.3.254 # для AIR

$sudo ip route add 10.10.0.0/16 dev eth0 src 10.20.3.254 # для WATER

Для добавления правила при загрузке системы пропишите его в /etc/rc.local:

/sbin/ip route add 10.20.0.0/16 dev eth0 src 10.10.3.254 # для AIR

/sbin/ip route add 10.10.0.0/16 dev eth0 src 10.20.3.254 # для WATER


Тестирование.

Конфигурация виртуальной сети окончена, теперь можете проверить что у Вас получилось. Самое элементарное — пинг. Попробуйте пинг из одной сети в другую, с одного маршрутизатора на другой. Перезапустите racoon и setkey, теперь проделайте пинги в обратном направлении. Если где-то проблемы, очень важно определить при каких условиях они проявляются, это поможет сэкономить много времени.

Если Вы увидели «радостные ответы», хорошо. Нет, тоже не плохо.
Racoon ведёт логи в файле /var/log/daemon.log, смотрите его, там может быть ответ если проблемы. Также доступны две утилиты для IPsec setkey и racoonctl предоставляющие схожий функционал.
Коротко о setkey:

$sudo setket -D # будет выведен список текущих IPSEC SA (до поднятия туннеля ассоциаций не будет)

$sudo setket -DP # будет выведен список текущих IPSEC SP

Дополнительная информация man setkey, man racoonctl.

Технология NAT-Traversal.

В начале раздела "Конфигурация", в требованиях к окружению написано, что внешний интерфейс маршрутизатора обязан иметь публичный ip адрес. Это не совсем так, есть возможность использовать "серый" адрес используя технологию NAT-Traversal. Для включения технологии внесите следующие изменения в конфигурацию:


  • в файле racoon.conf обоих маршрутизаторов раскомментируйте строки
    isakmp_natt 93.x.x.x[4500];
    ike_frag on;
    включите NAT-T изменив строку
    nat_traversal off; на nat_traversal on;
  • в конфигурационных файлах найдите все пиры (внешние ip адреса маршрутизаторов) и измените соответственно Вашим "серым" адресам
  • добавьте правила в iptables для порта 4500/udp

Если с первого раза не заработает, и Вы уверены что ошибок нет, не отчаивайтесь. Раскомментируйте esp_frag 552; - эта опция позволяет проходить самые "замысловатые" NATы и фаерволы. Увеличение размера фрагмента увеличивает производительность туннелей - пробуйте.
Примечание: использовать NAT-T с шаренными ключами небезопасно, необходима конфигурация с сертификатами (сертификаты рассмотрим во второй части статьи).
Право.

В некоторых государствах (Китай, Индия...) существуют правовые ограничения по использованию криптостойких алгоритмов. Перед использованием любых систем шифрования необходимо выяснить правомочность использования того или иного алгоритма в своей стране.

В нашем случае, было бы благоразумно использовать в качестве encryption_algorithm des, hash_algorithm md5, и для authentication_algorithm des при построении туннеля с Шеньженем. Считать сеть 10.30.0.0/16 частично-доверенной и ограничить доступ в/из этой сети только к действительно необходимым ей ресурсам средствами политик безопасности либо/и фаерволом.

Что будет дальше?

Во второй части планирую рассмотреть сертификаты, соединения типа "узел-сеть" и "узел-узел", компрессию трафика, конфигурацию RoadWarrior.

Приложение.

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

Литература.


1. http://www.ipsec-howto.org
2. http://www.ixbt.com/comm/ipsecure.shtml
3. http://www.securitylab.ru/analytics/216242.php
4. http://www.opennet.ru/base/net/vpn_netbsd.txt.html
5. http://www.ciscolab.ru/2007/01/07/chto_takoe_ipsec.html
6. http://www.lacave.net/~fred/racoon/config.html





P.S: Рекомендации приведены в надежде, что они будут полезными, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.

Немає коментарів:

Дописати коментар

Примітка: лише член цього блогу може опублікувати коментар.