Итак, дорогой друг, сегодня мы с тобой научимся создавать шифрованные соединения между различными сетями на базе OpenVPN. Для начала дуй на
http://openvpn.net/ и тащи от туда свеженький исходник (как всегда для гурманов) или бинарник (для любителей Windows). Те, кто не любит особо заморачиваться с компилированием в ручную могут дуть /usr/ports/security/openvpn (FreeBSD ports) и устанавливать из портов.
Если ты, как и я, дома работаешь с Windows (он все же удобнее и поиграться можно, когда работа до смерти надоедает 😉 ), то советую тебе зайти еще и суда:
http://openvpn.net/gui.html
- это GUI для виндовой версии, для MacOS там по-моему тоже что-то было. Итак, скачали, поставили под Win, устанавливаем под FreeBSD. Для тех, кто впервые решил собрать что-то ручками, напоминаю традиционные команды. 

#tar –zxvf openvpn-2.0_rc21.tar.gz
#cd openvpn-2.0_rc21
#./configure
#make
#make install
#make clean

Если для успешной сборки не хватает каких-нибудь пакетиков, или попробуй указать их через опции в ./configure. Для удобной работы с конфигуратором, я обычно использую либо два терминала либо две сессии Putty. На одном запускаю:

#./configure –help | less

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

Модификация BSD

Для того чтобы все заработало, необходимо пересобрать ядро со следующими опциями:

options IPSEC
options IPSEC_ESP

Редактим конфиг

Для работы серверной части нам понадобится совсем не много. Если хочешь почитать дополнительную инфу: 

#man openvpn

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

#vi /usr/local/etc/openvpn/office.conf

Прописываем туда следующее:

daemon openvpn # просим наш openvpn сервер стать демоном, советую вставить эту #строчку только после того как все заработает.

dev tun # используем этот интерфейс

server 10.1.0.0 255.255.255.0 #укажем ip сервера в vpn сети

push "route 10.1.0.0 255.255.255.0" #– эта штука добавит маршрут vpn сети
push "route 194.1.1.0 255.255.255.0" #– эта добавит клиентам маршут сетки за vpn сервером 
push "route 192.168.0.0 255.255.255.0" #- это маршрут до твоей домашней сети

client-to-client #закомментируй это, если не хочешь, чтобы vpn клиенты видели друг друга

tls-server #указываем, что это серверная конфигурация

dh /etc/ssl/dh2048.pem # это сертификат для шифровки установки соединения
ca /etc/ssl/CA_cert.pem # Это серверные сертификаты
cert /etc/ssl/certs/Cserv.pem #
key /etc/ssl/keys/Kserv.pem #

proto tcp-server #Скажем серверу работать по TCP протоколу
port 5000 # На порту 5000

user nobody #Пользователь, из-под которого стартует vpn сервер (не ставь root!)
group nobody #Ну а это группа

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

persist-tun #Использование тех же интерфейса и ключа при рестарте сервера
persist-key

tls-auth /etc/ssl/ta.key 0 # Защита от DOS атак
keepalive 10 120 # Время жизни неактивной сессии

verb 4 # Количество отладочной информации (от 0 до 9)

Так, все. С сервером закончили. Переходим к клиенту. Про ключи и сертификаты не волнуйся, создадим их попозже.

Windows OpenVPN client

Знаешь, этой штукой можно пользоваться даже на dialup-ом соединении, что для меня не маловажно! Скинул ключи да установщик на Flash-ку и не беспокойся больше, даже если ты в гостях у друга пьешь пиво и ешь мясо, а тут начальник позвонит и начнет ругаться, что у них что-то не работает, поднимаешь клиента у друга, только не догадайся копировать ключи ему на жестак. Конфиг скопируй, а пути поменяй до клиентских ключей на флешке, вот. Ах, да… Поехали дальше.

Жмешь ПУСК-Программы-OpenVPN… Входи в папку с конфигурационными файлами. Создай home.ovpn и напиши или скопируй туда этот конфиг:

dev tun

client #Говорим, чтобы клиент забирал информацию о маршрутизации с сервера (вспомни # push опции)

remote ip-a #Вместо ip-a впиши реальный ip своего видимого в интернете сервера

tls-client # Это клиентская конфигурация

ns-cert-type server #Это еще одна защита, на этот раз от «man in the middle» атаки.

ca "H:\\config openVPN\\CA_cert.pem" # Это как раз пути ключей (Они у меня на флешке)

cert "H:\\config openVPN\\chome.pem"

key "H:\\config openVPN\\khome.pem"

tls-auth "H:\\config openVPN\\ta.key" 1 #Защита от DOS. Здесь в отличии от сервера стоит #единичка. Не перепутай, Кутузов! 😉

proto tcp-client #Клиент работает по TCP
port 5000 #Соединяется с 5000 портом

comp-lzo # Это ты уже знаешь

tun-mtu 1500 #Просто скопируй, если не знаешь сетей, я не смогу рассказать об этом в #двух строчках
tun-mtu-extra 32
mssfix 1450

verb 4

Так, конфиг готов. Перейдем к более интересному занятию, генерации ключей и сертификатов.

OpenSSL рулит

Топай в /etc/ssl. Там создай 2 файла: index.txt и serial. Теперь запишем кое-что в serial:

#cd /etc/ssl
#touch index.txt
#touch serial
#echo “01” > ./serial

Теперь, создадим пару папок:

#mkdir certs
#mkdir keys
#mkdir crl

А теперь, немножко позаботимся о безопасности и изменим свой openssl.cnf. Я понимаю, что у тебя очумелые ручки, поэтому не забудь сделать копию этого файла, так, на всякий пожарный. 😉

#cp ./openssl.cnf ./ openssl.cnf.backup
#vi openssl.cnf

Найди параметр «default_days» и выставь его равным 9125 (это кол-во дней до того, как наши сертификаты перестанут работать). И в самый конец конфига подпиши вот что:
[ server ]
basicConstraints =CA:FALSE
nsCertType =server

После того, как ты создашь сертификаты, эта штука не даст всяким читающим этот журнал парнишкам провести простую «man in the middle» атаку. Если забудешь это прописать настройка «ns-cert-type server» в конфигурационном файле работать не будет.

Еще чуток терпения и ты сделаешь то, чего так долго ждал. ТЫ СДЕЛАЕШЬ ЭТО!

Вернемся на пути истинные:

#openssl req –new –x509 –keyout private/CA_key.pem –out CA_cert.pem

Введи пароль и не забудь его.

#openssl req –new –nodes –keyout keys/Kserv.pem –out req/Rserv.pem

Для этой строки важно, чтобы параметр Organization Name совпадал с тем, что ты указал при генерации CA_cert.pem.

#openssl ca -extfile /etc/ssl/openssl.cnf –extensions server –out certs/Cserv.pem –infiles req/Rserv.pem

Тебя зададут пару вопросов, на которые не думая долго отвечай «y».
Это было для сервера. Теперь повторим все то же самое, но для клиента.

#openssl req –new –keyout keys/Khome.pem –out req/Rhome.pem
#openssl ca –out certs/Chome.pem –infiles req/Rhome.pem

Не забудем про ta.key:

#openvpn --genkey --secret ta.key

Так, и на последок создаем Diffie-Hellman (фиг знает как это по-русски написать) файл

#openssl dhparam –out dh2048.pem 2048

Получив сообщение о его долгом создании, идем пить пиво (у меня и правда почти 20 минут создавался).

Забираем наши сертификаты

Все, принимай мои поздравления, ты все сделал! Теперь осталось только забрать с собой:
- CA_cert.pem
- Chome.pem
- Khome.pem
- ta.key

Для этого либо копируем на дискетку:

#mkdir /mnt/floppy
#mount -t msdos /dev/fd0a /mnt/floppy
# cp /etc/ssl/certs/Cnode.pem /mnt/floppy
#cp /etc/ssl/keys/Knode.pem /mnt/floppy
#cp /etc/ssl/CA_cert.pem /mnt/floppy
#cp etc/ssl/ta.key /mnt/floppy
#umount –f /dev/fd0a

Либо, если ты отважный черт, а значит делаешь все строчка за строчкой сразу на сервере, то используешь sftp клиент и забираешь все с сервака самостоятельно.

Ракета пошла

Теперь запускаешь OpenVPN сервер:

#openvpn –config /usr/local/etc/openvpn/office.conf

Автозагрузка

Создай небольшой openvpn.sh в /usr/local/etc/rc.d для автоматического запуска при перезагрузках:

#!/bin/sh

case "$1" in
start)
echo -n "OpenVPN2 Starting... "
/usr/local/sbin/openvpn || exit 1
;;
stop)
echo -n "Shutting down OpenVPN2... "
/usr/bin/killall openvpn &>/dev/null || exit 1
;;
reload|restart)
$0 stop && sleep 1 && $0 start || exit 1
;;
*)
echo "Usage: $0 {start|stop|reload|restart}"
exit 1
esac

exit 0

Фаервол

Прописываешь правило для ipfw, чтобы разрешить коннекты на наш с тобой демон:

#ipfw –q add pass tcp from any to me 5000
#ipfw –q add pass tcp from any to any via tun0

Так же можешь добавить это к своему фаервол скрипту.

Последний штрих

Для коннекта с Windows-клиента используешь GUI, как прописать его в автозагрузку для удобства, думаю, и сам разберешься.

Подведем итоги

Итак, ты только что настроил соединение между сервером-маршрутизатором, защищающим твою сетку где-то там и своей домашней сетью. Это великий шаг. Ты на еще один левел поднял свое искусство администрирования. Еще раз не поскуплюсь и поздравлю тебя. Знаешь, есть умные люди, которые не советуют таким образом создавать соединения между сетями. Мы добавили с тобой правило только позволяющее подключаться к твоему серверу и беспрепятственно бегать между двумя сетями. Если ты решишь увеличить число клиентов OpenVPN сервера, тебе придется дополнительно настроить и фаерволинг с безопастность, а чем больше интерфейсов на маршрутизаторе, тем сложнее за этим следить. Кроме того, ты только что выполнил расширение адресного пространства своих сетей. Этого как раз и не любят эти грамотные в вопросах безопасности дяди. Ну да ладно, это уже философские байки, раз хочешь, пользуйся. И напоследок, отправляю тебя на
http://openvpn.net/, там много документации, с которой я бы на твоем месте ознакомился. Ну все, мне пора. Если что, адрес все тот же:
solaris@vconsultant.ru. Жду отзывов и предложений.

Теги:

Check Also

Фундаментальные основы хакерства. Мастер-класс по анализу исполняемых файлов в IDA Pro

В этой статье мы окунемся в глубокий и подробный статический анализ с помощью IDA Pro — св…

Оставить мнение