Changeset 22901


Ignore:
Timestamp:
2010-09-04T19:20:12+02:00 (7 years ago)
Author:
jow
Message:

[backfire] backport masq_src and masq_dest options from trunk firewall

Location:
branches/backfire/package/firewall
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/package/firewall/Makefile

    r22228 r22901  
    1010 
    1111PKG_VERSION:=1 
    12 PKG_RELEASE:=12 
     12PKG_RELEASE:=13 
    1313 
    1414include $(INCLUDE_DIR)/package.mk 
  • branches/backfire/package/firewall/files/uci_firewall.sh

    r22228 r22901  
    7070        local ifname="$2" 
    7171        local zone="$3" 
     72        local masq_src="$4" 
     73        local masq_dest="$5" 
    7274 
    7375        local n_if n_zone 
     
    7678        [ -n "$n_zone" ] && { 
    7779                if [ "$n_zone" != "$zone" ]; then 
    78                         delif "$network" "$n_if" "$n_zone" 
     80                        local n_masq_src n_masq_dest 
     81                        config_get n_masq_src core "${n_zone}_masq_src" 
     82                        config_get n_masq_dest core "${n_zone}_masq_dest" 
     83                        delif "$network" "$n_if" "$n_zone" "$n_masq_src" "$n_masq_dest" 
    7984                else 
    8085                        return 
     
    9196        $IPTABLES -I zone_${zone}_DROP 1 -i "$ifname" -j DROP 
    9297        $IPTABLES -I zone_${zone}_REJECT 1 -i "$ifname" -j reject 
    93         $IPTABLES -I zone_${zone}_nat 1 -t nat -o "$ifname" -j MASQUERADE 
     98 
     99        local msrc mdst 
     100        for msrc in ${masq_src:-0.0.0.0/0}; do 
     101                [ "${msrc#!}" != "$msrc" ] && msrc="! -s ${msrc#!}" || msrc="-s $msrc" 
     102                for mdst in ${masq_dest:-0.0.0.0/0}; do 
     103                        [ "${mdst#!}" != "$mdst" ] && mdst="! -d ${mdst#!}" || mdst="-d $mdst" 
     104                        $IPTABLES -I zone_${zone}_nat 1 -t nat -o "$ifname" $msrc $mdst -j MASQUERADE 
     105                done 
     106        done 
     107 
    94108        $IPTABLES -I PREROUTING 1 -t nat -i "$ifname" -j zone_${zone}_prerouting 
    95109        $IPTABLES -A forward -i "$ifname" -j zone_${zone}_forward 
     
    97111        uci_set_state firewall core "${network}_ifname" "$ifname" 
    98112        uci_set_state firewall core "${network}_zone" "$zone" 
     113        uci_set_state firewall core "${zone}_masq_src" "$masq_src" 
     114        uci_set_state firewall core "${zone}_masq_dest" "$masq_dest" 
    99115        ACTION=add ZONE="$zone" INTERFACE="$network" DEVICE="$ifname" /sbin/hotplug-call firewall 
    100116} 
     
    104120        local ifname="$2" 
    105121        local zone="$3" 
     122        local masq_src="$4" 
     123        local masq_dest="$5" 
    106124 
    107125        logger "removing $network ($ifname) from firewall zone $zone" 
     
    114132        $IPTABLES -D zone_${zone}_DROP -i "$ifname" -j DROP 
    115133        $IPTABLES -D zone_${zone}_REJECT -i "$ifname" -j reject 
    116         $IPTABLES -D zone_${zone}_nat -t nat -o "$ifname" -j MASQUERADE 
     134 
     135        local msrc mdst 
     136        for msrc in ${masq_src:-0.0.0.0/0}; do 
     137                [ "${msrc#!}" != "$msrc" ] && msrc="! -s ${msrc#!}" || msrc="-s $msrc" 
     138                for mdst in ${masq_dest:-0.0.0.0/0}; do 
     139                        [ "${mdst#!}" != "$mdst" ] && mdst="! -d ${mdst#!}" || mdst="-d $mdst" 
     140                        $IPTABLES -D zone_${zone}_nat -t nat -o "$ifname" $msrc $mdst -j MASQUERADE 
     141                done 
     142        done 
     143 
    117144        $IPTABLES -D PREROUTING -t nat -i "$ifname" -j zone_${zone}_prerouting 
    118145        $IPTABLES -D forward -i "$ifname" -j zone_${zone}_forward 
    119146        uci_revert_state firewall core "${network}_ifname" 
    120147        uci_revert_state firewall core "${network}_zone" 
     148        uci_revert_state firewall core "${zone}_masq_src" 
     149        uci_revert_state firewall core "${zone}_masq_dest" 
    121150        ACTION=remove ZONE="$zone" INTERFACE="$network" DEVICE="$ifname" /sbin/hotplug-call firewall 
    122151} 
     
    417446        local name 
    418447        local network 
     448        local masq_src 
     449        local masq_dest 
    419450        config_get name $1 name 
    420451        config_get network $1 network 
     452        config_get masq_src $1 masq_src 
     453        config_get masq_dest $1 masq_dest 
    421454        [ -z "$network" ] && network=$name  
    422455        for n in $network; do 
    423                 [ "$n" = "$interface" ] && append add_zone "$name" 
     456                [ "$n" = "$interface" ] && { 
     457                        append add_zone "$name" 
     458                        append add_masq_src "$masq_src" 
     459                        append add_masq_dest "$masq_dest" 
     460                } 
    424461        done 
    425462} 
     
    429466        local interface="$2" 
    430467        local ifname="$(sh -c ". /etc/functions.sh; include /lib/network; scan_interfaces; config_get "$interface" ifname")" 
    431         add_zone= 
     468        local add_zone= 
     469        local add_masq_src= 
     470        local add_masq_dest= 
    432471        local up 
    433472 
     
    439478                ifup) 
    440479                        for z in $add_zone; do  
    441                                 local loaded 
     480                                local loaded masq_src masq_dest 
    442481                                config_get loaded core loaded 
    443                                 [ -n "$loaded" ] && addif "$interface" "$ifname" "$z" 
     482                                [ -n "$loaded" ] && addif "$interface" "$ifname" "$z" "$add_masq_src" "$add_masq_dest" 
    444483                        done 
    445484                ;; 
    446485                ifdown) 
    447486                        config_get up "$interface" up 
     487                        logger -t "EVENT" "$action $interface $up" 
    448488 
    449489                        for z in $ZONE; do  
    450                                 [ "$up" == "1" ] && delif "$interface" "$ifname" "$z" 
     490                                local masq_src masq_dest 
     491                                config_get masq_src core "${z}_masq_src" 
     492                                config_get masq_dest core "${z}_masq_dest" 
     493                                [ "$up" == "1" ] && delif "$interface" "$ifname" "$z" "$masq_src" "$masq_dest" 
    451494                        done 
    452495                ;; 
Note: See TracChangeset for help on using the changeset viewer.