Построение VPN с IPSEC.
Метки: IKE | IPsec | VPN
Среда, 4 марта 2009 г.
Просмотров: 3294
VPN - это метод, дающий возможность двум сетям безопасно обмениваться данными друг с другом через третью, небезопасную, сеть. VPN может применяться, как гарантия обмена информацией между двумя частными локальными сетями (в частности, сетями офисов большой компании, которые находятся на больших расстояниях друг от друга).
Так как прокладка выделенной линии - это очень дорогое удовольствие, то для передачи данных используется дешевая и небезопасная среда - Интернет.
VPN снимает проблему перехвата данных, которые посылаются через Интернет, организуя виртуальный защищенный канал между двумя сетями. При этом создается впечатление, как будто эти две сети непосредственно соединены между собой. Здесь Интернет служит в роли большого участка Ethernet-кабеля, по которому пересылаются данные компьютеров этих двух сетей.
На рисунке - VPN, соединяющая две локальные сети. От единого адресного пространства во внутренних сетях лучше отказаться, чтобы не было проблем маршрутизации и конфликтов IP-адресов. Например, сеть А использует сетевой адрес 192.168.0.0, а сеть В - 10.0.9.0.
Безопасное тунеллирование данных (создается виртуальный канал, по которому данные передаются в зашифрованном виде) поддерживает протокол IPsec. Конечными точками туннеля являются граничные маршрутизаторы обеих сетей. Трафик шифруется только при его передаче через Интернет, при передаче информации внутри каждой локальной сети шифрование трафика не производится. Оба маршрутизатора (шлюза) должны поддерживать IPsec.
Реализация.
В Linux-ядрах 2.2 и 2.4 IPsec не включен в состав ядра. Там он настраивается с помощью пакета FreeS/WAN, в составе которого есть пользовательские утилиты и утилиты уровня ядра. В ядре 2.6 IPsec встроен в само ядро и поддерживается им. В нем FreeS/WAN больше не нужен, хотя есть и портированная на ядро 2.6 версия FreeS/WAN.
Реализация IPsec в ядре 2.6 похожа на BSD-реализацию IPsec (например, в FreeBSD или OpenBSD). В качестве пользовательских утилит применяется пакет ipsec-tools.
Установка.
В пакете ipsec-tools (Можно загрузить отсюда: http://sourceforge.net/projects/ipsec-tools/) доступны три программы:
- Libipsec - С-библиотека Ipsec;
- Setkey - применяется для создания и управления SA;
- Raccoon - IKE-демон.
Компиляция и установка этих утилит проходит в стандартной последовательности, используются команды: ./configure; make; make install.
Сертификаты X.509.
Для автоматического обмена ключами и сертифицированной аутентификации с помощью IKE нужно сгенерировать сертификаты Х.509 для каждого узла:
# openssl req -new -nodes -newkey rsa:1024 -sha1 -keyform PEM -keyout komp1.private -outform PEM -out otvet.pem
Generating a 1024 bit RSA private key
..++++++
.++++++
writing new private key to 'komp1.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]:RU
State or Province Name (full name) [Some-State]:none
Locality Name (eg, city) []:Moskow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:test.ru
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:root
Email Address []:root@test.ru
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: secreta
An optional company name []:
Теперь подпишем ключ сами себе:
# openssl x509 -req -in otvet.pem -signkey komp1.private -out komp1.public
Signature ok
subject=/C=RU/ST=none/L=Moskow/O=test.ru/OU=test/CN=root/emailAddress=root@test.ru
Getting Private key
Эти действия нужно проделать для каждого шлюза, которому нужен ключ. Сгенерированные частные и открытые ключи помещаем в каталог, где будет установлен Raccon(например, /usr/local/etc/raccoon/certs). Открытые ключи копируем на другие шлюзы. Например, каталог /usr/local/etc/raccoon/certs на шлюзе komp1 содержит файлы:
- komp1.private;
- komp1.public;
- komp2.public;
На шлюзе komp2 будут такие файлы:
- komp2.private;
- komp2.public;
- komp1.public;
Для всех ключей устанавливаем права доступа 700:
chmod 700 (владелец ключа - root).
Конфигурация Raccon.
Файл конфигурации демона Racoon расположен в каталоге /usr/local/etc/racoon.conf . На шлюзе komp1 добавляем такие строчки в конфигурационный файл:
Path certificate "/usr/local/etc/raccoon/certs";
remote 192.168.0.1 {
exchange_mode main;
my_identifier asnldn;
peers_identifier asnldn;
certificate_type x509 "komp2.public" "komp1.private";
peers_certificate "komp1.public";
proposal {
encryption_algorithm 3des;
hash_algorithm shal;
authentication_method rsasig;
dh_group 2; }
}
На шлюзе komp2 конфигурация следующая:
path certificate "/usr/local/etc/raccoon/certs";
remote 10.0.0.1 {
exchange_mode main;
my_identifier asnldn;
peers_identifier asnldn;
certificate_type x509 "komp1.public" "komp2.private";
peers_certificate "komp2.public";
proposal {
encryption_algorithm 3des;
hash_algorithm shal;
authentication_method rsasig;
dh_group 2; }
}
Политики безопасности.
Теперь нужно установить политики для туннеля. На komp1 создадим и выполним такой сценарий:
#!/sbin/setkey -f
flush;
spdflush;
spdadd 192.168.0.0/24 10.0.0/16 any -P in ipsec esp/tunnel/192.168.0.1-10.0.0.1/require;
spdadd 10.0.0/16 192.168.0.0/24 any -P out ipsec esp/tunnel/10.0.0.1-192.168.0.1/require;
На шлюзе komp2 создадим похожий сценарий и также выполним его:
#!/sbin/setkey -f
flush;
spdflush;
spdadd 10.0.0/16 192.168.0.0/24 any -P in ipsec esp/tunnel/10.0.0.1-192.168.0.1/require;
spdadd 192.168.0.0/24 10.0.0/16 any -P out ipsec esp/tunnel/192.168.0.1-10.0.0.1/require;
Присвоим этим сценариям подходящие имена и пропишем их в сценариях загрузки системы. После запуска этих сценариев на обоих шлюзах между локальными сетями будет создан защищенный канал. Убедиться в этом можно с помощью снифферов пакетов tcpdump или ethereal.