OpenVPN тіркелгі деректерінің файлы немесе басқару сокеті: қайсысын скрипттеу керек
auth-user-pass тіркелгі сұрауын қамтиды; басқару сокеті төртеуін де. Әсер етуді, скрипттеу құнын және әрқайсысының қызметте қалай сәтсіз болатынын салыстырыңыз.
OpenVPN-ды іске қосып, ешқашан қосылмайтын скрипт әдетте желі мәселесі емес: клиент терминалы жоқ сұрау алдында отыр. OpenVPN сол сұрауға адамсыз жауап берудің дәл екі қолдау көрсетілген жолын ұсынады: auth-user-pass артындағы тіркелгі деректерінің файлы және басқару сокеті, және олар бірін-бірі алмастырмайды. Файл бір директиваға тұрады және бір сұрауға жауап береді; сокет әр сұрауға жауап береді және loopback портын аша алатын кез келген нәрсеге аутентификациясыз басқару арнасын береді. Қайсысы сіздің орналастыруыңызға сай келетіні қай сұраудың шын мәнінде бөгеп тұрғанына және қандай құпияны тыныш қалдыруға мүмкіндігіңіз бар екеніне байланысты.
Механизмді таңдамас бұрын сұрауды атаңыз
Төрт сұрау терминалда бірдей көрінеді. Тіркелгі жұбы сервердің PAM немесе auth-user-pass-verify параметрінен келеді және оған auth-user-pass жауап береді. Жеке кілттің құпиясөзі кілт файлына тиесілі және --askpass арқылы оқылады немесе қолмен теріледі. PKCS#12 бумасы өз құпиясөзін сұрайды. Прокси аутентификациясы тіркелгі деректерін емес, --http-proxy алатын auth файлын пайдаланады.
OpenVPN systemd, PHP немесе Node-тың баласы ретінде жұмыс істегенде терминал жоқ, сондықтан олардың кез келгені үнсіз бөгейді. Процесс сол жерде отырады, журнал шифр жолынан кейін тоқтайды және бірлік ақыры уақыт шегінен өтеді; бұл үнсіздік адамдардың қай сұраудың күтіп тұрғанын қараудың орнына қайталау циклін немесе sleep қосының себебі. Төртеуіне де тек басқару сокеті жауап бере алады. Тіркелгі деректерінің файлы біріншісіне жауап береді, басқа ештеңеге емес.
auth-user-pass: бір файл, бір сұрау
Файл пайдаланушы атын бірінші жолда, құпиясөзді екінші жолда ұстайды, басқа ештеңе жоқ: тырнақша жоқ, кілт атаулары жоқ, түсініктеме жоқ. 600 режимін орнатып, иесін openvpn іске қосатын тіркелгі етіңіз, бұл қызмет үшін көбіне сіздің кіруіңіз емес, арнайы пайдаланушы. /root астындағы root-қа тиесілі файл shell-іңізде жұмыс істейтін пәрмен мен жүктелу кезінде сәтсіз болатын бірлік арасындағы айырмашылық.
Екі бөлшек дұрыс файлды сұрауға айналдырады. CRLF сақтайтын редактор құпиясөзге жабысқан каретка қайтарымын қалдырады, сондықтан сервер файлда дұрыс көрінетін құпиясөзді қабылдамайды; көзбен емес, cat -A немесе od -c арқылы тексеріңіз. Ал профиль ішіндегі аргументсіз auth-user-pass дизайн бойынша «пайдаланушыдан сұра» дегенді білдіреді, оны пәрмен жолындағы екінші директива үстем ете алмауы мүмкін, өйткені профиль өзі тұрған жерде талданады.
Опциялар тәртібі үшінші тұзақ және нұсқаға байланысты. Кейбір OpenVPN 2.4 құрастырулары --config алдында тұрған --auth-user-pass-ты елемейді, сондықтан сол екі опция басқа тәртіпте қосылады. Директиваны профильге немесе пәрмен жолында --config-тан кейін қойып, басқа нәрсені өзгертуден бұрын профильдегі әр кездесуді grep етіңіз.
auth-nocache осы механизмге тиесілі, бірақ ештеңе бермейді. Ол клиенттің тіркелгі деректерін жадыда қанша ұстайтынын шектейді, бұл құлаудан кейін көмектеседі және файл жоқ кезде мүлдем көмектеспейді. Сервер жағындағы сессия уақыты өткеннен кейінгі қайта қосылу файлды қайта оқиды, сондықтан жүктелу кезінде жұмыс істеген деректер күн ортасында да бітуі мүмкін.
Басқару сокеті: әр сұрау, көбірек бет
Клиентті тыңдаушымен іске қосып, сұраулар оның үстінде хабарланатынын анық жариялаңыз, OpenVPN 2.6 нұсқаулығында құжатталған директиваларды пайдаланып:
management 127.0.0.1 3030
management-query-passwords
bash-тан байланысты бос файл дескрипторында ұстап, орнына емес, сұрау атына қарай жауап беріңіз, өйткені қайта қосылу басқа тәртіпте сұрауы мүмкін:
exec 3<>/dev/tcp/127.0.0.1/3030
while read -r -u 3 line; do
case "$line" in
*"Need 'Auth' username/password"*)
echo 'username "Auth" alice' >&3
echo 'password "Auth" secret' >&3 ;;
*"Need 'Private Key' password"*)
echo 'password "Private Key" secret' >&3 ;;
esac
done
Шекара — тасымал. Басқару протоколы loopback-та TCP үстіндегі ашық мәтін, сондықтан қашықтағы контроллер жетуі үшін тыңдаушыны LAN немесе туннель мекенжайында жариялауға болмайды; қашықтағы контроллер SSH жіберуін білдіреді, кеңірек байланыстыруды емес. Қауымдастық демоны да бір уақытта бір ғана басқару клиентін қабылдайды, сондықтан GUI немесе монитор сокетті скриптіңізбен бөлісе алмайды. Екінші қосылым кезекке қойылмай қабылданбайды, және ақау саңырау болып қалған скриптке ұқсайды.
Бұл сокет басқару арнасы да. Басқару құпиясөзі болмаса, 127.0.0.1:3030-ға қосыла алатын кез келген нәрсе күйді оқи алады, туннельді өлтіре алады немесе сұрауға өзі жауап бере алады. Басқару құпиясөзі мен тіркелгі деректерінің файлы бір кластағы құпия, екеуі де бірдей ұқыптылыққа лайық.
Қайсысы орналастыруға сай
Тіркелгі деректерінің файлын жалғыз сұрау тіркелгі жұбы болғанда, клиент тұрақты иесі бар қызмет ретінде жұмыс істегенде және 600 файлын өзіңіз бақыламайтын сақтық көшірмелерден тыс ұстай алғанда таңдаңыз. Басқару сокетін кілт құпиясөзі немесе PKCS#12 құпиясөзі болғанда, қаптама процесті қадағалап отырғанда немесе қайта қосылуды жөндеу кезінде күй мен сұрауларды бақылау қажет болғанда таңдаңыз.
Екі шарт шешімді жылжытады. Қаптама /bin/sh болса, бинарды тікелей шақыратын systemd бірлігі болса немесе ең аз контейнер болса, тек bash үшін жасалған сокет желімі қолжетімсіз және файл арзанырақ жауап. Егер құпия жиі айналса, екі файлдың ешқайсысы оған жақсы үй емес: кішкентай қаптамадан кілт сақинасын сұрап, бірлікке қаптаманы шақыруға рұқсат етіңіз, бұл айналымды бір жерде ұстайды және құпиясөзді shell тарихынан тыс қалдырады.
Процесті алмастыру екеуінің арасында тұрады және ешқайсысына тиесілі емес. Төмендегі бір жолды пәрмен жұмыс істейді, өйткені bash оны openvpn басталмай тұрып кеңейтеді, клиент синтаксисті түсінетіндіктен емес:
openvpn --config client.ovpn --auth-user-pass <(printf "%s
%s
" "$USER" "$PASS")
Ол /bin/sh астында, shell-ді айналып өтетін бірлікте және bash немесе /dev/fd жоқ бейнелерде бұзылады. Оны интерактивті тестілеу үшін ұстаңыз, ешқашан қызмет тәуелді келісім ретінде емес.
Құпияны қорғаңыз, содан кейін журналдан тексеріңіз
Екі механизм де OpenVPN процесі оқи алатын құпия қалдырады. Құпиясөзді ешқашан пәрмен жолына немесе бірлік файлына қоймаңыз, онда ps және systemctl оны әр жергілікті пайдаланушыға көрсетеді; файлға жолды беріңіз, ішіндегі мәнді емес. Сертификаттар тіркелгі жұбын алмастыра алатын жерде бұл сұрау санатын жасырудың орнына жояды.
Дұрыс жұмыс сұраулар тізбегінің аяқталуын және сессияның «Initialization Sequence Completed» деңгейіне жетуін көрсетеді. Клиент сол сұрауда тоқтаса, сәйкестік сәтсіз болды: сокет жіберген нақты жолдарды басып шығарыңыз, тырнақшалар мен сұрау атын тексеріңіз және sleep қосудың орнына үлгіні түзетіңіз. Сәттілік туралы хабарлап, ештеңе тасымайтын туннель — бағыттау немесе push мәселесі, тіркелгі деректерінің мәселесі емес.
Содан кейін тек бірінші іске қосуды емес, қайта қосылуды сынаңыз. Сервер жағындағы сессияны үзіңіз немесе оның уақыт шегін күтіңіз; клиент қайта сұрайды, және дәл сол жерде жүктелу кезінде дұрыс көрінген файл қайта қосылатын тіркелгі үшін әлі оқылатынын көрсетеді.