Установка VPN сервера с использованием протокола PPTP MS-CHAP v2 на Linux

Рассмотрим установку и настройки простейшего VPN сервера на Linux Debian 9. В качестве алгоритма шифрования будет использоваться MS-CHAP v2, наверно на сегодня самый минимальный допустимый алгоритм для шифрования. PPTPd, на мой взгляд самый простой сервер на Linux и также прост в настройке.

Большим плюсом является то, что нет необходимости установки и настройки клиентской части VPN сети. Для организации туннели для доступа к ресурсам маленькой/средней компаний вполне достаточен PPTPd сервер. Максимум длина ключа алгоритма 128.

Итак, рассмотрим ситуацию для разворачивания VPN:
  • Внутренняя сеть IP 192.168.1.0/24 
  • DHCP Pool - 192.168.1.30 192.168.1.140
  • DNS AD - IP 192.168.1.1
  • Внутренний адрес IP VPN сервера - 192.168.1.200
  • Диапазон адресов для VPN сервера-  IP 192.168.1.141-192.168.1.150
  • Сервер имеет белый (живой) внешний IP
  • Сервер Linux Debian 9.x
Обновляем пакеты и систему
# apt-get update
# apt-get upgrade

Из сетевых инструментов, что не было в установке:
  • Netstat
  • iptables-persistent 
установим в процессе.

Установка сервера VPN

# apt-get install pptpd

Настройка PPTPD-сервера
Создадим файл конфигурации, файл по умолчанию сохраним с .default
# cp /etc/pptpd.conf /etc/pptpd.conf.default

Редактируем файл конфигурации
# nano /etc/pptpd.conf

option /etc/ppp/pptpd-options
# Указывает демону pptpd на путь к файлу с остальными настройками PPTP-соединения, такими как используемое шифрование канала и способ авторизации PPTP-пользователей;
logwtmp
# Передача PPTP-серверу лог аутентификации пользователей через стандартную функцию logwtmp, что даст возможность автоматизировать процесс сбора информации по заходам клиентов;
localip 192.168.1.200
# наш локальный адрес VPN;
remoteip 192.168.1.141-150
# Диапазон адресов для клиентов PPTP-сервера;

Настройка файла с опциями pptp-сервера
# cp /etc/ppp/pptpd-options /etc/ppp/pptpd-options.default
# nano /etc/ppp/pptpd-options

name pptpd
#Название сервиса(имя) для аутентификации. Должно совпадать с именем во втором поле файла аутентификации /etc/ppp/chap-secrets entries;
refuse-pap
refuse-chap
refuse-mschap
#Запрет авторизации по старым протоколам аутентификации;
require-mschap-v2
#Аутентификация пользователей по протоколу MS CHAP v2;
require-mppe-128
#Максимально возможный для PPTP механизм шифрования;
ms-dns 192.168.1.1
#Всего в конфигурационном файле может существовать две записи этой опции. С ее помощью можно указать первичный и вторичный DNS сервера для PPTP-клиентов. Я выбрал DNS сервер ActiveDirectory – это позволит обращаться к машинам и службам внутри VPN по dns именам;
#proxyarp
#Включение этого параметра позволяет PPTP-клиентам работать с локальной сетью без добавления правил маскарадинга (NAT) в цепочки брандмауэра iptables. Данная функция действует через средства ARP (Address Resolution Protocol) и его таблицы. Однако таким образом нельзя регулировать доступ в разные подсети клиентов и доступ конкретных клиентов. Чтобы эта функция работала, необходимо, чтобы осуществлялось перенаправление пакетов ядром (чтобы функция ip_forward была равна единице). Если используются цепочки iptables, этот параметр следует закомментировать. По умолчанию данная опция включена;
lock
#Блокировка соединения;
Nobsdcomp
#Отключаем компрессию;
nologfd
#Данная опция блокирует запись в системный журнал через системную функцию stderr. По умолчанию она активна. Для получения отладочной информации ее необходимо закомментировать;

Настройка файла для аутентификации пользователей
# nano /etc/ppp/chap-secrets

# Если пользователь должен динамически получать IP-адрес из диапазона remoteip
user1 pptpd password_user1 *
# Если мы хотим привязать определённый IP к логину:
user2 pptpd password_user2 192.168.1.149

Перезапуск и проверка PPTPD-сервера
# /etc/init.d/pptpd restart

Установим netstat
# apt-get install net-tools

Проверка запущен ли pptp-сервер
# ps ax | grep [p]ptpd

должны увидеть что-то похожее
1114 ?        Ss     0:00 /usr/sbin/pptpd --fg

на каком порту
# netstat -nlptu | grep [p]ptp

должны увидеть что-то похожее
tcp        0      0 0.0.0.0:1723            0.0.0.0:*               LISTEN      1114/pptpd

Добавляем PPTPD-сервис в автозагрузку
# systemctl enable pptpd.service

Настройка Iptables для корректной работы PPTP-подключения клиентов

Установим iptables-persistent
# apt-get install iptables-persistent

Разрешим входящее подключения на порт PPTP-сервера (1723) по протоколу TCP
# iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
Разрешим входящее подключения по протоколу GRE, который используется для PPTP-туннеля
# iptables -A INPUT -p gre -j ACCEPT
Для того, чтобы PPTP-клиенты смогли общаться между собой дополнительно настраиваем iptables – цепочку FORWARD в таблице filter (если политика по умолчанию для цепочки FORWARD установлена в DROP)
# iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -s 192.168.1.0/24 -i ppp+ -j ACCEPT
Настраиваем маршрутизацию и NAT для внутренней сети на PPTP-сервере
# nano /etc/sysctl.conf
добавим параметр: net.ipv4.ip_forward=1
# sysctl -p
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
eth0 - сеть смотрит в Интернет.

Сохраним изменения и перезапустим iptables.
# service netfilter-persistent save && service netfilter-persistent restart

Наш сервер готов. Создаем подключение VPN на клиентской машине, вводим логин пароль из настроек файла /etc/ppp/chap-secrets. После успешного соединения нам доступны ресурсы внутри сети VPN.

Примечания:
1. По умолчанию в настройках VPN-клиентов Windows указано автоматическое изменение основного шлюза на новый, который соответствует IP-адресу, выдаваемому PPTP-сервером. При подключении VPN весь трафик будет идти через PPTP-сервер. Для отключения этой функции необходимо зайти во вкладку Сеть, выбрать Интернет-протокол TCP/IP, нажать кнопку Свойства, а затем в новом окне — кнопку Дополнительно и отключить флажок “Использовать шлюз по умолчанию”.
2. Логи pptp-сервера по умолчанию в Debian хранятся в /var/log/syslog. Если нужно отдельно вести логи, можно задать в /etc/ppp/pptpd-options параметр logfile /var/log/pptpd.log

Про pptp - https://wiki.debian.org/ru/pptp-linux

Комментарии

Популярные сообщения из этого блога

Разные версии PHP на разных сайтах на одном сервере

Microsoft Office. Окно "Давайте начнем"

Импорт - Экспорт пользователей Active Directory