Changeset 15855


Ignore:
Timestamp:
2009-05-14T23:46:38+02:00 (9 years ago)
Author:
nbd
Message:

firewall: automatically set up NOTRACK rules to disable connection tracking for zones that have no masquerading, no conntrack and no forwarding from/to other zones with masq/conntrack

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/firewall/files/uci_firewall.sh

    r15278 r15855  
    2121DEF_OUTPUT=DROP 
    2222DEF_FORWARD=DROP 
     23CONNTRACK_ZONES= 
     24NOTRACK_DISABLED= 
     25 
     26find_item() { 
     27        local item="$1"; shift 
     28        for i in "$@"; do 
     29                [ "$i" = "$item" ] && return 0 
     30        done 
     31        return 1 
     32} 
    2333 
    2434load_policy() { 
     
    5262        $IPTABLES -N zone_$1_nat -t nat 
    5363        $IPTABLES -N zone_$1_prerouting -t nat 
     64        $IPTABLES -t raw -N zone_$1_notrack 
    5465        [ "$6" == "1" ] && $IPTABLES -t nat -A POSTROUTING -j zone_$1_nat 
    5566} 
     
    8394        $IPTABLES -I PREROUTING 1 -t nat -i "$ifname" -j zone_${zone}_prerouting  
    8495        $IPTABLES -A forward -i "$ifname" -j zone_${zone}_forward 
     96        $IPTABLES -t raw -I PREROUTING 1 -i "$ifname" -j zone_${name}_notrack 
    8597        uci_set_state firewall core "${network}_ifname" "$ifname" 
    8698        uci_set_state firewall core "${network}_zone" "$zone" 
     
    128140} 
    129141 
     142fw_clear() { 
     143        $IPTABLES -F 
     144        $IPTABLES -t nat -F 
     145        $IPTABLES -t nat -X 
     146        $IPTABLES -t raw -F 
     147        $IPTABLES -t raw -X 
     148        $IPTABLES -X 
     149} 
     150 
    130151fw_defaults() { 
    131152        [ -n "$DEFAULTS_APPLIED" ] && { 
     
    154175        $IPTABLES -P FORWARD DROP 
    155176 
    156         $IPTABLES -F 
    157         $IPTABLES -t nat -F 
    158         $IPTABLES -t nat -X 
    159         $IPTABLES -X 
    160  
    161         config_get_bool drop_invalid $1 drop_invalid 1 
     177        fw_clear 
     178        config_get_bool drop_invalid $1 drop_invalid 0 
    162179 
    163180        [ "$drop_invalid" -gt 0 ] && { 
     
    165182                $IPTABLES -A OUTPUT -m state --state INVALID -j DROP 
    166183                $IPTABLES -A FORWARD -m state --state INVALID -j DROP 
     184                NOTRACK_DISABLED=1 
    167185        } 
    168186 
     
    206224        config_get name $1 name 
    207225        config_get network $1 network 
    208         config_get masq $1 masq 
     226        config_get_bool masq $1 masq "0" 
     227        config_get_bool conntrack $1 conntrack "0" 
     228 
    209229        load_policy $1 
    210  
     230        [ "$conntrack" = "1" -o "$masq" = "1" ] && append CONNTRACK_ZONES "$name" 
    211231        [ -z "$network" ] && network=$name 
    212232        create_zone "$name" "$network" "$input" "$output" "$forward" "$masq" 
     
    286306        $IPTABLES -I $z_src 1 -j $z_dest 
    287307        [ "$mtu_fix" -gt 0 -a -n "$dest" ] && $IPTABLES -I $z_src 1 -j zone_${dest}_MSSFIX 
     308 
     309        # propagate masq zone flag 
     310        find_item "$src" $CONNTRACK_ZONES && append CONNTRACK_ZONES $dest 
     311        find_item "$dest" $CONNTRACK_ZONES && append CONNTRACK_ZONES $src 
    288312} 
    289313 
     
    395419} 
    396420 
     421fw_check_notrack() { 
     422        local zone="$1" 
     423        config_get name "$zone" name 
     424        [ -n "$NOTRACK_DISABLED" ] || \ 
     425                find_item "$name" $CONNTRACK_ZONES || \ 
     426                $IPTABLES -t raw -A zone_${name}_notrack -j NOTRACK 
     427} 
     428 
    397429fw_init() { 
    398430        DEFAULTS_APPLIED= 
     
    411443        config_foreach fw_include include 
    412444        uci_set_state firewall core loaded 1 
     445        config_foreach fw_check_notrack zone 
    413446        unset CONFIG_APPEND 
    414447        config_load network 
     
    417450 
    418451fw_stop() { 
    419         $IPTABLES -F 
    420         $IPTABLES -t nat -F 
    421         $IPTABLES -t nat -X 
    422         $IPTABLES -X 
     452        fw_clear 
    423453        $IPTABLES -P INPUT ACCEPT 
    424454        $IPTABLES -P OUTPUT ACCEPT 
    425455        $IPTABLES -P FORWARD ACCEPT 
    426         uci_revert_state firewall core 
    427 } 
     456        uci_revert_state firewall 
     457} 
Note: See TracChangeset for help on using the changeset viewer.