Menuepunkt: Firewall-Regeln uebernehmen
Der Bericht sagte bisher nur, was fehlt - gesetzt wurde es entweder auf
der Kommandozeile mit "firewall open --apply" oder gar nicht. Unter
Einstellungen > Firewall stehen jetzt zwei Aktionen: pruefen und
uebernehmen.
Beim Uebernehmen wird zuerst nach einem Quellnetz gefragt und erst
danach angezeigt, was ausgefuehrt wird. Die Reihenfolge ist Absicht -
das Quellnetz aendert die Kommandos, und was im Fenster steht, soll
auch das sein, was laeuft. Ohne root-Rechte wird ueber sudo neu
aufgerufen; zum Schluss zeigt die Oberflaeche den Stand danach.
Dabei zwei Dinge in Ordnung gebracht:
- cmd_firewall gab auch nach erfolgreichem Uebernehmen noch 1 zurueck
(den urspruenglichen Befund). Die Oberflaeche las das als
"FEHLGESCHLAGEN", obwohl die Regeln gesetzt waren.
- Die aktiven Zonen werden einmal je Aufruf ermittelt statt erneut
fuer jede Regelzeile.
Die FW_*-Schluessel fehlen in einer aelteren .env noch; im Menue steht
dann <leer>. Die Beschriftungen nennen deshalb die Vorgabe, die in dem
Fall gilt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+55
-14
@@ -2966,11 +2966,11 @@ cert|CERT_DOMAIN|text|FQDN fuer selbstsignierte Zertifikate||
|
||||
cert|CERT_DAYS|int|Gueltigkeit in Tagen||
|
||||
cert|CERT_COUNTRY|text|Laenderkuerzel||
|
||||
cert|CERT_ORG|text|Organisation||
|
||||
firewall|FW_ROLE|choice|Rolle im verteilten Monitoring|single:central:remote|
|
||||
firewall|FW_EC_SYSLOG|choice|Event Console: Syslog annehmen (514)|off:udp:tcp:beide|
|
||||
firewall|FW_EC_SNMPTRAP|choice|Event Console: SNMP-Traps (162/udp)|off:on|
|
||||
firewall|FW_EC_TCP|choice|Event Console: Status ueber TCP (6558)|off:on|
|
||||
firewall|FW_AGENT|choice|Checkmk-Agent auf diesem Host (6556)|off:on|
|
||||
firewall|FW_ROLE|choice|Rolle im verteilten Monitoring (leer = single)|single:central:remote|1
|
||||
firewall|FW_EC_SYSLOG|choice|Event Console: Syslog 514 (leer = aus)|off:udp:tcp:beide|1
|
||||
firewall|FW_EC_SNMPTRAP|choice|Event Console: SNMP-Traps 162/udp (leer = aus)|off:on|1
|
||||
firewall|FW_EC_TCP|choice|Event Console: Status ueber TCP 6558 (leer = aus)|off:on|1
|
||||
firewall|FW_AGENT|choice|Checkmk-Agent dieses Hosts 6556 (leer = aus)|off:on|1
|
||||
firewall|FW_EXTRA_PORTS|text|Weitere Ports (3000/tcp=Grafana,...)||1
|
||||
EOF
|
||||
}
|
||||
@@ -4784,6 +4784,8 @@ gui_settings_category() {
|
||||
items+=("__npm__" ">> Proxy Manager: Stand und Admin-Port anzeigen")
|
||||
items+=("__npmrst__" ">> Datenbank zuruecksetzen (Konto neu anlegen lassen)") ;;
|
||||
backup) items+=("__jobs__" ">> Backup-Jobs verwalten") ;;
|
||||
firewall) items+=("__fwcheck__" ">> Firewall jetzt pruefen")
|
||||
items+=("__fwapply__" ">> Firewall-Regeln uebernehmen (Ports oeffnen)") ;;
|
||||
esac
|
||||
items+=("back" "zurueck")
|
||||
local sel
|
||||
@@ -4796,6 +4798,8 @@ gui_settings_category() {
|
||||
__npmrst__) gui_npm_reset || true; continue ;;
|
||||
__test__) gui_image_test || true; continue ;;
|
||||
__jobs__) gui_jobs_menu || true; continue ;;
|
||||
__fwcheck__) gui_firewall || true; continue ;;
|
||||
__fwapply__) gui_firewall_apply || true; continue ;;
|
||||
__npm__) local f; f="$(mktemp)"
|
||||
{ NO_COLOR=1 cmd_npm_enable; NO_COLOR=1 cmd_npm_port; } >"$f" 2>&1 || true
|
||||
ui_text "NGINX Proxy Manager" "$f"; rm -f "$f"; continue ;;
|
||||
@@ -5118,6 +5122,7 @@ gui_cert() {
|
||||
ui_run "Zertifikat erzeugen" bash -c "cd '$PROJECT_DIR' && '$SELF' cert --domain '$domain' --days '$days' ${a[*]+${a[*]}}"
|
||||
}
|
||||
|
||||
# Bericht anzeigen; fehlt etwas, das Uebernehmen anbieten
|
||||
gui_firewall() {
|
||||
local tmp rc=0
|
||||
tmp="$(mktemp)"
|
||||
@@ -5131,27 +5136,54 @@ gui_firewall() {
|
||||
|
||||
ui_yesno "Firewall" "Es fehlen Freigaben.
|
||||
|
||||
Sollen die benoetigten Ports jetzt geoeffnet werden?
|
||||
Die Regeln werden dauerhaft gesetzt." || return 0
|
||||
Die benoetigten Ports jetzt oeffnen?" || return 0
|
||||
gui_firewall_apply
|
||||
}
|
||||
|
||||
local src=""
|
||||
if ui_yesno "Firewall" "Nur fuer ein bestimmtes Quellnetz freigeben?
|
||||
# Regeln uebernehmen. Erst wird gefragt, ob auf ein Quellnetz begrenzt
|
||||
# werden soll - denn davon haengen die Kommandos ab, die danach zur
|
||||
# Bestaetigung angezeigt werden. Was dort steht, wird auch ausgefuehrt.
|
||||
gui_firewall_apply() {
|
||||
local src="" tmp rc=0
|
||||
if ui_yesno "Firewall-Regeln uebernehmen" "Nur fuer ein bestimmtes Quellnetz freigeben?
|
||||
|
||||
Ja = nur dieses Netz darf zugreifen
|
||||
Nein = Freigabe fuer alle Quellen"; then
|
||||
src="$(ui_input "Firewall" "Quellnetz in CIDR-Schreibweise:" "$(primary_ip | sed 's/\.[0-9]*$/.0\/24/')")" || src=""
|
||||
src="$(ui_input "Firewall-Regeln uebernehmen" "Quellnetz in CIDR-Schreibweise:" \
|
||||
"$(primary_ip | sed 's/\.[0-9]*$/.0\/24/')")" || return 0
|
||||
[ -n "$src" ] || return 0
|
||||
fi
|
||||
|
||||
local -a a=(firewall open --apply --yes)
|
||||
if [ -n "$src" ]; then a+=(--source "$src"); fi
|
||||
local -a opt=(open)
|
||||
if [ -n "$src" ]; then opt+=(--source "$src"); fi
|
||||
|
||||
tmp="$(mktemp)"
|
||||
cmd_firewall "${opt[@]}" >"$tmp" 2>&1 || rc=$?
|
||||
if [ "$rc" -eq 0 ]; then
|
||||
ui_text "Firewall - nichts zu tun" "$tmp"
|
||||
rm -f "$tmp"; return 0
|
||||
fi
|
||||
ui_text "Firewall - diese Regeln werden gesetzt" "$tmp"
|
||||
rm -f "$tmp"
|
||||
|
||||
ui_yesno "Firewall-Regeln uebernehmen" "Die angezeigten Regeln jetzt dauerhaft setzen?" || return 0
|
||||
|
||||
local -a a=(firewall "${opt[@]}" --apply --yes)
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
ui_run "Firewall freigeben" "$SELF" "${a[@]}" || true
|
||||
ui_run "Firewall-Regeln uebernehmen" "$SELF" "${a[@]}" || true
|
||||
elif command -v sudo >/dev/null 2>&1; then
|
||||
gui_run_interactive sudo -- "$SELF" "${a[@]}"
|
||||
else
|
||||
ui_msg "Firewall" "Dafuer werden root-Rechte benoetigt.
|
||||
Bitte als root erneut aufrufen."
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Zeigen, was dabei herausgekommen ist
|
||||
tmp="$(mktemp)"
|
||||
cmd_firewall check >"$tmp" 2>&1 || true
|
||||
ui_text "Firewall - Stand danach" "$tmp"
|
||||
rm -f "$tmp"
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -5317,10 +5349,12 @@ fw_detect() {
|
||||
# sie oft in verschiedenen Zonen - dann sagt die Standardzone allein
|
||||
# nichts darueber aus, ob ein Port erreichbar ist.
|
||||
fw_zones() {
|
||||
if [ -n "${_FW_ZONES:-}" ]; then printf '%s\n' "$_FW_ZONES"; return 0; fi
|
||||
local z
|
||||
z="$(firewall-cmd --get-active-zones 2>/dev/null | grep -v '^[[:space:]]' || true)"
|
||||
if [ -z "$z" ]; then z="$(firewall-cmd --get-default-zone 2>/dev/null || true)"; fi
|
||||
printf '%s\n' "$z" | sed '/^$/d'
|
||||
_FW_ZONES="$(printf '%s\n' "$z" | sed '/^$/d')"
|
||||
printf '%s\n' "$_FW_ZONES"
|
||||
}
|
||||
|
||||
# Dienstnamen von firewalld auf port/protokoll abbilden
|
||||
@@ -5532,6 +5566,8 @@ cmd_firewall() {
|
||||
done
|
||||
|
||||
local be role; be="$(fw_detect)"
|
||||
# Zonen einmal ermitteln - sonst fragt jede Regelzeile erneut nach
|
||||
if [ "$be" = firewalld ]; then _FW_ZONES=""; _FW_ZONES="$(fw_zones)"; fi
|
||||
role="$(fw_lc "${FW_ROLE:-single}")"
|
||||
case "$role" in central|remote) : ;; *) role=single ;; esac
|
||||
|
||||
@@ -5640,6 +5676,11 @@ cmd_firewall() {
|
||||
|| warn "Neuladen fehlgeschlagen."
|
||||
fi
|
||||
ok "Regeln gesetzt."
|
||||
echo
|
||||
# Gesetzt ist gesetzt - der Rueckgabewert darf jetzt nicht mehr
|
||||
# den urspruenglichen Befund melden, sonst liest die Oberflaeche
|
||||
# das als fehlgeschlagen.
|
||||
return 0
|
||||
else
|
||||
printf '\n Automatisch setzen: %s firewall open --apply\n' "$SELF"
|
||||
printf ' Nur fuer ein Netz : %s firewall open --apply --source 10.0.0.0/24\n' "$SELF"
|
||||
|
||||
Reference in New Issue
Block a user