Tag penggunaan ialah sebab biasa orang beralih kepada ciri ini: setiap sambungan sepatutnya membawa sesuatu seperti tapak atau peranan, dan pelayan sepatutnya membacanya tanpa mencipta format kelayakan kedua. OpenVPN komuniti sudah mempunyai mekanisme itu, dan ia kecil. Bahagian yang menyakitkan ialah jangkaan. Menetapkan pemboleh ubah biasa dalam profil klien tidak melakukan apa-apa pada pelayan, dan nilai yang tiba hanya membuktikan bahawa klien menghantarnya.

Ini ialah buku panduan untuk laluan yang berfungsi, langkah pengesahan yang menunjukkan apa yang benar-benar tiba, dan pengunduran yang tidak meninggalkan cangkuk yang separa dikonfigurasikan. Tiada apa di sini memerlukan sijil baharu, pemalam baharu atau sambungan protokol.

Tetapkan pemboleh ubah dan dayakan laluan

Dua baris melakukan kerja dalam profil klien, dan kedua-duanya diperlukan. Tanpa yang pertama tiada apa untuk dihantar; tanpa yang kedua klien tidak menawarkan maklumat rakan langsung. Urutan tidak penting, dan itu wajar diketahui kerana kedua-dua baris sering berakhir di bahagian berbeza profil yang dijana. Yang penting ialah kedua-duanya bertahan daripada apa-apa yang menulis semula profil sebelum klien membacanya.

setenv UV_DEPLOY field-support
push-peer-info

Awalan UV_ bukan hiasan. Pemboleh ubah DEPLOY biasa kekal setempat dalam proses klien dan tidak pernah diteruskan, manakala bentuk berawalan ialah ruang nama yang protokol simpan untuk medan yang ditentukan pengguna. Biarkan bahagian lain profil yang diluluskan tidak berubah dan sahkan bahawa binaan klien yang anda gunakan menyokong kedua-dua arahan sebelum menggunakan.

Satu semakan praktikal patut dibuat di sini, bukan di akhir: pastikan arahan itu sampai ke binari klien dan tidak ditelan pembalut. Klien grafik yang menjana baris arahannya sendiri, atau antara muka pengurusan yang memuat semula profil tersimpan, boleh membuang baris yang tidak dikenali. Jika pelayan tidak melihat apa-apa, inilah tempat pertama untuk dilihat.

Baca medan daripada cangkuk pelayan

Di pihak pelayan, maklumat rakan yang diterima disahkan dan dimasukkan ke dalam persekitaran aliran kerja sambungan, dan itulah yang menjadikannya boleh dibaca daripada cangkuk tanpa sebarang kerja protokol daripada anda. Pelayan tidak perlu menghuraikan saluran kawalan atau menyimpan apa-apa untuk anda; nilai itu hanya hadir semasa sambungan disediakan. Skrip client-connect minimum yang merekodkan label di sebelah nama yang disahkan kelihatan seperti ini.

#!/bin/sh
# /etc/openvpn/server/hooks/label.sh
printf '%s %s\n' "$common_name" "${UV_DEPLOY:-unset}" \
  >> /var/log/openvpn/deploy-labels.log

Baca pemboleh ubah melalui persekitaran dan bukannya menghuraikan log, dan sentiasa berikan nilai lalai. ${UV_DEPLOY:-unset} mengekalkan skrip berfungsi untuk klien yang tidak pernah menghantar medan itu, iaitu keadaan biasa semasa penggunaan berperingkat. Jangan curahkan seluruh persekitaran ke dalam log untuk mencari nama; ia mengandungi lebih banyak daripada label, termasuk nilai yang tidak anda niatkan untuk disimpan.

Jalankan skrip secara manual dan ia akan melaporkan unset untuk segala-galanya, kerana cangkerang manual tidak membawa persekitaran sambungan. Itu bukan pepijat dalam skrip dan bukan bukti bahawa medan itu hilang. Ujinya melalui sambungan sebenar, satu-satunya konteks di mana pemboleh ubah itu wujud.

Sahkan apa yang benar-benar tiba

Sambungkan satu klien dengan label dan satu tanpanya, kemudian baca fail. Pasangan itu ialah ujian: satu baris sepatutnya membawa nilai dan satu lagi nilai lalai, dan kedua-duanya harus menamakan identiti yang disahkan yang sama seperti yang anda jangkakan.

tail -n 5 /var/log/openvpn/deploy-labels.log
# field-support deployed-client-07
# unset         legacy-laptop-02

Baris komen itu ialah bentuk output, bukan transkrip daripada pelayan anda; baca fail anda sendiri. Jika klien kedua juga menunjukkan nilai, pemboleh ubah ditetapkan di tempat lain dalam persekitaran, dan anda membaca tetapan lapuk dan bukannya medan rakan.

Semak log pelayan untuk sambungan itu juga. Maklumat rakan boleh muncul di sana, yang memudahkan penyahpepijatan dan sebab untuk mengekalkan nilai itu membosankan: tiada nama orang, tiada nombor tiket, tiada apa yang anda tidak mahu pembaca log lihat.

Layan label sebagai dakwaan, bukan identiti

Sesiapa yang boleh menyunting profil klien boleh menukar tag, dan terowong yang disahkan tidak menjadikan tag itu berwibawa. Pengangkutan melindungi nilai semasa dalam perjalanan; ia tidak memperakui dakwaan itu. Kebenaran masih milik identiti yang disahkan dan rekod pendaftaran yang dimiliki pelayan, dengan label dibandingkan dengan rekod itu apabila ia penting.

Perbezaan itu menentukan di mana label boleh digunakan. Kegunaan baik ialah menghalakan sesi ke fail log yang betul, memilih kumpulan paparan dalam papan pemuka, atau menandai sesi sokongan supaya manusia boleh menemuinya kemudian. Kegunaan buruk ialah menerima peranti ke dalam subrangkaian, memilih dasar tembok api, atau memutuskan data pelanggan mana yang boleh dibaca oleh sesi.

Sahkan nilai itu sebelum ia sampai ke laluan, pertanyaan atau arahan cangkerang. Senarai benaran rentetan yang dijangka sudah cukup untuk tag penggunaan, dan ia tidak memakan kos. Jangan sekali-kali memasukkan rentetan yang dibekalkan rakan ke dalam baris arahan cangkerang, dan hadkan sebarang pemerhatian tersimpan kepada sesi dan bukan kepada alamat terowong yang akan digunakan semula oleh klien seterusnya.

case "${UV_DEPLOY:-}" in
  field-support|field-qa|lab) : ;;
  *) UV_DEPLOY=unknown ;;
esac

Undurkannya dengan bersih

Membuang ciri ini ialah dua pemadaman dan satu pengesahan. Buang baris setenv dan push-peer-info daripada profil klien, kemudian buang atau lumpuhkan cangkuk dan sasaran lognya pada pelayan.

grep -rn 'UV_DEPLOY\|push-peer-info' /etc/openvpn/
tail -n 3 /var/log/openvpn/deploy-labels.log

Sambungkan semula satu klien selepas itu dan sahkan bahawa baris log berhenti muncul. Cangkuk yang terus tercetus selepas perubahan profil biasanya profil kedua yang masih digunakan pada peranti ujian, dan menemuinya sekarang lebih murah daripada menemuinya semasa audit.

Yang tinggal pada akhirnya ialah sekeping metadata sesi yang kecil dan terhad dengan asal usul yang didokumenkan: klien mendakwanya, pelayan merekodkannya, dan tiada apa tentang akses bergantung padanya. Itulah versi berguna ciri ini, dan ia tidak memerlukan kelayakan baharu untuk sampai ke sana.

Artikel berkaitan