Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе

Последнее на Форуме

Контакты

Связь с Администрацией

hpcteam1[@]gmail.com

Статьи rss

[ Добавить Статью на сайт ]

Статьи / Операционные системы / *nix

Базовые приемы скрытия айпи и шифрования трафика: SSH-туннель и VPN

Вот, решил опубликовать некоторые свои заметки, исследования на данную тему. Конечно, в интернете информации по данной теме много, но эта статья является некой попыткой "причесать" конкретно то, что нас интересует.

Наверняка все вы видели впн-сервисы. А как насчет поднять что-то свое? В данной статье мы будем использовать операционную систему FreeBSD. Описывать процесс настройки я буду с нуля, и постараюсь довольно подробно все расписать. Все действия проводились на тестовой впске. Например здесь http://nqhost.com/freebsd-vps.html за 7 долларов в месяц можно заказать впс, мощности которой нам должно хватить, а стоимость подписки на single vpn в среднем стоит где-то 30 баксов. Будем брать впс в Германии. Кстати, в ЮСА в случае если брать довольно солидные тарифы в суппорте обещают 100mbit dedicated, правда они говорят что с торрентами там строго. А вот в случае с Германией они огласили скорости около 40мбит в сек., что тоже в общем то неплохо.

Настройка клиента будет описываться на примере FreeBSD и Windows XP.

Установка ОС


Если заказывать впс на ресурсе, который я указал выше, там необходимо вначале поставить ось. Это делается сравнительно легко, и сейчас я опишу, как по быструшке делал я. Извиняюсь так сказать за тофталогию, да, описаний процесса установки данной оси просто море, просто я хочу описать настройку сервера от А до Я.

Итак, после того как мы оплатим впс и нам придут данные, идем в панель https://vpsman.nqhost.com/ выбираем нашу впску. И лучше сразу жестко пропишите загрузку только с CDROM (вкладка Settings -> CDROM Only), потому что у меня с первой попытки проинсталить ОС не удалось, вместо процесса установки посыпались сообщения об ошибках, и пришлось ставить еще раз. Со второго раза все заинсталилось как надо.

Далее коннектимся к серверу с помощью VNC. В вашем браузере, кстати, должен быть установлен ява. У нас запустится консоль.

В первом окне можно выбрать United States, во втором выбираем Standard, далее жмем ок, переходим в меню разметки. Нажимаем "a", то есть будем использовать весь диск, далее нажимаем "q" (выход). Если у вас, кстати, данные клавиши не работают, проверьте раскладку клавиатуры, она должна быть en. В следующем окне выбираем Standard. Далее после нажатия принятия "ок" нам необходимо разобраться с разделами. Оперативки у нас имеется 128MB, ну не будем мелочиться сделаем swap 300MB (хотя в теории можно поставить гораздо меньше, хотите можете указать 128). Нажимаем "c" и в появившемся окошке вводим "300M". Если захотите нажать "Cancel", воспользуйтесь клавишей Tab. Далее выбираем "Swap". Ну а потом еще раз нажимаем "c", далее оставляем циферки в поле как есть, и затем выбираем "FS" и в поле вводим "/". Все готово, нажимаем "q". На всякий случай привожу скрин, какая должна получиться картина:



В следующем меню выбираем "Custom" далее ставим галочки слева от base и kernels (в появившемся подменю выбираем GENERIC, там собственно больше выбирать нечего, далее Exit). Далее выбираем Exit, затем CD/DVD и смело ждем "ок". Ну а далее выбираем Exit, и потом снова Exit. Потом выбираем источник установки, в нашем случае это уже подмонтированный диск, так что выбираем CD/DVD. Ну и далее смело жмем "ок". Пошел процесс установки...

После того как все успешно установится необходимо будет еще кое-что настроить. На предложение "Would you like to configure any Ethernet network devices?" ждем "ок" выбираем re0 далее отказываемся от IPv6 и соглашаемся на DHCP. В появившемся окне в поле Host вписываем имя хоста, который можно найти в панели (vdsтут_номер.nqhost.com). Domain пропишется сам (nqhost.com). Оставляем все остальное как есть и жмем "ок". На предложение "Do you want this machine to function as a network gateway?" ждем "no", так же отказываемся от "Do you want to configure inetd...". А вот на предложение "Would you like to enable SSH login" соглашаемся. Далее отказываемся от всех предложений, которые следуют до окна User Confirmation Requested:



Жмем "ок", далее выбираем "User", и заполняем поля по следующему шаблону:



Участие в wheel позволит нам повышать права до рута в будущем...

Далее выбираем Exit. Ставим пароль рута, и на предложение настроить еще какие-либо опции отказываемся. Далее мы попадем в первоначальное окно sysinstall. Ждем Exit Install и соглашаемся на ребут. Окно VNC можно закрывать.
Идем в панель и настраиваем загрузку с жесткого диска (Hard Disk Only). Нажимаем на кнопку "Reboot" в панеле.

Мои поздравления, ОС установлена. Но не расслабляйтесь, чем быстрее мы нормально настроим ssh, тем лучше. Если вы будете заказывать впс у другого хостера, и вам необходимо будет самим инсталлировать ос, он должен будет сообщить вам как настроить сеть.

Базовые приготовления


Итак, заходим на сервер по ssh. Если вы заходите не с никсов, то putty вам в руки. Можете еще использовать sftp клиент. Под windows неплохой WinSCP.

Логин по руту по дефолту отключен, поэтому заходим пользователем, которого мы создали. Вводим su - и затем пароль рута. Итак, что мы имеем на данный момент:

# pkg_info
pkg_info: no packages installed

Ну что ж, впереди еще много интересного. Для начала нам необходимо обновить порты.

UPD

Способ, описанный ниже оставлен только для истории, а вы юзайте portsnap. http://www.freebsd.org/doc/ru/books/handbook/portsnap.html
То есть выполняете сначала команду portsnap fetch и затем portsnap extract.

Про CVSup можете почитать здесь http://www.freebsd.org/doc/ru/books/handbook/cvsup.html. Ставим порт net/cvsup-without-gui:

# cd /usr/ports/net/cvsup-without-gui
# make install clean
# rehash

Впс за 7 баксов особой скоростью мягко говоря не отличается...

Создаем base каталог:

# mkdir /var/db/base

Теперь создаем supfile следующего содержания для обновления портов:

*default host=cvsup.de.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix

ports-all

Если захотите включить gzip сжатие, добавьте строчку *default compress перед ports-all. Сохраняем файл как /root/ports_update

# touch /root/ports_update

Можете каждую строку добавить в файл с помощью echo:

# echo "*default host=cvsup.de.FreeBSD.org" > /root/ports_update
# echo "*default base=/var/db" >> /root/ports_update
# echo "*default prefix=/usr" >> /root/ports_update
# echo "*default release=cvs tag=." >> /root/ports_update
# echo "*default delete use-rel-suffix" >> /root/ports_update
# echo "" >> /root/ports_update
# echo "ports-all" >> /root/ports_update

Либо прописать данные с помощью удобного текстового редактора ee:

# ee /root/ports_update

Теперь собственно обновляем порты:

# cvsup -L 2 /root/ports_update

В первый раз это обычно занимает довольно много времени.
Подробнее о портах и их обновлении можете почитать здесь http://www.freebsd.org/doc/ru/books/handbook/ports-using.html

После того как обновление завершится, смотрим, какие порты устарели

# pkg_version -v | grep need
gmake-3.81_4                        <   needs updating (port has 3.82)
libtool-2.2.10                      <   needs updating (port has 2.4_1)

Для того чтоб наше дерево портов обновлялось раз в сутки (в 3 часа ночи), добавляем в /etc/crontab строчку в конец

0	3	*	*	*	root	/usr/local/bin/cvsup -L 0 /root/ports_update >/dev/null 2>&1

Ставим portupgrade для обновления портов

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
# rehash

В появляющихся окнах указания опций сборки оставляем дефолтные опции.
Установка на данной впске займет весьма много времени...

Выполняем

# pkgdb -F

И наконец обновляем

# portupgrade libtool-2.2.10
# portupgrade gmake-3.81_4

А теперь пришло время нормально настроить ssh. Мы будем использовать порт security/openssh-portable вместо базового sshd. Подобный прием позволит легче производить обновление.

# cd /usr/ports/security/openssh-portable
# make install clean

в окне опций убираем галочку PAM

В /etc/rc.conf ставим sshd_enable="NO" и openssh_enable="YES" а так же поставьте syslogd_flags="-ss" чтоб закрыть 514 udp порт syslogd (для того чтобы посмотреть что слушается можете ввести например sockstat -4 -l).

Теперь будем редактировать конфиг openssh /usr/local/etc/ssh/sshd_config

Делаем следующие изменения:

повесим ssh на нестандартный порт
Port 7355

ServerKeyBits 2048

отключаем авторизацию по паролям (будем использовать только ключи)
PasswordAuthentication no

если хотите включить коннект по ssh непосредственно под рутом
PermitRootLogin yes

чтоб не было лишней задержки при логине
UseDNS no

Сохраняем конфиг.

Теперь прежде чем запускать openssh portable создадим ключи. Удобнее создавать ключи под пользователем, для которого они создаются.

Рекомендуется создавать ключи на вашем локальном компьютере, а не на самом сервере, а затем просто перенести публичный ключ на сервер. Но если вы не под никсами, создавайте на сервере... Создаем ключ 4096 бит

ssh-keygen -t rsa -b 4096

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

cd ~/.ssh
cat id_rsa.pub > authorized_keys
rm id_rsa.pub

id_rsa это приватный ключ, перенесите его к себе, а на сервере удалите

Кстати, если вы решите включить удаленную авторизацию под рутом, рекомендую в начале его authorized_keys прописать from="1.2.3.4" где 1.2.3.4 - айпи, с которого разрешена авторизация по ключу.

Если вы будете авторизоваться с винды, то загоняете id_rsa в puttygen вводите в окошке passphrase и сохраняйте приватный ключ (Save private key) под расширением .ppk

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

# /etc/rc.d/sshd forcestop && /usr/local/etc/rc.d/openssh start

Теперь затестируем. Попробуем приконнектиться к нашему порту без ключей, и получаем ошибку.

Можно еще заменить базовый openssl

# openssl version
OpenSSL 0.9.8q 2 Dec 2010
# which openssl
/usr/bin/openssl

Инсталим

# cd /usr/ports/security/openssl && make install clean

Можете выбрать в опциях сборки Use optimized assembler for 80386
Так же поставьте опцию Build with SCTP support

После установки заменяем базовую версию пользовательской с помощью симлинка

# cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf
# ln -sf /usr/local/bin/openssl /usr/bin/openssl
# cd /usr/bin && ls -la | grep openssl
# openssl version
OpenSSL 1.0.0e 6 Sep 2011

Для мониторинга канала нам может потребоваться iftop

# cd /usr/ports/net-mgmt/iftop && make install clean
# rehash

Неплохо б еще поставить wget

# cd /usr/ports/ftp/wget && make install clean
# rehash

Попробуем качнуть какой-то большой файл например с майкрософта и посмотрим, какая реальная входящая скорость есть в нашем распоряжении:

cd ~
wget http://download.microsoft.com/download/1/6/5/165b076b-aaa9-443d-84f0-73cf11fdcdf8/WindowsXP-KB835935-SP2-ENU.exe

У меня скорость иногда достигала 7мбайт в сек. (грубо говоря в среднем скорость получилась под 40-50мбит в сек.). Правда я тестировал ночью. Но все равно, довольно неплохо :)

Ну и напосредок смотрим сколько свободного места у нас осталось на диске

df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    3.6G    1.5G    1.8G    46%    /
devfs          1.0K    1.0K      0B   100%    /dev

В общем то уложились мы неплохо. Кстати, если вы хотите немного подрихтовать командную оболочку, к вашим услугам данные заметки https://hpc.name/showthread.php?t=32003

И еще момент насчет логов. Если вы хотите на впске отключить syslogd, добавьте syslogd_enable="NO" в rc.conf и остановите

# /etc/rc.d/syslogd stop

Стоит ли отключать это дело или нет, решать вам, мое дело упомянуть данный момент. Если отключите, почистите каталог /var/log/*

SSH-туннель


Итак, чем может быть полезен для нас SSH-туннель? Его можно использовать как socks 5, но здесь в дополнение ко всему прочему еще и шифруется трафик. Прописываете его в настройках программ и пользуетесь. А вот в случае с vpn весь трафик (включая днс-запросы) автоматически туннелируется через vpn сервер, то есть само программное обеспечение настривать не надо. В случае с SSH-туннелем не факт что dns-запросы будут отправляться через туннель. Если вас интересует отправка dns-запросов через SSH-туннель, советую для начала ознакомиться с данным материалом.

Итак, рад вам сообщить что фактически в предыдущих шагах данной статьи у нас сервер настроен для ssh-туннеля, осталось только настроить клиентский компьютер. Путти настраивается следующим образом.

На вкладке Session прописываете айпи и порт, на вкладке Data пишем юзера, под которым вы будете авторизоваться в поле Auto-login username. Далее переходите на вкладку Tunnels, в поле Source port вводите локальный порт, через который мы будем направлять туннель. Для примера возьмем 1234. Destination выбираем Dynamic. Далее жмем Add. В итоге должна получиться следующая картина:



Далее переходим на вкладку Auth и выбираем наш ключик с расширением .ppk
Теперь снова переходим на вкладку Session, в поле Saved Sessions вводим имя нашей сессии, и нажимаем Save. В последующем можно выбирать ее из списка, дабы не указывать одни и те же опции по сто раз. Итак, коннектимся, вводим passphrase и все должно быть готово для использования туннеля. В настройках прокси в качестве сервера указывайте 127.0.0.1 и порт, который мы прописали в putty. Все, можно ходить через туннель.

Кстати про номера портов можете немного почитать здесь http://ru.wikipedia.org/wiki/Порт_(TCP/IP)

По аналогии во фряхе это делается следующим образом. Для начала копируем наш приватный ключ id_rsa в папку .ssh находящуюся в домашней директории пользователя, под которым мы работаем. Затем ставим права на этот файл 400

Ну и собственно вот команды

# ssh-agent csh
# ssh-add
# ssh -p 7355 -D localhost:1234 user@1.2.3.4

После ввода второй команды у вас запросится passphrase, если вы ее ставили. В третьей команде 1.2.3.4 это адрес удаленного сервера, 7355 - порт на котором сидит ssh, user - пользователь на удаленной тачке под которым мы авторизуемся и 1234 - собственно порт через который будет идти трафик. После ввода данных команд у нас откроется удаленный терминал. Если хотите, можете запустить команду с опциями -N и -f
Кстати, можно в данном случае обойтись и без первых двух команд.

А вообще, доки http://www.freebsd.org/doc/ru/books/handbook/openssh.html, маны и гугл вам в руки.

UPD. Кого интересуют вложенные туннели и т.д. гуглим/читаем, например вот http://sshmenu.sourceforge.net/articles/transparent-mulithop.html

VPN


Вот мы и добрались до VPN. Будем настраивать OpenVPN. Скажу сразу, это не очень сложно, так что смело за дело и вперед.

Для начала нам необходимо пересобрать ядро. Но для этого нам необходимы его сорцы.

UPD

Способ обновления сорцов, указанный ниже, устарел, вместо него юзайте Subversion:

Инсталим

# cd /usr/ports/devel/subversion
# make install clean
# rehash

затем идем сюда https://www.freebsd.org/doc/handbook/svn-mirrors.html (UPD. Теперь нужно идти по адресу https://www.freebsd.org/doc/handbook/svn.html) выбираем зеркало и вводим например

svn checkout https://svn0.us-west.FreeBSD.org/base/releng/8.2/ /usr/src

затем сверьте fingerprint ключа со значением на странице и если совпадает, введите t и начнется процесс обновления.

Устаревший способ. Создаем supfile /root/sys_update

*default host=cvsup.de.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_2
*default delete use-rel-suffix
*default compress

src-sys
src-sys-crypto
src-base

Можно было бы указать src-all, но сэкономим местечка на диске.

Обратите внимание, 8_2 это наша текущая версия операционной системы. В предыдущих статьях cvsup мы же поставили, запускаем

# cvsup -L 2 /root/sys_update

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

# cd /usr/src/sys/i386/conf/
# cp GENERIC MYKERN

Затем правим файл MYKERN. Вверху удаляем морально устаревшие строки

cpu		I486_CPU
cpu		I586_CPU

Меняем

ident		GENERIC

на

ident		MYKERN

И теперь ищем строчку с текстом "options INCLUDE_CONFIG_FILE", ниже можно добавить

# added
options         IPFIREWALL
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT
options         LIBALIAS
options         DUMMYNET
options         HZ="1000"
#

UPD

Прописывать IPFIREWALL_FORWARD уже не нужно.

Можно было конечно указать меньше опций, но это на случай если вы еще что-то эдакое захотите делать, чтоб не нужно было пересобирать ядро еще раз.

А теперь выполняем 3 простые команды...

# cd /usr/src/
# make buildkernel KERNCONF=MYKERN
# make installkernel KERNCONF=MYKERN

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

После того как все будет готово, рестартуем сервер

# reboot

После ребута смотрим, что у нас получилось

# ipfw show
65535 156 27431 allow ip from any to any
# uname -a
FreeBSD vds111.nqhost.com 8.2-RELEASE-p4 FreeBSD 8.2-RELEASE-p4 #0: Sat Nov  5 10:08:14 UTC 2011     root@vds111.nqhost.com:/usr/obj/usr/src/sys/MYKERN  i386

ipfw как мы можем видеть успешно вкомпилися в ядро, пересборка прошла успешно.

Теперь нам необходимо удалить старое ядро, чтоб оно не занимало зря место

# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    3.6G    2.5G    804M    76%    /
devfs          1.0K    1.0K      0B   100%    /dev

# du -h -d1 /boot/
 26K    /boot/defaults
2.0K    /boot/firmware
154M    /boot/kernel
2.0K    /boot/modules
2.0K    /boot/zfs
153M    /boot/kernel.old
308M    /boot/
# rm -R /boot/kernel.old
# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    3.6G    2.4G    957M    72%    /
devfs          1.0K    1.0K      0B   100%    /dev
# du -h -d1 /usr/src/
156M    /usr/src/sys
156M    /usr/src/

Если хотите, можете еще удалить сорцы ядра, но в общем то свободного места на диске у нас вполне прилично осталось.

Так же почистим каталог /usr/obj где во время сборки создаются объектные файлы

# cd /usr/obj
# chflags -R noschg *
# rm -rf *

Итак, теперь переходим к установке OpenVPN

# cd /usr/ports/security/openvpn && make install clean
# rehash

В опциях сборки оставляем все как есть.

А теперь будем создавать ключи и сертификаты. Настройки openvpn у нас будут в директории /usr/local/etc/openvpn

# mkdir /usr/local/etc/openvpn

Мы будем использовать скрипты easy-rsa которые так сказать облегчат нам жизнь

UPD. Путь easy-rsa поменялся, исправляю...

# mkdir /usr/local/etc/openvpn/easy-rsa
# cp /usr/local/share/easy-rsa/* /usr/local/etc/openvpn/easy-rsa/
# chmod 0700 /usr/local/etc/openvpn/easy-rsa/*
# chmod 0600 /usr/local/etc/openvpn/easy-rsa/*.cnf

Создаем каталог, где будут наши сертификаты и ключи.

# mkdir /usr/local/etc/openvpn/keys

Теперь переходим в каталог /usr/local/etc/openvpn/easy-rsa/ и редактируем файл vars, содержащий переменные окружения. Меняем эти параметры:

export KEY_DIR="/usr/local/etc/openvpn/keys"
export KEY_SIZE=2048
export KEY_CN=myvpn

И впишите какое-то название в переменные KEY_ORG, KEY_CN, KEY_NAME, KEY_OU.

А теперь собственно поехали..

Будем использовать оболочку sh

#sh
#cd /usr/local/etc/openvpn/easy-rsa
#. ./vars

Создаем сертификат для сервера

#./build-ca

Создаем сертификат X.509 для сервера

#./build-key-server server

Поля необходимо указывать так же само, так же укажите пароль и организацию (то есть "An optional company name", здесь впишите то же что и в Common Name) в конце. Затем нажимаете "y", потом еще раз "y". Вообще в большинстве полей просто нажимайте ентер, там будут ставиться значения по дефолту. Ну а теперь создаем ключ для клиента, то есть нас.

#./build-key client

здесь client - фактически ваш логин. В конце так же заполняем пароль и организацию, и со всем соглашаемся. Поле организации (organizationName) должно совпадать с тем, что мы заполняли перед этим.

Теперь пришло время для создания ключа Диффи-Хелмана

#./build-dh

И запасаемся терпением.

Выходим из sh

# exit

Создаем статический ключ HMAC

# openvpn --genkey --secret /usr/local/etc/openvpn/keys/ta.key

Ключи и сертификаты созданы, теперь настроим конфиг сервера, который мы оформим как /usr/local/etc/openvpn/server.conf

Вот мой конфиг:

# указываем порт, на котором будет работать наш сервер
port 443
# протокол, будет использоваться udp
proto udp
# используемый тип устройства и номер
dev tun0
# ip на котором будет слушать порт openvpn сервер
local 1.2.3.4
# указываем файл CA
ca /usr/local/etc/openvpn/keys/ca.crt
# сертификат сервера
cert /usr/local/etc/openvpn/keys/server.crt
# ключ сервера
key /usr/local/etc/openvpn/keys/server.key
# ключ Диффи-Хелмана
dh /usr/local/etc/openvpn/keys/dh2048.pem

# собственно наша виртуальная сеть
server 10.8.0.0 255.255.255.0
# адреса клиентов
ifconfig-pool-persist /usr/local/etc/openvpn/ipp.txt
# при подключении клиента у него устанавливается шлюз по умолчанию на этот сервер
push "redirect-gateway"
# прописываем днс-сервера
push "dhcp-option DNS 213.133.100.100"
push "dhcp-option DNS 213.133.99.99"

# включаем TLS аутентификацию
tls-server
# указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-auth /usr/local/etc/openvpn/keys/ta.key 0
# таймаут до реконекта
tls-timeout 120
auth MD5
# Blowfish
cipher BF-CBC
# пинг каждые 10 секунд для поддержания канала связи
keepalive 10 120 

# сжатие трафика
comp-lzo

# максимум клиентов
max-clients 100

# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun
# логирование (не забудьте создать дирректорию /var/log/openvpn/)
#status /var/log/openvpn/openvpn-status.log
#log /var/log/openvpn/openvpn.log
# отключаем логирование
verb 0
# работаем под юзером nobody
user nobody
group nobody

Замените здесь local 1.2.3.4 адрес на айпи вашего впн сервера.

Обратите внимание на строки

push "dhcp-option DNS 213.133.100.100"
push "dhcp-option DNS 213.133.99.99"

Здесь устанавливаются днс-сервера, которые будут использовать клиенты. Узнать данные айпи можно, просмотрев файл /etc/resolv.conf на впн-сервере

Добавляем в rc.conf следующие строки

openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_script="/etc/firewall.sh"

Так же создайте файл ipp.txt и не забудьте права поменять на него, т.к. openvpn у нас будет работать под юзером nobody.

# touch /usr/local/etc/openvpn/ipp.txt

Вот так вот плавно мы подошли к настройке ната. Сейчас за впном локальная сеть 10.8.0.0/24 и нам нужно обеспечить нашим клиентам выход в мир через впн сервер. Использовать мы будем ipfw nat ввиду того что он быстрый, встроен прямо в ядро, что не может не радовать.

Пишем в /etc/sysctl.conf строчку

net.inet.ip.fw.one_pass=1

И выполняем команду

# sysctl net.inet.ip.fw.one_pass=1

Итак, создаем файл /etc/firewall.sh

touch /etc/firewall.sh

Предполагается что у вас внешний интерфейс re0 (смотрите вывод ifconfig) и внешний адрес 1.2.3.4 (замените на свой)

#!/bin/sh
FwCMD="/sbin/ipfw "

# Сбрасываем ранее установленные правила
${FwCMD} -f flush

${FwCMD} add allow ip from any to any via lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

${FwCMD} add deny icmp from any to any frag

${FwCMD} nat 1 config log if re0 reset same_ports
${FwCMD} add nat 1 ip from 10.8.0.0/24 to any via re0
${FwCMD} add nat 1 ip from any to 1.2.3.4 via re0

Здесь 1.2.3.4 - внешний айпи вашего впн-сервера.

Даем права на выполнение

# chmod 0700 /etc/firewall.sh

И добавляем правила

# /etc/firewall.sh

Теперь запускаем наш openvpn сервер

# /usr/local/etc/rc.d/openvpn start

И проверяем, работает ли он

# sockstat | grep openvpn

На сервере у нас походу все готово. Ребутните впску.

Если по каким-то причинам openvpn всетаки не работает, создавайте директорию /var/log/openvpn, ставьте verb 3, раскомментируйте строки касательно логирования.

Итак, теперь настроим клиентскую машину. Для клиента нам нужны следующие файлы: ca.crt, client.crt, client.key, dh2048.pem, ta.key

На фряхе у нас настройка во многом симметрична, то есть так же само ставим openvpn из портов, создаем папку, в которой будем хранить ключи и сертификаты, и файл конфигурации клиента client.conf

dev tun
proto udp
remote 1.2.3.4
port 443
client
resolv-retry infinite
ca /usr/local/etc/openvpn/vpn/ca.crt
cert /usr/local/etc/openvpn/vpn/client.crt
key /usr/local/etc/openvpn/vpn/client.key
tls-client
tls-auth /usr/local/etc/openvpn/vpn/ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3

Замените 1.2.3.4 на адрес впн-сервера

В случае чего смотрите лог /var/log/openvpn/openvpn.log на клиентской тачке, он поможет вам разобраться в сложившейся ситуации. Не забудьте создать каталог /var/log/openvpn

В rc.conf добавляем

openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/client.conf"
openvpn_dir="/usr/local/etc/openvpn"

Ну и собственно запускаем командой, приведенной выше. Так же openvpn автоматически будет запускаться при загрузке ОС.

Можно так же запустить openvpn следующей командой:

# openvpn –-daemon –-config /usr/local/etc/openvpn/client.conf

Для виндоуса качните официальное программное обеспечение (Windows Installer http://openvpn.net/index.php/open-source/downloads.html). Желательно качать последнюю версию. Итак, ставим данный софт.

Копируем с сервера файлы, необходимые клиенту в папку где_у_нас_проинсталился_openvpn\config\vpn (создаем папку vpn) и в папке config создаем файл настроек client.ovpn со следующим содержимым:

dev tun
proto udp
remote 1.2.3.4
port 443
client
resolv-retry infinite
ca vpn/ca.crt
cert vpn/client.crt
key vpn/client.key
tls-client
tls-auth vpn/ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun

remote 1.2.3.4 - здесь адрес вашего впн-сервера

Теперь запускаем OpenVPN GUI, щелкаем правой кнопкой мыши, ну и выбираем Connect. Далее заходим на 2ip.ru и собственно радуемся.

Если мы захотим добавить еще одного клиента на сервер, делается это в общем то симметрично описанному ранее процессу, то есть заходим в sh запускаем скрипт vars ну и выполняем

А напоследок я вам расскажу, как пробросить порт. В файле firewall.sh дописываем

redirect_port tcp 10.8.0.6:123 456

То есть строчка будет иметь следующий вид:

${FwCMD} nat 1 config log if re0 reset same_ports redirect_port tcp 10.8.0.6:123 456

В данном случае мы пробрасываем порт 456 на порт 123 нашего клиента (10.8.0.6 это адрес который присваивается клиенту). Кстати, так как одним и тем же клиентам у нас присваиваются одни и те же адреса, то проброс будет успешно работать и в случае если ваш провайдер выдает вам динамический айпи.

Ну что ж, на этом полагаю данную статью можно подводить к концу.

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

Ссылки по теме:
http://ru.wikipedia.org/wiki/Криптосистема_с_открытым_ключом
http://ru.wikipedia.org/wiki/Симметричные_криптосистемы
http://ru.wikipedia.org/wiki/RSA
http://www.lissyara.su/articles/freebsd/tuning/ipfw/
http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/
http://habrahabr.ru/blogs/bsdelniki/111580/

Warnings


Не думайте, что благодаря впн-серверу либо ssh-туннелю спец службы вас не найдут. Не забывайте про "железяку" в дц, которая занимается логированием. Не делайте необдуманных поступков, скорее всего вам потом придется дорого за них заплатить.

Статью я написал за довольно короткий промежуток времени, возможно что-то упустил, так что если увидите какие-то недочеты, ошибки, просьба сообщать. Буду рад комментариям, замечаниям, исправлениям и т.д.

Я еще думал в данной статье написать о поднятии дабл и triple vpn на базе тестовых впсок, но статья и так получилась довольно объемной, так что это возможно будет в следующей серии. Целью данной статьи было рассказать вам о некоторых так сказать базовых вещах, которые, надеюсь, подтолкнут вас к дальнейшим размышлениям и исследованиям. Успехов.

Тема для обсуждения статьи на форуме

Автор: SokoL

Материал добавил SokoL


Комментарии(0)

Дата: 2011-11-16 13:16:36

Добавить Комментарий к Материалу

Вы должны быть авторизованы на форуме чтобы добавлять комментарии. Регистрация Уже авторизованы?

Комментариев к материалу пока нет.

Последнее на Сайте

Новости

Статьи

Bugtraq

Файлы

Copyright © 2008 - 2017 «HPC». При копировании материалов ставьте ссылку на источник.
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.
Пользовательское соглашение Реклама на сайте