firewall: - fix processing of rules with an ip family option - append interface rules at the end of internal zone chains, simplifies injecting user or addon rules - support simple file logging (option log + option log_limit per zone)

SVN-Revision: 22847
This commit is contained in:
Jo-Philipp Wich
2010-08-31 01:54:08 +00:00
parent 867ac59ff9
commit ee4dd61b10
4 changed files with 63 additions and 42 deletions

View File

@@ -32,16 +32,16 @@ fw_configure_interface() {
case "$mode/$subnet" in
# Zone supports v6 only or dual, need v6
6/*:*|i/*:*)
inet="{ -s $subnet -d ::/0 }"
onet="{ -s ::/0 -d $subnet }"
G6/*:*|i/*:*)
inet="-s $subnet -d ::/0"
onet="-s ::/0 -d $subnet"
mode=6
;;
# Zone supports v4 only or dual, need v4
4/*.*.*.*|i/*.*.*.*)
inet="{ -s $subnet -d 0.0.0.0/0 }"
onet="{ -s 0.0.0.0/0 -d $subnet }"
G4/*.*.*.*|i/*.*.*.*)
inet="-s $subnet -d 0.0.0.0/0"
onet="-s 0.0.0.0/0 -d $subnet"
mode=4
;;
@@ -52,20 +52,20 @@ fw_configure_interface() {
*/*.*) fw_log info "zone $zone does not support IPv4 address family, skipping"; return ;;
esac
fw $action $mode f ${chain}_ACCEPT ACCEPT ^ $onet { -o "$ifname" }
fw $action $mode f ${chain}_ACCEPT ACCEPT ^ $inet { -i "$ifname" }
fw $action $mode f ${chain}_DROP DROP ^ $onet { -o "$ifname" }
fw $action $mode f ${chain}_DROP DROP ^ $inet { -i "$ifname" }
fw $action $mode f ${chain}_REJECT reject ^ $onet { -o "$ifname" }
fw $action $mode f ${chain}_REJECT reject ^ $inet { -i "$ifname" }
fw $action $mode f ${chain}_ACCEPT ACCEPT $ { -o "$ifname" $onet }
fw $action $mode f ${chain}_ACCEPT ACCEPT $ { -i "$ifname" $inet }
fw $action $mode f ${chain}_DROP DROP $ { -o "$ifname" $onet }
fw $action $mode f ${chain}_DROP DROP $ { -i "$ifname" $inet }
fw $action $mode f ${chain}_REJECT reject $ { -o "$ifname" $onet }
fw $action $mode f ${chain}_REJECT reject $ { -i "$ifname" $inet }
fw $action $mode n ${chain}_nat MASQUERADE ^ $onet { -o "$ifname" }
fw $action $mode f ${chain}_MSSFIX TCPMSS ^ $onet { -o "$ifname" -p tcp --tcp-flags SYN,RST SYN --clamp-mss-to-pmtu }
fw $action $mode n ${chain}_nat MASQUERADE $ { -o "$ifname" $onet }
fw $action $mode f ${chain}_MSSFIX TCPMSS $ { -o "$ifname" -p tcp --tcp-flags SYN,RST SYN --clamp-mss-to-pmtu $onet }
fw $action $mode f input ${chain} $ $inet { -i "$ifname" }
fw $action $mode f forward ${chain}_forward $ $inet { -i "$ifname" }
fw $action $mode n PREROUTING ${chain}_prerouting ^ $inet { -i "$ifname" }
fw $action $mode r PREROUTING ${chain}_notrack ^ $inet { -i "$ifname" }
fw $action $mode f input ${chain} $ { -i "$ifname" $inet }
fw $action $mode f forward ${chain}_forward $ { -i "$ifname" $inet }
fw $action $mode n PREROUTING ${chain}_prerouting $ { -i "$ifname" $inet }
fw $action $mode r PREROUTING ${chain}_notrack $ { -i "$ifname" $inet }
}
local old_zones old_ifname old_subnets
@@ -101,19 +101,6 @@ fw_configure_interface() {
[ "$action" == del ] && return
local new_zones=
load_zone() {
fw_config_get_zone "$1"
list_contains zone_network "$iface" || return
fw_log info "adding $iface ($ifname${aliasnet:+ alias $aliasnet}) to zone $zone_name"
fw__do_rules add ${zone_name} "$ifname" $aliasnet
append new_zones $zone_name
[ -n "$aliasnet" ] || ACTION=add ZONE="$zone_name" INTERFACE="$iface" DEVICE="$ifname" /sbin/hotplug-call firewall
}
config_foreach load_zone zone
[ -z "$aliasnet" ] && {
local aliases
config_get aliases "$iface" aliases
@@ -142,6 +129,19 @@ fw_configure_interface() {
uci_set_state firewall core "${iface}_subnets" "$subnets"
}
local new_zones=
load_zone() {
fw_config_get_zone "$1"
list_contains zone_network "$iface" || return
fw_log info "adding $iface ($ifname${aliasnet:+ alias $aliasnet}) to zone $zone_name"
fw__do_rules add ${zone_name} "$ifname" $aliasnet
append new_zones $zone_name
[ -n "$aliasnet" ] || ACTION=add ZONE="$zone_name" INTERFACE="$iface" DEVICE="$ifname" /sbin/hotplug-call firewall
}
config_foreach load_zone zone
uci_set_state firewall core "${iface}_zone" "$new_zones"
uci_set_state firewall core "${iface}_ifname" "$ifname"
}