среда, 27 марта 2013 г.

Создание и настройка OpenVPN сервера.

Для начала что мы имеем:
Внешний выделенный сервер (dedicated) работающий под операционной системой Debian Linux, сервер имеет несколько внешних IP адресов.
Клиентский компьютер который будет подключатся, к определенному IP адресу внешнего Linux сервера, после подключения весь интерне трафик будет  тунелироватся через Linux сервер, при чем выход в интернет будет осуществляться под другим IP адресом, подключение к openvpn один ip, выход в интернет другой ip.

Начнем настройку сервера (все команды представлены под операционную систему Debian Linux но скорее всего подойдут и под другой дистрибутив) все команды выполняйте под root:
Установим openvpn
apt-get install openvpn
Установим iptables
apt-get install iptables
Откройте путь /usr/share/doc/openvpn/examples/easy-rsa/2.0
в этой папке нужно отредактировать файл vars
export KEY_DIR=”/etc/openvpn/keys”  здесь нужно прописать путь где будут находится ключи и сертификаты openvpn
создадим каталог для ключей
mkdir /etc/openvpn/keys
создадим каталог для настроек подключающихся клиентов
mkdir /etc/openvpn/ccdперейдем в каталог со скриптами генерации ключей
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Создаем необходимые ключи
./vars
./clean-all
./build-dh
./pkitool –initca
Создаем сертификат сервера, вместо server можете указать любое другое имя
./pkitool –server server
Создаем сертификат клиента, вместо client можете написать любое имя
./pkitool client
openvpn –genkey –secret ta.key
mv ./ta.key /etc/openvpn/keys
Создадим конфигурационный файл для openvpn
touch /etc/openvpn/openvpn.conf
Добавьте в конфигурационный файл параметры, здесь я указываю только необходимый набор параметров их как вы понимаете намного больше:
mode server # указывает программе работать в режиме сервера
tls-server # активирует работу Transport Layer Security (криптографический протокол) сервера
proto tcp-server # выбираем протокол TCP (если необходим UDP, тогда: proto udp)
dev tap # используемый тип интерфейса – L2 туннель (для L3-туннеля: dev tun)
port 1200 # указываем порт, по которому будет работать OpenVPN
daemon # программа будет работать в режиме демона, если нет в этом необходимости – просто раскомментируйте строку
tls-auth /etc/openvpn/keys/ta.key 0 # активирует дополнительный уровень аутентификации
ca /etc/openvpn/keys/ca.crt # путь к корневому сертификату
cert /etc/openvpn/keys/server.crt # путь к сертификату сервера
key /etc/openvpn/keys/server.key # ключ сервера
dh /etc/openvpn/keys/dh1024.pem # файл алгоритма Diffie-Hellman
client-config-dir /etc/openvpn/ccd # путь к каталогу индивидуальных клиентских конфигураций
ifconfig 192.168.10.1 255.255.255.0 # устанавливает виртуальный адрес сервера
ifconfig-pool 192.168.10.2 192.168.10.99 # устанавливает диапазон виртуальных адресов для клиентов
push “route 192.168.10.0 255.255.255.0 192.168.10.1″ # эта команда будет выполняться на клиентских компьютерах, во время инициализации OpenVPN, она будет активировать роутинг так, чтобы клиенты автоматически использовали openvpn-сервер как шлюз для этой подсети
duplicate-cn # включает возможность использования одного ключа несколькими клиентами
verb 3 # указывает уровень отладки
cipher DES-EDE3-CBC # шифрование по алгоритму DES-EDE3-CBC
persist-key # будет загружать ключи в режиме persist, то есть их перезагрузка не потребуется в случае разрыва соединения
log-append /var/log/openvpn.log # путь к файлу лога
persist-tun # активирует работу tun/tap устройств в режиме persist
comp-lzo # активирует использование сжатия
keepalive 10 180  # посылает клиенту ICMP запросы, дабы проверить не отвалился ли он
client-to-client # разрешает клиента обращаться друг к другу, например если вы хотите подключить к openvpn еще несколько компьютеров и получить доступ к ним по сети.
При редактировании конфига будьте предельно внимательны, одна ошибка и ваш сервер не запустится.
Запускаем сервер openvpn
/etc/init.d/openvpn start
Если он у вас уже запущен тогда
/etc/init.d/openvpn restart
Теперь нам нужно настроить клиент на Windows машине и проверить подключение:
Скачайте и установите OpenVPN для Windows ссылка
Далее перейдите в папку с установленным openvpn и откройте папку conf
сюда вам нужно положить 4 файла, которые у вас лежат на сервере в папке /etc/openvpn/keys
это файлы:
ca.crt
client.crt
client.key
ta.key
Теперь тут же в папке conf нужно создать текстовый файл с именем vpn.ovpn ( имя может быть произвольным, главное что бы расширение файлы было ovpn )
Прописываем параметры в наш конфиг:
tls-client # указывает программе работать в режиме клиента
proto tcp-client # активирует протокол TCP
remote 9.9.9.9 # внешний адрес сервера
dev tap # используемый тип интерфейса – L2 туннель
port 1200 # номер openvpn-порта сервера
cd /etc/openvpn # указывает на директорию по-умолчанию
pull # указывает принимать команды от сервера
remote-cert-tls server # необходимый параметр для безопасности
tls-auth /etc/openvpn/keys/ta.key 1 # активирует дополнительный уровень аутентификации
ca /etc/openvpn/keys/ca.crt # путь к корневому сертификату сервера
cert /etc/openvpn/keys/client.crt # путь к сертификату клиента
key /etc/openvpn/keys/client.key # путь к ключу клиента
cipher DES-EDE3-CBC # шифрование по алгоритму DES-EDE3-CBC
log-append /var/log/openvpn.log # путь к файлу лога
comp-lzo # активирует использование сжатия
route-gateway 192.168.10.1  # указываем шлюз для клиента, чтобы завернуть весь трафик на наш сервер
redirect-gateway # приписывает шлюз
dhcp-option DNS 192.168.1.1 # прописываем DNS на наш сервер, на сервере должен стоять BIND или другой демон DNS
route-method exe # параметр который нужен только для Windows, исправляет ситуацию когда не прописывается ROUTE таблица
Сразу хотел бы уточнить 4 последних параметра, можно прописывать для клиентов индивидуально, прямо на сервере, например ваш домашний компьютер будет подключатся к openvpn для того чтобы заворачивать весь трафик через сервер и управлением другими машинами в вашей виртуальной сети, а компьютер на работе будет подключатся к openvpn для того что бы вы могли получить к нему удаленный доступ, но на нем заворачивать трафик через сервер openvpn не трубуется.
Настройка iptables на сервере, для доступа клиента к интернету.
Для начала нужно проверить включена ли пересылка пакетов в ядре Linux.
Введите команду
#more /proc/sys/net/ipv4/ip_forward
если вывод команды 1 – то пересылка в ядре работает если 0 то отключена. Если отключена введите команду для включения
echo 1 > /proc/sys/net/ipv4/ip_forward
учтите что после перезагрузки значение вернется в исходное состояние, для постоянного включения форвардинга в ядре, измените значение в файле /etc/sysctl.conf
выставте значение:
net.ipv4.ip_forward=1
Теперь нужно создать правило iptables что бы Linux сервер делал преобразование адресов для клиента:
Так как, iptables в Debian Linux не стартует автоматически, нужно создать скрипт при запуске сети который и будет прописывать нужное правило.
В каталоге /etc/network/if-up.d создайте файл iptables
#touch iptables
задайте на этот файл разрешение на запуск
#chmod +x iptables
Пропишите в файле iptables указание на командный интерпретатор
#!/bin/sh
Ниже пропишите команду iptables
iptables -t nat -A POSTROUTING -o eth+ -s client_ip -j SNAT –to-source server_ip
разберем команду повнимательней
-t nat # указываем что работаем с таблицей nat
-A POSTROUTING # добавляем правило в цепочку POSTROUTING
-o eth+ # правило работает на сетевых интерфейсах eth ( это eth0 eth1 и т.д. )
-s client_ip # сетевой адрес с которого пришел пакет, в нашем случае это будет внутренний адрес 192.168.10.2 который нам выдал openvpn в виртуальной сети или другой выданный DHCP
-j SNAT # заменяет ip адрес отправителя
–to-source server_ip # ip адрес на который заменяем, в данном случае нужно указать внешний ip адрес сервера, с которого наш подключенный через openvpn компьютер будет выходить в интернет, укажите ip адрес не тот что был указан в конфиге opnvpn сервера, для того что бы подключение к openpvn и выход в интернет были под разными ip адресами.
Теперь после загрузки сервера, наше правило будет действовать и предоставлять компьютеру подключающемуся через openvpn доступ в интернет.
Если вам нужно выходить в интернет с нескольких компьютеров подключеных к openvpn вам нужно правило изменить таким образом:
iptables -t nat -A POSTROUTING -o eth+ -s 192.168.10.0/24 -j SNAT –to-source server_ip
Этим правилом мы указываем что вся под сеть 192.168.10.0 будет выходить в интернет.
Linux клиент openvpn настраивается аналогичным образом.
В итоге, что мы имеем и зачем это нужно:
Вы подключаясь к openvpn получаете прямой шифрованный канал до своего сервера, а так же доступ к остальным компьютерам подключенным к этому openvpn серверу (вы можете настроить доступ к компьютерам не имеющим внешнего ip адреса, в принципе что вам предоставляют платные продукты TeamViewer, Logmein), выходите в интернет через один и тот же ip адрес, отличающийся от вашего адреса выданым вашим провайдером, можете перебрасывать порты к себе с этого внешнего ip адреса.
Для чего это все нужно:
Конечно же для безопасности – думаю не секрет что все ваши пароли, переписки, сообщения, да всю вашу активность в интернете могут снифирить местные провайдеры.
Подключаясь к клиент банкам и т.п. платежным сервисам, вы всегда будете знать что вы выходите под одним ip адресом.
Доступ к заблокированным ресурсам – местные провайдеры не могут блокировать вам сайты или сервисы, т.к для них у вас лишь одно шифрованное соединение до вашего сервера, который находится скорее всего за границей.
Организация безопасного удаленного доступа как к своему компьютеру, так и к другим компьютерам которые вы подключили к своей виртуальной шифрованной сети.

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

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