postgresql

postgresql 구성

image

  graph LR
  subgraph gvp6nx1a
  A1[apps] <-- tcp --> B2[postgresql]
  end
  B2 <-- tcp --> D[client]

host 구성

사설 인증서로 외부 접속 개방

sudo rm -rf /var/lib/pgsql && \
sudo dnf -y update && \
sudo dnf module remove -y postgresql:16/server && \
sudo dnf module install -y postgresql:16/server && \
sudo postgresql-setup --initdb
sudo vi /var/lib/pgsql/data/pg_hba.conf
...
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

host    all             all             all                     scram-sha-256
sudo vi /var/lib/pgsql/data/postgresql.conf
...
# - Connection Settings -
listen_addresses = '*'

# - Authentication -
password_encryption = scram-sha-256

# - SSL -
ssl = on
ssl_cert_file = '/var/lib/pgsql/server.crt'
ssl_key_file =  '/var/lib/pgsql/server.key'
ssl_ciphers = ' ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ARIA256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384'
ssl_ecdh_curve = 'X448:secp521r1:secp384r1'
ssl_min_protocol_version = 'TLSv1.2'
ssl_dh_params_file = '/opt/nginx/ssl/dhparam.pem'
...
cd /usr/share/pki/ca-trust-source/anchors && \
sudo openssl req -new -x509 -nodes -text -out server.crt \
  -keyout server.key -subj '/C=KR/ST=Seoul/L=Jungnang/O=fhy8vp3u/OU=dev/CN=fhy8vp3u/emailAddress=x*******-********@yahoo.com' && \
sudo openssl x509 -in server.crt -noout -dates && \
sudo chown dev:dev server.{key,crt} && \
sudo chmod 0400 server.key && \
sudo mv /usr/share/pki/ca-trust-source/anchors/server.crt /var/lib/pgsql/server.crt && \
sudo mv /usr/share/pki/ca-trust-source/anchors/server.key /var/lib/pgsql/server.key && \
sudo chown postgres:postgres /var/lib/pgsql/server.crt && \
sudo chown postgres:postgres /var/lib/pgsql/server.key

디스크 mount

sudo vi /etc/fstab
...
UUID=1475585f-cb15-4080-9012-48b9b7d9d1ed /         xfs  defaults,noatime,nodiratime,logbufs=8,logbsize=256k,allocsize=1m        0 0
...
sudo mount -a

포트 개방

sudo firewall-cmd --permanent --add-forward-port=port=5****:proto=tcp:toport=5432 && \
sudo firewall-cmd --reload && \
sudo firewall-cmd --list-all

내/외부망 테스트

sudo psql -U postgres -h 127.0.0.1 -p 5432 -d postgres;
sudo psql -U postgres -h 1**.****.**.** -p 5**** -d postgres

암호화 패키지 설치

sudo dnf -y update && sudo dnf install -y postgresql-contrib
--postgre 계정 로그인. 해당 schema에서 실행.
CREATE EXTENSION pgcrypto;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA dev TO dev;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA dev TO dev;

License

상업적 이용 제한 없음

  • PostgreSQL License 1

Troubleshooting