· Tomasz Siroń · Technologia
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.
Edytuj 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
.
- Pobiera DN grupy i zakres IP przypisany w pliku
-
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.
- Przy łączeniu użytkownika (
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? Skontaktuj się z nami – pomożemy Ci wdrożyć VPN dostosowany do Twoich potrzeb!
Najczęściej zadawane pytania (FAQ)
1. Czy można skonfigurować OpenVPN z AD na innej dystrybucji niż Debian 12?
Tak. Główna różnica będzie w sposobie instalacji i lokalizacji plików. Proces integracji z AD (LDAP) pozostaje bardzo podobny. Możesz użyć Ubuntu, Rocky Linux, RedHat, czy CentOS.
2. Jakie porty muszę otworzyć dla OpenVPN i LDAP?
- OpenVPN: najczęściej
1194/UDP
lub jak w naszym przykładzie443/UDP
. - LDAP/LDAPS: zazwyczaj
389/TCP
(LDAP) lub636/TCP
(LDAPS).
3. Czy muszę używać LDAPS zamiast LDAP?
Zalecane jest LDAPS (szyfrowanie TLS) w środowiskach produkcyjnych, aby hasła i zapytania nie były przesyłane w formie jawnej. Artykuł przedstawia LDAP, ponieważ komunikacja była realizowana między AD a OpenVPN w dedykowanej sieci VLAN.
4. Jak poradzić sobie z błędem „LDAP bind failed”?
Sprawdź:
- Poprawność danych BindDN i hasła.
- Adres i port serwera AD.
- Czy zapora sieciowa (firewall) nie blokuje żądania.
5. Czy mogę dynamicznie zarządzać regułami iptables w zależności od grup w AD?
Tak. Wykorzystaj skrypt (np. vpn_iptables.sh
), który pobiera grupy użytkownika przez ldapsearch
i dodaje/usuwa reguły w iptables
zależnie od przynależności grupowej.
6. Jak uruchomić klienta OpenVPN na różnych systemach?
- Windows: OpenVPN GUI
- Linux:
sudo openvpn --config client.ovpn
- macOS: Tunnelblick
- Android/iOS: OpenVPN Connect
7. Jakie są minimalne wymagania sprzętowe dla serwera OpenVPN?
- CPU: 1 vCPU
- RAM: 2 GB
- Dysk: ok. 20 GB
- Łącze: stabilne pasmo (np. 1–2 Mb/s per użytkownik)