#!/bin/bash # --- KONFIGURATION & PFADE --- CONF_FILE="/usr/local/bin/sync-ispconfig-proxy.conf" SERVER_CONF="/usr/local/bin/proxy_based_server.conf" CONFIG_DIR="/etc/nginx/conf.d/proxy_generated" OUTPUT_FILE="/var/www/html/proxy_inventory.txt" DATE_STR=$(date "+%d.%m.%Y %H:%M:%S") [ -f "$CONF_FILE" ] && source "$CONF_FILE" # --- GLOBALE FILTER VARIABLEN --- DOMAIN_REG="" ID_REG="" PROXY_REG="" DNS_REG="" MODUS_REG="" # --- FUNKTIONEN --- usage() { echo "Usage: $(basename "$0") [DOMAIN] [OPTIONS]" echo "" echo "Filtert das ISPConfig-Proxy-Inventar basierend auf Domains oder Spaltenwerten." echo "" echo "Argumente:" echo " DOMAIN Exakter Name oder mit Wildcard (z.B. knut-krueger.de oder knut*)" echo "" echo "Optionen (kumulativ):" echo " ID Filtert nach der ISP-Server-ID" echo " PROXY Filtert nach Proxy-Status (OK, FEHLT)" echo " DNS Filtert nach DNS-Status (OK, N/A)" echo " MODUS Filtert nach Modus (NORMAL, DUMMY)" echo " -h, --help Zeigt diese Hilfe an" echo "" echo "Beispiele:" echo " $(basename "$0") knut* ID 17 Zeigt alle Knut-Domains auf Server 17" echo " $(basename "$0") ID 112 MODUS DUMMY Zeigt alle Dummys auf Server 112" echo " $(basename "$0") PROXY FEHLT Zeigt alle nicht synchronisierten Domains" exit 0 } get_allowed_server_names() { sed -n "/^\[server\]/,/^\[/p" "$SERVER_CONF" | grep -v '^\[' | grep -v '^#' | sed '/^$/d' | tr -d '\r' } extract_proxy_ip() { local file=$1 if [ -f "$file" ]; then grep -oP 'proxy_pass http://\K[^;]+' "$file" | sed -n ' s/^\[\(.*\)\].*/\1/p t s/^\([^:/]*\).*/\1/p ' | head -n 1 else echo "-" fi } check_dns() { local domain=$1 dig +short AAAA "$domain" | grep -q "::160" && echo "OK" || echo "N/A" } parse_args() { [[ $# -eq 0 ]] && return while [[ $# -gt 0 ]]; do case "${1^^}" in -H|--HELP) usage ;; ID) ID_REG="$2"; shift 2 ;; PROXY) PROXY_REG="$2"; shift 2 ;; DNS) DNS_REG="$2"; shift 2 ;; MODUS) MODUS_REG="$2"; shift 2 ;; *) if [[ "$1" == *"*"* ]]; then DOMAIN_REG="${1//\*/.*}" else DOMAIN_REG="^$1$" fi shift 1 ;; esac done } write_header() { { echo "================================================================================================================================================" echo "ISPCONFIG & PROXY INVENTAR - Stand: $DATE_STR" echo "================================================================================================================================================" printf "%-45s | %-8s | %-40s | %-8s | %-8s | %-10s\n" "DOMAIN" "S-ID" "IP (ROUTING)" "PROXY" "DNS" "MODUS" echo "----------------------------------------------|----------|------------------------------------------|----------|----------|----------" } > "$OUTPUT_FILE" } generate_inventory() { local temp_raw=$(mktemp) local servers=$(get_allowed_server_names) for current_server in $servers; do local sql="SELECT wd.domain, wd.server_id, si.ip_address, IFNULL(wd.redirect_path, '') FROM web_domain wd JOIN server s ON wd.server_id = s.server_id JOIN server_ip si ON (wd.ip_address = si.ip_address OR wd.server_id = si.server_id) WHERE wd.active = 'y' AND s.server_name = '$current_server' AND wd.type IN ('vhost', 'alias', 'vhostalias', 'subdomain', 'vhostsubdomain');" local db_data=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -N -e "$sql") while read -r domain server_id db_ip redirect_path; do [ -z "$domain" ] && continue local vhost_file="$CONFIG_DIR/$domain.conf" local modus="NORMAL"; [[ "$redirect_path" == "/urldummy/" ]] && modus="DUMMY" local proxy_status="FEHLT"; [ -f "$vhost_file" ] && proxy_status="OK" local display_ip="-" if [ "$modus" == "NORMAL" ] && [ -f "$vhost_file" ]; then display_ip=$(extract_proxy_ip "$vhost_file") else display_ip="$db_ip" fi local dns_status=$(check_dns "$domain") # Filter-Prüfung (UND-Verknüpfung) [[ -n "$DOMAIN_REG" && ! "$domain" =~ $DOMAIN_REG ]] && continue [[ -n "$ID_REG" && ! "$server_id" =~ ^$ID_REG$ ]] && continue [[ -n "$PROXY_REG" && ! "$proxy_status" =~ $PROXY_REG ]] && continue [[ -n "$DNS_REG" && ! "$dns_status" =~ $DNS_REG ]] && continue [[ -n "$MODUS_REG" && ! "$modus" =~ $MODUS_REG ]] && continue printf "%-45s | %-8s | %-40s | %-8s | %-8s | %-10s\n" "$domain" "$server_id" "$display_ip" "$proxy_status" "$dns_status" "$modus" >> "$temp_raw" done <<< "$db_data" done sort -u "$temp_raw" >> "$OUTPUT_FILE" echo "================================================================================================================================================" >> "$OUTPUT_FILE" rm "$temp_raw" } # --- EXECUTION --- parse_args "$@" write_header generate_inventory cat "$OUTPUT_FILE"