В этой статье мы рассмотрим настройку PPTP–VPN сервера в Ubuntu. VPN сервер – это очень полезная в хозяйстве вещь, обеспечивающая безопасное, шифрованное подключение к локальной сети (напр. домашней сети) удаленных компьютеров, смартфонов и подобных устройств. Например, свой VPN сервер позволит вам:
- Обеспечить конфиденциальность переданных и полученных данных, когда вы (ваш ноутбук, смартфон) находитесь в недоверительной сети, и существует угроза со стороны этой сети.
- Безопасно управлять сервером через Remote Desktop, ведь пароль на общий доступ к экрану обычно передается в открытом виде (исключение – удаленный рабочий стол в Mac OS X и управление им с помощью Apple Remote Desktop), из-за чего совершенно недопустимо подключаться к рабочему столу напрямую через Интернет.
- То же самое можно сказать, если вы пользуетесь классическим FTP для передачи файлов – протокол также не обеспечивает механизма безопасной аутентификации, из-за чего при возможности стараются использовать SFTP.
- Безопасно обмениваться данными как с сервером, так и с компьютерами составляющими вашу локальную (домашнюю) сеть (при условии отсутствия атаки ХПВК, Хакеры Прямо В Квартире).
Вообще говоря, VPN обеспечит вам зашифрованный виртуальный туннель между сервером и удаленной машиной, со всеми вытекающими отсюда следствиями. Если представить Internet в виде трубы, то VPN создает внутри нее трубу меньшего диаметра, доступную только для «своих».
Теперь, когда мы рассмотрели сплошные преимущества VPN, самое время познакомиться с технологией более детально, и разобраться какие разновидности VPN существуют.
VPN (Virtual Private Network — виртуальная частная сеть) — обобщённое название технологий, позволяющих построить логическую сеть поверх другой сети (например, Интернет). Благодаря использованию средств защиты (аутентификация, шифрование), технологии VPN обеспечивают конфиденциальность данных, не смотря на то, что информация физически передается по общедоступным каналам (Интернет). Подробнее о VPN на Википедии: http://ru.wikipedia.org/wiki/VPN
На сегодняшний день существует несколько реализаций VPN:
PPTP (англ. Point-to-point tunneling protocol) – туннельный протокол типа точка-точка, позволяющий компьютеру устанавливать защищённое соединение с сервером за счёт создания специального туннеля в стандартной, незащищённой, сети. PPTP удалось добиться популярности благодаря тому что это первый VPN протокол, поддерживаемый корпорацией Microsoft. Все версии Microsoft Windows, начиная с Windows 95 OSR2, включают в свой состав PPTP-клиент. Наиболее простой в настройке вариант подключения. К сожалению, большинство интернет провайдеров по различным соображениям блокируют работу PPTP подключений. Также следует иметь ввиду, что разработчик протокола (Microsoft) рекомендует отказываться от использования PPTP в пользу более защищенного L2TP-over-IPSec, из-за уязвимостей, которые есть в PPTP. Поддержка PPTP в современных продуктах (например Windows 7, Mac OS X 10.6, iOS 4) существует лишь для совместимости с существующими продуктами и технологиями, и совершенно ничего не говорит об актуальности PPTP.
L2TP (англ. Layer 2 Tunneling Protocol) – протокол туннелирования второго (канального по модели OSI ) уровня, сочетающий в себе протокол эстафетной передачи на втором уровне (L2F) от Cisco и туннельный протокол точка-точка (PPTP) от Microsoft. По общему мнению, протокол L2TP вобрал в себя лучшие черты PPTP и L2F. Позволяет организовывать VPN с заданными приоритетами доступа, однако не содержит в себе средств шифрования и механизмов аутентификации. Поэтому, для создания защищённой VPN его используют совместно с IPSec, который предоставляет конфиденциальность, аутентификацию и целостность. По различным мнениям, является наиболее защищенным вариантом VPN подключения, несмотря на сложность настройки.
OpenVPN – свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами находящимися за NAT-firewall без необходимости изменения его настроек. Требует установки дополнительного программного обеспечения для всех ОС.
Как уже было сказано в начале статьи, мы рассмотрим установку и настройку PPTP VPN, не смотря на то, что этот тип VPN соединения считается самым небезопасным по сравнению с остальными. Тем не менее, PPTP можно считать достаточным для «личного» применения, кроме того он чрезвычайно прост в настройке, что, наверное, и обуславливает (к сожалению) его популярность. Благодаря своей простоте, PPTP будет хорошим началом для знакомства с технологиями VPN вообще.
Установка и настройка PPTP
Итак, с теоретическим вступлением разобрались, приступим непосредственно к практике. Нам нужно будет установить пакет pptpd, который и является собственно PPTP-сервером, а также несколько пакетов которые прописаны у pptpd в зависимостях (это, возможно, bcrelay). О пакетах которые прописаны в зависимостях беспокоиться не надо, они будут установлены автоматически с pptpd.
Если у вас еще не установлен пакет pptpd – запускаем его установку следующей командой:
sudo apt-get install pptpd
Теперь перейдем к настройке параметров VPN-сервера, и начнем с файла /etc/ppp/pptpd-options.
Вводим в Терминале:
sudo pico /etc/ppp/pptpd-options
В этот файл можно скопировать примерно такое содержимое (вам наверняка прийдется изменить адрес ms-dns на DNS который используется в вашей сети):
# Название сервиса для аутентификации
# (должно совпадать со вторым полем в записях /etc/ppp/chap-secrets)
name pptpd
# Откажемся работать с явно ненадежными механизмами проверки пароля,
# такими как PAP, CHAP и MS CHAP v1
refuse-pap
refuse-chap
refuse-mschap
# Разрешим аутентификацию пользователей
# по самому защищенному из протоколов — MS CHAP v2:
require-mschap-v2
# Потребуем максимально возможный для PPTP
# механизм шифрованная mppe-128
require-mppe-128
# Адрес DNS-сервера, указываемого клиентам:
# (У меня это локальный адрес роутера)
ms-dns 10.0.0.1
# Включение этого параметра позволяет PPTP-клиентам работать
# с локальной сетью без добавления правил маскарадинга (NAT)
# в цепочки брандмауэра iptables. Если используются
# цепочки iptables, этот параметр следует закомментировать.
# proxyarp
# Чтобы не сбивался маршрут по умолчанию:
nodefaultroute
lock
nobsdcomp
Вот пример такого же конфигурационного файла от разработчиков, с оригинальными комментариями: http://poptop.sourceforge.net/dox/options.pptpd.txt
После этого правим файл /etc/pptpd.conf выполнив в Терминале:
sudo pico /etc/pptpd.conf
Вот как этот файл выглядит у меня:
option /etc/ppp/pptpd-options
logwtmp
localip 192.168.18.1
remoteip 192.168.18.2-254
# Включим передачу VPN-клиентам широковещательных пакетов,
# которые сервер получает по сетевому интерфейсу eth0:
bcrelay eth0
# Смотрим, чтобы было закомментировано,
# при включении данного параметра IP-адрес клиента не передается
# скриптам ip-up через демон pppd:
# noipparam
Наиболее полную русскую документацию по файлам pptpd-options и pptpd.conf вы найдете здесь: «Описание опций /etc/pptpd.conf и /etc/ppp/options.pptpd»
Затем в файл /etc/ppp/chap-secrets добавляем пользователей которые будут иметь право подключатся к VPN-сети. Набираем в Терминале:
sudo pico /etc/ppp/chap-secrets
И добавляем в этот файл информацию в таком виде:
# Secrets for authentication using CHAP
# client server secret IP addresses
andrey pptpd andrey12 *
Таким образом, мы наделили пользователя andrey с паролем andrey12 правом подключаться к нашей VPN сети. Пользователю andrey будет выдаваться первый доступный IP адрес из указанного диапазона. Если же необходимо, чтобы пользователю всегда выдавался один и тот же IP адрес, укажите желаемый IP вместо «*». Обратите внимание на название сервиса – pptpd – оно должно быть таким же, как указано в параметре name в файле /etc/ppp/pptpd-options.
С настройками VPN-сервера мы завершили, теперь нужно его перезапустить для того, чтобы изменения которые мы внесли вступили в силу. Для этого выполним в Терминале:
sudo /etc/init.d/pptpd restart
Если необходимо, чтобы для подключенных удаленных клиентов был доступен интернет через VPN, открываем /etc/rc.local и НАД ‘exit 0’ добавляем такие строки:
# PPTP IP forwarding
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
и раскомментируем эту строчку в файле /etc/sysctl.conf:
net.ipv4.ip_forward=1
В случае если ваш VPN сервер не подключен напрямую к интернету, вам скорее всего понадобится направить порт TCP-1723 и «протокол 47», он же GRE, на локальный IP адрес VPN сервера. Обратитесь к инструкции по настройке роутера чтобы выполнить необходимые шаги. Очевидно, что у сервера за роутером должен быть постоянный локальный IP, а у самого роутера – постоянный «внешний» IP, либо прийдется воспользоваться услугой «динамический DNS», но это совсем другая тема.
Перезагружаем сервер. Можно пробовать подключаться. Ваш VPN должен быть доступен с любой точки мира, где только есть интернет.
Подключение клиента с Mac OS X 10.6
Для подключения к VPN с Mac OS X 10.6, откройте «Системные Настройки», перейдите в раздел «Сеть», под списком интерфейсов нажмите внизу «+» и в появившемся окне добавления интерфейса выберите «Интерфейс: VPN», «Тип VPN: PPTP». И нажмите создать. В настройках укажите:
- Доменное имя сервера VPN, или IP адрес
- Имя учетной записи (логин)
- Кодирование (шифрование канала) – выберите «Максимум (только 128 бит)»
Потом щелкните «Настройки идентификации», укажите что идентификация осуществляется посредством пароля и введите пароль.
Щелкните «Дополнительно», и установите либо снимите галочку «Отправить весь трафик через VPN». Если галочка установлена – то абсолютно весь трафик будет проходить через VPN сервер и по шифрованному каналу доставляться вам. Если галочка снята – то только трафик предназначающийся для удаленной локальной сети будет проходить через VPN канал (например, вы сможете через Remote Desktop управлять сервером), а весь остальной трафик, например получение почты и загрузка веб страниц будут осуществляться напрямую из интернета по кратчайшему маршруту. Подтвердите изменения нажав «ОК».
Теперь можно попробовать подключиться, нажав «Подключить», (см. 1-й скриншот), или выбрав нужное VPN соединение в строке меню сверху.
Подключение iPhone с iOS 4
Для подключения iPhone с операционной системой iOS 4 к PPTP VPN, откройте Настройки, перейдите в раздел «Основные», потом «Сеть». Щелкните пункт «VPN», если у вас нет VPN конфигураций, напротив него будет написано «Не настроена». Щелкните «Добавить конфигурацию VPN…». В открывшемся окне переходим на вкладку PPTP, и заполняем:
- Описание – то, как будет называться данное VPN соединение
- Сервер – доменное имя или IP адрес
- Учетная запись – ваш логин
- RSA SecurID – оставляем выключенным
- Пароль – вводим свой пароль
- Шифрование – выбираем «Максимум»
- Для всех данных – либо включаем либо выключаем, руководствуясь соображениями описанными выше
Щелкните «Сохранить» вверху справа. Теперь, чтобы установить VPN подключение, откройте Настройки, и найдите первом блоке пункт «VPN». Дотроньтесь до переключателя, и процесс подключения начнется.
Диагностика подключения
PPTP обычно заводится без проблем, и при аккуратной первичной настройке работает сразу же (в отличие от более сложного L2TP-over-IPSec). И если вы, все же, испытываете проблемы с подключением, используйте следующие команды на клиенте (в рассматриваемом случае это Mac OS X) для отслеживания лога подключения в режиме реального времени:
tail -f /var/log/system.log
tail -f /var/log/ppp.log
Вы должны увидеть там что-то типа такого:
May 2 21:44:59 ATT pppd[54150]: PPTP connecting to server 'server1.kaplunenko.name' (123.456.789.10)…
May 2 21:45:02 ATT pppd[54150]: PPTP connection established.
May 2 21:45:02 ATT pppd[54150]: Connect: ppp0 <--> socket[34:17]
May 2 21:45:08 ATT pppd[54150]: MPPE 128-bit stateless compression enabled
May 2 21:45:09 ATT pppd[54150]: local IP address 192.168.18.2
May 2 21:45:09 ATT pppd[54150]: remote IP address 192.168.18.1
May 2 21:45:09 ATT pppd[54150]: primary DNS address 10.0.0.1
May 2 21:45:09 ATT pppd[54150]: secondary DNS address 10.0.0.1
Если требуется включить детальное логирование на сервере, обратитесь к уже упоминавшемуся справочнику «Описание опций /etc/pptpd.conf и /etc/ppp/options.pptpd».
Дополнительно советую почитать:
«Криптоанализ туннельного протокола типа точка-точка (PPTP) от Microsoft» – Статья достаточно старая, например, механизмом MS-CHAP уже давно никто не пользуется (ведь есть MS-CHAP v.2, намного более надежный, хотя тоже очень далек от идеала), но позволяет сложить впечатление об общей схеме работы PPTP. Также, будет понятно, почему нет смысла усовершенствовать и дорабатывать PPTP, а вместо этого лучше рассмотреть альтернативные, более современные, варианты.
«Cryptanalysis of Microsoft’s PPTP Authentication Extensions (MS-CHAPv2)» – Вторая статья в продолжение упомянутой выше (перевода нет, поэтому читаем на языке Шекспира), в которой рассматривается усовершенствованный PPTP с аутентификацией MS-CHAP v2 и улучшенным MPPE (шифрование канала). Именно на этом варианте остановилось развитие PPTP. Резюме статьи – MS-CHAP v2 лучше чем MS-CHAP v1, потому что авторизируется не только клиент, а клиент и сервер авторизируют друг друга, что исключает подмену сервера. Шифрование канала MPPE теперь использует разный ключ для шифрования данных от сервера к клиенту и от клиента к серверу. Явные огрехи в безопасности устранены, и теперь главная критика на PPTP направлена на то, что протокол остается пароле-зависимым, то есть он настолько безопасен, насколько безопасен пароль, выбранный пользователем.
«Установка и настройка L2TP/IPSec VPN сервера в Ubuntu» – Для тех кто уже разобрался с PPTP, предлагаю ознакомиться с более продвинутой VPN технологией — L2TP/IPSec. Статья дописывалась и правилась на протяжении 3-х лет, рассмотрено очень много нюансов.
Резюме
PPTP – самый простой в настройке сервис VPN, однако он не соответствует современным требованиям безопасности. В добавок к этому, PPTP часто блокируют провайдеры и сотовые операторы. Поэтому, внедрение PPTP для корпоративного применения оправдано лишь в том случае, если необходимо обеспечить совместимость с существующим старым оборудованием. Благодаря своей простоте, эта разновидность VPN хорошо подходит для знакомства с принципами работы виртуальных частных сетей.
Спасибо. Доступно написано и главное работает)
У меня такой вопрос я настроил VPN сервер, клиент с виндовс нормально подключаются все работает, но мне нужно что бы сервер их *клиентов* отрубал если они висят скажем n минут как это сделать ?
Похоже, что в стандартном функционале PPTP такой опции нет. Вот хорошая статья с описанием всех параметров настройки PPTP: http://www.compress.ru/article.aspx?id=18183