#!/bin/sh . /usr/libexec/haproxy-manager/common.sh ZONE="$(uci_get main firewall_zone wan)" MANAGED="$(uci_get main manage_firewall 0)" MODE="$(uci_get main firewall_conflict_mode warn)" PORTS="$(required_ports)" WAN_POLICY=unknown HAS_MANAGED_RULE=0 CONFLICTS=0 for zone in $(uci -q show firewall | sed -n 's/^firewall\.\(@zone\[[0-9][0-9]*\]\)=zone/\1/p'); do [ "$(uci -q get "firewall.$zone.name")" = "$ZONE" ] || continue WAN_POLICY="$(uci -q get "firewall.$zone.input" 2>/dev/null || echo REJECT)" break done for rule in $(uci -q show firewall | sed -n 's/^firewall\.\(@rule\[[0-9][0-9]*\]\)=rule/\1/p'); do name="$(uci -q get "firewall.$rule.name" 2>/dev/null || true)" [ "$name" = "$FIREWALL_RULE_NAME" ] || continue HAS_MANAGED_RULE=1 break done printf 'enabled\t%s\n' "$MANAGED" printf 'zone\t%s\n' "$ZONE" printf 'policy\t%s\n' "$WAN_POLICY" printf 'mode\t%s\n' "$MODE" printf 'managed_rule\t%s\n' "$HAS_MANAGED_RULE" for port in $PORTS; do printf 'port\t%s\n' "$port" done for redirect in $(uci -q show firewall | sed -n 's/^firewall\.\(@redirect\[[0-9][0-9]*\]\)=redirect/\1/p'); do redirect_enabled="$(uci -q get "firewall.$redirect.enabled" 2>/dev/null || echo 1)" redirect_name="$(uci -q get "firewall.$redirect.name" 2>/dev/null || true)" if [ "$redirect_enabled" != 1 ]; then case "$redirect_name" in "$FIREWALL_DISABLED_PREFIX"*) [ "$MANAGED" = 1 ] && [ "$MODE" != disable ] || continue ;; *) continue ;; esac fi [ "$(uci -q get "firewall.$redirect.src" 2>/dev/null || true)" = "$ZONE" ] || continue proto="$(uci -q get "firewall.$redirect.proto" 2>/dev/null || echo 'tcp udp')" case " $proto " in *' tcp '*|*' tcpudp '*) ;; *) continue ;; esac spec="$(uci -q get "firewall.$redirect.src_dport" 2>/dev/null || true)" [ -n "$spec" ] || continue for port in $PORTS; do port_spec_contains "$spec" "$port" || continue name="${redirect_name:-$redirect}" dest_ip="$(uci -q get "firewall.$redirect.dest_ip" 2>/dev/null || true)" dest_port="$(uci -q get "firewall.$redirect.dest_port" 2>/dev/null || true)" printf 'conflict\t%s\t%s\t%s\t%s\t%s\n' "$redirect" "$name" "$spec" "$dest_ip" "$dest_port" CONFLICTS=$((CONFLICTS + 1)) break done done printf 'conflicts\t%s\n' "$CONFLICTS"