X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Ffirewall%2Ffiles%2Fuci_firewall.sh;h=925ab4eb4b8d1cbfa06e3d7b1139c5b86b8c78fb;hb=9eaae4c61d7f33649b5503b67ac680d94621f326;hp=ff82f8bf0b49562c542549041a26a80112adc392;hpb=8ab217accc34d94e4588cf89fe82327b3d99528a;p=openwrt%2Fstaging%2Fwigyori.git diff --git a/package/firewall/files/uci_firewall.sh b/package/firewall/files/uci_firewall.sh index ff82f8bf0b..925ab4eb4b 100755 --- a/package/firewall/files/uci_firewall.sh +++ b/package/firewall/files/uci_firewall.sh @@ -53,6 +53,10 @@ create_zone() { } addif() { + local dev + config_get dev core $2 + [ -n "$dev" -a "$dev" != "$1" ] && delif "$dev" "$2" + [ -n "$dev" -a "$dev" == "$1" ] && return logger "adding $1 to firewall zone $2" $IPTABLES -A INPUT -i $1 -j zone_$2 $IPTABLES -I zone_$2_ACCEPT 1 -o $1 -j ACCEPT @@ -64,6 +68,7 @@ addif() { $IPTABLES -I zone_$2_nat 1 -t nat -o $1 -j MASQUERADE $IPTABLES -I PREROUTING 1 -t nat -i $1 -j zone_$2_prerouting $IPTABLES -A FORWARD -i $1 -j zone_$2_forward + uci_set_state firewall core "$2" "$1" } delif() { @@ -78,6 +83,7 @@ delif() { $IPTABLES -D zone_$2_nat -t nat -o $1 -j MASQUERADE $IPTABLES -D PREROUTING -t nat -i $1 -j zone_$2_prerouting $IPTABLES -D FORWARD -i $1 -j zone_$2_forward + uci_revert_state firewall core "$2" } load_synflood() { @@ -106,6 +112,9 @@ fw_defaults() { do echo 0 > $f done + + uci_revert_state firewall core + uci_set_state firewall core "" firewall_state $IPTABLES -F $IPTABLES -t nat -F @@ -181,6 +190,8 @@ fw_rule() { [ -n "$dest" ] && TARGET=zone_${dest}_$target || TARGET=$target [ -n "$dest_port" -a -z "$proto" ] && { \ echo "dport may only be used it proto is defined"; return; } + [ -n "$src_port" -a -z "$proto" ] && { \ + echo "sport may only be used it proto is defined"; return; } $IPTABLES -I $ZONE 1 \ ${proto:+-p $proto} \ ${src_ip:+-s $src_ip} \ @@ -211,7 +222,7 @@ fw_redirect() { local src_mac local dest_ip local dest_port - local protocol + local proto config_get src $1 src config_get src_ip $1 src_ip @@ -220,20 +231,39 @@ fw_redirect() { config_get src_mac $1 src_mac config_get dest_ip $1 dest_ip config_get dest_port $1 dest_port - config_get protocol $1 protocol + config_get proto $1 proto [ -z "$src" -o -z "$dest_ip" ] && { \ echo "redirect needs src and dest_ip"; return ; } - [ -n "$dest_port" -a -z "$protocol" ] && { \ + [ -n "$dest_port" -a -z "$proto" ] && { \ echo "dport may only be used it proto is defined"; return; } + [ -n "$src_port" -a -z "$proto" ] && { \ + echo "sport may only be used it proto is defined"; return; } + + src_port_first=${src_port%-*} + src_port_last=${src_port#*-} + [ "$src_port_first" -ne "$src_port_last" ] && { \ + src_port="$src_port_first:$src_port_last"; } + + src_dport_first=${src_dport%-*} + src_dport_last=${src_dport#*-} + [ "$src_dport_first" -ne "$src_dport_last" ] && { \ + src_dport="$src_dport_first:$src_dport_last"; } + $IPTABLES -A zone_${src}_prerouting -t nat \ - ${protocol:+-p $protocol} \ + ${proto:+-p $proto} \ ${src_ip:+-s $src_ip} \ ${src_port:+--sport $src_port} \ ${src_dport:+--dport $src_dport} \ ${src_mac:+-m mac --mac-source $src_mac} \ -j DNAT --to-destination $dest_ip${dest_port:+:$dest_port} + + dest_port_first=${dest_port%-*} + dest_port_last=${dest_port#*-} + [ "$dest_port_first" -ne "$dest_port_last" ] && { \ + dest_port="$dest_port_first:$dest_port_last"; } + $IPTABLES -I zone_${src}_forward 1 \ - ${protocol:+-p $protocol} \ + ${proto:+-p $proto} \ -d $dest_ip \ ${src_ip:+-s $src_ip} \ ${src_port:+--sport $src_port} \ @@ -257,6 +287,19 @@ fw_addif() { (ACTION="ifup" INTERFACE="$1" . /etc/hotplug.d/iface/20-firewall) } +fw_custom_chains() { + $IPTABLES -N input_rule + $IPTABLES -N output_rule + $IPTABLES -N forward_rule + $IPTABLES -N prerouting_rule -t nat + $IPTABLES -N postrouting_rule -t nat + $IPTABLES -A INPUT -j input_rule + $IPTABLES -A OUTPUT -j output_rule + $IPTABLES -A FORWARD -j forward_rule + $IPTABLES -A PREROUTING -t nat -j prerouting_rule + $IPTABLES -A POSTROUTING -t nat -j postrouting_rule +} + fw_init() { echo "Loading defaults" config_foreach fw_defaults defaults @@ -268,10 +311,10 @@ fw_init() { config_foreach fw_forwarding forwarding echo "Loading redirects" config_foreach fw_redirect redirect + echo "Adding custom chains" + fw_custom_chains echo "Loading includes" config_foreach fw_include include - - uci_set_state firewall core "" firewall_state uci_set_state firewall core loaded 1 unset CONFIG_APPEND config_load network @@ -287,4 +330,5 @@ fw_stop() { $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT + uci_revert_state firewall core }