Version 1
This commit is contained in:
144
proxy-inventory.sh
Executable file
144
proxy-inventory.sh
Executable 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"
|
||||
Reference in New Issue
Block a user