Menü
PostGreSQL 1 Şubat 2026 person Semih

PostgreSQL 18 – pg_hba.conf Dosyası ile Güvenli Erişim – Ubuntu 24.04

Selamlar arkadaşlar bu yazımda sizlere PostgreSQL’in olmazsa olmaz ayar dosyası olan pg_hba.conf bahsedeceğim.

Host-Based Authentication adını taşıyan bu dosya ile, DB’nizin bulunduğu sunucuya kimlerin bağlanabileceğini, bu bağlantıyı hangi kullanıcı ile nereden yapabileceğini, hangi veritabanına bağlanabileceğine ve hangi doğrulama yöntemini kullanacağını belirlediğimiz güvenlik ve erişim kontrolunu sağlayan dosyamızdır. Bu sayede gelen her bağlantı isteği ilk olarak bu dosyaya uğrar ve izinli mi yoksa yasaklı mı diye kontrol edilir.

Bu dosyamızı düzenlerken bilmeniz gereken önemli nokta ise ilk eşleşen kural baz alınır ve uygulanır. Sonrasında kural eklemiş olsanız bile o kısımlara bakılmayacaktır.

Burada yapılan kontrollere gelecek olursak ise; Bağlantı kaynağının nereden geldiği (local,remote), Hangi veritabanına erişmek istediğini (postgres, * ), Hangi kullanıcı ile bağlanmaya çalıştığı ve bu bağlantı sırasında hangi kimlik doğrulama yöntemini kontrol edeceği ayarlamalarıda yapabilmekteyiz.

Burada yapılan ayarlamalar ile kullanıcımızı db’mize bağlıyoruz, ilerleyen yazılarda ise DB’ye bağlandıktan sonra neler yapabileceğini belirleyeceğimiz alanlarda olacak.

İlk olarak en doğru şekilde dosyanın yolunu bulmak ile işe başlayalım, bunu yapmak için psql’e bağlanın ve aşağıdaki komudu çalıştırın. Doğru olan dosya yolunu bulacaksınız. (nano /etc/postgresql/18/main/pg_hba.conf)

> SHOW hba_file;

Yukarıdaki nano komudu ile dosyamızı açıyoruz. Ve yapısına bakıyoruz. İlk açtığınızda bolca yorum satırı bizi karşılıyor. En alt kısma inmek için Page Down tuşunu kullanabilirsiniz.

NOT : postgresql.conf dosyasında bulunan listen_addresses = ‘*’ olmalı unutma. Yoksa zaten kimse bağlanamaz sisteminize.

Burada yorum satırı olmayan her satır bir kuraldır ve üstten alta olacak şekilde okunur. Bu satırlar sırasıyla Type, Database, User, Address, Method diye yazılırlar. Bu alanların alabildiği değerleri ise aşağıya yazalım.

TYPE’ın alabileceği değerler :

Local : localhost kullanımları için, host : Ipv4 ve Ipv6 bağlantıları için, hostssl : SSL bağlantıları için kullanılır, hostnossl : SSL bağlantısı olmadan bağlanmak için.

Database, User ve Address alanı :

Database alanına db adı yazılabildiği gibi hepsine bağlanılsın istenilirse all’da yazılır. Bu alana Logical/Streaming Replication için Replication’da yazabilirsiniz.

User alanında da aynı durum söz konusu Username girilebileceği gibi all’da yazılabilir. Bu alanda genelde replication durumlarında replication için ayarladığım username giriyorum.

Address alanı bildiğiniz üzere bağlantı yapmasını istediğiniz cihazın ip adresidir. ÖR : 192.168.1.10/32 ya da 0.0.0.0/8 gibi. Subnet ile oynayarak geniş aralık verebilirsiniz.

Method alanına ise : bağlantı sırasındaki kimlik doğrulama yöntemlerini belirliyoruz.

Trust : Şifresiz olarak direk ulaşmasını sağlar, password : yazarsanız düz şifreler ile giriş yapılabilir, scram-sha-256 : şifreleri en güvenli şekilde doğrular, md5 : eskide kalmıştır kullanmasanız da olur, peer : Linux kullanıcı adınız ile DB user aynı olduğu durumlarda kullanılır, cert : ise SSL sertifikası ile doğrulama anlamına gelir. Reject : bağlantıları reddetmesini sağlar. Ldap : ise kullanıcıyı ldap’tan kontrol etmesini sağlar.

ÖR :
local     all          all           peer
Linux kullanıcı adınız ve psql kullanıcınız aynı ise şifresiz girer.

Host     dbim     kullanici             192.168.1.110/32         scram-sha-256
Belirli bir ip belirli bir kullanıcı ile belirli bir db’ye şifreli bağlansın demiş oluruz.

Host     all          all           0.0.0.0/0            scram-sha-256
En risklisidir. Ve herkesi şifreli olarak kabul eder.

Host     all          all           0.0.0.0/0            reject
Bu komutlada gelecek isteklerin hepsini reddetmiş olursunuz. Unutmayın kuralların sırası önemlidir. Bunu en üste koyarsanız kimse sisteme giremeyecektir.

host  dbim1, dbim2, dbim3  kullanici 192.168.1.110/32  scram-sha-256
host  replication  repuser  192.168.1.110/32  scram-sha-256

Peki dosyamız da değişiklik yaptıktan sonra nasıl aktif edebiliriz ayarları?

Bunun için psql’i restart edebiliriz;

> systemctl restart postgresql

Ama bu işlemi tabi ki psql’e bağlanarak restart etmeden de yapabiliriz, onun içinde aşağıdaki komudu kullanmalısınız.

> SELECT pg_reload_conf();

Burada en önemli olay kuralları belirlerken sadece sunucuya bağlantı istediği yapması gereken  kullanıcılar için gerekli ayarlamaları ve izinleri vermeniz gerekmektedir. Kurallar ne kadar daraltılırsa, güvenlik o kadar artacaktır.

PSQL tarafında birkaç komut ile kontrolleri kolaylaştırmaya çalışalım. PSQL sisteminizde bulunan kullanıcıların şifresi hangi formatta bunu kontrol edelim.

> SELECT usename, passwd FROM pg_shadow;

PSQL’inizde varsayılan şifreleme formatı onu kontrol edelim.

> SHOW password_encryption;

Bu şekilde ayarlamaları bu dosyamızda yapabilir ve DB’ye erişimleri kontrol edebilirsiniz.

Bana destek vermek isterseniz Sosyal Medya kanallarımdan beni takip edebilirsiniz. Kolaylıklar dilerim.

edit_note Bir Yorum Bırakın