Спойлер

вторник, 19 мая 2015 г.

OpenVPN в Centos 6 (+ установка доп. репозитариев)

Если OpenVPN из пакетов по умолчанию не устанавливается, то нужно подключить доп. репозитарий по инструкции ниже:






Установка доп. репозитариев :

Стандартные репозитории CentOS (и, соответственно, Red Hat Enterprise Linux) содержат достаточно ограниченное количество пакетов, среди которых, как ни странно, много популярных, а также часто нет самых новых версий. Для того, чтобы устранить эти недостатки можно подключить дополнительные (неофициальные) репозитории CentOS - EPEL, RPMForge и Remi.

Репозиторий EPEL (Extra Packages for Enterprise Linux) - поддерживается в рамках проекта Fedora и содержит некоторые пакеты, которые не вошли в стандартный набор RHEL (CentOS).
RPMforge (теперь называется RepoForge) является результатом сотрудничества создателей пакетов. Он содержит более 4000 пакетов для CentOS. При этом RepoForge не является частью Red Hat или CentOS, но предназначен для работы с этими (и некоторыми другими) дистрибутивами.


Создатели репозитория Remi пишут, что основной задачей Remi является предоставление самых последних версий пакетов для rpm-based дистрибутивов, в том числе CentOS, RHEL, Fedora и др. Особенно важным это является в том случае если вы используете не самую последнюю версию дистрибутива и выпуск новых пакетов в официальных репозиториях уже прекращен.
В первую очередь желательно проверить какие репозитории уже подключены в вашей системе:
yum repolist
Результатом будет вывод:
repo id                          repo name                                  status
base                             CentOS-6 - Base                            4 776
extras                           CentOS-6 - Extras                             17
updates                        CentOS-6 - Updates                           851

Установка репозитория EPEL в CentOS 6:
Часто рекомендуется перед подключением этого репозитория скачать выполнить импорт GPG ключа. Но, по большому счету скачивать, и отдельно устанавливать GPG ключ не требуется, т.к. он включен в пакет, размещается в каталоге /etc/pki/rpm-gpg/ и после установки и вам будет предложено его импортировать при первой установке пакета из репозитория EPEL.
Однако, если вы все же хотите импортировать GPG ключ перед подключением репозитория EPEL к CentOS, выполните команду:
rpm --import https://fedoraproject.org/static/0608B895.txt
Проверьте корректность импорта:
# rpm -qa gpg*
gpg-pubkey-0608b895-4bd22942
Для установки репозитория EPEL выполните команду:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
Если команда выдает ошибку, то значит уже выпущена новая версия пакета. Перейдите по ссылке http://download.fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html и подставьте номер новой версии в ссылку или скачайте и установите из локальной папки.

Установка репозитория RepoForge (бывш. RPMForge) в CentOS 6:
Ситуация с GPG ключом здесь точно такая же, как в EPEL.
Для установки GPG ключа перед подключением репозитория выполните:
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
Проверьте корректность импорта:
# rpm -qa gpg*
gpg-pubkey-c105b9de-4e0fd3a3
Для подключения репозитория в 32-битной системе выполните следующую команду:
rpm -Uhv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
А для 64-битной системы эту:
rpm -Uhv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
В том случае, если команда завершилась с ошибкой, возможно, что ссылки на пакеты устарели, тогда используйте ссылки, указанные здесь: http://repoforge.org/use/

Установка репозитория REMI в CentOS 6:
Для установки GPG ключа перед подключением репозитория выполните:
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
gpg-pubkey-00f97f56-467e318a
Для подключения репозитория:
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Репозиторий REMI устанавливается отключенным. Для подключения в файле /etc/yum.repos.d/remi.repo  необходимо поменять значение переменной enabled в секции [remi] c 0 на 1. На примере редактора vi:
Выполните
vi /etc/yum.repos.d/remi.repo
Нажмите Insert для перехода в режим ввода.
Поменяйте значение переменной enabled в секции [remi] с 0 на 1
Нажмите Esc для перехода в режим команд
Для сохранения и выхода введите:
:wq

На этом подключение дополнительных репозиториев в CentOS 6 можно считать завершенным.

Однако, дополнительно рекомендуется установить и настроить плагин yum: yum-priorities. Применение данного плагина обусловлено тем, что в подключенных дополнительных репозиториях могут содержаться пакеты обновляющие такие из официальных репозиториев, что часто может вызвать проблемы, к примеру несовместимость версии php и вашей CMS. Плагин  yum-priorities применяется для упорядочивания приоритетов репозиториев. Пакеты из репозиторя с более низким приоритетом не будут обновлять пакеты, установленные из репозиториев, имеющих более высокий приоритет. Также приоритеты используются и при установке новых пакетов - в том случае, если пакет находится в двух или более репозиториях, он будет установлен из того репозитория, который имеет наивысший приоритет.
Для установки плагина  yum-priorities выполните:
yum install -y yum-priorities
После установки плагина добавьте строку priority=10 в первую секцию каждого файла:
/etc/yum.repos.d/epel.repo
/etc/yum.repos.d/rpmforge.repo
/etc/yum.repos.d/remi.repo
Проверьте список подключенных репозиториев:
# yum repolist
repo id             repo name                                                     status
base                 CentOS-6 - Base                                             4 710+66
epel                 Extra Packages for Enterprise Linux 6 - i386        6 887
extras               CentOS-6 - Extras                                           10+7
rpmforge          RHEL 6 - RPMforge.net - dag                             4 512+1
updates            CentOS-6 - Updates                                         850+1
После подключения всех репозиториев желательно выполнить обновление, т.к. возможно, обновились сами пакеты, содержащие файлы конфигураций репозиториев:
yum -y update


После установки репозитария ставим пакет openvpn:

yum install openvpn

После чего будет создана пустая папка /etc/openvpn/


Далее устанавливаем управляющие скрипты для удобства работы с openvpn:

yum install easy-rsa

и далее содержимое каталога easy-rsa копируем в папку openvpn (c точки зрения секьюрности не очень хорошо, но для упрощения генерации ключей и удобства обучения можно :) )
cp -a /usr/share/easy-rsa/2.0/ /etc/openvpn/

Переименуем папку 2.0/ в easy-rsa/
mv 2.0/ easy-rsa

Далее переходим в папку easy-rsa и редактируем файл vars
cd easy-rsa
mcedit (ee или vi) vars

параметр export KEY_SIZE для быстрой работы 1024, либо 4096 если для корневого сертификата
Срок действия сертификатов (CA_EXPIRE и KEY_EXPIRE) для обычных сертификатов хватит одного года, для корневых лучше поставить побольше, например, 10 лет (3650)

export CA_EXPIRE = 3650
export KEY_EXPIRE = 365

Также не забыть разкомментировать и, при необходимости,  поменять параметр

export KEY_CN

Теперь, чтобы все переменные загрузились в рабочее окружение, выполнить команды

source ./vars
./clean-all
./build-ca


На этом установка и настройка OpenVPN закончена.
-------------------------------------------------------------------------------------
Генерируем сертификат для серверной части

Далее генерируем ключи для серверной части

 ./build-key-server server
 ( последнее -  указываем имя сервера, в данном случае server)

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

После чего инсталлятор предложит подписать новый сертификат (соглашаемся)
После чего база ключей (index.txt) будет обновлена, где появится запись о свежевыданном ключе (буква "V" в начале строки говорит о его валидности), а также его номер порядковый (01) и какой сущности выдан сертификат, далее его реквизиты, Обращаем внимание на CN=server (желательно (но не обязательно), чтобы этот параметр совпадал с именем хоста)

Создаем DH ключ Diffie-Hellmana (нужен только серверу):
./build-dh

 -------------------------------------------------------------------------------------
Генерируем сертификат для клиентской части

./vars (чтобы переменные окружения скопировались из этого файла)
./build-key client1

  -------------------------------------------------------------------------------------
 Конфигурируем Openvpn на сервере

в папке /etc/openvpn/ создаем файл openvpn-server.conf (при загрузке системы автоматически поднимаются все VPN соединения, для которых в папке /etc/openvpn есть соответствующие файлы с расширением .conf)
 и прописываем след. настройки:

local 192.168.10.2

port 1194  (можно поставить не дефолтный)

proto udp - будем использовать UDP, так как он экономичнее по трафику, вы можете также указать "tcp";

dev tun - использовать управляемый IP-туннель, также возможно использовать "tap" (ethernet tunnel);

ca "/etc/openvpn-crypto/ca.crt"
cert "/etc/openvpn/crypto/server.crt"
key "/etc/openvpn/crypto/server.key"
dh "/etc/openvpn/crypro/dh.param"

user openvpn
group openvpn

server 192.168.144.0 255.255.255.0  (указываем подсеть для впна желательно из середины пула, чтобы случайно не пересечься с какими-либо другими)

ifconfig-pool-persist "/etc/openvpn/ipp.txt"  - файл, в котором будут храниться связи "профиль клиента, выделенный ip-адрес", и после переподключения будет выдан снова прежний адрес;

client-config-dir "/etc/openvpn/ccd"
push "dhcp-option DNS 8.8.8.8"
push "route 192.168.10.2 255.255.255.0"

push "redirect-gateway" - при успешном подключении к серверу, клиенту будет установлен новый default-gateway от vpn-сервера (см. netstat -r после соединения), таким образом весь трафик пойдет через vpn-сервер;

push  "route 10.0.3.0 255.255.255.0" - добавляем правило маршрутизации для клиента для другого сетевого интерфейса

persist-key - при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно перечитывать сертификаты, так как у сервера не хватит привелегий (См. предыдущий пункт, "nobody:nogroup") на эти действия;

persist-tun - при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно пересоздавать tun/tap устройства;

client-to-client - разрешаем клиентам видеть друг-друга в сети;

client-config-dir ccd - каталог с кастомными настройками для клиента (создайте файл "ccd/<someclient>" для того чтобы указывать кастомные настройки для профиля someclient);

status "/var/log/openvpn/status.log"
log-append "/var/log/openvpn/openvpn.log"

verb 4 (степень детализации логов от 0- минимальный до 9 - максимальный, рекомендуемо 3б4)

После создаем папки /etc/openvpn/ccd и /var/log/openvpn c правами openvpn
 -------------------------------------------------------------------------------------
 Конфигурируем Openvpn на клиенте

делаем примерно все то же самое:

в папке /etc/openvpn/ создаем папку crypto для хранения ключей

mkdir /etc/crypto

redirect-gateway def1 - режим, который разрешает смену default-gateway, а после остановки vpn-соединения возвращает gateway вашего провайдера;

resolv-retry infinite - ресолвим vpn-сервер до бесконечности, полезно после потери соединения и подключения снова (например после suspend в ноутбуках);

persist-key - при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно перечитывать сертификаты, так как у клиента не хватит привелегий (См. предыдущий пункт, "nobody:nogroup") на эти действия;

persist-tun - при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно пересоздавать tun/tap устройства;

Папку для логов

mkdir /var/log/openvpn
chown openvpn:openvpn /var/log/openvpn



 -------------------------------------------------------------------------------------
Передаем секретные ключи с сервера на клиент.
В идеале это нужно делать через шифрованное подключение (ssh, sftp), но если сеть доверенная и нужно сделать быстро, то можно сделать след. образом.

Перейти в директорию со всеми сгенерированными ключами /etc/openvpn/easy-rsa/keys
и выполнить там команду:
python -m SimpleHTTPServer  (по умолчанию идет 8000 порт, корневая директория - где была вполнена команда)

Теперь на стороне клиента запускаем браузер elinks с параметрами сервера 192.168.10.1:8000 после чего увидим список ключей, находящихся на сервере, качаем нужные (client-1.crt  client-1.key  dh4096.pem)
Таким же образом передаем файл openvpn-server.conf и для удобства переименуем его в openvpn-client.conf

В нем пишем следующее:
1. вместо local192.168.10.2 пишем client
2. Вместо port 1194 пишем remote 192.168.10.2 1194 (т.к. слушать порт больше не нужно, а просто указать к какому серверу и порту подключаться)
3. Меняем пути к клиентским ключам
4. Затираем все серверные директивы (server 192.168.144.0  ifconfig-pool-persistent  client-config-dir  и push
5. Все параметры логов оставляем (status log-append и  verb)

 -------------------------------------------------------------------------------------
После запуска openvpn в списке сетевых интерфейсов появится еще один tun0 с адресом из подсети 192.168.144.x

Также можно проверить маршрутизацию и доступность адресов командой
ip r s

Комментариев нет:

Отправить комментарий