PPTP (Point-to-Point Tunneling Protocol) — туннельный протокол типа точка-точка.
PPTP работает, устанавливая обычную PPP сессию с противоположной стороной с помощью протокола Generic Routing Encapsulation (GRE). Второе соединение на TCP-порте 1723 используется для инициации и управления GRE-соединением. PPTP сложно перенаправлять за сетевой экран, так как он требует одновременного установления двух сетевых сессий.
PPTP-трафик может быть зашифрован с помощью MPPE. Для аутентификации клиентов могут использоваться различные механизмы, наиболее безопасные из них — MS-CHAPv2 и EAP-TLS.
Шифрование в PPTP исключительно не надежное и Большинство провайдеров блокируют GRE трафик, поэтому предпочтительнее использовать OpenVPN.
Установка
Устанавливаем пакет pptpd:
sudo apt update
sudo apt install pptpd
Настройка Сначала необходимо отредактировать основной конфигурационный файл /etc/pptpd.conf:
sudo vi /etc/pptpd.conf
Приведем его к следующему виду:
# TAG: option
# Specifies the location of the PPP options file.
# By default PPP looks in '/etc/ppp/options'
#
option /etc/ppp/pptpd-options
# TAG: debug
# Turns on (more) debugging to syslog
#
#debug
# TAG: stimeout
# Specifies timeout (in seconds) on starting ctrl connection
#
stimeout 15
# TAG: logwtmp
# Use wtmp(5) to record client connections and disconnections.
logwtmp
# TAG: connections
# Limits the number of client connections that may be accepted.
#
# If pptpd is allocating IP addresses (e.g. delegate is not
# used) then the number of connections is also limited by the
# remoteip option. The default is 100.
connections 20
# TAG: localip
# TAG: remoteip
localip 192.168.10.1
remoteip 192.168.10.100-250
Теперь необходимо отредактировать файл /etc/ppp/pptpd-options, откроем его с помощью редактора:
sudo vi /etc/ppp/pptpd-options
Приведем его к следующему виду:
name pptpd
# Encryption
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
#DNS
ms-dns 192.168.10.1 #свой днс сервер, ну или любой другой
ms-dns 1.1.1.1
#proxyarp
nodefaultroute
debug
#dump
nologfd
logfile /var/log/pptpd/pptpd.log
lock
nobsdcomp
idle 120 #Количество секунд простоя, по истечении которых простаивающее соединение будет отключено
lcp-echo-interval 30 #Посылать echo-запросы каждые 30 секунд
lcp-echo-failure 3 #Разорвать соединение с клиентом, если он не ответит на 3 echo запроса
Дальше нужно создать пользователей, которым будет предоставляться доступ к PPTP серверу. Для этого отредактируем файл /etc/ppp/chap-secrets:
sudo vi /etc/ppp/chap-secrets
Приведем его к следующему виду:
# Secrets for authentication using CHAP
# client server secret IP addresses
user1 pptpd password *
user2 pptpd password *
Настройка PPTP сервера завершена, теперь необходимо перезапустить pptpd:
sudo service pptpd restart
Правила IPTABLES для защиты нашего сервера
Пример настройки пакетного фильтра IPTABLES, где мы разрешаем принимать все входящие пакеты по протоколу GRE и разрешаем не более 4 запросов на подключение к нашему серверу в течении 60 секунд с одного IP адреса:
# GRE
iptables -A INPUT -p gre -d 88.198.175.73 -j ACCEPT
# PPTP
iptables -N PPTP_CHK
iptables -A INPUT -i $EXTIF -p tcp --dport 1723 -m state --state NEW -j PPTP_CHK
iptables -A PPTP_CHK -m recent --set --name PPTP
iptables -A PPTP_CHK -m recent --update --seconds 60 --hitcount 5 \
--name PPTP -j LOG --log-prefix "PPTPD_FLOOD " --log-level info
iptables -A PPTP_CHK -m recent --update --seconds 60 --hitcount 5 \
--name PPTP -j REJECT --reject-with icmp-port-unreachable
iptables -A PPTP_CHK -j ACCEPT
–log-prefix "PPTPD_FLOOD " – здесь обязательно должен быть пробел перед закрывающими кавычками.
Пример вывода лога срабатывания фильтра из syslog:
cat /var/log/syslog |grep PPTP_FLOOD
Jun 26 06:26:22 gate kernel: [316374.566430] PPTPD_FLOOD IN=ens160 OUT= MAC=00:50:56:9c:51:47:54:a0:50:e7:c9:06:08:00 SRC=111.111.111.11 DST=1.1.1.1