firewall close: den Adminport des Proxy Managers mit anbieten
Der Adminport war als "noetig" eingestuft und blieb deshalb offen, obwohl er gerade der Port ist, der im Netz nichts verloren hat. Die Oberflaeche ist auch ueber 127.0.0.1 zu erreichen - per Terminal-Browser im Container oder ueber einen SSH-Tunnel -, der Port ist also kein Pflichtport. Er wird jetzt zum Schliessen angeboten, mit dem Hinweis, was das bedeutet; --keep-admin laesst ihn offen, und in der Oberflaeche wird gefragt, sobald er betroffen ist. Welcher Port es ist, kommt aus NPM_ADMIN_PORT - wer auf 10443 verlegt hat, bekommt 10443 angeboten. Die Vorgabe 81 steht zusaetzlich immer im Katalog: nach einem Portwechsel bliebe sie sonst offen, ohne dass sie noch jemand nennt. Genau dieser Fall - 81 und 10443 beide offen, konfiguriert ist 10443 - ist der Testfall. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+57
-10
@@ -56,7 +56,9 @@ KOMMANDOS - Stack
|
||||
Firewall pruefen: welche Ports der Stack braucht und
|
||||
ob sie offen sind (firewalld, ufw, nftables, iptables).
|
||||
"close" schliesst wieder, was nicht mehr gebraucht wird
|
||||
- SSH niemals, fremde Freigaben bleiben unberuehrt
|
||||
- SSH niemals, fremde Freigaben bleiben unberuehrt.
|
||||
Der Adminport des Proxy Managers wird mit
|
||||
angeboten; --keep-admin laesst ihn offen
|
||||
selftest Skripte auf bekannte Fallstricke pruefen
|
||||
tui-check Testzeilen fuer die Rahmendarstellung ausgeben
|
||||
(hilft bei q/x/l/m statt Linien, etwa in PuTTY)
|
||||
@@ -6094,10 +6096,11 @@ Bitte als root erneut aufrufen."
|
||||
|
||||
# Nicht mehr benoetigte Ports wieder schliessen
|
||||
gui_firewall_close() {
|
||||
local tmp rc=0 hat=""
|
||||
local tmp rc=0 hat="" adminfall=""
|
||||
tmp="$(mktemp)"
|
||||
cmd_firewall close >"$tmp" 2>&1 || rc=$?
|
||||
if ( set +o pipefail; grep -q 'Zum Schliessen' "$tmp" ); then hat=1; fi
|
||||
if ( set +o pipefail; grep -q 'Zugang dann nur lokal' "$tmp" ); then adminfall=1; fi
|
||||
ui_text "Nicht mehr benoetigte Ports" "$tmp"
|
||||
rm -f "$tmp"
|
||||
[ -n "$hat" ] || return 0
|
||||
@@ -6109,6 +6112,17 @@ Port dieser Sitzung. Freigaben fuer fremde Dienste werden nicht
|
||||
angeruehrt." || return 0
|
||||
|
||||
local -a a=(firewall close --apply --yes)
|
||||
# Ist der Adminport dabei, ist das eine bewusste Entscheidung
|
||||
if [ -n "$adminfall" ]; then
|
||||
if ui_yesno "Adminoberflaeche" "Der Adminport ${NPM_ADMIN_PORT:-81} des Proxy Managers ist dabei.
|
||||
|
||||
Soll er offen bleiben?
|
||||
|
||||
Ja = Adminoberflaeche bleibt aus dem Netz erreichbar
|
||||
Nein = nur noch lokal (Terminal-Browser oder SSH-Tunnel)"; then
|
||||
a+=(--keep-admin)
|
||||
fi
|
||||
fi
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
ui_run "Ports schliessen" "$SELF" "${a[@]}" || true
|
||||
elif command -v sudo >/dev/null 2>&1; then
|
||||
@@ -6513,6 +6527,9 @@ fw_known_ports() {
|
||||
printf '80/tcp|HTTP\n'
|
||||
printf '443/tcp|HTTPS\n'
|
||||
printf '%s/tcp|Adminoberflaeche des Proxy Managers\n' "${NPM_ADMIN_PORT:-81}"
|
||||
# Auch die Vorgabe 81 - wer den Adminport spaeter verlegt hat, haette
|
||||
# den alten sonst weiter offen, ohne dass ihn noch jemand nennt.
|
||||
printf '81/tcp|Adminoberflaeche - alter Vorgabeport\n'
|
||||
printf '5000/tcp|Checkmk direkt\n'
|
||||
printf '8000/tcp|Agent-Receiver\n'
|
||||
printf '6557/tcp|Livestatus\n'
|
||||
@@ -6691,16 +6708,26 @@ fw_close_cmds() { # backend port proto
|
||||
|
||||
# Welche Ports sind offen, gehoeren zu diesem Aufbau, werden aber nicht
|
||||
# mehr gebraucht?
|
||||
fw_close_report() { # backend apply
|
||||
local be="$1" apply="${2:-}"
|
||||
fw_close_report() { # backend apply keep_admin
|
||||
local be="$1" apply="${2:-}" keep_admin="${3:-}"
|
||||
local spec need port proto desc
|
||||
local -a todo=()
|
||||
|
||||
# Was gebraucht wird, darf nicht weg
|
||||
local noetig=""
|
||||
# Was gebraucht wird, darf nicht weg. Der Adminport des Proxy
|
||||
# Managers gehoert NICHT dazu: die Oberflaeche ist auch ueber
|
||||
# 127.0.0.1 und den Terminal-Browser zu erreichen, und offen im Netz
|
||||
# hat sie nichts verloren. Wer ihn behalten will: --keep-admin.
|
||||
local noetig="" adminports=""
|
||||
while IFS='|' read -r spec desc need; do
|
||||
[ -n "$spec" ] || continue
|
||||
case "$need" in ja|admin) noetig="$noetig$spec"$'\n' ;; esac
|
||||
case "$need" in
|
||||
ja) noetig="$noetig$spec"$'\n' ;;
|
||||
admin) if [ -n "$keep_admin" ]; then
|
||||
noetig="$noetig$spec"$'\n'
|
||||
else
|
||||
adminports="$adminports$spec"$'\n'
|
||||
fi ;;
|
||||
esac
|
||||
done < <(fw_required_ports)
|
||||
|
||||
local geschuetzt; geschuetzt="$(fw_protected_ports | sed '/^$/d' | sort -u)"
|
||||
@@ -6722,7 +6749,12 @@ fw_close_report() { # backend apply
|
||||
continue
|
||||
fi
|
||||
todo+=("$spec")
|
||||
printf ' %-10s %-44s %b\n' "$spec" "$desc" "${C_YEL}kann zu${C_RST}"
|
||||
if ( set +o pipefail; printf '%s' "$adminports" | grep -qxF "$spec" ); then
|
||||
printf ' %-10s %-44s %b\n' "$spec" "$desc" \
|
||||
"${C_YEL}kann zu - Zugang dann nur lokal${C_RST}"
|
||||
else
|
||||
printf ' %-10s %-44s %b\n' "$spec" "$desc" "${C_YEL}kann zu${C_RST}"
|
||||
fi
|
||||
done < <(fw_known_ports)
|
||||
|
||||
if [ "${#todo[@]}" -eq 0 ]; then
|
||||
@@ -6733,6 +6765,20 @@ fw_close_report() { # backend apply
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Betrifft es den Adminport, gehoert dazu gesagt, was das bedeutet
|
||||
local t2
|
||||
for t2 in "${todo[@]}"; do
|
||||
if ( set +o pipefail; printf '%s' "$adminports" | grep -qxF "$t2" ); then
|
||||
printf '\n Der Adminport %s des Proxy Managers ist dabei. Die Oberflaeche ist
|
||||
danach nur noch lokal erreichbar:
|
||||
%s browser (Terminal-Browser im Container)
|
||||
ssh -L %s:127.0.0.1:%s ... (Tunnel vom Arbeitsplatz)
|
||||
Soll er offen bleiben: %s firewall close --keep-admin\n' \
|
||||
"${t2%/*}" "$SELF" "${t2%/*}" "${t2%/*}" "$SELF"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
printf '\n%sZum Schliessen%s\n' "$C_BLD" "$C_RST"
|
||||
local t c n=0
|
||||
for t in "${todo[@]}"; do
|
||||
@@ -6786,12 +6832,13 @@ fw_close_report() { # backend apply
|
||||
cmd_firewall() {
|
||||
local sub="${1:-check}"; [ $# -gt 0 ] && shift || true
|
||||
case "$sub" in check|open|close) : ;; *) die "Unbekannt: firewall $sub (check|open|close)" ;; esac
|
||||
local apply="" src=""
|
||||
local apply="" src="" keep_admin=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--apply) apply=1; shift ;;
|
||||
--yes|-y) ASSUME_YES=1; shift ;;
|
||||
--source) src="$2"; shift 2 ;;
|
||||
--keep-admin) keep_admin=1; shift ;;
|
||||
*) die "Unbekannte Option fuer 'firewall': $1" ;;
|
||||
esac
|
||||
done
|
||||
@@ -6829,7 +6876,7 @@ cmd_firewall() {
|
||||
echo; warn "Ohne erkannte Firewall gibt es nichts zu schliessen."; echo
|
||||
return 0
|
||||
fi
|
||||
fw_close_report "$be" "$apply"
|
||||
fw_close_report "$be" "$apply" "$keep_admin"
|
||||
return $?
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user