blob: 15029d2505cfbc85b089b1ddcab5bebb2f89b1a2 [file] [log] [blame] [raw]
#!/sbin/sh
#
PATH=/sbin:/usr/bin:/usr/sbin:/opt/ipf/bin
#
pid=`ps -e | grep ipmon | awk ' { print $1 } ' -`
. /etc/rc.config
block_default_workaround() {
ipf -F a
echo "constructing minimal name resolution rules..."
NAMESERVERS=`cat /etc/resolv.conf | awk '/nameserver/ {printf "%s ", $2}'`
for NS in $NAMESERVERS
do
IF_TO_NS=`/usr/sbin/route -n get $NS | awk '/interface/ {print $NF}'`
IP_TO_NS=any
echo "pass out quick proto udp from $IP_TO_NS to $NS port = 53 keep state" | \
ipf -f -
done
}
set_device_files() {
input=`kmadmin -Q ipf | grep 'Character Major'`
set $input
major=$3
/bin/rm -f /dev/ipl /dev/ipnat /dev/ipstate /dev/ipauth
/bin/rm -f /dev/ipsync /dev/ipscan /dev/iplookup
mknod /dev/ipl c $major 0
mknod /dev/ipnat c $major 1
mknod /dev/ipstate c $major 2
mknod /dev/ipauth c $major 3
mknod /dev/ipsync c $major 4
mknod /dev/ipscan c $major 5
mknod /dev/iplookup c $major 6
}
case "$1" in
start_msg)
echo "Starting IP Filter"
;;
stop_msg)
echo "Stopping IP Filter"
;;
start)
if [ ${IPF_START} -eq 1 ] ; then
if [ x$pid != x ] ; then
kill -TERM $pid
fi
kmadmin -L ipf
set_device_files
if [ -r ${IPF_CONF} ]; then
BLOCK_DEFAULT=`/sbin/ipf -V | grep Default | \
awk '{print $2}'`
if [ x$BLOCK_DEFAULT = "xblock" ] ; then
block_default_workaround
fi
ipf -IFa -f ${IPF_CONF}
if [ $? != 0 ]; then
echo "$0: load of ${IPF_CONF} into alternate set failed"
else
ipf -s
fi
fi
if [ -r ${IPNAT_CONF} ]; then
ipnat -CF -f ${IPNAT_CONF}
if [ $? != 0 ]; then
echo "$0: load of ${IPNAT_CONF} failed"
fi
fi
if [ ${IPMON_START} -eq 1 ] ; then
ipmon ${IPMON_FLAGS}
fi
else
exit 2
fi
;;
stop)
if [ x$pid != x ] ; then
kill -TERM $pid
fi
kmadmin -U ipf
;;
reload)
if [ -r ${IPF_CONF} ]; then
ipf -I -Fa -f ${IPF_CONF}
if [ $? != 0 ]; then
echo "$0: reload of ${IPF_CONF} into alternate set failed"
else
ipf -s
fi
fi
if [ -r ${IPNAT_CONF} ]; then
ipnat -CF -f ${IPNAT_CONF}
if [ $? != 0 ]; then
echo "$0: reload of ${IPNAT_CONF} failed"
fi
fi
;;
setdevs)
set_device_files
;;
*)
echo "Usage: $0 {start|stop|reload}" >&2
exit 1
;;
esac
exit 0