· 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:

  1. Serwerze OpenVPN uruchomionym na Linuxie (Debian 12).
  2. Serwerze Active Directory bazującej na korporacyjnym AD w środowisku Mircrosoft Windows Serwer.
  3. Integracji LDAP umożliwiającej weryfikację użytkowników w Active Directory.
  4. 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ń:

  1. Wygeneruj certyfikaty serwera i klientów.
  2. 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

  1. 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
    
  2. 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:

  1. VPN-enabled – dostęp podstawowy.
  2. VPN-FileSRV, VPN-Monitoring – dostęp do zasobów.

AD wraz z odpowiednimi grupami 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

  1. Zainstaluj klienta OpenVPN.
  2. Wygeneruj konfigurację klienta (.ovpn):
    client
    dev tun
    proto udp
    remote vpn.server.com 443
    auth-user-pass
    
  3. Połącz się z serwerem i przetestuj dostęp do zasobów. Klient open VPN

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:

  1. Skrypt korzysta z danych przekazywanych przez OpenVPN, takich jak nazwa użytkownika (common_name) i adres IP przydzielony użytkownikowi (ifconfig_pool_remote_ip).

  2. 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.
  3. Dodanie lub usunięcie reguł

    • Przy łączeniu użytkownika (client-connect), skrypt dodaje reguły iptables, które umożliwiają ruch do zasobów określonych w access_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? 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ładzie 443/UDP.
  • LDAP/LDAPS: zazwyczaj 389/TCP (LDAP) lub 636/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ź:

  1. Poprawność danych BindDN i hasła.
  2. Adres i port serwera AD.
  3. 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)
logo SparkSome

NIP: 6793289948

REGON: 527616291

KRS: 0001085500

© Copyright
SparkSome Venture sp. z o.o.

Kontakt