Установка 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 && apt-get dist-upgrade

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

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

apt-get install 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
user1 pptpd password_user1 *
# Если пользователь должен динамически получать IP-адрес из диапазона remoteip
user2 pptpd password_user2 192.168.1.149
# Если мы хотим привязать определённый IP к логину:

Перезапуск и проверка 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

Top