Установка 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. Окно "Давайте начнем"

При подключении VPN перестаёт работать NTLM (не видит сетевые ресурсы)