OpenVPN push-peer-info: erişim vermeden istemcileri etiketleme
Bir UV_ alanı kimliği doğrulanmış tünelden geçer, ancak değer hâlâ istemcinin iddiasıdır. Bağlayın, neyin geldiğini doğrulayın ve yetkilendirmeyi sunucu tarafında tutun.
Dağıtım etiketleri, insanların bu özelliğe yönelmesinin olağan nedenidir: her bağlantı bir site veya rol gibi bir şey taşımalı ve sunucu bunu ikinci bir kimlik bilgisi biçimi icat etmeden okumalıdır. Topluluk OpenVPN'de mekanizma zaten var ve küçüktür. Can yakan kısım beklentilerdir. İstemci profilinde sıradan bir değişken ayarlamak sunucuda hiçbir şey yapmaz ve gelen değer yalnızca istemcinin onu gönderdiğini kanıtlar.
Bu, çalışan yol, gerçekte neyin geldiğini gösteren doğrulama adımı ve yarım yapılandırılmış bir kanca bırakmayan geri alma için bir çalışma kılavuzudur. Burada hiçbir şey yeni bir sertifika, yeni bir eklenti veya protokol uzantısı gerektirmez.
Değişkeni ayarlayın ve yolu etkinleştirin
İstemci profilinde iki satır işi yapar ve ikisi de gereklidir. Birincisi olmadan gönderilecek bir şey yoktur; ikincisi olmadan istemci eş bilgisi hiç sunmaz. Sıra önemli değildir ve bunu bilmeye değer, çünkü iki satır genellikle oluşturulmuş bir profilin farklı bölümlerinde son bulur. Önemli olan, istemci okumadan önce profili yeniden yazan her şeyden ikisinin de sağ çıkmasıdır.
setenv UV_DEPLOY field-support
push-peer-info
UV_ öneki süs değildir. Sıradan bir DEPLOY değişkeni istemci sürecinde yerel kalır ve asla iletilmez, önekli biçim ise protokolün kullanıcı tanımlı alanlar için ayırdığı ad alanıdır. Onaylanmış profilin geri kalanını el değmeden bırakın ve dağıtmadan önce dağıttığınız istemci derlemesinin iki yönergeyi de desteklediğini doğrulayın.
Bir pratik kontrol buraya aittir, sona değil: yönergenin istemci ikili dosyasına ulaştığından ve bir sarmalayıcı tarafından yutulmadığından emin olun. Kendi komut satırını üreten grafik bir istemci ya da kayıtlı bir profili yeniden yükleyen bir yönetim arayüzü, tanımadığı satırları atabilir. Sunucu hiçbir şey görmüyorsa, ilk bakılacak yer burasıdır.
Alanı bir sunucu kancasından okuyun
Sunucu tarafında, alınan eş bilgisi doğrulanır ve bağlantı iş akışının ortamına eklenir, ve sizin tarafınızdan herhangi bir protokol çalışması olmadan onu bir kancadan okunabilir kılan tam da budur. Sunucunun kontrol kanalını ayrıştırması veya sizin için bir şey saklaması gerekmez; değer bağlantı kurulurken orada bulunur. Etiketi kimliği doğrulanmış adın yanına kaydeden asgari bir client-connect betiği şöyle görünür.
#!/bin/sh
# /etc/openvpn/server/hooks/label.sh
printf '%s %s\n' "$common_name" "${UV_DEPLOY:-unset}" \
>> /var/log/openvpn/deploy-labels.log
Değişkeni günlüğü ayrıştırmak yerine ortam üzerinden okuyun ve ona her zaman varsayılan bir değer verin. ${UV_DEPLOY:-unset} alanı hiç göndermeyen istemciler için betiği çalışır durumda tutar, ki bu aşamalı dağıtım sırasında olağan durumdur. Adı bulmak için tüm ortamı bir günlüğe boşaltmayın; içinde etiketten çok daha fazlası vardır, saklamayı düşünmediğiniz değerler dahil.
Betiği elle çalıştırın, her şey için unset bildirir, çünkü elle çalıştırılan bir kabuk bağlantının ortamını taşımaz. Bu betikte bir hata değildir ve alanın eksik olduğunun kanıtı da değildir. Değişkenin var olduğu tek bağlam olan gerçek bir bağlantı üzerinden test edin.
Gerçekte neyin geldiğini doğrulayın
Etiketli bir istemci ve etiketsiz bir istemci bağlayın, sonra dosyayı okuyun. Çift testtir: bir satır değeri, diğeri varsayılanı taşımalı ve ikisi de beklediğiniz aynı kimliği doğrulanmış kimliği adlandırmalıdır.
tail -n 5 /var/log/openvpn/deploy-labels.log
# field-support deployed-client-07
# unset legacy-laptop-02
O yorum satırları çıktının biçimidir, sunucunuzdan bir döküm değildir; kendi dosyanızı okuyun. İkinci istemci de bir değer gösteriyorsa, değişken ortamda başka bir yerde ayarlanmıştır ve eş alanı yerine eski bir ayarı okuyorsunuz.
Bağlantı için sunucu günlüğünü de kontrol edin. Eş bilgisi orada görünebilir, bu hata ayıklama için uygundur ve değerleri sıkıcı tutmak için bir nedendir: kişi adları yok, bilet numaraları yok, günlük okuyan birinin görmesini istemeyeceğiniz hiçbir şey yok.
Etiketi bir iddia olarak ele alın, kimlik olarak değil
İstemci profilini düzenleyebilen herkes etiketi değiştirebilir ve tünelin kimliği doğrulanmış olması etiketi yetkili kılmaz. Taşıma, değeri yol boyunca korur; iddiayı onaylamaz. Yetkilendirme hâlâ kimliği doğrulanmış kimliğe ve sunucunun sahip olduğu bir kayıt kaydına aittir, etiket de önemli olduğunda o kayıtla karşılaştırılır.
Bu ayrım, etiketin nerede kullanılabileceğini belirler. İyi kullanımlar bir oturumu doğru günlük dosyasına yönlendirmek, bir panoda görüntüleme grubu seçmek veya bir destek oturumunu etiketlemektir ki bir insan onu sonra bulabilsin. Kötü kullanımlar bir cihazı alt ağa kabul etmek, güvenlik duvarı ilkesi seçmek veya oturumun hangi müşterinin verilerini okuyabileceğine karar vermektir.
Değeri bir yola, sorguya veya kabuk komutuna ulaşmadan önce doğrulayın. Beklenen dizelerden oluşan bir izin listesi bir dağıtım etiketi için yeterlidir ve hiçbir maliyeti yoktur. Eş tarafından sağlanan bir dizeyi asla bir kabuk komut satırına eklemeyin ve saklanan her gözlemi oturumla sınırlayın, sonraki istemcinin yeniden kullanacağı bir tünel adresiyle değil.
case "${UV_DEPLOY:-}" in
field-support|field-qa|lab) : ;;
*) UV_DEPLOY=unknown ;;
esac
Temiz bir şekilde geri alın
Özelliği kaldırmak iki silme ve bir doğrulamadır. setenv ve push-peer-info satırlarını istemci profilinden çıkarın, ardından sunucudaki kancayı ve günlük hedefini kaldırın veya devre dışı bırakın.
grep -rn 'UV_DEPLOY\|push-peer-info' /etc/openvpn/
tail -n 3 /var/log/openvpn/deploy-labels.log
Sonrasında bir istemciyi yeniden bağlayın ve günlük satırının görünmeyi bıraktığını doğrulayın. Profil değişikliğinden sonra çalışmaya devam eden bir kanca genellikle bir test cihazında hâlâ dağıtılmış ikinci bir profildir ve onu şimdi bulmak bir denetim sırasında bulmaktan daha ucuzdur.
Sonunda geriye kalan, kaynağı belgelenmiş küçük ve sınırlı bir oturum üst verisi parçasıdır: istemci bunu iddia eder, sunucu bunu kaydeder ve erişimle ilgili hiçbir şey buna bağlı değildir. Bu, özelliğin yararlı sürümüdür ve oraya ulaşmak için yeni bir kimlik bilgisi gerekmez.