Zuletzt aktiv 1 month ago

gistfile1.txt Originalformat
1function cmd::fw::list() {
2 local peer="" type=""
3 local show_nflog=true show_accept=true show_drop=true
4
5 while [[ $# -gt 0 ]]; do
6 case "$1" in
7 --peer) peer="$2"; shift 2 ;;
8 --type) type="$2"; shift 2 ;;
9 --no-nflog) show_nflog=false; shift ;;
10 --no-accept) show_accept=false; shift ;;
11 --no-drop) show_drop=false; shift ;;
12 *) shift ;;
13 esac
14 done
15
16 log::section "Firewall Rules (FORWARD)"
17 printf "\n"
18
19 if [[ -n "$peer" ]]; then
20 local ip
21 ip=$(peers::get_ip "$peer")
22 [[ -z "$ip" ]] && log::error "Peer not found: $peer" && return 1
23 iptables -L FORWARD -n -v | grep -F "$ip" | while IFS= read -r rule; do
24 [[ -z "$rule" ]] && continue
25 ! $show_nflog && [[ "$rule" =~ NFLOG ]] && continue
26 ! $show_accept && [[ "$rule" =~ ACCEPT ]] && continue
27 ! $show_drop && [[ "$rule" =~ DROP ]] && continue
28 ui::firewall_rule "$rule"
29 done
30 elif [[ -n "$type" ]]; then
31 local subnet
32 subnet=$(config::subnet_for "$type")
33 [[ -z "$subnet" ]] && log::error "Unknown type: $type" && return 1
34 iptables -L FORWARD -n -v | grep -F "$subnet" | while IFS= read -r rule; do
35 [[ -z "$rule" ]] && continue
36 ! $show_nflog && [[ "$rule" =~ NFLOG ]] && continue
37 ! $show_accept && [[ "$rule" =~ ACCEPT ]] && continue
38 ! $show_drop && [[ "$rule" =~ DROP ]] && continue
39 ui::firewall_rule "$rule"
40 done
41 else
42 iptables -L FORWARD -n -v \
43 | grep -v "^Chain\|^target\|^$\|ACCEPT.*0\.0\.0\.0.*0\.0\.0\.0" \
44 | while IFS= read -r rule; do
45 [[ -z "$rule" ]] && continue
46 ! $show_nflog && [[ "$rule" =~ NFLOG ]] && continue
47 ! $show_accept && [[ "$rule" =~ ACCEPT ]] && continue
48 ! $show_drop && [[ "$rule" =~ DROP ]] && continue
49 ui::firewall_rule "$rule"
50 done
51 fi
52
53 printf "\n"
54}