145 lines
5.4 KiB
Bash
Executable File
145 lines
5.4 KiB
Bash
Executable File
#!/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"
|