Установка VPN сервера с использованием протокола PPTP MS-CHAP v2 на Linux
Рассмотрим установку и настройки простейшего VPN сервера на Linux Debian 9. В качестве алгоритма шифрования будет использоваться MS-CHAP v2, наверно на сегодня самый минимальный допустимый алгоритм для шифрования. PPTPd, на мой взгляд самый простой сервер на Linux и также прост в настройке.
Большим плюсом является то, что нет необходимости установки и настройки клиентской части VPN сети. Для организации туннели для доступа к ресурсам маленькой/средней компаний вполне достаточен PPTPd сервер. Максимум длина ключа алгоритма 128.
Итак, рассмотрим ситуацию для разворачивания VPN:
# apt-get update
# apt-get upgrade
Из сетевых инструментов, что не было в установке:
Настройка 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
# 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
Большим плюсом является то, что нет необходимости установки и настройки клиентской части 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
Комментарии
Отправить комментарий