Для корректной работы сервера OpenVPN необходимо разрешить прохождение любого трафика через интерфейс OpenVPN, а также входящие подключения на внешний адрес сервера порт 1194/udp: # vi /etc/pf.conf
pass quick on { lo tun0 $int_if } inet
pass in on $ext_if inet proto udp from any to $ext_if port 1194
keep state
Перезагружаем набор рулесетов файрвола:
# pfctl -f /etc/pf.conf
Инсталляция на стороне клиента
Итак, VPN-сервер работает и готов принимать подключения. Развертывание VPN-клиентов для VPN-подключений удаленного доступа состоит из двух действий: установка программы OpenVPN GUI (http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe) и правка конфигурационного файла client*.ovpn.
C:Program FilesOpenVPNconfigmycompany_client1.ovpn
; Работаем в режиме клиента
client
dev tun
; Указываем IP-адрес и порт VPN-сервера
remote 213.167.XX.YY 1194
proto udp
resolv-retry infinite
nobind
pull
comp-lzo
persist-key
persist-tun
verb 3
; Я предпочитаю хранить crt- и key-файлы на флешке
ca "f:vpnmycompanyca.crt"
cert "f:vpnmycompanyclient1.crt"
key "f:vpnmycompanyclient1.key"
tls-auth "f:mycompanyta.key" 1
ns-cert-type server
; Нижеследующие алгоритмы должны совпадать с теми, что заданы на сервере
auth SHA1
cipher AES-256-CBC
; Без этих двух директив Vista-клиенты не смогут получать маршруты от сервера
; route-method exe
; route-delay 2
Теперь для подключения к VPN-серверу достаточно в трее щелкнуть правой кнопкой мыши на значке с красными мониторчиками, выбрать конфиг mycompany_client1 и нажать Connect.
Аутентификационный шлюз на базе pf и authpf
В BSD-системах, используя связку пакетного фильтра pf и авторизационного шелла authpf, можно контролировать доступ клиентов, подключающихся к VPN-службе и корпоративной сети. Схема работы такой конструкции довольно проста: пользователь логинится по ssh, и, в зависимости от введенных данных (имя и пароль), на сервере вступают в силу персональные правила файрвола, в данном случае разрешающие прохождение UDP-пакетов к порту 1194.
Но прежде чем производить настройку authpf, необходимо переопределить некоторые дефолтные значения переменных демона sshd(8). Так мы усложним потенциальному злоумышленнику успешное проведение атаки с целью перехвата и подмены ssh-сессии.
# vi /etc/ssh/sshd_config
# Работаем с использованием протоколов IPv4 и ssh2
AddressFamily inet
Protocol 2
# Ожидаем подключения по всем доступным сетевым интерфейсам
ListenAddress 0.0.0.0
# Запрещаем регистрацию root'а и применение пустых паролей
PermitRootLogin no
PermitEmptyPasswords no
# За счет использования протокола ssh2 и этих двух опций усложняем проведение атак типа ARP- и IP-spoofing
ClientAliveInterval 15
ClientAliveCountMax 3
# Отключаем DNS-резолвинг
UseDNS no
# Определяем списки контроля доступом
AllowGroups wheel users authpf
Для того чтобы внесенные изменения вступили в силу, необходимо дать указание демону перечитать свой конфиг:
# kill -HUP sed q /var/run/sshd.pid