rendered paste body/etc/config/firewall
config policy lan
option nat wan
option allow wan
config accept ssh
option proto tcp
option dport 22
option module state
option state new
config accept icmp
option proto icmp
config forward webserver
option target 192.168.1.10
option proto tcp
option dports 80,443
/etc/init.d/firewall
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
## Please make changes in /etc/firewall.user
START=45
get_variables() {
config_get proto "$1" proto
config_get dport "$1" dport
config_get dports "$1" dports
[ -n "$dports" ] && dports=`echo $dports | sed 's/-/:/'`
[ -n "$dports" ] && dports="-m multiport --dports $dports"
config_get sport "$1" sport
config_get sports "$1" sports
[ -n "$sports" ] && sports=`echo $sports | sed 's/-/:/'`
[ -n "$sports" -a -z "$dports" ] && sports="-m multiport --sports $sports"
[ -n "$sports" -a -n "$dports" ] && sports="--sports $sports"
config_get dest "$1" dest
config_get source "$1" source
config_get target "$1" target
}
config_cb() {
local cfg_type="$1" #TYPE
export cfg_name_firewall="$2"
case "$cfg_type" in
policy)
option_cb() {
case "$1" in
allow)
(include /lib/network
scan_interfaces
# Allow connections between networks
config_get iface1 "$cfg_name_firewall" ifname
config_get iface2 $2 ifname
echo "iptables -A FORWARD -i $iface1 -o $iface2 -j ACCEPT">>/tmp/firewall)
;;
nat)
(include /lib/network
scan_interfaces
config_get LAN_MASK "$cfg_name_firewall" netmask
config_get LAN_IP "$cfg_name_firewall" ipaddr
LAN_NET=$(/bin/ipcalc.sh $LAN_IP $LAN_MASK | grep NETWORK | cut -d= -f2)
echo "iptables -t nat -A POSTROUTING --src $LAN_NET/$LAN_MASK -o $2 -j MASQUERADE">>/tmp/firewall)
;;
esac
}
;;
forward)
append forward "$cfg_name_firewall" "$N"
;;
accept)
append accept "$cfg_name_firewall" "$N"
;;
esac
}
clear_variables() {
proto=
dport=
dports=
sport=
sports=
dest=
source=
target=
}
start() {
#
# delete all existing rules.
#
echo "iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# base case
iptables -P INPUT DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN SYN --tcp-option \! 2 -j DROP
iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT">/tmp/firewall
uci_load firewall
for section in $forward; do
clear_options
get_info "$section"
echo "iptables -A PREROUTING -t nat -p $proto ${source:+ --source $source} ${dest:+ -d $dest} ${dport:+ --dport $dport} ${dports:+ $dports} ${sports:+ $sports} -j DNAT --to $target">>/tmp/firewall
echo "iptables -A FORWARD -p $proto -m state --state NEW ${source:+ --source $source} ${dest:+ -d $dest} ${dport:+ --dport $dport} ${dports:+ $dports} ${sports:+ $sports} -j ACCEPT">>/tmp/firewall
done
for section in $accept; do
clear_options
get_variables "$section"
echo "iptables -A INPUT -p $proto -m state --state NEW ${source:+ --source $source} ${dest:+ -d $dest} ${dport:+ --dport $dport} ${dports:+ $dports} ${sports:+ $sports} -j ACCEPT">>/tmp/firewall
done
#[ -f /etc/firewall.user ] && . /etc/firewall.user
}
stop() {
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t nat -X
}
firewall.spec
policy[] {
default: enum,deny,allow required;
}
forward[] {
target: ip, required;
proto: string;
dports: ports;
sports: ports;
dport: port;
sport: port;
dest: ip; # for routers with more than one "outside" ip
src: ip; # restrict connections to a source host
}
allow[] {
proto: string;
dports: ports;
sports: ports;
dport: port;
sport: port;
dest: ip; # for routers with more than one "outside" ip
src: ip; # restrict connections to a source host
}
drop[] {
proto: string;
dports: ports;
sports: ports;
dport: port;
sport: port;
dest: ip; # for routers with more than one "outside" ip
src: ip; # restrict connections to a source host
}