Administracja IT i DevOps

Jak zintegrować OpenVPN z Active Directory

Jak zintegrować OpenVPN z Active Directory
23 grudnia 2024|5 minut czytania

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
  1. 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
  1. 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).
  1. 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.
  1. 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?

KONTAKT

Potrzebujesz więcej wskazówek?

Skontaktuj się z nami – pomożemy Ci wdrożyć VPN dostosowany do Twoich potrzeb!

Wysyłając formularz przekazujesz nam swoje dane w celu odpowiedzi na zapytanie i przygotowania oferty. Administratorem danych jest SparkSome Venture Sp. z o.o. Szczegóły przetwarzania danych znajdziesz w Polityce prywatności.

Dodatkowo możemy się z Tobą skontaktować:
Wybieram kanał

Zgody są dobrowolne i możesz je wycofać w każdej chwili. Szczegóły dotyczące przetwarzania danych znajdziesz w Polityce prywatności.

Najczęściej zadawane pytania (FAQ)

O autorze

Tomasz Siroń, Board Member & Infrastructure Architect w SparkSome Venture

Tomasz Siroń

BOARD MEMBER & INFRASTRUCTURE ARCHITECT

Od lat projektuję i wdrażam rozwiązania infrastrukturalne dla firm i organizacji. Specjalizuję się w systemach Linux, DevOps, Docker, Kubernetes i bezpieczeństwie infrastruktury. Jako członek zarządu SparkSome Venture odpowiadam za stronę technologiczną, architektury systemów i projekty dla klientów biznesowych. Kocham łączyć teorię z praktyką, właśnie dlatego od 2024 roku prowadzę autorskie szkolenia techniczne dla firm i uczelni. Certyfikowany przez MikroTik, magister mechatroniki, ale przede wszystkim praktyk, który łączy świat systemów OpenSource, sieci i automatyzacji z elektroniką, IoT, radiokomunikacją oraz projektami badawczo-inżynieryjnymi.

Jak zintegrować OpenVPN z Active Directory | SparkSome