Wymagania wstępne

  • Serwer Rocky Linux 9.5 z dostępem root/sudo
  • Publiczny IP lub domena dostępna na porcie 1194/UDP
  • Dostęp do interfejsu webowego Boss w celu wgrania certyfikatów klienta

Krok 1: Instalacja wymaganych pakietów

sudo dnf -y install epel-release
sudo dnf -y install openvpn easy-rsa

Dlaczego:

  • epel-release — włącza repozytorium Extra Packages for Enterprise Linux
  • openvpn — instaluje serwer VPN oraz pliki systemd
  • easy-rsa — dostarcza skrypty do tworzenia prywatnego CA i wydawania certyfikatów

Krok 2: Przygotowanie katalogu Easy-RSA

sudo mkdir -p /etc/openvpn/server/easy-rsa
sudo cp -r /usr/share/easy-rsa/3/* /etc/openvpn/server/easy-rsa/
cd /etc/openvpn/server/easy-rsa

Dlaczego:

  • Tworzysz dedykowane środowisko PKI (porządek i izolacja)
  • Kopiujesz skrypty Easy-RSA, aby PKI było samodzielne
  • Przechodzisz do katalogu, żeby uruchamiać polecenia CA/PKI

Krok 3: Definiowanie domyślnych wartości certyfikatów (vars)

Edytuj plik:

nano /etc/openvpn/server/easy-rsa/vars

Dodaj:

set_var EASYRSA_REQ_COUNTRY "PL"
set_var EASYRSA_REQ_PROVINCE "Malopolskie"
set_var EASYRSA_REQ_CITY "Krakow"
set_var EASYRSA_REQ_ORG "BossVPN"
set_var EASYRSA_REQ_EMAIL "admin@icelab.pl"
set_var EASYRSA_REQ_OU "IT"

Dlaczego: Wstępne wypełnienie pól certyfikatu — spójność i szybkość.

Krok 4: Budowa PKI, CA, kluczy serwera i DH

./easyrsa init-pki
./easyrsa --batch build-ca nopass
./easyrsa --batch build-server-full boss-vpn nopass
./easyrsa gen-dh
./easyrsa gen-crl

Dlaczego:

  • init-pki — tworzy strukturę katalogów PKI
  • build-ca — tworzy główny urząd certyfikacji (chroń jego klucz prywatny!)
  • build-server-full — wydaje certyfikat tożsamości serwera
  • gen-dh — zapewnia bezpieczną wymianę kluczy
  • gen-crl — pozwala serwerowi odrzucać unieważnione certyfikaty klientów

Krok 5: Konfiguracja serwera OpenVPN

Edytuj plik:

nano /etc/openvpn/server/boss-vpn.conf

Minimalna konfiguracja produkcyjna:

# === Sieć ===
port 1194                 # Port UDP dla VPN
proto udp                 # UDP jest szybszy dla VPN
dev tun                   # Tunel warstwy 3 (routing)
topology subnet           # Nowoczesny model adresowania
server 10.200.0.0 255.255.255.0  # Podsieć VPN (serwer .1, klienci .2-.254)

# === Bezpieczeństwo / hardening ===
user nobody               # Zrzuć uprawnienia po starcie
group nobody
tls-version-min 1.2       # Wymuś nowoczesny TLS
data-ciphers AES-256-GCM  # Preferowany szyfr danych
data-ciphers-fallback AES-256-GCM
remote-cert-tls client    # Wymagaj certyfikatów klienta podpisanych przez nasze CA
crl-verify /etc/openvpn/server/easy-rsa/pki/crl.pem # Odrzucaj unieważnione certyfikaty
max-clients 50            # Miękki limit jednoczesnych klientów

# === Certyfikaty ===
ca   /etc/openvpn/server/easy-rsa/pki/ca.crt
cert /etc/openvpn/server/easy-rsa/pki/issued/boss-vpn.crt
key  /etc/openvpn/server/easy-rsa/pki/private/boss-vpn.key
dh   /etc/openvpn/server/easy-rsa/pki/dh.pem

# === Zachowanie klienta ===
keepalive 10 120          # Wykrywaj martwe połączenia
persist-key               # Nie odczytuj kluczy ponownie przy restarcie
persist-tun               # Nie niszcz interfejsu tunelu
explicit-exit-notify 1    # Sygnalizuj klientom przy zatrzymaniu serwera

# === Nadpisania per-klient ===
client-config-dir /etc/openvpn/server/ccd  # Statyczne IP per klient
client-to-client        # Włączone — laptop Windows może komunikować się z Boss

# === Logi ===
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3                     # Rozsądny poziom szczegółowości

Krok 6: Konfiguracja CCD (nadpisania per-klient)

sudo mkdir -p /etc/openvpn/server/ccd
nano /etc/openvpn/server/ccd/boss-ABC123

Zawartość pliku:

ifconfig-push 10.200.0.10 255.255.255.0

Dlaczego: Nadaje urządzeniu przewidywalny adres IP w VPN — kluczowe dla monitoringu i routingu statycznego.

Krok 7: Ochrona kluczy prywatnych i ustawienie uprawnień

sudo chmod 600 /etc/openvpn/server/easy-rsa/pki/private/*.key
sudo chown -R root:nobody /etc/openvpn/server/ccd
sudo chmod 750 /etc/openvpn/server/ccd
sudo chmod 640 /etc/openvpn/server/ccd/*

Dlaczego: Klucze muszą być nieczytelne dla innych użytkowników. Katalog CCD kontrolowany przez roota.

Uwaga: Na Rocky Linux OpenVPN zrzuca uprawnienia do nobody:nobody. Aby VPN mógł odczytać pliki CCD, ustaw grupę na nobody i zapewnij odpowiednie uprawnienia. W przeciwnym razie zobaczysz Permission denied (errno=13) w logach.

Krok 8: Włączenie przekazywania IP

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Dlaczego: Umożliwia routing między siecią VPN a innymi sieciami.

Krok 9: Uruchomienie i włączenie usługi OpenVPN

sudo systemctl enable --now openvpn-server@boss-vpn
sudo systemctl status openvpn-server@boss-vpn

Dlaczego: Uruchamia usługę teraz i przy starcie systemu; status potwierdza działanie.

Krok 10: Wydanie certyfikatu klienta (urządzenie Boss)

cd /etc/openvpn/server/easy-rsa
./easyrsa --batch build-client-full boss-ABC123 nopass

Dlaczego: Tworzy unikalną tożsamość dla każdego urządzenia.

Zasada nazewnictwa: boss-<ostatnie_6_cyfr_MAC> (np. boss-ABC123)

Krok 11: Przygotowanie plików dla Boss

sudo cp /etc/openvpn/server/easy-rsa/pki/ca.crt ~/boss-41540D-ca.crt
sudo cp /etc/openvpn/server/easy-rsa/pki/issued/boss-41540D.crt ~/boss-41540D-cert.crt
sudo cp /etc/openvpn/server/easy-rsa/pki/private/boss-41540D.key ~/boss-41540D-key.key

Dlaczego: Boss wymaga osobnych plików: certyfikatu CA, certyfikatu klienta i klucza prywatnego.

Krok 12: Konfiguracja urządzenia Boss (interfejs webowy)

W interfejsie webowym Boss:

Settings → VPN Client Config → Add Generic VPN

Wypełnij:

  • TUN / UDP / Remote: YOUR_SERVER_IP / Port: 1194
  • Authentication: Client certificate
  • Upload: certyfikat CA, certyfikat klienta, klucz prywatny
  • Cipher: AES-256-GCM
  • Auth: SHA256
  • TLS Crypt: Zostaw odznaczone
  • Save and Activate: Kliknij “SAVE” — urządzenie Boss automatycznie się połączy

Dlaczego: Ustawienia muszą odpowiadać konfiguracji serwera.

Krok 13: Weryfikacja połączenia

Na serwerze:

sudo cat /var/log/openvpn-status.log
sudo tail -f /var/log/openvpn.log

Dlaczego: Potwierdza, że klient się uwierzytelnił i otrzymał oczekiwany adres IP.

Krok 14: Codzienne operacje

Lista wydanych certyfikatów:

ls /etc/openvpn/server/easy-rsa/pki/issued/boss-*

Sprawdzenie podłączonych urządzeń:

sudo cat /var/log/openvpn-status.log

Unieważnienie certyfikatu urządzenia:

cd /etc/openvpn/server/easy-rsa
./easyrsa revoke boss-ABC123
./easyrsa gen-crl
sudo systemctl restart openvpn-server@boss-vpn

Dlaczego: Unieważnienie + CRL gwarantuje, że zgubione/skradzione urządzenie nie połączy się ponownie.

Rozwiązywanie problemów

  • Usługa nie startujejournalctl -u openvpn-server@boss-vpn -b
  • Brak ruchu poza serwerem → sprawdź przekazywanie IP i firewall/NAT
  • Złe IP na kliencie → sprawdź czy nazwa pliku CCD odpowiada dokładnie CN klienta
  • Wielu klientów → mogą komunikować się między sobą (client-to-client włączone)

Podsumowanie

Po wykonaniu tych kroków masz:

  • Serwer OpenVPN na Rocky Linux 9.5 z nowoczesną kryptografią
  • Urządzenia Boss uwierzytelnione unikalnymi certyfikatami
  • Włączone client-to-client — laptop Windows może komunikować się z urządzeniami Boss
  • Jasne procedury operacyjne (status, unieważnianie, logi)

Następne kroki: wykonaj kopię zapasową klucza prywatnego CA i monitoruj openvpn-status.log.