Published on

FreeBSD Üzerine Postresql Kurulumu ve Veritabanını Internete Sunma

Authors
  • avatar
    Name
    Alperen Önal
    Twitter
  1. Postgresql'i FreeBSD cihazımıza indiriyoruz.
pkg install postgresql15-server postgresql15-client

ya da(eğer FreeBSD'yi sadece server olarak kullanacaksanız. Ben öyle yapacağım.)

pkg install postgresql15-server

  1. Postgresql'i FreeBSD makinemiz her açıldığında çalışır hale getirilmesini sağlıyoruz.
sysrc postgresql_enable="YES"

  1. PostgreSQL veritabanı kümesini (database cluster) oluşturuyor ve postgresql servisini başlatıyoruz.(Bu aşamada makinemizde postgres isimli kullanıcı oluşacaktır.)
/usr/local/etc/rc.d/postgresql initdb
service postgresql start

  1. Servisin IPv4 ve IPv6'da 5432 portunda çalıştığından emin oluyoruz. Sorun yoksa bir sonraki aşamaya geçiyoruz.
sockstat -46 | grep 5432

  1. postgres kullanıcısı için şifre belirliyoruz.
passwd postgres

  1. Yeni bir database oluşturuyor ve sahibini ayarlıyoruz.
su - postgres
createuser admin
createdb example_database -O admin

  1. Psql komut istemine girerek,'admin' isimli kullanıcının şifresini belirliyoruz ardından 'admin' isimli psql kullanıcısına az önce oluşturduğumuz 'example_database' içerisinde tüm yetkiyi veriyoruz.
psql example_database
alter role admin with encrypted password 'sifre';
grant all privileges on database example_database to admin;
\q
exit

  1. Localhost yerine tüm adresleri dinlemesini sağlıyoruz.
sudo nano /var/db/postgres/data15/postgresql.conf

postgresql.conf dosyasına girdikten sonra 'listen_addresses' satırını bularak yorum satırından çıkartıyoruz ve listen_addresses kısmına '*' giriyoruz.(kısacası sql serverimizi internete açıyoruz.)

listen_addresses = '*'

örneğin olması gereken :


  1. Güvelik ayarlarını yapılandırarak kimlik doğrulamasını zorunlu tutuyoruz.
sudo nano /var/db/postgres/data15/pg_hba.conf

pg_hba.conf içerisine girdikten sonra tüm method'ları trust'dan md5'e çekiyoruz/değişiyoruz.

örneğin olması gereken :

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

Parola, MD5 algoritması ile hashlenir.(trust yöntemini kullanmak, herkesin kimlik doğrulama yapmadan sunucuya erişim sağlamasına izin verir. Bu, potansiyel olarak güvenlik açıklarına yol açabilir. md5 kullanımı, kullanıcıların kimliklerini doğrulamalarını sağlar ve bu sayede erişimi kontrol altında tutar.)

En alt satıra giderek aşağıdaki gibi yeni satırlar ekliyoruz. Böylece 'example_database' tüm internete açık hale geliyor.

# Allow remote connections to foo_db as admin
host    example_database          admin           0.0.0.0/0               md5
host    example_database          admin           ::/0                    md5

  1. Postgresql servisini yeniden başlatıyoruz.
service postgresql restart

Başka Ağdaki Başka Bir Makinedan PostgreSQL Sunucumuza Bağlanalım

Evet postgresql'i freebsd makinemıza kurduk ve internete açtık. Şimdi başka ağdaki bir makinedan FreeBSD makinemizin açık portlarını listeleyerek doğru çalışıp çalışmadığını kontrol edelim.

Evet görebileceğimiz gibi postgresql'in çalıştığı port '5432' gözükmüyor. FreeBSD makinem Azure'da çalışıyor ve güvenlik duvarı 5432 portunun internete açılmasını engelliyor bunun için azure'den yeni bir kural ekleyelim.

MakineAdınız->Ağ İletişimi->Ağ Ayarları->Bağlantı Noktası Kuralı Oluştur->Gelen Bağlantı Noktası Kuralı Oluştur diyoruz ardından 5432 portunu açıyoruz.

Olması gereken :

Not :

Postgres DB bağlantı noktası 5432 İnternet'e açık. Veritabanı bağlantı noktalarının İnternet'e açılması önerilmez. Bu bağlantı noktaları yalnızca sanal ağınız içindeki ön uç katmanına açık olmalıdır.

Ama biz örnek için bunu dert etmiyoruz.

Tekrar nmap ile test ediyoruz. Ve aşağıda görebileceğimiz gibi 'open' seçeneğine ulaşıyoruz.(Eğer open yerine closed yazıyorsa FreeBSD'ye geri dönerek 8. ve 9. adımlar başta olmak üzere tüm adımları doğru şekilde yaptığımızdan emin oluyoruz.)

Debian cihazımdaki psql istemcisi ile sunucumdaki 'example_database'e bağlanıyorum :

alperen@DESKTOP-C2VGU13:~$ sudo psql -h 51.136.28.231 -p 5432 -U admin -d example_database

Tablo oluşturuyorum :

example_database=> CREATE TABLE public."user"
(
    id serial NOT NULL,
    name character varying(250),
    email character varying(250),
    mobile_no bigint,
    address text,
    PRIMARY KEY (id)
);

Ekleme yapıp tabloyu görüntülüyorum :

example_database=> INSERT INTO public."user" (name, email, mobile_no, address)
VALUES ('Alperen Onal', 'iletisim@alperenonal.com', 1234567890, '123 Bursa St');
INSERT 0 1
example_database=> SELECT * FROM public."user";
  1 | Alperen Onal | iletisim@alperenonal.com | 1234567890 | 123 Bursa St

Ekran görüntüsü :


Psql Komut Satırında Sık Kullanılan 10 kısayolu (metakomutları) :

  • \q: psql oturumunu kapatır.

  • \l: Mevcut veritabanlarını listeler.

  • \c dbname: Belirtilen veritabanına bağlanır. (dbname yerine veritabanı adınızı yazın)

  • \dt: Mevcut tabloları listeler.

  • \d tablename: Belirtilen tablonun yapısını gösterir. (tablename yerine tablo adınızı yazın)

  • \df: Mevcut fonksiyonları listeler.

  • \dv: Mevcut görünümleri listeler.

  • \i filename: Belirtilen dosyadaki SQL komutlarını çalıştırır. (filename yerine dosya adınızı yazın)

  • \x: "Expanded" (genişletilmiş) tablo formatını açar veya kapatır, tablonun daha okunabilir şekilde gösterilmesini sağlar.

  • \h: SQL komutları için yardım bilgisi gösterir. (Örneğin, \h SELECT komutu SELECT komutu hakkında bilgi verir)

  • \! clear: Psql terminalinizi temizler.

Bu yazımız bu kadardı. Umarım faydalı olmuştur. Diğer yazımızda veri tabanımızın php ve gitlab entegrasyonlarını yapacak ve ci/cd çalışmaları yürüteceğiz.


KAYNAKÇA :

  • wiki.freebsd.org/PostgreSQL/Setup