Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Трюки с phpinfo Трюки с phpinfo
Совсем недавно в паблике появилась информация о новом интересном подходе к эксплуатации уязвимостей класса LFI с помощью бесполезной на первый взгляд функции phpinfo() и временных загрузочных файлов. Берем на вооружение этот полезный прием....
Интервью с создателем NGINX Игорем Сысоевым Интервью с создателем NGINX Игорем Сысоевым
Легкий веб-сервер NGINX буквально только что вышел на 2 место по популярности в интернете. А незадолго до этого создатель NGINX привлек 3 млн. долларов инвестиций и основал одноименную компанию. В общем, поводов для общения с Игорем Сысоевым у нас была масса....

Расширяем сети или OpenVPN для смертных

Bookmark and Share

Итак, дорогой друг, сегодня мы с тобой научимся создавать шифрованные соединения между различными сетями на базе 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. Жду отзывов и предложений.





СЛЕДУЮЩИЕ СТАТЬИ
IPv6: время действовать
Виртуальный хотспот: делимся инетом, поднимаем Rogue AP, расширяем диапазон действия Wi-Fi
Поднимаем BitTorrent трекер
Оверклокинг спутника
SSH-туннелинг как замена VPN
ПРЕДЫДУЩИЕ СТАТЬИ
IPv6: новый взгляд, новые возможности
GPRS в Linux через IrDA
GPRS в Linux
SP2 для XP: больше, чем сервис пак
Домен через SAMBA №2
Домен через SAMBA №1
Сетевые возможности QNX №2
Сетевые возможности QNX №1
Паразитные расчеты: тебя уже используют
Добыватель SMB паролей: теория
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
28.03.2008 14:26:23
Ответить Ссылка
Советую автору сначала почитать мануал о чем пишешь, а потом воят.Причем здесь IPSEC в BSD?
UserГость
29.05.2009 19:47:08
Ответить Ссылка
а мне больше интересен вопрос защиты ключей на клиентской машине, а то получается если троян залезен ключи утянет, то ппц. Не паролей ниче не надо...
UserГость
21.10.2009 14:15:20
Ответить Ссылка
про BSD и IPSEC вообще 5, автор не знает матчасть
UserГость
09.12.2011 19:47:27
Ответить Ссылка
нифига не понял воще, можно по простому, или с готовыми настройками выложить прогу




Keywords: zPOSTz zOSz, zNETz, zINFOz z26339z
Для Авторов: edit Lock delete Lock



    Rambler's Top100