Четверг
02.05.2024
23:24


| RSS
Портал IT - технологий
Главная Дневник
Главная » 2009 » Июль » 7 » Openvpn от хакера
Openvpn от хакера
14:16
Установка OpenVPN

OpenVPN находится в репозитариях практически всех дистрибутивов. Поэтому в большинстве случаев достаточно ввести что-то вроде «sudo apt-get install openvpn» или «yum install openvpn». Впрочем, сборка из исходных текстов также несложна. Если ядро собиралось самостоятельно, следует убедиться, что в системе присутствуют устройства tun/tap:

$ sudo modprobe tun

$ lsmod | grep tun

$ ls /dev/net/tun

Если ответ ничего не содержит, следует пересобрать ядро, активировав следующие пункты:

Device Drivers --->

Network device support --->

[*]Network device support

<M> Universal TUN/TAP device driver support

Теперь скачиваем последнюю версию OpenVPN с сайта проекта и набираем:

$ tar -xzvf openvpn-2.0.9.tar.gz

$ cd openvpn-2.0.9

Когда в системе есть все необходимое, для установки хватает и стандартных «./configure; make; sudo make install». Проблемы обычно возникают в случае отсутствия библиотек lzo или ssl. После установки работу компонентов можно протестировать, введя «make check». Если сообщение о том, что «all 2 test passed», покажется мало информативным, следует провести два доступных теста вручную. Система, построенная на основе OpenVPN, может использовать два вида ключевой информации и, соответственно, два алгоритма шифрования: симметричное со статическим ключом и асимметричное с использованием TLS/SSL-сертификатов и ключей. Посмотреть, какие алгоритмы шифрования доступны, можно с помощью команды:

$ sudo openvpn -–show-ciphers

Проверим работу OpenVPN со статическим ключом:

$ sudo openvpn --genkey --secret /etc/openvpn/static.key

И теперь тестируем:

$ sudo openvpn --test-crypto --secret /etc/openvpn/static.key

Результатом должно быть сообщение о том, что «OpenVPN crypto self-test mode SUCCEEDED». 

Для проверки работы с асимметричными ключами следует воспользоваться готовыми конфигурационными файлами, которые находятся в подкаталоге sample-config-files архива. В разных консолях выполняем следующие команды:

$ sudo openvpn sample-config-files/loopback-server

$ sudo openvpn sample-config-files/loopback-client

Если в ответ мы получаем «VERIFY OK» и происходит обмен зашифрованными пакетами, то можно смело идти дальше. 

Следующим шагом создадим учетную запись, под которой будет работать демон openvpn, понижая свои привилегии после запуска:

$ sudo useradd openvpn

Очень не рекомендую использовать здесь nobody - если несколько серверов работают от имени этого пользователя, он становится не менее всемогущим, чем root.

Создаем каталог, в котором будут храниться настройки и ключи:

$ sudo mkdir /etc/openvpn

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

Создание ключей сервера и клиентов

Как генерировать статический ключ, показано выше («openvpn -–genkey»). В этом случае на сервере и клиентах используется один ключ. Это удобно, но довольно рискованно. Если ключ попадет к злоумышленнику, тот сможет расшифровывать всю информацию, передаваемую по сети.

Сертификаты и ключи для сервера и клиентов необходимы при асимметричном шифровании. Проще и удобнее создавать их не вручную, а с помощью скриптов, находящихся в подкаталоге easy-rsa (к слову, в подкаталоге Windows имеются и bat-файлы). Их здесь несколько:
корневой сертификат (CA - Certificate Authority) – build-ca (для подписи сертификатов сервера и клиентов);
ключ и сертификат сервера – build-key-server;
ключи для клиентов – простые (build-key) и защищенные паролем (build-key-pass);
ключи PKCS (Public Key Cryptography Standards) - build-key-pkcs12 (подойдут для хранения на сменных носителях вроде eToken);
создать ключ и сертификат (простой (build-req) и защищенный паролем (build-req-pass)), если СА не доступен в локальной системе, и подписать их (sign-req).
создать сертификат и ключ, используя СА, - build-inter;
создать ключ Diffie Helman - build-dh (используется при установленном соединении для шифрования трафика);
отозвать сертификат (revoke-crt);
отозвать с созданием списка отозванных сертификатов (Certificate Revocation List - CRL) - revoke-full.

OpenVPN поддерживает двунаправленную аутентификацию, основанную на сертификатах, поэтому клиент должен идентифицировать сертификат сервера, проверяя, подписан ли он с помощью СА, и наоборот. Затем просматривается информация в заголовке сертификата. Это отлично видно в последнем тесте. Итак, вначале следует создать СА, а затем - сертификат и секретный ключ для сервера и всех клиентов.

Создаем каталог /etc/openvpv/keys и копируем в него все из easy-rsa. Чтобы меньше вбивать вручную, сначала стоит заглянуть в скрипт vars и подправить значения параметров KEY_COUNTRY, KEY_PROVINCE, KEY_CITY=BISHKEK, KEY_ORG, KEY_EMAIL. Кроме того, параметр KEY_CONFIG указывает на файл openssl.cnf, находящийся в этом же каталоге. Он аналогичен одноименному файлу, используемому OpenSSL; в него также стоит заглянуть (либо взять готовый вариант в /etc/ssl). Теперь можно сделать все необходимое:

$ cd easy-rsa

$ sudo ./vars

$ sudo ./clean-all

$ sudo ./build-ca

Если файлы vars и openssl.cnf были подправлены, при создании сертификатов в большинстве ответов можно оставлять значения, предлагаемые по умолчанию. Кроме одного. Поле Common Name, в котором указывается имя хоста, обязательно к заполнению в любом случае, причем для сервера и для каждого клиента оно должно быть уникальным. По окончании работы в каталоге появятся два файла: ca.key и ca.crt. Для проверки сертификатов секретный ключ не нужен, он используется только для подписи. Поэтому, учитывая его значимость, файл ca.key лучше спрятать подальше от чужих глаз.

При вызове следующих скриптов в качестве параметра необходимо указывать имя компьютера, для которого создаются ключ и сертификат. Сначала делаем все необходимое для работы сервера:

$ sudo ./build-key-server server

$ sudo ./build-dh

А затем - для клиентов:

$ sudo ./build-key client1

$ sudo ./build-key-pass client2

Для второго клиента был создан ключ, защищенный паролем. На сервере оставляем файлы ca.crt, dh1024.pem, server.srt и server.key. На компьютеры клиентов, помимо сертификата и ключа, переносим и ca.crt.

Создание конфигурационных файлов - сервер

OpenVPN работает по принципу клиент-серверной архитектуры в одном из двух режимов: «точка-точка» или «сервер-клиенты». Количество клиентов во втором случае ограничивается только мощностью компьютера, играющего роль сервера. Причем на одном компьютере возможен одновременный запуск нескольких процессов openvpn, каждый из которых считывает собственный конфигурационный файл и работает в режиме сервера или клиента. Таким образом без проблем создается несколько виртуальных сетей.

Есть несколько вариантов запуска сервера. Например, вызов openvpn из командной строки со всеми параметрами в придачу. Сервер может также запускаться через xinetd. Традиционным считается вариант с использованием конфигурационного файла в /etc/openvpn и стартового скрипта в /etc/init.d. Его и рассмотрим.

Для создания конфигурационного файла сервера воспользуемся имеющимся шаблоном server.conf, который находится в подкаталоге sample-config-file. Все параметры в нем хорошо прокомментированы. Вариантов описания даже одной конфигурации сети может быть несколько, рассмотрим лишь один из них. Копируем файл в /etc/openvpn и приступаем к редактированию:

# vi /etc/openvpn/server.conf 

# Необязательный параметр, указывающий, на каком интерфейсе слушать, без него сервер будет принимать соединения на всех интерфейсах 

# local 195.95.95.95


# Если используется несколько серверов, каждый должен работать на своем порту

# port 1194


# Тип виртуального устройства (tun, tap, null), в некоторых случаях необходимо указывать и его номер

dev tun


# По умолчанию используется протокол UDP, возможные варианты - tcp, udp, tcp-server, tcp-client

# proto tcp-server


# Включаем сжатие

comp-lzo


# Отправка icmp-пакетов, чтобы межсетевые экраны не разорвали соединения при их неактивности 

ping 15


# Для dial-up, NAT, PPP понадобятся следующие параметры:

# ping-restart 45

# ping-timer-rem

# persist-tun

# persist-key


# Вывод отладочных сообщений, максимальное значение «9» стоит устанавливать только при отладке

verb 3


# Назначаем виртуальному интерфейсу следующие IP-адреса: своему - 10.1.0.1, удаленному - 10.1.0.2; используется при соединении «точка-точка»

ifconfig 10.1.0.1 10.1.0.2


# При установленном «mode server» задается пул клиентских адресов

# mode server

# server 10.1.0.0 255.255.255.0


# Скрипт, содержащий сведения о новом маршруте

up ./server.up


# Удаляем маршрут при остановке

down ./server.down


# Добавляем адреса сетей и ресурсов, которые будут доступны клиентам

push "route 192.168.1.0 255.255.255.0"


# Использование SSL/TLS (только для сервера)

tls-server


# Файлы ключей

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/server.crt

key /etc/openvpn/keys/server.key


# Параметры Diffie-Hellman при использовании tls-server

dh /etc/openvpn/keys/dh1024.pem


# Пользователь и группа, от имени которых будет работать программа

user openvpn

group openvpn

Файл server.up содержит информацию о новом маршруте, в простейшем случае запись такая:

route add -net 10.0.1.0 netmask 255.255.255.0 gw 192.168.1.1

Здесь 192.168.1.1 - адрес внутреннего интерфейса сервера OpenVPN.

И server.down:

route del -net 10.0.1.0/24

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

$ sudo openvpn --config /etc/openvpn/server.conf

Теперь подсоединяемся с помощью telnet:

$ telnet localhost 1194

При получении ответа сервера можно продолжать.

Если OpenVPN устанавливался из исходных текстов, необходимо обеспечить его автоматический запуск при загрузке системы и остановку при выключении. Разработчики заранее подготовили несколько скриптов. В подкаталоге gentoo находится готовый файл openvpn.init для одноименного дистрибутива, а в sample-scripts – файл для запуска и остановки OpenVPN в RedHat/Fedora и других chkconfig-based дистрибутивах. Хотя после небольшой доработки их можно использовать и в любом другом дистрибутиве. В общем случае подойдут простые скрипты – openvpn-startup.sh и openvpn-shutdown.sh. Хотя заглянуть внутрь первого также стоит:

# vi openvpn-startup.sh

#!/bin/sh

# Конфигурационный каталог openvpn

dir=/etc/openvpn


# В этом файле есть готовые правила для iptables на все случаи жизни; если ты планируешь его использовать, то самостоятельную загрузку iptables следует отключить

$dir/firewall.sh


# Подгружаем необходимый модуль

modprobe tun


# Включаем IP forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward


# Оставляем одну запись

openvpn --cd $dir --daemon --config server.conf

# openvpn --cd $dir --daemon --config vpn2.conf

# openvpn --cd $dir --daemon --config vpn2.conf

Теперь копируем сценарий в /etc/init.d, делаем его исполняемым и создаем необходимые символические ссылки на уровнях запуска, помня о том, что OpenVPN желательно загружать после того, как будет поднята сеть:

$ chmod +x openvpn-startup.sh

$ sudo cp openvpn-startup.sh /etc/init.d

$ sudo ls –n /etc/init.d/openvpn-startup.sh /etc/rc3.d/S99openvpn-startup

$ sudo ls –n /etc/init.d/openvpn-startup.sh /etc/rc5.d/S99openvpn-startup

$ chmod +x openvpn-shutdown.sh

$ sudo cp openvpn-shutdown.sh /etc/init.d

$ sudo ls –n /etc/init.d/openvpn-shutdown.sh /etc/rc6.d/K80openvpn-shutdown

Настройки iptables

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

# vi server.up

/sbin/iptables -I INPUT -p udp --dport 1194 -j LogAccept

/sbin/iptables -I OUTPUT -p udp --sport 1194 -j LogAccept

/sbin/iptables -I FORWARD -s 10.0.1.0/24 -d 192.168.1.0/24 -j LogAccept

/sbin/iptables -I FORWARD -d 10.0.1.0/24 -s 192.168.1.0/24 -j LogAccept


# vi server.down

/sbin/iptables -D INPUT -p udp --dport 1194 -j LogAccept

/sbin/iptables -D OUTPUT -p udp --sport 1194 -j LogAccept

/sbin/iptables -D FORWARD -s 10.0.1.0/24 -d 192.168.1.0/24 -j LogAccept

/sbin/iptables -D FORWARD -d 10.0.1.0/24 -s 192.168.1.0/24 -j LogAccept

Некоторые варианты настройки iptables можно подсмотреть в файле firewall.sh.

Создание конфигурационных файлов – клиент

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

# vi client.conf

dev tun

# Для клиента обязательно указываем IP-адрес и порт сервера OpenVPN

remote 195.95.95.95 1194

proto udp

comp-lzo

ping 15

verb 3

# Обрати внимание, что по сравнению с сервером IP-адреса проставлены в обратном порядке

ifconfig 10.1.0.2 10.1.0.1

up ./client.up

down ./client.down

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/client1.crt

key /etc/openvpn/keys/client1.key

user openvpn

group openvpn

Клиент и сервер готовы. Можно запускать и пробовать соединение. Команда ifconfig должна показать наличие tun0 на обоих компьютерах. По адресу 10.1.0.2 должен проходить ping. При этом о шифровании будет свидетельствовать то, что захваченный с помощью tcpdump пакет на интерфейсах eth0 и tun0 отличается. Успехов.

Просмотров: 5074 | Добавил: kiberblog | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Меню сайта

Календарь
«  Июль 2009  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта

Мини-чат

Наш опрос
Каким Браузером Вы пользуетесь?
Всего ответов: 66

Статистика
Copyright Kiberblog © 2024