سؤال

مع الإعدادات المستعارة من خادم مشابه يقوم بتشغيل Postgres 9.4.1 و pgbouncer 1.6.1 ، لدي العديد من المستخدمين المتصلين بقاعدة البيانات من خلال pgbouncer على المنفذ 6543. لدي أيضًا خادم ثانٍ يقوم بتشغيل PostgreSQL 9.4.5 حيث تحققت من أن جميع المستخدمينقادرون فقط على الاتصال مباشرة بقواعد البيانات (على المنفذ 5432) باستخدام TLS / SSL مضبوطة على verify-full.

ومع ذلك ، أحتاج إلى إنشاء بيئة تجمع بين هذه التكوينات: واحدة حيث يتصل جميع المستخدمين بقاعدة البيانات عبر TLS / SSL مع تجميع الاتصال من خلال pgbouncer.هذا يعني أنني بحاجة إلى استخدام وظيفة TLS / SSL الجديدة في الإصدار الأخير (اعتبارًا من 18 ديسمبر 2015) pgbouncer 1.7 ، ولكن بصرف النظر عن وثائق معلمات TLS الجديدة ، لم أجد أي أمثلة متاحة توضح الوظيفة الجديدة ولم أحقق أي نجاح فيأقوم بإنشاء اتصال صالح من خلال pgbouncer باستخدام TLS / SSL على خادمي الثاني.

لقد قمت بتضمين مقتطفات ذات صلة من postgresql.conf و pg_hba.conf و pgbouncer.ini من خادمي الثاني.

postgresql.conf:

ssl = on                                # (change requires restart)
ssl_cert_file = 'server.crt'            # (change requires restart)
ssl_key_file = 'server.key'             # (change requires restart)
ssl_ca_file = 'root.crt'                        # (change requires restart)

pg_hba.conf:

hostssl    all             all             10.10.5.0/24            cert

pgbouncer.ini:

;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
logfile = /tmp/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; USER AUTHENTICATION (old way commented out with new lines below)
;auth_type = md5
;auth_file = pgbouncer/users.txt
auth_type = hba
auth_hba_file = pg_hba.conf
; TLS SETTINGS (NEW STUFF!)
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
server_tls_sslmode = verify-full
server_tls_key_file = /tmp/pgb_user.key
server_tls_cert_file = /tmp/pgb_user.crt
server_tls_ca_file = root.crt

ومع ذلك ، يبدأ pgbouncer عندما أحاول الاتصال كأي مستخدم ولكن لنفترض أنني أريد أن أكون مستخدمًا "lalligood" ، أتلقى الخطأ التالي:

ERROR: no such user: lalligood

يحتوي pgbouncer.log على السطر التالي لكل محاولة:

2016-01-13 16:00:36.971 2144 LOG C-0xcad410: 
(nodb)/(nouser)@10.10.5.194:54848 closing because: No such user: 
lalligood (age=0)

يمكنني تقديم المزيد من المعلومات إذا لزم الأمر.إذا كان لدى أي شخص أي نصيحة / اقتراحات حول ما قد أتغاضى عنه لإنجاز هذا العمل ، فأنا أقدر بشدة المساعدة!

هل كانت مفيدة؟

المحلول

لقد اكتشفت ذلك ... لقد كنت (جزئيًا؟) مذنبًا بمحاولة استخدام الكثير من الميزات الجديدة في pgbouncer 1.7.

هناك إعدادات TLS / SSL ثم هناك عناصر التحكم في الوصول إلى HBA.(لا يحتاج TLS / SSL إلى عناصر تحكم في الوصول إلى HBA والعكس صحيح للعمل).أيضًا ، نظرًا لأن pgbouncer وقاعدة البيانات موجودان في نفس المربع ، فلا داعي للحمل الإضافي لـ TLS / SSL بين pgbouncer وقاعدة البيانات.

ثبت أن التبسيط لاستخدام إعدادات مصادقة المستخدم الأكثر شيوعًا هو الحل.

أولاً ، تم ترك postgresql.conf و pg_hba.conf كما هو موضح أعلاه.

pgbouncer.ini ، ومع ذلك ، هذا:

;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
auth_type = cert
auth_file = pgbouncer/users.txt
logfile = /var/lib/pgsql/pgbouncer.log
pidfile = /var/lib/pgsql/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; TLS settings
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt

لذا فإن التغييرات المحددة هي auth_type = cert و auth_file = pgbouncer/users.txt (تغيير / إزالة مراجع HBA) وإزالة 4 server_tls_... سطراً في النهاية.

يقوم المستخدمون بالمصادقة على كل من pgbouncer وقاعدة بيانات postgres باستخدام شهادة SSL.

هذا يعني أيضًا أنني يجب أن أجمع قائمة بالمستخدمين الذين سيخضعون لبرنامج pgbouncer في ./pgbouncer/users.txt. يجب أن يكون التنسيق على هذا النحو تمامًا (لكل مستخدم):

"lalligood" ""

نظرًا لأن pgbouncer لن يتحقق من أي اتصالات بناءً على كلمة مرور.

إذن ما يعنيه كل هذا هو أن مصادقة / اتصال TLS / SSL من خلال عمل pgbouncer.لكنه يترك لي أيضًا شعورًا بأن auth_type = hba/auth_hba_file = pg_hba.conf مشتبه به في أحسن الأحوال ؛لا تعمل بشكل صحيح في أسوأ الأحوال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى dba.stackexchange
scroll top