2009-03-02 04:25:16 +01:00
|
|
|
###############################################################################
|
|
|
|
# Code imported from /usr/share/shorewall/prog.footer
|
|
|
|
###############################################################################
|
2009-02-22 18:30:14 +01:00
|
|
|
#
|
|
|
|
# Give Usage Information
|
|
|
|
#
|
|
|
|
usage() {
|
2011-08-26 01:00:27 +02:00
|
|
|
echo "Usage: $0 [ options ] <command>"
|
2012-01-07 22:53:41 +01:00
|
|
|
echo
|
2011-08-26 01:00:27 +02:00
|
|
|
echo "<command> is one of:"
|
|
|
|
echo " start"
|
|
|
|
echo " stop"
|
|
|
|
echo " clear"
|
|
|
|
echo " disable <interface>"
|
|
|
|
echo " down <interface>"
|
|
|
|
echo " enable <interface>"
|
|
|
|
echo " reset"
|
|
|
|
echo " refresh"
|
|
|
|
echo " restart"
|
|
|
|
echo " status"
|
|
|
|
echo " up <interface>"
|
|
|
|
echo " version"
|
2010-06-07 18:16:56 +02:00
|
|
|
echo
|
2010-03-06 17:45:43 +01:00
|
|
|
echo "Options are:"
|
|
|
|
echo
|
|
|
|
echo " -v and -q Standard Shorewall verbosity controls"
|
|
|
|
echo " -n Don't unpdate routing configuration"
|
|
|
|
echo " -p Purge Conntrack Table"
|
|
|
|
echo " -t Timestamp progress Messages"
|
|
|
|
echo " -V <verbosity> Set verbosity explicitly"
|
|
|
|
echo " -R <file> Override RESTOREFILE setting"
|
2009-02-22 18:30:14 +01:00
|
|
|
exit $1
|
|
|
|
}
|
2012-01-07 22:53:41 +01:00
|
|
|
|
|
|
|
checkkernelversion() {
|
|
|
|
local kernel
|
|
|
|
|
|
|
|
if [ $g_family -eq 6 ]; then
|
|
|
|
kernel=$(uname -r 2> /dev/null | sed -e 's/-.*//')
|
|
|
|
|
|
|
|
case "$kernel" in
|
|
|
|
*.*.*)
|
|
|
|
kernel=$(printf "%d%02d%02d" $(echo $kernel | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/\1 \2 \3/g'))
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
kernel=$(printf "%d%02d00" $(echo $kernel | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/\1 \2/g'))
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if [ $kernel -lt 20624 ]; then
|
|
|
|
error_message "ERROR: $g_product requires Linux kernel 2.6.24 or later"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2009-02-22 18:30:14 +01:00
|
|
|
################################################################################
|
|
|
|
# E X E C U T I O N B E G I N S H E R E #
|
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# Start trace if first arg is "debug" or "trace"
|
|
|
|
#
|
2012-03-06 00:21:10 +01:00
|
|
|
g_debug_iptables=
|
|
|
|
|
2009-08-20 23:32:15 +02:00
|
|
|
if [ $# -gt 1 ]; then
|
2009-02-22 18:30:14 +01:00
|
|
|
if [ "x$1" = "xtrace" ]; then
|
|
|
|
set -x
|
|
|
|
shift
|
|
|
|
elif [ "x$1" = "xdebug" ]; then
|
2012-03-06 00:21:10 +01:00
|
|
|
g_debug_iptables=Yes
|
2009-02-22 18:30:14 +01:00
|
|
|
shift
|
|
|
|
fi
|
|
|
|
fi
|
2010-03-01 17:32:59 +01:00
|
|
|
#
|
2012-01-07 22:53:41 +01:00
|
|
|
# Map VERBOSE to VERBOSITY for compatibility with old Shorewall[6]-lite installations
|
2010-03-01 17:32:59 +01:00
|
|
|
#
|
2010-03-01 15:57:04 +01:00
|
|
|
[ -z "$VERBOSITY" ] && [ -n "$VERBOSE" ] && VERBOSITY=$VERBOSE
|
2010-03-03 18:50:07 +01:00
|
|
|
#
|
|
|
|
# Map other old exported variables
|
|
|
|
#
|
|
|
|
g_purge=$PURGE
|
|
|
|
g_noroutes=$NOROUTES
|
|
|
|
g_timestamp=$TIMESTAMP
|
|
|
|
g_recovering=$RECOVERING
|
2010-03-01 02:58:01 +01:00
|
|
|
|
2012-03-27 00:43:04 +02:00
|
|
|
if [ -f ./.shorewallrc ]; then
|
|
|
|
. ./.shorewallrc || exit 1
|
|
|
|
elif [ -f ~/.shorewallrc ]; then
|
2012-03-24 21:05:39 +01:00
|
|
|
. ~/.shorewallrc || exit 1
|
2012-03-27 00:43:04 +02:00
|
|
|
elif [ -r /root/.shorewallrc ]; then
|
|
|
|
. /root/.shorewallrc || exit 1
|
|
|
|
elif [ -r /.shorewallrc ]; then
|
|
|
|
. /root/.shorewallrc || exit 1
|
|
|
|
elif - -f ${SHOREAWLLRC_HOME}/.shorewallrc; then
|
|
|
|
. ${SHOREAWLLRC_HOME}/.shorewallrc || exit 1
|
2012-03-24 21:05:39 +01:00
|
|
|
else
|
|
|
|
CONFDIR=/etc
|
|
|
|
SHAREDIR=/usr/share
|
|
|
|
VARDIR=/var/lib
|
|
|
|
fi
|
|
|
|
|
2012-03-27 01:01:35 +02:00
|
|
|
if [ -n "$TEMPDIR" ]; then
|
|
|
|
TMPDIR="$TEMPDIR"
|
|
|
|
export TMPDIR
|
|
|
|
fi
|
2012-03-27 00:43:04 +02:00
|
|
|
|
2009-02-22 18:30:14 +01:00
|
|
|
initialize
|
|
|
|
|
2009-06-05 22:49:23 +02:00
|
|
|
if [ -n "$STARTUP_LOG" ]; then
|
2009-11-03 18:34:21 +01:00
|
|
|
touch $STARTUP_LOG
|
|
|
|
chmod 0600 $STARTUP_LOG
|
2009-06-07 17:07:56 +02:00
|
|
|
if [ ${SHOREWALL_INIT_SCRIPT:-0} -eq 1 ]; then
|
2009-06-05 22:49:23 +02:00
|
|
|
#
|
|
|
|
# We're being run by a startup script that isn't redirecting STDOUT
|
|
|
|
# Redirect it to the log
|
|
|
|
#
|
2009-06-07 17:07:56 +02:00
|
|
|
exec 2>>$STARTUP_LOG
|
2009-06-05 22:49:23 +02:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2009-02-22 18:30:14 +01:00
|
|
|
finished=0
|
|
|
|
|
|
|
|
while [ $finished -eq 0 -a $# -gt 0 ]; do
|
|
|
|
option=$1
|
|
|
|
case $option in
|
|
|
|
-*)
|
|
|
|
option=${option#-}
|
|
|
|
|
|
|
|
[ -z "$option" ] && usage 1
|
|
|
|
|
|
|
|
while [ -n "$option" ]; do
|
|
|
|
case $option in
|
|
|
|
v*)
|
2010-03-22 23:41:32 +01:00
|
|
|
[ $VERBOSITY -lt 2 ] && VERBOSITY=$(($VERBOSITY + 1 ))
|
2009-02-22 18:30:14 +01:00
|
|
|
option=${option#v}
|
|
|
|
;;
|
|
|
|
q*)
|
2010-03-22 23:41:32 +01:00
|
|
|
[ $VERBOSITY -gt -1 ] && VERBOSITY=$(($VERBOSITY - 1 ))
|
2009-02-22 18:30:14 +01:00
|
|
|
option=${option#q}
|
|
|
|
;;
|
|
|
|
n*)
|
2010-03-03 18:50:07 +01:00
|
|
|
g_noroutes=Yes
|
2009-02-22 18:30:14 +01:00
|
|
|
option=${option#n}
|
|
|
|
;;
|
2010-03-01 00:25:25 +01:00
|
|
|
t*)
|
2010-03-03 18:50:07 +01:00
|
|
|
g_timestamp=Yes
|
2010-03-01 00:25:25 +01:00
|
|
|
option=${option#t}
|
2010-06-07 18:16:56 +02:00
|
|
|
;;
|
2010-03-02 23:49:31 +01:00
|
|
|
p*)
|
2010-03-06 17:12:04 +01:00
|
|
|
g_purge=Yes
|
2010-03-02 23:49:31 +01:00
|
|
|
option=${option#p}
|
|
|
|
;;
|
2010-03-01 00:25:25 +01:00
|
|
|
r*)
|
2010-03-03 18:50:07 +01:00
|
|
|
g_recovering=Yes
|
2010-03-01 00:25:25 +01:00
|
|
|
option=${option#r}
|
|
|
|
;;
|
|
|
|
V*)
|
|
|
|
option=${option#V}
|
2010-03-01 01:42:50 +01:00
|
|
|
|
|
|
|
if [ -z "$option" -a $# -gt 0 ]; then
|
|
|
|
shift
|
|
|
|
option=$1
|
|
|
|
fi
|
|
|
|
|
2010-03-01 00:25:25 +01:00
|
|
|
if [ -n "$option" ]; then
|
|
|
|
case $option in
|
|
|
|
-1|0|1|2)
|
2010-03-01 02:58:01 +01:00
|
|
|
VERBOSITY=$option
|
2010-03-01 00:25:25 +01:00
|
|
|
option=
|
|
|
|
;;
|
|
|
|
*)
|
2010-03-01 01:42:50 +01:00
|
|
|
startup_error "Invalid -V option value ($option)"
|
2010-03-01 00:25:25 +01:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
else
|
2010-03-01 01:42:50 +01:00
|
|
|
startup_error "Missing -V option value"
|
2010-03-01 00:25:25 +01:00
|
|
|
fi
|
|
|
|
;;
|
2010-03-02 23:49:31 +01:00
|
|
|
R*)
|
|
|
|
option=${option#R}
|
|
|
|
|
|
|
|
if [ -z "$option" -a $# -gt 0 ]; then
|
|
|
|
shift
|
|
|
|
option=$1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -n "$option" ]; then
|
|
|
|
case $option in
|
2010-06-07 18:16:56 +02:00
|
|
|
*/*)
|
2010-03-02 23:49:31 +01:00
|
|
|
startup_error "-R must specify a simple file name: $option"
|
|
|
|
;;
|
|
|
|
.safe|.try|NONE)
|
|
|
|
;;
|
|
|
|
.*)
|
|
|
|
error_message "ERROR: Reserved File Name: $RESTOREFILE"
|
|
|
|
exit 2
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
startup_error "Missing -R option value"
|
|
|
|
fi
|
|
|
|
|
|
|
|
RESTOREFILE=$option
|
|
|
|
option=
|
|
|
|
;;
|
2009-02-22 18:30:14 +01:00
|
|
|
*)
|
|
|
|
usage 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
finished=1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
COMMAND="$1"
|
|
|
|
|
|
|
|
case "$COMMAND" in
|
|
|
|
start)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if product_is_started; then
|
2010-03-02 21:34:36 +01:00
|
|
|
error_message "$g_product is already Running"
|
2009-02-22 18:30:14 +01:00
|
|
|
status=0
|
|
|
|
else
|
2010-03-02 21:34:36 +01:00
|
|
|
progress_message3 "Starting $g_product...."
|
2012-01-07 22:53:41 +01:00
|
|
|
if checkkernelversion; then
|
|
|
|
detect_configuration
|
|
|
|
define_firewall
|
|
|
|
status=$?
|
|
|
|
if [ $status -eq 0 ]; then
|
|
|
|
[ -n "$SUBSYSLOCK" ] && touch $SUBSYSLOCK
|
|
|
|
progress_message3 "done."
|
|
|
|
fi
|
2011-01-14 20:46:38 +01:00
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
stop)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if checkkernelversion; then
|
|
|
|
progress_message3 "Stopping $g_product...."
|
|
|
|
detect_configuration
|
|
|
|
stop_firewall
|
|
|
|
status=0
|
|
|
|
[ -n "$SUBSYSLOCK" ] && rm -f $SUBSYSLOCK
|
|
|
|
progress_message3 "done."
|
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
;;
|
|
|
|
reset)
|
2012-01-07 22:53:41 +01:00
|
|
|
if ! product_is_started ; then
|
2010-03-02 21:34:36 +01:00
|
|
|
error_message "$g_product is not running"
|
2009-02-22 18:30:14 +01:00
|
|
|
status=2
|
2012-01-07 22:53:41 +01:00
|
|
|
elif checkkernelversion; then
|
|
|
|
if [ $# -eq 1 ]; then
|
|
|
|
$IP6TABLES -Z
|
|
|
|
$IP6TABLES -t mangle -Z
|
|
|
|
date > ${VARDIR}/restarted
|
|
|
|
status=0
|
|
|
|
progress_message3 "$g_product Counters Reset"
|
|
|
|
else
|
|
|
|
shift
|
|
|
|
status=0
|
|
|
|
for chain in $@; do
|
|
|
|
if chain_exists $chain; then
|
|
|
|
if qt $IP6TABLES -Z $chain; then
|
|
|
|
progress_message3 "Filter $chain Counters Reset"
|
|
|
|
else
|
|
|
|
error_message "ERROR: Reset of chain $chain failed"
|
|
|
|
status=2
|
|
|
|
break
|
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
else
|
2012-01-07 22:53:41 +01:00
|
|
|
error_message "WARNING: Filter Chain $chain does not exist"
|
2009-02-22 18:30:14 +01:00
|
|
|
fi
|
2012-01-07 22:53:41 +01:00
|
|
|
done
|
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
restart)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if product_is_started; then
|
2010-03-02 21:34:36 +01:00
|
|
|
progress_message3 "Restarting $g_product...."
|
2009-02-22 18:30:14 +01:00
|
|
|
else
|
2010-03-02 21:34:36 +01:00
|
|
|
error_message "$g_product is not running"
|
|
|
|
progress_message3 "Starting $g_product...."
|
2010-06-07 22:55:27 +02:00
|
|
|
COMMAND=start
|
2009-02-22 18:30:14 +01:00
|
|
|
fi
|
|
|
|
|
2012-01-07 22:53:41 +01:00
|
|
|
if checkkernelversion; then
|
|
|
|
detect_configuration
|
|
|
|
define_firewall
|
|
|
|
status=$?
|
|
|
|
if [ -n "$SUBSYSLOCK" ]; then
|
|
|
|
[ $status -eq 0 ] && touch $SUBSYSLOCK || rm -f $SUBSYSLOCK
|
|
|
|
fi
|
|
|
|
|
|
|
|
[ $status -eq 0 ] && progress_message3 "done."
|
2011-01-14 20:46:38 +01:00
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
;;
|
|
|
|
refresh)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if product_is_started; then
|
2010-03-02 21:34:36 +01:00
|
|
|
progress_message3 "Refreshing $g_product...."
|
2012-01-07 22:53:41 +01:00
|
|
|
if checkkernelversion; then
|
|
|
|
detect_configuration
|
|
|
|
define_firewall
|
|
|
|
status=$?
|
|
|
|
[ $status -eq 0 ] && progress_message3 "done."
|
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
else
|
2010-03-02 21:34:36 +01:00
|
|
|
echo "$g_product is not running" >&2
|
2009-02-22 18:30:14 +01:00
|
|
|
status=2
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
restore)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if checkkernelversion; then
|
|
|
|
detect_configuration
|
|
|
|
define_firewall
|
|
|
|
status=$?
|
|
|
|
if [ -n "$SUBSYSLOCK" ]; then
|
|
|
|
[ $status -eq 0 ] && touch $SUBSYSLOCK || rm -f $SUBSYSLOCK
|
|
|
|
fi
|
|
|
|
[ $status -eq 0 ] && progress_message3 "done."
|
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
;;
|
|
|
|
clear)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2010-03-02 21:34:36 +01:00
|
|
|
progress_message3 "Clearing $g_product...."
|
2012-01-07 22:53:41 +01:00
|
|
|
if checkkernelversion; then
|
|
|
|
clear_firewall
|
|
|
|
status=0
|
|
|
|
if [ -n "$SUBSYSLOCK" ]; then
|
|
|
|
rm -f $SUBSYSLOCK
|
|
|
|
fi
|
2011-01-14 20:46:38 +01:00
|
|
|
progress_message3 "done."
|
2010-05-11 02:13:32 +02:00
|
|
|
fi
|
2009-02-22 18:30:14 +01:00
|
|
|
;;
|
|
|
|
status)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2010-03-22 23:34:10 +01:00
|
|
|
echo "$g_product-$SHOREWALL_VERSION Status at $(hostname) - $(date)"
|
2009-02-22 18:30:14 +01:00
|
|
|
echo
|
2012-01-07 22:53:41 +01:00
|
|
|
if product_is_started; then
|
2010-03-02 21:34:36 +01:00
|
|
|
echo "$g_product is running"
|
2009-02-22 18:30:14 +01:00
|
|
|
status=0
|
|
|
|
else
|
2010-03-02 21:34:36 +01:00
|
|
|
echo "$g_product is stopped"
|
2009-02-22 18:30:14 +01:00
|
|
|
status=4
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -f ${VARDIR}/state ]; then
|
|
|
|
state="$(cat ${VARDIR}/state)"
|
|
|
|
case $state in
|
2012-01-07 22:53:41 +01:00
|
|
|
Stopped*|Clear*)
|
2009-02-22 18:30:14 +01:00
|
|
|
status=3
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
state=Unknown
|
|
|
|
fi
|
|
|
|
echo "State:$state"
|
|
|
|
echo
|
|
|
|
;;
|
2010-05-15 21:48:04 +02:00
|
|
|
up|down)
|
|
|
|
[ $# -eq 1 ] && exit 0
|
|
|
|
shift
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
updown $1
|
|
|
|
status=0
|
2010-05-15 21:48:04 +02:00
|
|
|
;;
|
2011-08-26 01:00:27 +02:00
|
|
|
enable)
|
|
|
|
[ $# -eq 1 ] && exit 0
|
|
|
|
shift
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if product_is_started; then
|
2011-09-02 20:01:06 +02:00
|
|
|
detect_configuration
|
2011-08-26 01:00:27 +02:00
|
|
|
enable_provider $1
|
|
|
|
fi
|
|
|
|
status=0
|
|
|
|
;;
|
|
|
|
disable)
|
|
|
|
[ $# -eq 1 ] && exit 0
|
|
|
|
shift
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2012-01-07 22:53:41 +01:00
|
|
|
if product_is_started; then
|
2011-09-02 20:01:06 +02:00
|
|
|
detect_configuration
|
2011-08-26 01:00:27 +02:00
|
|
|
disable_provider $1
|
|
|
|
fi
|
|
|
|
status=0
|
|
|
|
;;
|
2009-02-22 18:30:14 +01:00
|
|
|
version)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
2010-03-02 17:02:10 +01:00
|
|
|
echo $SHOREWALL_VERSION
|
2009-02-22 18:30:14 +01:00
|
|
|
status=0
|
|
|
|
;;
|
|
|
|
help)
|
|
|
|
[ $# -ne 1 ] && usage 2
|
|
|
|
usage 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
usage 2
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
exit $status
|