refactor: update setup_database.sh for improved PostgreSQL configuration and user creation
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 8s

This commit is contained in:
2025-11-25 13:22:19 +01:00
parent b2ea69b78b
commit be54e665c4

View File

@@ -1,80 +1,72 @@
#!/usr/bin/env bash #!/bin/bash
set -e set -e
DB_NAME="mitm_db" DB_NAME="mitm_db"
DB_USER="mitm_user" DB_USER="mitm_user"
DB_PASS="mitm_pass" DB_PASS="mitm_password"
LAN_SUBNET="192.168.178.0/24"
echo "[+] Installing PostgreSQL..." echo "[1] Installing PostgreSQL…"
sudo apt-get update -y sudo apt update -y
sudo apt-get install -y postgresql postgresql-contrib sudo apt install -y postgresql postgresql-contrib
echo "[+] Ensuring PostgreSQL is running..." echo "[2] Configuring PostgreSQL to listen on all addresses…"
sudo systemctl enable postgresql PG_CONF="/etc/postgresql/$(ls /etc/postgresql)/main/postgresql.conf"
sudo systemctl start postgresql sudo sed -i "s/^#listen_addresses =.*/listen_addresses = '*'/" "$PG_CONF"
echo "[+] Creating user and database (if missing)..." echo "[3] Updating pg_hba.conf for LAN + localhost access…"
PG_HBA="/etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf"
# Ensure localhost entry exists
if ! grep -q "host *all *all *127.0.0.1/32" "$PG_HBA"; then
echo "host all all 127.0.0.1/32 md5" | sudo tee -a "$PG_HBA"
fi
# Ensure LAN entry exists
if ! grep -q "$LAN_SUBNET" "$PG_HBA"; then
echo "host all all $LAN_SUBNET md5" | sudo tee -a "$PG_HBA"
fi
echo "[4] Restarting PostgreSQL…"
sudo systemctl restart postgresql
echo "[5] Creating database and user (if not existing)…"
sudo -u postgres psql <<EOF sudo -u postgres psql <<EOF
DO DO \$\$
\$do\$
BEGIN BEGIN
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '${DB_USER}') THEN IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$DB_USER') THEN
CREATE ROLE ${DB_USER} LOGIN PASSWORD '${DB_PASS}'; CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';
END IF;
IF NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB_NAME') THEN
CREATE DATABASE $DB_NAME OWNER $DB_USER;
END IF; END IF;
END END
\$do\$; \$\$;
CREATE DATABASE ${DB_NAME} OWNER ${DB_USER}
TEMPLATE template0
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
CONNECTION LIMIT -1;
-- ignore errors if DB already exists
ALTER DATABASE ${DB_NAME} OWNER TO ${DB_USER};
EOF EOF
echo "[+] Creating tables (idempotent)..." echo "[6] Creating tables (idempotent)…"
sudo -u postgres psql -d ${DB_NAME} <<EOF sudo -u postgres psql -d $DB_NAME <<EOF
CREATE TABLE IF NOT EXISTS packet_log (
CREATE TABLE IF NOT EXISTS packets (
id BIGSERIAL PRIMARY KEY, id BIGSERIAL PRIMARY KEY,
timestamp TIMESTAMPTZ DEFAULT NOW(), timestamp TIMESTAMPTZ DEFAULT NOW(),
direction VARCHAR(16), -- ingress / egress
direction VARCHAR(16) NOT NULL, interface VARCHAR(32),
iface VARCHAR(32) NOT NULL, src_mac VARCHAR(32),
dst_mac VARCHAR(32),
src_mac VARCHAR(17), eth_type VARCHAR(16),
dst_mac VARCHAR(17),
eth_type VARCHAR(8),
src_ip VARCHAR(64), src_ip VARCHAR(64),
dst_ip VARCHAR(64), dst_ip VARCHAR(64),
ip_proto VARCHAR(16), ip_protocol VARCHAR(16),
src_port INTEGER,
src_port INT, dst_port INTEGER,
dst_port INT, packet_len INTEGER,
nft_hook VARCHAR(32),
packet_len INT,
packet_hex TEXT
);
CREATE TABLE IF NOT EXISTS nft_events (
id BIGSERIAL PRIMARY KEY,
timestamp TIMESTAMPTZ DEFAULT NOW(),
packet_id BIGINT REFERENCES packets(id) ON DELETE CASCADE,
hook VARCHAR(64),
nft_table VARCHAR(64), nft_table VARCHAR(64),
nft_chain VARCHAR(64), nft_chain VARCHAR(64),
nft_rule VARCHAR(256), nft_verdict VARCHAR(32),
verdict VARCHAR(32) raw_packet BYTEA
); );
EOF EOF
echo "[+] DONE!" echo "Done. PostgreSQL is ready for LAN + localhost connections."
echo "Database: ${DB_NAME}"
echo "User: ${DB_USER}"
echo "Password: ${DB_PASS}"