#!/bin/sh # # Copyright (C) 2006 by Darren Reed. # # See the IPFILTER.LICENCE file for details on licencing. # prog=$0 RCD=/etc/rc.conf.d # This script is an interface to the following rc.d scripts: # /etc/rc.d/ipfilter # /etc/rc.d/ipfs # /etc/rc.d/ipnat # /etc/rc.d/ipmon running=`ipf -V 2>/dev/null|sed -ne 's/Running: \(.*\)/\1/p'` usage() { echo "$prog status" echo "$prog ipfilter " echo "$prog ipfs " echo "$prog ipmon " echo "$prog ipnat " exit 1 } enable() { old=${RCD}/$1.old new=${RCD}/$1 mkdir ${RCD}/$1.d if [ $? -eq 0 ] ; then if [ -f ${RCD}/$1 ] ; then cp ${RCD}/$1 ${RCD}/$1.old sed -e "s/^${1} *\=.*/${1}\=YES/" ${old} > ${new} /bin/rm ${old} else echo "$1=YES" > ${RCD}/$1 chmod go-wx ${RCD}/$1 fi rmdir ${RCD}/$1.d fi } disable() { old=${RCD}/$1.old new=${RCD}/$1 mkdir ${RCD}/$1.d if [ $? -eq 0 ] ; then if [ -f ${RCD}/$1 ] ; then cp ${RCD}/$1 ${RCD}/$1.old sed -e "s/^${1} *\=.*/${1}\=NO/" ${old} > ${new} /bin/rm ${old} else echo "$1=NO" > ${RCD}/$1 chmod go-wx ${RCD}/$1 fi rmdir ${RCD}/$1.d fi } status() { active=`/etc/rc.d/$1 rcvar|sed -ne "s/^$""${1}\=\(.*\)$/\1/p"` case $active in NO) return 0 ;; YES) return 1 ;; esac return 2 } status_ipmon() { echo -n "ipmon " pid=`pgrep ipmon` status ipmon case $? in 0) if [ -n "$pid" ] ; then echo "disabled-but-running" else echo "disabled" fi ;; 1) if [ -n "$pid" ] ; then echo "enabled" else echo "enabled-not-running" fi ;; 2) if [ -n "$pid" ] ; then echo "unknown-state-running" else echo "unknown-state" fi ;; esac } status_ipfilter() { if [ -z "$running" ] ; then rules= emsg="-not-in-kernel" dmsg= else case $running in yes) emsg= dmsg="-rules-loaded" rules=`ipfstat -io 2>/dev/null` if [ -z "$rules" ] ; then rules=`ipfstat -aio 2>/dev/null` if [ -z "$rules" ] ; then emsg="-no-rules" dmsg= fi fi ;; no) rules= emsg="-not-running" dmsg= ;; esac fi echo -n "ipfilter " status ipfilter case $? in 0) echo "disabled${dmsg}" ;; 1) echo "enabled${emsg}" ;; 2) if [ -n "$rules" ] ; then echo "unknown${dmsg}" else echo "unknown-state" fi ;; esac } status_ipnat() { if [ -z "$running" ] ; then rules= emsg="-not-in-kernel" dmsg= else case $running in yes) emsg= dmsg="-rules-loaded" rules=`ipnat -l 2>/dev/null | egrep '^map|rdr' 2>/dev/null` if [ -z "$rules" ] ; then emsg="-no-rules" dmsg= fi ;; no) rules= emsg="-not-running" dmsg= ;; esac fi echo -n "ipnat " status ipnat case $? in 0) echo "disabled${dmsg}" ;; 1) echo "enabled${dmsg}" ;; 2) if [ -n "$rules" ] ; then echo "unknown${dmsg}" else echo "unknown-state" fi ;; esac } status_ipfs() { status ipfs report ipfs $? } report() { echo -n "$1 " case $2 in 0) echo "disabled" ;; 1) echo "enabled" ;; 2) echo "unknown-status" ;; *) echo "$2" ;; esac } do_ipfilter() { case $1 in enable) enable ipfilter ;; disable) disable ipfilter ;; reload) /etc/rc.d/ipfilter reload ;; resync) /etc/rc.d/ipfilter resync ;; start) /etc/rc.d/ipfilter start ;; status) status_ipfilter ;; stop) /etc/rc.d/ipfilter stop ;; *) usage ;; esac } do_ipfs() { case $1 in enable) enable ipfs ;; disable) disble ipfs ;; start) /etc/rc.d/ipfs start ;; status) status_ipfs ;; stop) /etc/rc.d/ipfs stop ;; *) usage ;; esac } do_ipmon() { case $1 in enable) enable ipmon ;; disable) disble ipmon ;; restart) /etc/rc.d/ipmon restart ;; start) /etc/rc.d/ipmon start ;; status) status_ipmon ;; stop) /etc/rc.d/ipmon stop ;; *) usage ;; esac } do_ipnat() { case $1 in enable) enable ipnat ;; disable) disable ipnat ;; reload) /etc/rc.d/ipnat reload ;; restart) /etc/rc.d/ipnat restart ;; start) /etc/rc.d/ipnat start ;; status) status_ipnat ;; stop) /etc/rc.d/ipnat stop ;; *) usage ;; esac } do_status_all() { status_ipfilter status_ipfs status_ipmon status_ipnat } case $1 in status) do_status_all ;; ipfilter) do_ipfilter $2 ;; ipfs) do_ipfs $2 ;; ipmon) do_ipmon $2 ;; ipnat) do_ipnat $2 ;; *) usage ;; esac exit 0