Перейти к содержанию

Установка сервера VPN в FreeBSD

Рассмотрим установку сервера OpenVPN. Кроме наличия двух сетевых интерфейсов, особые требования к аппаратному обеспечению не предъявляются. В частности, достаточно 256MB оперативной памяти, 4GB жесткого диска и возможности подключения сменного USB-носителя или диска CD/DVD для установки операционной системы.

При установке операционной системы можно сразу настроить сетевые интерфейсы. Внешний интерфейс - это тот, который, как правило, подключается к сети Интернет. И внутренний, к которому будут подключены ПК локальной сети. Например, параметры внешнего интерфейса:

  • IP-адрес: 89.31.21.23
  • Маска: 255.255.255.0
  • Шлюз: 89.31.21.1
  • Сервер имен: 8.8.8.8

Внутренний интерфейс пусть имеет следующие параметры:

  • IP-адрес: 192.168.0.1
  • Маска: 255.255.255.0

Настроим параметры автоматического запуска openvpn:

echo 'openvpn_enable="YES"' >> /etc/rc.conf
echo 'openvpn_if="tun"' >> /etc/rc.conf
echo 'openvpn_configfile="/usr/local/etc/openvpn/server.conf"' >> /etc/rc.conf
echo 'openvpn_dir="/usr/local/etc/openvpn"' >> /etc/rc.conf

Создадим директории для работы сервера:

mkdir /usr/local/etc/openvpn
mkdir /usr/local/etc/openvpn/keys
mkdir /usr/local/etc/openvpn/ccd
mkdir /var/log/openvpn

Создадим пользователя для работы сервера:

pw useradd openvpn -s /usr/sbin/nologin

Создадим ключ TLS:

openvpn --genkey secret /usr/local/etc/openvpn/keys/ta.key

Создадим файл параметров работы алгоритма Диффи-Хеллмана:

openssl dhparam -out /usr/local/etc/openvpn/keys/dhparam.pem 1024

Теперь нужно скопировать файлы сертификатов удостоверяющих центров (root-ca.crt, signing-ca.crt) и сервера VPN (vpn_server.crt), файл ключа сервера VPN (vpn_server.key) и файл списка отозванных сертификатов (signing-ca.crl) с серверов удостоверяющих центров (УЦ) в директорию /usr/local/etc/openvpn/keys.

Если это не было сделано ранее, файлы сертификатов УЦ нужно объединить в один, а права доступа к файлу ключа сервера ограничить:

cat /usr/local/etc/openvpn/keys/signing-ca.crt > /usr/local/etc/openvpn/keys/ca_all.crt
cat /usr/local/etc/openvpn/keys/root-ca.crt >> /usr/local/etc/openvpn/keys/ca_all.crt
chown openvpn /usr/local/etc/openvpn/keys/vpn_server.key
chmod og-rwx /usr/local/etc/openvpn/keys/vpn_server.key

После этого файлы root-ca.crt и signing-ca.crt из директории /usr/local/etc/openvpn/keys можно удалить.

Создадим файл конфигурации сервера:

server.conf
dev tun
proto udp
local 89.31.21.23
port 1194
user openvpn
group openvpn
persist-key
persist-tun
remote-cert-tls client
auth SHA1
tls-server
tls-timeout 120
tls-auth /usr/local/etc/openvpn/keys/ta.key 0
dh /usr/local/etc/openvpn/keys/dhparam.pem
ca /usr/local/etc/openvpn/keys/ca_all.crt
cert /usr/local/etc/openvpn/keys/vpn_server.crt
key /usr/local/etc/openvpn/keys/vpn_server.key
crl-verify /usr/local/etc/openvpn/keys/signing-ca.crl
server 10.15.0.0 255.255.255.0
client-config-dir /usr/local/etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
push "dhcp-option DNS 10.15.0.1"
comp-lzo
keepalive 10 120
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
verb 3
mute 20
push "route 192.168.0.0 255.255.255.0"
cipher AES-256-GCM

Для того, чтобы зафиксировать определенный виртуальный адрес за клиентом, нужно в директории /usr/local/etc/openvpn/ccd создать файл с именем клиента, в который добавить строку установки адреса. Например:

echo 'ifconfig-push 10.15.0.5 255.255.255.0' > /usr/local/etc/openvpn/ccd/client1

Необходимо отметить, что имя клиента может содержать пробелы. В этом случае команда будет выглядеть так:

echo 'ifconfig-push 10.15.0.5 255.255.255.0' > /usr/local/etc/openvpn/ccd/'Ivan I. Ivanov'

Запустим сервер:

service openvpn start

Настройка межсетевого экрана

Добавить загрузку модуля ядра:

echo 'firewall_enable="YES"' >> /etc/rc.conf
echo 'firewall_script="/etc/rc.firewall.vpn"' >> /etc/rc.conf

Создать файл правил:

touch /etc/rc.firewall.vpn
chmod +x /etc/rc.firewall.vpn
rc.firewall.vpn
#!/bin/sh
vpn_port="1194"
ssh_port="22"
/sbin/ipfw -f flush
/sbin/ipfw add check-state
/sbin/ipfw add allow ip from any to any via lo0
/sbin/ipfw add deny ip from any to 127.0.0.0/8
/sbin/ipfw add deny ip from 127.0.0.0/8 to any
/sbin/ipfw add deny icmp from any to any frag
#
/sbin/ipfw add allow ip from any to me ${vpn_port}
/sbin/ipfw add allow ip from me ${vpn_port} to any
#
/sbin/ipfw add allow ip from any to me ${ssh_port}
/sbin/ipfw add allow ip from me ${ssh_port} to any

Управление межсетевым экраном:

servce ipfw start/restart/stop

Настройка клиента в ОС Windows

Сначала нужно установить openvpn-client из дистрибутива. Затем нужно получить с сервера удостоверяющего центра файлы ключа, сертификата клиента и файл списка отозванных сертификатов, а с сервера VPN файл ключа TLS. Полученные файлы нужно записать в директорию c:\openvpn. После этого нужно создать файл конфигурации следующего содержания:

vpn_client.conf
dev tun
proto udp
remote 89.31.21.23 1194
auth sha1
auth-nocache
client
cipher AES-256-GCM
remote-cert-tls server
tls-client
tls-auth c:\\openvpn\\ta.key 1
ca c:\\openvpn\\ca_all.crt
cert c:\\openvpn\\USERNAME.crt
key c:\\openvpn\\USERNAME.key
crl-verify c:\\openvpn\\signing-ca.crl
comp-lzo
mssfix 1450
ping-restart 60
ping 10
verb 3
persist-key
persist-tun