QGIS PostGIS SSH tunneli: TLS uchun server nomini saqlang
SSH yo‘naltirishi QGIS ga mahalliy port beradi, lekin ma’lumotlar bazasi TLS uchun baribir o‘zining haqiqiy nomiga muhtoj. hostaddr va loopback tinglovchisi bilan libpq xizmatidan foydalaning.
Tunnel ko‘tariladi, QGIS ulanadi va kirish ma’lumotlar bazasi xosti o‘rniga 127.0.0.1 ni ko‘rsatuvchi sertifikat xatosi bilan o‘ladi. Keyingi vasvasali qadam sslmode ni yumshatishdir, bu tekshiruvni jim qiladi va siz boshidan xohlagan shaxsiyat kafolatini tashlab yuboradi. Haqiqiy muammo shundaki, mahalliy port va server nomi bir maydonda saqlanadi. libpq xizmat yozuvi ularni ajratadi, shuning uchun soket yo‘naltirilgan portga boradi, TLS esa sertifikatda bosilgan nomni tekshirishda davom etadi.
Mijoz nimaga ulanmoqda deb o‘ylaydi
«sslmode=verify-full» sharoitida libpq server taqdim etgan sertifikatni so‘ralgan xost nomi bilan taqqoslaydi. Bu nom loopback manzil bo‘lsa, sertifikat haqiqiy ma’lumotlar bazasi xosti uchun amal qilsa ham taqqoslash muvaffaqiyatsiz bo‘ladi. SSH yo‘naltirishi qaysi soket baytlarni tashishini o‘zgartiradi, mijoz kutishi kerak bo‘lgan shaxsiyatni emas. Bu ikki tushuncha ajratilgach, xato endi TLS nosozligiga o‘xshamaydi.
Yo‘naltirish ruxsat ham emas. PostgreSQL SSH serveri yaratgan ulanishga baribir o‘z qoidalarini qo‘llaydi, shuning uchun biror narsani o‘zgartirishdan oldin transport qatlami va ma’lumotlar bazasi qatlamini alohida saqlang.
Yo‘naltirishni faqat loopback bilan bog‘lang
Tinglovchi QGIS mashinasida bo‘lishi kerak, boshqa joyda emas. 127.0.0.1 ni aniq ko‘rsatish uni boshqa interfeyslardan uzoq tutadi, bog‘lash manzili tashlab ketilsa, SSH mijozining shlyuz sozlamalariga qarab port tashqariga ochilishi mumkin.
ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]Ikkinchi ikki nuqtadan keyingi manzil SSH serveri tomonidan hal qilinadi, shuning uchun bu misol PostgreSQL sshd bilan bir xil xostda deb hisoblaydi; boshqa mashinadagi ma’lumotlar bazasiga o‘sha manzil va uning ruxsatlari kerak. Sessiyani -N bilan boshlang, shunda hech qanday qobiq ochilmaydi, xost kaliti tekshiruviga tegmang va QGIS ni ayblashdan oldin tinglovchi paydo bo‘lganiga ishonch hosil qiling. Port allaqachon band bo‘lsa, yo‘naltirish so‘rov vaqtida emas, ishga tushishda muvaffaqiyatsiz bo‘ladi.
Nom va soketni bitta xizmat yozuviga joylashtiring
Xizmat fayli bir xil ulanishga tekshirish nomi va boshqa soket manzilini olib yurishga imkon beradi. Yozuvni libpq xizmatlarni qidiradigan joyda saqlang yoki PGSERVICEFILE ni o‘sha tomonga yo‘naltiring.
[gis-via-ssh]
host=db.geo.example
hostaddr=127.0.0.1
port=15432
dbname=gisdb
user=gis_reader
sslmode=verify-full
gssencmode=disable
sslrootcert=/path/to/approved-root.crtBu yerda host sertifikat tekshiruvlari uchun ishlatiladigan shaxsiyatni saqlaydi, hostaddr esa paketlarni yo‘naltirilgan loopback portiga yuboradi va bu tartib ishlashi uchun ikkalasi ham kerak. gssencmode=disable aks holda avval GSSAPI shifrlashini kelishadigan buildlarda muhim, chunki bu yo‘l hozir o‘rnatilgan TLS sozlamalarini e’tiborsiz qoldiradi. QGIS ning PostgreSQL ulanish muloqotidan xizmatga nomi bilan murojaat qiling va parolni umumiy fayl ichida emas, odatdagi so‘rov orqali bering. Yuqoridagi nomlar va yo‘llar o‘rinbosarlardir; ularni o‘zingizning tasdiqlangan qiymatlaringiz bilan almashtiring.
PostgreSQL tunneldan keyin yana nimani tekshiradi
Server SSH xostdan, bu tartibda loopbackdan kelgan ulanishni ko‘radi va uni tartib bilan xostga asoslangan autentifikatsiya qoidalariga moslashtiradi. Ma’lumotlar bazasidagi rolingiz baribir autentifikatsiyadan o‘tishi kerak va SSH kirish o‘z-o‘zidan hech qanday ma’lumotlar bazasi shaxsiyatini bermaydi. Server nimaga ishonishini tekshiring, mijoz nimani taxmin qilganini emas.
psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"Ish tugagach yo‘naltirish sessiyasini yoping; mahalliy yozuv shundan keyin ishlamaydi va boshqa hech narsa o‘zgarmaydi. Ma’lumotlar bazasiga bitta yo‘l butun GIS mijozi uchun VPN emas, va unga VPN deb qarash keyingi ulanishning noto‘g‘ri tashxislanishiga sabab bo‘ladi.