└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Установка SSTP VPN на примере Ubuntu 16.04 2 | 3 | На базе SSTP сервера https://github.com/sorz/sstp-server 4 | 5 | ### Подготовка 6 | 7 | * Установите python3 версии не ниже 3.4.4 `sudo apt-get install python3` 8 | * Установите pip3 `sudo apt-get install -y python3-pip` 9 | * Установите pppd `sudo apt-get install ppp` 10 | * Установите openssl `sudo apt-get install openssl` 11 | 12 | ### Генерация SSL-сертификата и ключа 13 | 14 | На данном этапе есть возможность получить изначально доверенный сертификат, если привязать IP-адрес сервера к домену, либо сгенерировать свой сертификат для IP-адреса сервера и добавить его в раздел доверенных на своей системе. 15 | 16 | #### Получение доверенного сертификата для домена 17 | 18 | Для начала привяжите IP-адрес Вашего сервера к домену, путём добавления A-записи в DNS домена. 19 | 20 | Далее следует установить приложение certbot: 21 | ```bash 22 | sudo add-apt-repository ppa:certbot/certbot 23 | sudo apt-get update 24 | sudo apt-get install certbot 25 | ``` 26 | 27 | Теперь, осталось лишь выпустить сертификат для нашего домена командой `sudo certbot certonly --standalone -d example.com`. 28 | 29 | #### Генерация своего сертификата 30 | 31 | Для того, чтобы сгенерировать SSL-сертификат и ключ, необходимо выполнить следующую команду: 32 | `openssl req -newkey rsa:2048 -nodes -keyout privkey.pem -x509 -days 365 -out cert.pem` 33 | 34 | Все параметры можете оставить пустыми, кроме параметра Common Name - здесь необходимо указать внешний IP-адрес Вашего VPN-сервера. 35 | 36 | После этого следует скопировать сертификат на компьютеры клиентов, которые будут подключаться к VPN-серверу и установить его в раздел "Доверенные корневые центры сертификации". 37 | 38 | ### Установка и настройка sstpd-server 39 | 40 | Установите sstp-server с помощью pip3: 41 | `pip3 install sstp-server` 42 | 43 | Также его можно установить напрямую из GitHub создателя: 44 | `pip3 install git+https://github.com/sorz/sstp-server.git` 45 | 46 | Создайте конфигурационный файл /etc/ppp/options.sstpd с помощью команды `nano /etc/ppp/options.sstpd` и добавьте в него следующее содержимое: 47 | ``` 48 | name sstpd 49 | refuse-pap 50 | refuse-chap 51 | refuse-mschap 52 | require-mschap-v2 53 | nologfd 54 | nodefaultroute 55 | ms-dns 8.8.8.8 56 | ms-dns 8.8.4.4 57 | ``` 58 | 59 | Теперь необходимо создать файл с данными для входа. Для этого выполните команду `nano /etc/ppp/chap-secrets` и укажите ваши данные для входа в формате `логин сервер пароль IP-адреса`, например: 60 | ``` 61 | user sstpd strongpassword * 62 | max sstpd "" 55.66.77.88 63 | ``` 64 | 65 | Создайте конфигурационный файл sstp-server командой `nano /etc/sstpd.ini` и добавьте в него следующее содержимое: 66 | ```ini 67 | [DEFAULT] 68 | # 1 to 50. Default 20, debug 10, verbose 5 69 | ;log_level = 20 70 | 71 | # OpenSSL cipher suite. See ciphers(1). 72 | ;cipher = EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH 73 | 74 | # Path to pppd 75 | ;pppd = /usr/bin/pppd 76 | 77 | # pppd config file path 78 | ;pppd_config = /etc/ppp/options.sstpd 79 | 80 | # SSTP port 81 | listen = 0.0.0.0 82 | listen_port = 443 83 | 84 | # PEM-format certificate with key. 85 | pem_cert = /path/to/cert.pem 86 | pem_key = /path/to/privkey.pem 87 | 88 | # Address of server side on ppp. 89 | local = 192.168.10.1 90 | 91 | # If RADIUS is used to mangle IP pool, comment it out. 92 | remote = 192.168.10.0/24 93 | ``` 94 | 95 | Осталось лишь запустить наш сервер командой `sudo nohup sstpd -f /etc/sstpd.ini & > sstpd.log` 96 | 97 | *VPN сервер запущен! Теперь нужно настроить доступ в интернет для клиентов.* 98 | 99 | ### Настройка доступа в интернет через VPN 100 | 101 | Для того, чтобы у клиентов заработал интернет, необходимо выполнить несколько пунктов: 102 | * Для начала нужно включить перенаправление трафика, отредактировав файл /etc/sysctl.conf `nano /etc/sysctl.conf` 103 | * Добавьте или раскомментируйте строку `net.ipv4.ip_forward=1` 104 | * После этого необходимо запустить команду `sysctl -p` для применения изменений. 105 | 106 | Также следует добавить следующие правила IPTABLES: 107 | ```bash 108 | iptables -I INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT 109 | iptables -I INPUT -p gre -j ACCEPT 110 | iptables -t nat -I POSTROUTING -o -j MASQUERADE 111 | iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 192.168.10.0/24 -j TCPMSS --clamp-mss-to-pmtu 112 | ``` 113 | 114 | *Теперь у Вас есть свой SSTP VPN сервер с доступом к интернету!* 115 | 116 | ### Демонизация 117 | 118 | Чтобы VPN-сервер запускался каждый раз при запуске компьютера, следует создать файл службы. Это делается путём создания файла в папке systemd `nano /etc/systemd/system/sstpd.service` со следующим содержимым: 119 | ```bash 120 | [Unit] 121 | Description=SSTP VPN server 122 | After=network.target 123 | 124 | [Service] 125 | Type=simple 126 | ExecStart=/usr/local/bin/sstpd -f /etc/sstpd.ini 127 | ExecStartPost=/sbin/iptables -I INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT 128 | ExecStartPost=/sbin/iptables -I INPUT -p gre -j ACCEPT 129 | ExecStartPost=/sbin/iptables -I POSTROUTING -t nat -o -j MASQUERADE 130 | ExecStartPost=/sbin/iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 192.168.10.0/24 -j TCPMSS --clamp-mss-to-pmtu 131 | ExecStopPost=/sbin/iptables -D INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT 132 | ExecStopPost=/sbin/iptables -D INPUT -p gre -j ACCEPT 133 | ExecStopPost=/sbin/iptables -D POSTROUTING -t nat -o -j MASQUERADE 134 | ExecStopPost=/sbin/iptables -D FORWARD -p tcp --tcp-flags SYN,RST SYN -s 192.168.10.0/24 -j TCPMSS --clamp-mss-to-pmtu 135 | Restart=on-failure 136 | RestartSec=30 137 | 138 | [Install] 139 | WantedBy=multi-user.target 140 | ``` 141 | 142 | После этого осталось включить автозапуск службы командой `systemctl enable sstpd.service` и запустить VPN-сервер командой `systemctl start sstpd.service`. 143 | 144 | ### Рекомендации 145 | 146 | Рекомендуется запретить ping к серверу: 147 | Одноразово это можно сделать командой `echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all`. Для отключения насовсем: 148 | * Отредактируйте файл /etc/sysctl.conf `nano /etc/sysctl.conf` 149 | * Добавьте или раскомментируйте строку `net.ipv4.icmp_echo_ignore_all=1` 150 | * После этого необходимо запустить команду `sysctl -p` для применения изменений. 151 | 152 | Для автоматического обновления сертификата (если используется `certbot`) следует добавить в планировщик `crontab -e` данную строку `0 4 * * 1 certbot renew && systemctl restart sstpd`. 153 | 154 | Также рекомендуется сменить размер MTU путём добавления в конфигурационный файл `/etc/ppp/options.sstpd` строчки `mru 1396` --------------------------------------------------------------------------------