diff --git a/host_vars/postgres.crypto-libertarian.com.yml b/host_vars/postgres.crypto-libertarian.com.yml index 0f3c8d1..190ebb8 100644 --- a/host_vars/postgres.crypto-libertarian.com.yml +++ b/host_vars/postgres.crypto-libertarian.com.yml @@ -16,3 +16,34 @@ common__certbot__cert_domains: - 'postgres.crypto-libertarian.com' common__certbot__post_hook: null common__certbot__pre_hook: null + +postgres__hba: + - type: hostssl + database: matrix_synapse + user: matrix_synapse + address: '134.209.196.172/32' + method: md5 + + - type: hostssl + database: matrix_synapse + user: matrix_synapse + address: '2a03:b0c0:2:f0::142:3001/128' + method: md5 + + - type: hostssl + database: matrix_synapse + user: matrix_synapse + address: '10.133.8.214/32' + method: md5 + + - type: host + database: all + user: all + address: '0.0.0.0/0' + method: reject + + - type: host + database: all + user: all + address: '::/0' + method: reject diff --git a/playbooks/deploy/postgres.yml b/playbooks/deploy/postgres.yml index d36824c..1f9671d 100644 --- a/playbooks/deploy/postgres.yml +++ b/playbooks/deploy/postgres.yml @@ -7,3 +7,4 @@ cache_valid_time: 86400 roles: - kotovalexarian.common + - ../../roles/postgres diff --git a/roles/postgres/defaults/main.yml b/roles/postgres/defaults/main.yml new file mode 100644 index 0000000..79bb6e5 --- /dev/null +++ b/roles/postgres/defaults/main.yml @@ -0,0 +1,2 @@ +--- +postgres__hba: [] diff --git a/roles/postgres/handlers/main.yml b/roles/postgres/handlers/main.yml new file mode 100644 index 0000000..2b8a3bf --- /dev/null +++ b/roles/postgres/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: Restart Postgres + systemd: + name: postgresql@12-main + state: restarted diff --git a/roles/postgres/tasks/main.yml b/roles/postgres/tasks/main.yml new file mode 100644 index 0000000..677b85e --- /dev/null +++ b/roles/postgres/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- name: Install system packages + apt: + name: postgresql + notify: Restart Postgres + +- name: Install pg_hba.conf + template: + src: '../templates/pg_hba.conf' + dest: '/etc/postgresql/12/main/pg_hba.conf' + mode: 'u=rw,g=r,o=' + owner: postgres + group: postgres + notify: Restart Postgres diff --git a/roles/postgres/templates/pg_hba.conf b/roles/postgres/templates/pg_hba.conf new file mode 100644 index 0000000..68c4efd --- /dev/null +++ b/roles/postgres/templates/pg_hba.conf @@ -0,0 +1,103 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: "local" is a Unix-domain +# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, +# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a +# plain TCP/IP socket. +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, or a comma-separated list thereof. The "all" +# keyword does not match "replication". Access to replication +# must be enabled in a separate record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", or a +# comma-separated list thereof. In both the DATABASE and USER fields +# you can also write a file name prefixed with "@" to include names +# from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", +# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". +# Note that "password" sends passwords in clear text; "md5" or +# "scram-sha-256" are preferred since they send encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# This file is read on server startup and when the server receives a +# SIGHUP signal. If you edit the file on a running system, you have to +# SIGHUP the server for the changes to take effect, run "pg_ctl reload", +# or execute "SELECT pg_reload_conf()". +# +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + + + + +# DO NOT DISABLE! +# If you change this first entry you will need to make sure that the +# database superuser can access the database using some other method. +# Noninteractive access to all databases is required during automatic +# maintenance (custom daily cronjobs, replication, and similar tasks). +# +# Database administrative login by Unix domain socket +local all postgres peer + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all peer +# 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 peer +host replication all 127.0.0.1/32 md5 +host replication all ::1/128 md5 +# Additional rules: +{% for item in postgres__hba %} +{{ item.type }} {{ item.database }} {{ item.user }} {{ item.address }} {{ item.method }} +{% endfor %}