Version 1

This commit is contained in:
root
2026-01-28 11:44:12 +01:00
parent 58e753e93c
commit 1b1b965c8c
7 changed files with 454 additions and 0 deletions

144
proxy-inventory.sh Executable file
View File

@@ -0,0 +1,144 @@
#!/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 <n> Filtert nach der ISP-Server-ID"
echo " PROXY <status> Filtert nach Proxy-Status (OK, FEHLT)"
echo " DNS <status> Filtert nach DNS-Status (OK, N/A)"
echo " MODUS <typ> 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"