Как установить и настроить безопасный PPTP сервер на Debian Linux
Раздел(ы): GNU Linux - CentOS / Debian
Просмотры: 12728
Комментарии: 5
Для объединения компьютеров между собой и даже целых локальных сетей через интернет используют VPN туннели. Как правило один из узлов используется в качестве сервера, а остальные подключаются к нему как клиенты.
Существует много ПО для построения VPN тоннелей, но PPTP, пожалуй, самый простой в настройке, поддерживается практически всеми операционными системами и устройствами, при этом быстро работает. Единственное «Но», он не самый безопасный (защищенный).
PPTP (англ. Point-to-Point Tunneling Protocol) — туннельный протокол типа точка-точка, позволяющий компьютеру устанавливать защищённое соединение с сервером за счёт создания специального туннеля в стандартной, незащищённой сети.
Подробнее в Википедии
В этой статье я расскажу как настроить PPTP сервер на операционной системе Debian 9.
Как установить PPTP сервер на Debian
Чтобы установить PPTP сервер на Debian выполните последовательно следующие команды в консоли от имени ROOT:
# apt update # apt upgrade # apt install pptpd
Обратите внимание, что демон (сервис) PPTP в имени на конце содержит букву [d].
Как настроить PPTP сервер на Debian
Настройка сервера для построения VPN туннеля на основе PPTP сводится к редактированию трех файлов:
- /etc/pptpd.conf
- /etc/ppp/chap-secrets
- /etc/ppp/pptpd-options
Настройка безопасности PPTP
Как правило файл /etc/ppp/pptpd-options уже содержит все необходимые инструкции для правильной и безопасной работы PPTP сервера и редактировать его не надо. В нем находятся не только настройки безопасности, но именно на них следует обратить особое внимание.
В Debian 9 по-умолчанию файл /etc/ppp/pptpd-options имеет следующее содержание:
###############################################################################
# $Id$
#
# Sample Poptop PPP options file /etc/ppp/pptpd-options
# Options used by PPP when a connection arrives from a client.
# This file is pointed to by /etc/pptpd.conf option keyword.
# Changes are effective on the next connection. See "man pppd".
#
# You are expected to change this file to suit your system. As
# packaged, it requires PPP 2.4.2 and the kernel MPPE module.
###############################################################################
# Authentication
# Name of the local system for authentication purposes
# (must match the second field in /etc/ppp/chap-secrets entries)
name pptpd
# Optional: domain name to use for authentication
# domain mydomain.net
# Strip the domain prefix from the username before authentication.
# (applies if you use pppd with chapms-strip-domain patch)
#chapms-strip-domain
# Encryption
# (There have been multiple versions of PPP with encryption support,
# choose with of the following sections you will use.)
# BSD licensed ppp-2.4.2 upstream with MPPE only, kernel module ppp_mppe.o
# {{{
refuse-pap
refuse-chap
refuse-mschap
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
require-mschap-v2
# Require MPPE 128-bit encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
require-mppe-128
# }}}
# Network and Routing
# If pppd is acting as a server for Microsoft Windows clients, this
# option allows pppd to supply one or two DNS (Domain Name Server)
# addresses to the clients. The first instance of this option
# specifies the primary DNS address; the second instance (if given)
# specifies the secondary DNS address.
# Attention! This information may not be taken into account by a Windows
# client. See KB311218 in Microsoft's knowledge base for more information.
#ms-dns 10.0.0.1
#ms-dns 10.0.0.2
# If pppd is acting as a server for Microsoft Windows or "Samba"
# clients, this option allows pppd to supply one or two WINS (Windows
# Internet Name Services) server addresses to the clients. The first
# instance of this option specifies the primary WINS address; the
# second instance (if given) specifies the secondary WINS address.
#ms-wins 10.0.0.3
#ms-wins 10.0.0.4
# Add an entry to this system's ARP [Address Resolution Protocol]
# table with the IP address of the peer and the Ethernet address of this
# system. This will have the effect of making the peer appear to other
# systems to be on the local ethernet.
# (you do not need this if your PPTP server is responsible for routing
# packets to the clients -- James Cameron)
proxyarp
# Normally pptpd passes the IP address to pppd, but if pptpd has been
# given the delegate option in pptpd.conf or the --delegate command line
# option, then pppd will use chap-secrets or radius to allocate the
# client IP address. The default local IP address used at the server
# end is often the same as the address of the server. To override this,
# specify the local IP address here.
# (you must not use this unless you have used the delegate option)
#10.8.0.100
# Debian: do not replace the default route
nodefaultroute
# Logging
# Enable connection debugging facilities.
# (see your syslog configuration for where pppd sends to)
#debug
# Print out all the option values which have been set.
# (often requested by mailing list to verify options)
#dump
# Miscellaneous
# Create a UUCP-style lock file for the pseudo-tty to ensure exclusive
# access.
lock
# Disable BSD-Compress compression
nobsdcomp
# Disable Van Jacobson compression
# (needed on some networks with Windows 9x/ME/XP clients, see posting to
# poptop-server on 14th April 2005 by Pawel Pokrywka and followups,
# http://marc.theaimsgroup.com/?t=111343175400006&r=1&w=2 )
novj
novjccomp
# turn off logging to stderr, since this may be redirected to pptpd,
# which may trigger a loopback
nologfd
# put plugins here
# (putting them higher up may cause them to sent messages to the pty)
Если у вас этого файла нет или у него другое содержимое и вы хотите внести в него изменения, то с начала сделайте резервную копию файла настроек:
# cp /etc/ppp/pptpd-options /etc/ppp/pptpd-options-original
Оптимальные параметры PPTP сервера, проверьте их наличие и при необходимости добавьте в файл /etc/ppp/pptpd-options:
name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 proxyarp nodefaultroute lock nobsdcomp novj novjccomp nologfd
где,
- name pptpd — имя сервиса, которое используется в файле аутентификации /etc/ppp/chap-secrets
- refuse-pap — запрет небезопасной авторизации pap
- refuse-chap — запрет небезопасной авторизации chap
- refuse-mschap — запрет небезопасной авторизации mschap
- require-mschap-v2 — требование безопасной авторизации mschap v2
- require-mppe-128 — требование максимального шифрования mppe-128
- proxyarp — необходим для трансляции ARP-ответов из одного сегмента сети в другой
- nodefaultroute — запрещает изменять шлюз по-умолчанию на сервере при активации PPTP соединения
- lock — параметр на создания файла блокировки на эксклюзивный доступ
- nobsdcomp — используется на не BSD системах (OpenBSD, FreeBSD)
- novj — запрет компресии, она используется только клиентами Windows 9x/ME/XP
- novjccomp — запрет компрессии, она используется только клиентам Windows 9x/ME/XP
- nologfd — блокирует запись в системный журнал через системную функцию stderr
Настройка адресации VPN тоннеля
Адресация компьютеров (устройств) в тоннеле не должна совпадать с уже используемой адресацией у всех участников VPN туннеля.
Адреса для туннеля следует выбирать из «серых» подсетей. Подробнее о них можно почитать здесь — https://moonback.ru/page/belye-i-serye-ip-adresa-ipv4.
В моем примере я буду использовать подсеть 172.22.22.0. Чтобы ее настроить для PPTP тоннеля необходимо отредактировать файл /etc/pptpd.conf.
По правилам «хорошего тона» сначала сделаем резервную копию оригинального файла конфигурации:
# cp /etc/pptpd.conf /etc/pptpd_original.conf
а затем в конец файла добавляем настройки адресов нашего тоннеля:
# IP-адрес сервера в локальной сети localip 172.22.22.1 # Диапазон адресов для клиентов PPTP-сервера remoteip 172.22.22.22-29
Сделать это можно с помощью редактора, например из состава MC (Midnight Commander):

Или прямо из командной строки:
# echo -e ' # IP-адрес сервера в локальной сети localip 172.22.22.1 # Диапазон адресов для клиентов PPTP-сервера remoteip 172.22.22.22-29 ' \ >> /etc/pptpd.conf
Список пользователей PPTP сервера
Следующим шагом добавим пользователей, которые будут подключаться к нашему PPTP серверу. Для этого необходимо внести правки в файл /etc/ppp/chap-secrets.
Не забываем про «правила хорошего тона» и делаем резервную копию файла настроек:
# cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets_original
Формат строки: имя-пользователя имя-сервиса пароль адрес-клиента-в-тоннеле.
Например:
vpn-user pptpd user-password 172.16.22.22
В случае, если вы будете использовать множественный вход, то вместо конкретного адреса можно указать звездочку.
vpn-user pptpd user-password *

Добавить пользователя можно не прибегая к редактору, прямо из консоли:
# echo -e ' vpn-user pptpd user-password 172.16.22.22' >> /etc/ppp/chap-secrets
Так как данные хранятся в окрытом виде, то для хоть какой-то безопасности присвоим файлу /etc/ppp/chap-secrets следующие права:
# chmod 0600 /etc/ppp/chap-secrets
Запуск PPTP сервера на Debian
Если все сделали без ошибок, то можно запустить PPTP сервер:
# service pptpd start
При необходимости можно проверить сатус его работы:
# service pptpd status

Автозагрузка PPTP сервера при старте операционной системы
В Debian 9 PPTP сервер добавить в автозагрузку можно следующей командой:
# systemctl enable pptpd
исключить из автозагрузки соответственно:
# systemctl disable pptpd
Для просмотра сервисов добавленных в автозагрузку используйте команду:
# systemctl list-unit-files --type=service --state=enabled
Заключение
К серверу настроенному по этой инструкции беспроблемно подключаются клиенты Windows 8.1/10, Android 9, а так же роутеры серии Keenetic. Это проверено мной лично.
В прочем и другие клиенты так же не должны испытывать проблем при подключении.
Сделал как тут написано,все работает. Только клиенты подключаются и уже не могут подключиться к ресурсам во внешней сети. Как это исправить?
Drake, если вы хотите, чтобы клиенты ходили во внешнюю сеть через VPN, то настройте сервер по этой инструкции — https://moonback.ru/page/debian-vpn-client-to-inernet.
Если нужно, чтобы интернет у клиентов оставался свой как и раньше, то у клиентов в настройках протокола IPv4 для VPN соединения в разделе дополнительные параметры отключите использование внешнего шлюза.
Спасибо. Уже разобрался. Единственно,у меня нет файла /etc/rc.local. Я по другому эту проблему решил, через файл /etc/network/interfaces
Благодарю за статью, но почему-то после всех настроек, не получается подключиться к серверу. Пишет, что сервер не отвечает. В чем может быть проблема?
Попробуй именно 9-й дебиан. На 11-м у меня тоже никак не завелось. День танцевания с бубном в утиль. А на 9м пошло сразу и без проблем.