Jak zintegrować OpenVPN z Active Directory

Kompletny przewodnik
OpenVPN z integracją LDAP na Debianie 12 to wydajne i darmowe rozwiązanie pozwalające na bezpieczne połączenia VPN w oparciu o użytkowników i grupy Active Directory (AD) Microsoft. W tym artykule pokażemy, jak skonfigurować OpenVPN do pracy z AD, uwierzytelniając użytkowników oraz dynamicznie zarządzając dostępem do zasobów sieciowych przez odpowiednie grupy.
Dlaczego warto wybrać OpenVPN z Active Directory?
Integracja OpenVPN z Active Directory na Debianie 12 pozwala firmom na:
- Centralne zarządzanie użytkownikami i dostępem.
- Wykorzystanie istniejących grup i polityk w Active Directory.
- Zredukowanie kosztów licencji dzięki zastosowaniu otwartego oprogramowania.
Dzięki dynamicznym regułom iptables i uwierzytelnianiu LDAP, OpenVPN staje się idealnym rozwiązaniem VPN dla firm szukających elastycznego i bezpiecznego sposobu zarządzania dostępem do sieci.
Architektura rozwiązania
Rozwiązanie opiera się na:
- Serwerze OpenVPN uruchomionym na Linuxie (Debian 12).
- Serwerze Active Directory bazującej na korporacyjnym AD w środowisku Mircrosoft Windows Serwer.
- Integracji LDAP umożliwiającej weryfikację użytkowników w Active Directory.
- Dynamicznym zarządzaniu regułami zapory sieciowej za pomocą
iptables, dostosowanymi do grup AD.
Użytkownicy z określonych grup AD zyskują dostęp do zasobów, takich jak np. serwery plików, aplikacje księgowe czy aplikacje korporacyjne.
Kroki konfiguracji OpenVPN z integracją Active Directory
1. Przygotowanie środowiska Debian 12
Zainstaluj niezbędne pakiety:
sudo apt update
sudo apt install openvpn ldap-utils jq iptables-persistent
Skonfiguruj iptables-persistent, aby reguły zapory były zachowane po restarcie:
sudo dpkg-reconfigure iptables-persistent
2. Tworzenie certyfikatów TLS
OpenVPN wymaga certyfikatów do szyfrowania połączeń:
- Wygeneruj certyfikaty serwera i klientów.
- Umieść je w katalogu
/etc/openvpn/keys.
3. Konfiguracja LDAP
Skopiuj i dostosuj plik ldap.conf:
sudo nano /etc/openvpn/auth/ldap.conf
Przykładowa konfiguracja: Należy skonfigurować adres naszego serwera AD: 192.168.1.10, użytkownika wraz z domeną oraz hasło. Zalecane jest tworzenie użytkownika w trybie „read-only”, aby ograniczyć jego uprawnienia do odczytu danych w katalogu usług katalogowych.
<LDAP>
URL ldap://192.168.1.10
BindDN "[email protected]"
Password "haslo"
BaseDN "DC=sparksome,DC=local"
Filter "(&(sAMAccountName=%u)(memberOf=CN=VPN-enabled,OU=VPN Groups,DC=sparksome,DC=local))"
</LDAP>
4. Konfiguracja OpenVPN
Edytuj plik server.conf:
sudo nano /etc/openvpn/server.conf
Podstawowe ustawienia:
port 443
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh.pem
server 10.123.123.0 255.255.255.0
script-security 3
auth-user-pass-verify "/etc/openvpn/scripts/vpn_iptables.sh" via-file
client-connect "/etc/openvpn/scripts/vpn_iptables.sh"
client-disconnect "/etc/openvpn/scripts/vpn_iptables.sh"
Dlaczego UDP? Protokół UDP jest szybszy i bardziej wydajny niż TCP, co ma znaczenie przy połączeniach VPN. Jednak dla krajów, takich jak Egipt, które blokują ruch VPN, warto rozważyć konfigurację TCP na porcie 443. TCP 443 symuluje zwykły ruch HTTPS, pozwalając obejść blokady. Więcej informacji znajdziesz w tym artykule.
5. Skrypty zarządzania iptables
- Dynamiczne reguły dostępu: Skrypt
vpn_iptables.sh:
sudo nano /etc/openvpn/scripts/vpn_iptables.sh
chmod +x /etc/openvpn/scripts/vpn_iptables.sh
Przykładowa logika:
#!/bin/bash
USER=$common_name
GROUPS=$(ldapsearch -x -H ldap://192.168.1.10 -D "[email protected]" -w "haslo" -b "DC=sparksome,DC=local" "(sAMAccountName=${USER})" memberOf | grep CN=)
if echo $GROUPS | grep -q "VPN-FileSRV"; then
iptables -A FORWARD -s $ifconfig_pool_remote_ip -d 10.123.123.10 -j ACCEPT
fi
- Przywracanie reguł firewall’a:
restore_iptables.sh:
sudo nano /etc/openvpn/scripts/restore_iptables.sh
chmod +x /etc/openvpn/scripts/restore_iptables.sh
Dodaj zadanie cron:
sudo crontab -e
0 0 * * * /etc/openvpn/scripts/restore_iptables.sh
6. Integracja z Active Directory
Dodaj grupy w AD:
VPN-enabled– dostęp podstawowy.VPN-FileSRV,VPN-Monitoring– dostęp do zasobów.

access_rules.json:{
"VPN-FileSRV": {
"group": "CN=VPN-FileSRV,OU=VPN Groups,DC=sparksome,DC=local",
"ip_range": "10.123.123.10/32"
}
}
Testowanie konfiguracji
- Zainstaluj klienta OpenVPN.
- Wygeneruj konfigurację klienta (
.ovpn):
client
dev tun
proto udp
remote vpn.server.com 443
auth-user-pass
- Połącz się z serwerem i przetestuj dostęp do zasobów.

Jak to działa?
LDAPSearch – weryfikacja użytkowników
Narzedzie ldapsearch pozwala na weryfikację przynależności użytkownika do określonych grup w Active Directory. W konfiguracji OpenVPN skrypt vpn_iptables.sh wykorzystuje ldapsearch, aby pobrać informacje o grupach AD, do których należy użytkownik. Przykładowe zapytanie LDAP może wyglądać następująco:
ldapsearch -x -H ldap://192.168.1.10 -D "[email protected]" -w "haslo" -b "DC=sparksome,DC=local" "(sAMAccountName=USERNAME)" memberOf
Parametry zapytania:
- -x: Użycie prostej autoryzacji LDAP.
- -H: Adres serwera LDAP.
- -D: Konto używane do połączenia z LDAP.
- -w: Hasło do konta używanego do połączenia.
- -b: Podstawa wyszukiwania w hierarchii LDAP.
- sAMAccountName: Filtr wyszukiwania dla nazwy użytkownika.
Na podstawie odpowiedzi serwera LDAP, skrypt sprawdza, czy użytkownik należy do określonej grupy AD i odpowiednio zarządza regułami zapory.
Dynamiczne reguły zapory sieciowej
Dynamiczne zarządzanie regułami iptables pozwala dostosować dostęp do zasobów sieciowych w oparciu o grupy AD, do których należy użytkownik. Skrypt vpn_iptables.sh wykonuje następujące kroki:
- Skrypt korzysta z danych przekazywanych przez OpenVPN, takich jak nazwa użytkownika (
common_name) i adres IP przydzielony użytkownikowi (ifconfig_pool_remote_ip).
- Na podstawie wyników zapytania LDAP skrypt iteruje przez grupy zdefiniowane w pliku
access_rules.json. Dla każdej grupy:
- Pobiera DN grupy i zakres IP przypisany w pliku
access_rules.json. - Sprawdza, czy użytkownik należy do grupy, używając polecenia
ldapsearch.
- Dodanie lub usunięcie reguł
- Przy łączeniu użytkownika (
client-connect), skrypt dodaje regułyiptables, które umożliwiają ruch do zasobów określonych waccess_rules.json. - Przy rozłączaniu użytkownika (
client-disconnect), reguły te są usuwane.
Przykładowe polecenie dodania reguły:
sudo iptables -I FORWARD -s $USER_IP -d $IP_RANGE -j ACCEPT -m comment --comment "Użytkownik: $USER_NAME, Data połączenia: $(date)"
Przykładowe polecenie usunięcia reguły:
sudo iptables -D FORWARD -s $USER_IP -d $IP_RANGE -j ACCEPT
Dynamiczne zarządzanie regułami pozwala na precyzyjną kontrolę dostępu i automatyczne dostosowanie zapory do aktualnych połączeń użytkowników.
Podsumowanie
Artykuł opisuje wdrożony przez nas system VPN dla jednej z firm. Dzięki integracji OpenVPN z Active Directory możesz łatwo zarządzać dostępem do zasobów sieciowych, wykorzystując istniejące grupy w AD – bez konieczności zakupu licencji na rozwiązania VPN. Dynamiczne reguły iptables pozwalają na kontrolę ruchu sieciowego analogicznie do drogich rozwiązań VPN.
Potrzebujesz więcej wskazówek?
