refactor: streamline PostgreSQL setup script and update database configuration
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 8s
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 8s
This commit is contained in:
@@ -1,109 +1,80 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
DB_NAME="mitm_traffic"
|
DB_NAME="mitm_db"
|
||||||
DB_USER="mitm_user"
|
DB_USER="mitm_user"
|
||||||
DB_PASS="mitm_password"
|
DB_PASS="mitm_pass"
|
||||||
|
|
||||||
echo "=== MITM Traffic DB Setup ==="
|
echo "[+] Installing PostgreSQL..."
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y postgresql postgresql-contrib
|
||||||
|
|
||||||
# ---------------------------
|
echo "[+] Ensuring PostgreSQL is running..."
|
||||||
# Install PostgreSQL (idempotent)
|
|
||||||
# ---------------------------
|
|
||||||
if ! command -v psql >/dev/null 2>&1; then
|
|
||||||
echo "[+] Installing PostgreSQL..."
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y postgresql postgresql-contrib
|
|
||||||
else
|
|
||||||
echo "[+] PostgreSQL already installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ensure PostgreSQL service is running
|
|
||||||
sudo systemctl enable postgresql
|
sudo systemctl enable postgresql
|
||||||
sudo systemctl start postgresql
|
sudo systemctl start postgresql
|
||||||
|
|
||||||
# ---------------------------
|
echo "[+] Creating user and database (if missing)..."
|
||||||
# Create DB user (idempotent)
|
sudo -u postgres psql <<EOF
|
||||||
# ---------------------------
|
DO
|
||||||
USER_EXISTS=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'")
|
\$do\$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '${DB_USER}') THEN
|
||||||
|
CREATE ROLE ${DB_USER} LOGIN PASSWORD '${DB_PASS}';
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
\$do\$;
|
||||||
|
|
||||||
if [ "$USER_EXISTS" = "1" ]; then
|
CREATE DATABASE ${DB_NAME} OWNER ${DB_USER}
|
||||||
echo "[+] DB user already exists"
|
TEMPLATE template0
|
||||||
else
|
ENCODING 'UTF8'
|
||||||
echo "[+] Creating DB user..."
|
LC_COLLATE='C'
|
||||||
sudo -u postgres psql -c "CREATE USER ${DB_USER} WITH PASSWORD '${DB_PASS}';"
|
LC_CTYPE='C'
|
||||||
fi
|
CONNECTION LIMIT -1;
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Create database (idempotent)
|
|
||||||
# ---------------------------
|
|
||||||
DB_EXISTS=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'")
|
|
||||||
|
|
||||||
if [ "$DB_EXISTS" = "1" ]; then
|
|
||||||
echo "[+] Database already exists"
|
|
||||||
else
|
|
||||||
echo "[+] Creating database..."
|
|
||||||
sudo -u postgres psql -c "CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Create tables (idempotent)
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
echo "[+] Creating tables…"
|
|
||||||
|
|
||||||
sudo -u postgres psql -d "$DB_NAME" << 'EOF'
|
|
||||||
|
|
||||||
-- Ingress und Egress Pakete werden getrennt gespeichert
|
|
||||||
CREATE TABLE IF NOT EXISTS ingress_packets (
|
|
||||||
id BIGSERIAL PRIMARY KEY,
|
|
||||||
timestamp TIMESTAMPTZ DEFAULT NOW(),
|
|
||||||
iface VARCHAR(32),
|
|
||||||
src_mac VARCHAR(32),
|
|
||||||
dst_mac VARCHAR(32),
|
|
||||||
eth_type VARCHAR(8),
|
|
||||||
src_ip VARCHAR(64),
|
|
||||||
dst_ip VARCHAR(64),
|
|
||||||
src_port INTEGER,
|
|
||||||
dst_port INTEGER,
|
|
||||||
protocol VARCHAR(16),
|
|
||||||
packet_length INTEGER,
|
|
||||||
raw BYTEA
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS egress_packets (
|
|
||||||
id BIGSERIAL PRIMARY KEY,
|
|
||||||
timestamp TIMESTAMPTZ DEFAULT NOW(),
|
|
||||||
iface VARCHAR(32),
|
|
||||||
src_mac VARCHAR(32),
|
|
||||||
dst_mac VARCHAR(32),
|
|
||||||
eth_type VARCHAR(8),
|
|
||||||
src_ip VARCHAR(64),
|
|
||||||
dst_ip VARCHAR(64),
|
|
||||||
src_port INTEGER,
|
|
||||||
dst_port INTEGER,
|
|
||||||
protocol VARCHAR(16),
|
|
||||||
packet_length INTEGER,
|
|
||||||
raw BYTEA
|
|
||||||
);
|
|
||||||
|
|
||||||
-- eBPF / nftables / ebtables decisions
|
|
||||||
CREATE TABLE IF NOT EXISTS packet_verdicts (
|
|
||||||
id BIGSERIAL PRIMARY KEY,
|
|
||||||
timestamp TIMESTAMPTZ DEFAULT NOW(),
|
|
||||||
packet_hash VARCHAR(128), -- Referenz zu ingress/egress
|
|
||||||
table VARCHAR(64),
|
|
||||||
chain VARCHAR(64),
|
|
||||||
rule_id INTEGER,
|
|
||||||
verdict VARCHAR(32), -- ACCEPT / DROP / STOLEN / QUEUE / ...
|
|
||||||
metadata JSONB
|
|
||||||
);
|
|
||||||
|
|
||||||
-- Optionaler Index für Performance
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_verdict_packet_hash ON packet_verdicts(packet_hash);
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_ingress_timestamp ON ingress_packets(timestamp);
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_egress_timestamp ON egress_packets(timestamp);
|
|
||||||
|
|
||||||
|
-- ignore errors if DB already exists
|
||||||
|
ALTER DATABASE ${DB_NAME} OWNER TO ${DB_USER};
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "[+] All done! The database is ready."
|
echo "[+] Creating tables (idempotent)..."
|
||||||
|
sudo -u postgres psql -d ${DB_NAME} <<EOF
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS packets (
|
||||||
|
id BIGSERIAL PRIMARY KEY,
|
||||||
|
timestamp TIMESTAMPTZ DEFAULT NOW(),
|
||||||
|
|
||||||
|
direction VARCHAR(16) NOT NULL,
|
||||||
|
iface VARCHAR(32) NOT NULL,
|
||||||
|
|
||||||
|
src_mac VARCHAR(17),
|
||||||
|
dst_mac VARCHAR(17),
|
||||||
|
|
||||||
|
eth_type VARCHAR(8),
|
||||||
|
|
||||||
|
src_ip VARCHAR(64),
|
||||||
|
dst_ip VARCHAR(64),
|
||||||
|
ip_proto VARCHAR(16),
|
||||||
|
|
||||||
|
src_port INT,
|
||||||
|
dst_port INT,
|
||||||
|
|
||||||
|
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_chain VARCHAR(64),
|
||||||
|
nft_rule VARCHAR(256),
|
||||||
|
verdict VARCHAR(32)
|
||||||
|
);
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "[+] DONE!"
|
||||||
|
echo "Database: ${DB_NAME}"
|
||||||
|
echo "User: ${DB_USER}"
|
||||||
|
echo "Password: ${DB_PASS}"
|
||||||
|
|||||||
Reference in New Issue
Block a user