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 маселеси, эсептик маалымат маселеси эмес.
Анан биринчи иштетүүнү гана эмес, кайра туташууну сынаңыз. Сервер тараптагы сессияны үзүңүз же анын убакыт чегин күтүңүз; клиент кайра сурайт, жана дал ошол жерде жүктөөдө туура көрүнгөн файл кайра туташкан эсеп үчүн дагы эле окуларын көрсөтөт.