15 июня 2015 г.

Доработка напильником SoftEther VPN

В прошлой статье про установку и настройку SoftEther VPN я описал только лишь базовые шаги, которые необходимы для нормального функционирования VPN-сервера. В данной статье речь пойдет о небольших мелочах, которые влияют не столько на его работу, сколько на общую защищенность VPN-сервера.

1. Отключение Dynamic DNS

По умолчанию данная функция включена в SoftEther и с ее помощью VPN-серверу выдается собственное доменное имя третьего уровня вида vpn<какое-то число>.softether.net, которое при необходимости можно заменить на другое свободное.
Сама по себе данная функция Dynamic DNS полезна, но если:
  • у вас есть собственный домен и вы хотите использовать свое доменное имя для VPN-сервера, соответственно данное альтернативное имя Вам не нужно;
  • вы лишний раз не хотите "светить" свой VPN-сервер, потому что по известному шаблону доменного имени можно быстро насканировать десятки VPN-серверов.
то есть весомые причины отключиьть эту функицю.
Отключается Dynamic DNS только через файл конфигурации. В конфиге ищем раздел:
declare DDnsClient
а в нем значение
bool Disabled false
меняем на
bool Disabled true
Изменить конфиг можно через раздел Edit Config в Server Manager: конфиг нужно сохранить в файл Save to File, изменить параметр и импортировать измененный конфиг Import File and Apply.
В данном случае изменения вступят в силу сразу же. Также конфиг можно поправить напрямую на VPN-сервере в файле:
/usr/local/vpnserver/vpn_server.config
но сначала нужно остановить VPN-сервер
/etc/init.d/vpnsrver stop
После редактирования файла запустить сервер
/etc/init.d/vpnserver start

2. Отключение NATTraversal

Еще одна полезная функция, которая помогает установить подключение к VPN-серверу в том случае если он находится за Firewall - NATTraversal. В данном случае VPN-сервер может находиться вообще в локальной сети с "серым" ip-адресом.
VPN-север периодически отправляет UDP-пакеты служебному серверу SoftEther:
Функция полезная, если бы не "но":
  • в вышеописанном случае можно подключиться только с помощью SoftEther VPN Client;
  • большинтво VPS имеют "белый" ip-адрес;
  • зачастую ненужный "паразитный" трафик.
Для отключения данной функции нужно изменить конфиг в секции
declare ServerConfiguration
параметр
bool DisableNatTraversal false
меняем на
bool DisableNatTraversal true
Далее идем по следующим разделам конфига
declare VirtualHUB -> declare <название хаба> -> declare Option
ищем параметр
bool DisableUdpAcceleration false
меняем на
bool DisableUdpAcceleration true
Сохраняем конфиг, применяем. При необходимости перезагружаем сервер.

3. Отключение ненужных портов

По умолчанию SoftEther VPN прослушивает 4 порта TCP (не считая тех , которые используются для VPN): 443, 992, 1194, 5555. С помощью Server Manager или с помощью CLI vpncmd можно управлять сервером через любой указанный порт (по умолчанию используется 443), что очень грамотно и удобно. Более подробно про данные порты описано в руководстве. Я же рекомендую отключать лишние порты. Для примера оставим только порт 5555.
В Server Manager в разделе Management of Listeners нужно выбрать порты 443, 992, 1194 и нажать Stop. В CLI vpncmd выполнить команды:
> ListenerDisable 443
> ListenerDisable 992
> ListenerDisable 1194

4. Настройка iptables

У многих компаний, предоставляющих услуги VPS, отсутствует возможность настройки правил фильтрации трафика в панели управления VPS и в данном случае можно (и нужно!) обойтись настройкой iptables, который есть в большинстве дистрибутивов Linux.
Для начала стоит определиться с тем что пропускать, а что блокировать. Распишем наши правила фильтрации:
  • подключаться по SSH для управления VPS;
  • подключаться к VPN-серверу для его управления;
  • подключаться клиентам к VPN-серверу по L2TP/IPsec;
  • подключаться клиентам к VPN-серверу по OpenVPN;
  • все остальные входящие подключения должны быть заблокированы.
Список правил:
# Таблица FILTER
*filter
# Очищаем правила и счетчики
-F
-X
-Z
# Устанавливаем политики по умолчанию
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Разрешаем уже установленные соединения
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешаем весь трафик с localhost и виртуального TAP-интерфейса
-A INPUT -i lo -j ACCEPT
-A INPUT -i tap_vpn -j ACCEPT
# Разрешаем SHH
-A INPUT -i eth0 -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
# Разрешаем управление VPN-сервером
-A INPUT -i eth0 -p tcp -m conntrack --ctstate NEW -m tcp --dport 5555 -j ACCEPT
# Разрешаем OpenVPN
-A INPUT -i eth0 -p udp -m conntrack --ctstate NEW -m udp --dport 1194 -j ACCEPT
# Разрешаем IPsec
-A INPUT -i eth0 -p udp -m conntrack --ctstate NEW -m multiport --dports 500,4500 -j ACCEPT
COMMIT
# Таблица NAT
*nat
-F
-X
-Z
# Политики по умолчанию
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Разрешаем NAT для трафика с виртуального интерфейса на внешний
-A POSTROUTING -s 192.168.230.0/24 -j SNAT --to-source <IP-адрес eth0>
COMMIT
Сохраняем правила в iptables-rules.txt (не забываем в последнем правиле указать ip-адрес) и применяем их:
iptables-restore < iptables-rules.txt
Также не стоит забывать про установку пакета iptables-persistent для сохранения правил фильтрации iptables после перезагрузки.
apt-get install iptables-persistent -y
На этом часть "доработок напильником" нашего VPN-сервера будем считать завершенной.
Если у вас есть пробложения и дополнения, то смело пишите в комментариях. При необходимости добавлю в статью.

Источники:

Stop connection to...
vpnserver call home...

5 комментариев:

  1. только автор забыл ОЧЕНЬ существенный пункт adminip.txt
    почитайте на досуге

    ОтветитьУдалить
  2. А нет инфы как скинуть пароль админа?

    ОтветитьУдалить
  3. А ни кто не сталкивался с проблемой, что Linux Client получает почему то ipv6?

    ОтветитьУдалить
  4. Самая лучшая статья по настройке, автору плюс. Спасибо бльшушее

    ОтветитьУдалить