Итак, дорогой друг, сегодня мы с тобой научимся создавать шифрованные соединения между различными сетями на базе OpenVPN. Для начала дуй на http://openvpn.net/ и тащи от туда свеженький исходник (как всегда для гурманов) или бинарник (для любителей Windows). Те, кто не любит особо заморачиваться с компилированием в ручную могут дуть /usr/ports/security/openvpn (FreeBSD ports) и устанавливать из портов. Если ты, как и я, дома работаешь с Windows (он все же удобнее и поиграться можно, когда работа до смерти надоедает ;) ), то советую тебе зайти еще и суда: http://openvpn.net/gui.html - это GUI для виндовой версии, для MacOS там по-моему тоже что-то было. Итак, скачали, поставили под Win, устанавливаем под FreeBSD. Для тех, кто впервые решил собрать что-то ручками, напоминаю традиционные команды.
Если для успешной сборки не хватает каких-нибудь пакетиков, или попробуй указать их через опции в ./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. Я понимаю, что у тебя очумелые ручки, поэтому не забудь сделать копию этого файла, так, на всякий пожарный. ;)
Найди параметр «default_days» и выставь его равным 9125 (это кол-во дней до того, как наши сертификаты перестанут работать). И в самый конец конфига подпиши вот что: [ server ] basicConstraints =CA:FALSE nsCertType =server
После того, как ты создашь сертификаты, эта штука не даст всяким читающим этот журнал парнишкам провести простую «man in the middle» атаку. Если забудешь это прописать настройка «ns-cert-type server» в конфигурационном файле работать не будет.
Еще чуток терпения и ты сделаешь то, чего так долго ждал. ТЫ СДЕЛАЕШЬ ЭТО!
Либо, если ты отважный черт, а значит делаешь все строчка за строчкой сразу на сервере, то используешь sftp клиент и забираешь все с сервака самостоятельно.
Прописываешь правило для 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. Жду отзывов и предложений.