GNU/Linux >> Belajar Linux >  >> Panels >> OpenVPN

Menyiapkan server OpenVPN dengan Okta Single Sign-on Web Authentication dan Viscosity

Setelah menyiapkan server OpenVPN Anda sendiri, Anda mungkin ingin meningkatkan keamanannya. Salah satu cara untuk melakukannya dan merampingkan proses autentikasi Anda adalah dengan menggunakan Single Sign-in atau Single Sign-On (SSO), terkadang juga disebut sebagai SAML (Ini adalah protokol SSO). Ini menambahkan langkah keamanan lain untuk mencegah pengguna yang tidak diinginkan terhubung ke server Anda sementara pada saat yang sama berintegrasi dengan pengguna yang ada, sistem manajemen identitas atau klien, atau proses otentikasi.

Panduan ini memberikan contoh bagaimana ini dapat bekerja dengan Okta, platform identitas berbasis cloud yang populer. Dasar-dasar contoh ini diterjemahkan ke sebagian besar Sistem Manajemen Identitas (IDMS) hanya dengan perubahan pada cara Anda berkomunikasi dengan IDMS pilihan Anda.

Harap perhatikan contoh ini dirancang untuk menunjukkan dasar-dasar bagaimana sistem IDM atau SSO dapat berintegrasi dengan OpenVPN di sisi server, tidak dirancang untuk digunakan sendiri apa adanya.

Persiapan

Untuk panduan ini, kami berasumsi:

  • Anda memiliki akun Okta (panduan ini akan berfungsi dengan uji coba gratis Okta)
  • Anda telah menginstal versi terbaru Ubuntu (20,04 pada saat penulisan)
  • Anda memiliki root akses ke instalasi ini
  • Anda memiliki akses publik ke Sistem ini pada port 80 dan 443 untuk akses HTTP &HTTPS, dan NAMA-A DNS menunjuk ke sana (misalnya, openvpnsso.server.com)
  • Anda sudah memiliki salinan Viskositas yang terinstal di perangkat klien Anda dan sudah menyiapkan untuk server ini

Dokumentasi untuk Okta dapat ditemukan di https://help.okta.com/en/prod/Content/index.htm

Contoh Okta lebih lanjut dapat ditemukan di halaman GitHub mereka di https://github.com/okta

Panduan ini hanya boleh digunakan sebagai contoh untuk menyiapkan SSO di server Anda. Situs web Python Flask yang disediakan dirancang sebagai contoh saja dan tidak dimaksudkan untuk penggunaan produksi.

Jika Anda memulai dari awal dengan penginstalan Ubuntu 20.04 yang baru, proses dari sini hingga selesai hanya akan memakan waktu sekitar 20 menit.

Pengaturan Okta

Pertama, kita perlu mengonfigurasi Okta untuk situs web baru yang akan menangani komunikasi antara OpenVPN dan Okta.

  • Masuk ke Okta di akun admin Anda
  • Di sebelah kiri perluas menu, dan buka Aplikasi> Aplikasi
  • Klik Buat Integrasi Aplikasi
  • Pilih ODIC - OpenID Connect , lalu Aplikasi Web dan klik Berikutnya
  • Berikan nama integrasi Aplikasi your Anda nama yang akan Anda kenal seperti 'Server OpenVPN Saya'
  • Pastikan Kode Otorisasi adalah satu-satunya opsi yang dicentang di bawah 'Klien yang bertindak atas nama pengguna' di bawah 'Jenis hibah'
  • Mengganti '' sebagai berikut, setel URI pengalihan masuk Anda ke http://<yourserver.com>/authorization-code/callback
  • Secara opsional, ganti lagi '' sebagai berikut, setel URI pengalihan keluar Anda ke http://<yourserver.com>/logout
  • Setel Akses terkontrol sesuai pilihan Anda, untuk tujuan pengujian jika ini adalah akun uji coba, cukup pilih Izinkan semua orang di organisasi Anda mengakses
  • Klik Simpan

Setelah disimpan, halaman akan dimuat ulang. Tetap buka halaman ini, atau catat sekarang ID Klien , Rahasia klien , dan domain Okta , kita akan membutuhkan ini nanti.




Penyiapan Server

Selanjutnya, kita perlu mengatur server. Singkatnya, kita membutuhkan server OpenVPN yang siap digunakan, untuk menginstal nginx sebagai proxy untuk aplikasi Python Flask, membuat beberapa perubahan firewall kecil, menginstal sertifikat SSL, mengkonfigurasi aplikasi flask dan membuat beberapa perubahan kecil pada OpenVPN.

Persiapan Server

Pertama, login ke server Anda melalui SSH atau buka Terminal, dan jalankan perintah berikut untuk memastikan semuanya mutakhir

sudo apt-get update
sudo apt-get -y upgrade


Pengaturan Server OpenVPN

Pertama, kita membutuhkan Server OpenVPN yang siap digunakan. Jika Anda belum memilikinya di server ini, ikuti panduan Menyiapkan server OpenVPN dengan Ubuntu dan Viscosity.

Setelah penyiapan, pastikan Anda dapat terhubung.

Selanjutnya, kita perlu menambahkan beberapa baris ke konfigurasi OpenVPN Server:

  • Edit konfigurasi sudo nano /etc/openvpn/server.conf
  • Di akhir file, tambahkan berikut ini:
management 127.0.0.1 50123
auth-user-pass-optional
management-client-auth
  • Tekan Ctrl+X, untuk keluar, Y untuk menyimpan, lalu Enter untuk mengonfirmasi jalur
  • Mulai ulang server dengan sudo systemctl restart [email protected]

Jika Anda mencoba menyambung sekarang, sambungan pada akhirnya akan gagal dengan pesan otentikasi gagal.

Catatan:

Jika Anda memiliki server yang sudah ada yang memiliki skrip atau plugin autentikasi, ini harus dihapus karena SSO akan menggantikannya. Okta dapat dikonfigurasi dengan opsi 2FA meskipun kami tidak akan membahasnya dalam panduan ini, lihat dokumentasi Okta.

Pengaturan Server Web

Firewall

Jika Anda mengikuti panduan Menyiapkan server OpenVPN dengan Ubuntu dan Viscosity, pertama-tama kita perlu membuka firewall untuk mengizinkan lalu lintas HTTP &HTTPS, jalankan yang berikut:

  • sudo ufw allow http
  • sudo ufw allow https
  • sudo ufw reload

Instal ningx

Selanjutnya kita perlu menginstal nginx. nginx adalah HTTP dan server proxy terbalik yang akan melayani komponen aplikasi web kami dan memungkinkan penggunaan fitur seperti TLS/SSL. Lakukan hal berikut di Server Ubuntu Anda:

  • Jalankan sudo apt-get -y install nginx
  • Edit sudo nano /etc/nginx/sites-enabled/default
  • Gulir ke bawah ke baris server_name _; , dan ganti garis bawah (_) dengan nama DNS server Anda, misalnya myserver.com, sehingga menjadi seperti ini - server_name myserver.com;
  • Tekan Ctrl+X, untuk keluar, Y untuk menyimpan, lalu Enter untuk mengonfirmasi jalur
  • Muat ulang nginx dengan sudo nginx -s reload


Setup Let's Encrypt

Jika Anda sudah memiliki sertifikat SSL untuk bagian ini, Anda dapat melompat ke bagian berikutnya. Jika tidak, Let's Encrypt dan Certbot mempermudah mendapatkan sertifikat SSL.

  • Jalankan sudo apt-get install -y certbot python3-certbot-nginx
  • Jalankan yang berikut ini, ganti myserver.com dengan FQDN Anda, dan ikuti petunjuknya sudo certbot --nginx -d myserver.com . Anda dapat menentukan domain tambahan jika Anda memerlukannya, misalnya sudo certbot --nginx -d myserver.com -d www.myserver.com -d sso.myserver.com .
  • Mungkin perlu beberapa menit bagi certbot untuk merespons setelah menjawab perintah
  • Setelah selesai, certbot dapat memperbarui sertifikat Anda secara otomatis, cukup tambahkan cronjob untuk menjalankan /usr/bin/certbot renew --quiet sekali sehari.

Siapkan nginx

Sekarang Anda memiliki sertifikat SSL, kami dapat menyelesaikan penyiapan nginx.

  • Edit sudo nano /etc/nginx/sites-enabled/default
  • Hapus bagian berikut:
location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}
  • Gulir ke bawah setelah baris # managed by Certbot , tetapi sebelum } , dan rekatkan berikut ini:
  real_ip_header X-Real-IP;
  real_ip_recursive on;
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_pass http://127.0.0.1:8080;
    proxy_pass_header Server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass_header Server;
    proxy_connect_timeout 3s;
    proxy_read_timeout 10s;
  }
  • Tekan Ctrl+X, untuk keluar, Y untuk menyimpan, lalu Enter untuk mengonfirmasi jalur
  • Muat ulang nginx dengan sudo nginx -s reload


Pemasangan Aplikasi Web

Sekarang kita dapat menginstal aplikasi web dan memulainya. Kami akan membuat pengguna untuk menjalankan aplikasi web karena ini menciptakan sedikit lebih banyak keamanan. Jalankan yang berikut ini:

  • sudo apt-get install -y python3-pip Instal python pip agar kita dapat menginstal dependensi Flask
  • sudo adduser --system --no-create-home --group ssoappuser Buat pengguna untuk menjalankan aplikasi web sebagai
  • cd /home
  • sudo mkdir ssoapp
  • sudo chown ssoappuser:ssoappuser ssoapp
  • cd ssoapp
  • sudo git clone https://github.com/thesparklabs/openvpn-okta-sso-example.git Unduh aplikasi web dari GitHub
  • cd openvpn-okta-sso-example
  • sudo python3 -m pip install -r requirements.txt Instal dependensi untuk aplikasi web
  • sudo cp ssoapp.service /lib/systemd/system/ssoapp.service Instal file layanan
  • sudo chown root:root /lib/systemd/system/ssoapp.service
  • sudo systemctl daemon-reload

Penyiapan Aplikasi Web

Terakhir, kita hanya perlu beberapa pekerjaan penyiapan cepat agar aplikasi web berfungsi dan berbicara dengan Okta. Di sinilah Anda memerlukan ID Klien , Rahasia klien , dan domain Okta kami berkumpul menyiapkan Okta sebelumnya.

  • Buat salinan template rahasia dengan sudo cp client_secrets.json.dist client_secrets.json
  • Buat rahasia acak dengan kode berikut dan salin openssl rand -hex 20
  • Edit konfigurasi dengan sudo nano client_secrets.json
  • Ganti {{THIS_IS_A_SECRET}} dengan string acak yang kami buat dua langkah lalu
  • Ganti {{OKTA_DOMAIN}} di auth_uri, penerbit, token_uri, dan userinfo_uri dengan domain Okta Anda
  • Ganti {{CLIENT_ID}} dengan ID Klien . Anda
  • Ganti {{CLIENT_SECRET]] dengan rahasia Klien . Anda
  • Ganti {{DOMAIN_ANDA}} dengan alamat server Anda, mis. server saya.com
  • Tekan Ctrl+X, untuk keluar, Y untuk menyimpan, lalu Enter untuk mengonfirmasi jalur
  • Muat ulang nginx dengan sudo nginx -s reload

Kami sekarang dapat mengaktifkan dan memulai layanan aplikasi dengan

  • Aktifkan layanan untuk memulai saat sistem melakukan sudo systemctl enable ssoapp
  • Mulai layanan sudo systemctl start ssoapp

Penyiapan Klien

Jika Anda telah mengikuti panduan ini dengan menyertakan penggunaan kami Menyiapkan server OpenVPN dengan Ubuntu dan panduan Viskositas, tidak ada yang perlu Anda lakukan, cukup sambungkan dengan Viskositas.

Jika Anda telah memodifikasi server yang ada, satu-satunya perubahan yang perlu Anda lakukan adalah mematikan otentikasi pengguna/kata sandi jika aktif. Untuk melakukan ini, edit koneksi, buka Otentikasi dan hapus centang "Otentikasi Nama Pengguna/Kata Sandi", Simpan koneksi dan sambungkan.

Token Auth

OpenVPN auth-gen-token

Contoh aplikasi menyertakan dukungan untuk auth-gen-token. Karena kami tidak menggunakan nama pengguna/kata sandi melalui OpenVPN, ini perlu ditangani melalui antarmuka manajemen. Untuk mengaktifkannya, cukup tambahkan auth-gen-token 0 external-auth ke konfigurasi server Anda.

Penyegaran Token Okta

Contoh di atas dapat diperluas untuk menggunakan token Okta alih-alih token autentikasi OpenVPN untuk autentikasi ulang. Kami tidak akan memberikan contohnya karena dukungan bawaan OpenVPN akan mencakup sebagian besar pengaturan.

Namun, jika Anda ingin menggunakan Okta, berikut adalah hal utama yang perlu diingat:

  • Anda perlu memodifikasi balasan fungsi clientAllow untuk mendorong auth-token Anda.
  • Anda perlu memodifikasi fungsi clientReauth untuk mengambil kata sandi dari lingkungan klien yang diteruskan melalui antarmuka manajemen, ikuti dokumentasi Oktas untuk menyegarkan token ini, lalu kirim balasan autentikasi klien yang serupa dengan clientAllow termasuk token yang diperbarui.
  • Anda perlu memodifikasi konfigurasi server dan klien untuk memastikan bahwa reneg-sec kurang dari masa berlaku token Okta

OpenVPN
  1. Cara Mengatur dan Mengonfigurasi Server OpenVPN di Ubuntu 22.04

  2. Cara menginstal dan menghosting server OpenVPN dengan Docker

  3. Instal dan Konfigurasi OpenVPN Server FreeBSD 12

  1. Menyiapkan server Kebingungan dengan Obfsproxy dan Viskositas

  2. Menyiapkan server OpenVPN dengan CentOS dan Viscosity

  3. Menyiapkan server OpenVPN dengan DD-WRT dan Viskositas

  1. Menyiapkan server OpenVPN dengan Netgear dan Viscosity

  2. Menyiapkan server OpenVPN dengan OPNsense dan Viscosity

  3. Menyiapkan server OpenVPN dengan pfSense dan Viskositas