Пошаговая инструкция по настройке OpenVPN сервера с авторизацией через LDAP (AD) на Debian Linux 11.
На сервере
1) Устанавливаем пакеты:
apt install openvpn openvpn-auth-ldap iptables -y
2) Выпускаем ключи для сервера и клиента
cd /etc/openvpn//usr/share/easy-rsa/easyrsa clean-all/usr/share/easy-rsa/easyrsa init-pki
Жмем "yes"
/usr/share/easy-rsa/easyrsa build-ca nopass
Задаем Common Name
/usr/share/easy-rsa/easyrsa build-server-full server nopass/usr/share/easy-rsa/easyrsa gen-dh/usr/share/easy-rsa/easyrsa build-client-full client nopass openvpn --genkey secret ./pki/ta.key
Копируем все серверные сертификаты и ключи в текущую директорию с OpenVPN
cp pki/ca.crt pki/dh.pem pki/ta.key pki/private/server.key pki/issued/server.crt ./
3) Создаем конфиг сервера
nano /etc/openvpn/server.conf
и копируем в него следующие строки:
#порт на котором работает сервер port 1195 # протокол - советую udp proto udp # - используемый тип устройства и номер dev tun0 mode server #указываем файл CA ca /etc/openvpn/ca.crt #указываем файл с сертификатом сервера cert /etc/openvpn/server.crt #указываем файл с ключем сервера key /etc/openvpn/server.key #указываем файл Диффи Хельман dh /etc/openvpn/dh.pem #задаем IP-адрес сервера и маску подсети # (виртуальной сети) - можно произвольную, (я выбрал такую) server 192.168.5.0 255.255.255.0 #задаем МАРШРУТ который передаём клиентту # и маску подсети для того чтобы он "видел" # сеть за опенвпн сервером (сеть 192.168.10.0/24) push "route 192.168.10.0 255.255.255.0" push "dhcp-option DNS 192.168.10.1" push "dhcp-option DOMAIN domain.local" topology subnet # указываем где хранятся файлы с # настройками IP-адресов клиентов client-config-dir /etc/openvpn/ccd # добавляем маршрут сервер-клиент route 192.168.5.0 255.255.255.0 # включаем TLS аутификацию tls-server # указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента tls-auth /etc/openvpn/ta.key 0 # таймаут до реконекта tls-timeout 120 auth MD5 # # включаем шифрацию пакетов cipher AES-256-CBC keepalive 10 120 # сжатие трафика comp-lzo adaptive # максимум клиентов max-clients 25 user nobody group nogroup # Не перечитывать ключи после получения # SIGUSR1 или ping-restart persist-key # Не закрывать и переоткрывать TUN\TAP # устройство, после получения # SIGUSR1 или ping-restart persist-tun # логирование (не забудьте создать эту директорию /var/log/openvpn/) status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log # разрешить менять внешний IP клиенту не переподключаясь float # Уровень информации для отладки verb 3 #plugin /usr/lib/openvpn/openvpn-auth-pam.so login script-security 3 plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/ldap/auth-ldap.conf #client-cert-not-required verify-client-cert none username-as-common-name ifconfig-pool-persist ipp.txt
4) Настраиваем хождение пакетов и фаервол
Редактируем файл /etc/sysctl.conf
nano /etc/sysctl.conf
Раскомментируем строку
net.ipv4.ip_forward=1
Применяем изменения
sysctl -p /etc/sysctl.conf
Создаем конфиг фаервола:
nano /etc/firewall
Пишем в файл следующее:
#!/bin/sh LANI=ens18 LAN=192.168.10.0/24 LANIP=192.168.10.254 VPNI=tun0 VPNIP=192.168.5.1 VPN=192.168.5.0/24 ######################################################## case "$1" in stop) echo "Shutting down firewall..." iptables --flush iptables --delete-chain iptables --table nat --flush iptables --table filter --flush iptables --table nat --delete-chain iptables --table filter --delete-chain iptables -t filter -P INPUT ACCEPT iptables -t filter -P OUTPUT ACCEPT iptables -t filter -P FORWARD ACCEPT echo "...done" ;; status) echo $"Table: filter" iptables --list echo $"Table: nat" iptables -t nat --list ;; restart|reload) $0 stop $0 start ;; ################ start) echo "Starting Firewall..." echo "" ####################################################### #LOCAL iptables -A INPUT -s 127.0.0.1 -j ACCEPT iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT iptables -A INPUT -s $LAN -j ACCEPT iptables -A OUTPUT -d $LAN -j ACCEPT iptables -A INPUT -i $LANI -j ACCEPT #OpenVPN iptables -t nat -A POSTROUTING -s $VPN -o $LANI -j MASQUERADE iptables -A INPUT -d $LAN -j ACCEPT iptables -A OUTPUT -s $LAN -j ACCEPT iptables -A INPUT -s $VPN -j ACCEPT iptables -A OUTPUT -d $VPN -j ACCEPT iptables -A INPUT -s $VPN -j ACCEPT iptables -A INPUT -d $VPN -j ACCEPT iptables -A OUTPUT -d $VPN -j ACCEPT iptables -A OUTPUT -s $VPN -j ACCEPT iptables -A FORWARD -s $VPN -d $LAN -j ACCEPT iptables -A FORWARD -d $VPN -s $LAN -j ACCEPT #LOG iptables -A INPUT -j LOG --log-prefix "DROP INPUT packet: " iptables -A OUTPUT -j LOG --log-prefix "DROP OUTPUT packet: " iptables -A FORWARD -j LOG --log-prefix "DROP FORWARD packet: " iptables -A INPUT -j DROP #iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP ############################################################# echo "...done" echo "--> IPTABLES firewall loaded/activated <--" ;; *) echo "Usage: firewall (start|stop|restart|status) EXTIF INTIF" exit 1 esac exit 0
Запускаем фаервол:
/etc/firewall start
Настраиваем автозапуск фаервола после перезагрузки. Открываем файл с настройками сетевых интерфейсов:
nano /etc/network/interfaces
Добавляем в самый конец строку:
post-up /etc/firewall start
5) Настройка авторизации через LDAP
Заводим на контроллере домена нового пользователя (обычного) "ovpn" и группу "vpn_access", в которую будем добавлять тех пользователей, которым будем предоставлять доступ.
Создаем папку для конфига и файл конфигурации:
mkdir /etc/openvpn/ldap nano /etc/openvpn/ldap/auth-ldap.conf
Копируем в него следующие строки, где надо подставляем свои значения, в URL указываем адрес контроллера домена:
# Параметры подключения к домену <LDAP> URL ldap://192.168.10.1 BindDN "CN=ovpn,CN=Users,DC=domain,DC=local" Password Pa$$word Timeout 15 TLSEnable no </LDAP> # Параметры авторизации пользователей входящих в группу RemoteAccess которая создана в подразделении Domain Groups в домене <Authorization> BaseDN "DC=domain,DC=local" SearchFilter "(&(sAMAccountName=%u))" # Require Group Membership RequireGroup true <Group> BaseDN "DC=domain,DC=local" SearchFilter "(cn=vpn_access)" MemberAttribute "member" </Group> </Authorization>
6) Создаем директорию ccd
mkdir ccd
7) Создаем файл ipp.txt
touch ipp.txt
8) Перезагружаемся
9) Вводим команду
ip a
И убеждаемся, что у нас появился интерфейс tun0
10) Настройка завершена
На клиенте
1) Достаем с сервера файлы ca.crt и ta.key любым удобным способом
2) Создаем файл с произвольным именем и расширением .ovpn (удобно использовать название компании), копируем в него следующие строки:
dev tun proto udp remote 10.20.30.40 #(реальный айпи вашего сервера) port 1195 #(порт к которому устанавливать соединение client resolv-retry infinite tls-client auth MD5 cipher AES-256-CBC #ns-cert-type server remote-cert-tls server comp-lzo persist-key persist-tun verb 3 ping 10 auth-user-pass route-method exe route-delay 2 key-direction 1 script-security 2 auth-nocache <ca> -----BEGIN CERTIFICATE----- Содержимое сертификата ca.crt -----END CERTIFICATE----- </ca> <tls-auth> -----BEGIN OpenVPN Static key V1----- Содержимое ключа ta.key -----END OpenVPN Static key V1----- </tls-auth>