#!/bin/bash # The Shoreline Firewall (Shorewall) Packet Filtering Firewall - V5.2 # # (c) 2012-2014 - Tom Eastep (teastep@shorewall.net) # # On most distributions, this file should be called # /etc/init.d/shorewall. # # Complete documentation is available at https://shorewall.org # # This program is part of Shorewall. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the license or, # at your option, any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # ############################################################################### # # Check to see if any of the products are running. If so, issue a warning # and exits with value 1 firewall_stopped() { for PRODUCT in $PRODUCTS; do if $PRODUCT status > /dev/null 2>&1; then echo " WARNING: $PRODUCT is running -- ignoring $1 command" >&2 return 1 fi done return 0 } # set the STATEDIR variable setstatedir() { local statedir if [ -f ${CONFDIR}/${PRODUCT}/vardir ]; then statedir=$( . /${CONFDIR}/${PRODUCT}/vardir && echo $VARDIR ) fi [ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT} if [ -x ${STATEDIR}/firewall ]; then return 0 elif [ $PRODUCT = shorewall ]; then ${SBINDIR}/shorewall compile elif [ $PRODUCT = shorewall6 ]; then ${SBINDIR}/shorewall -6 compile fi } # Initialize the firewall shorewall_start () { local PRODUCT local STATEDIR printf "Initializing \"Shorewall-based firewalls\": " for PRODUCT in $PRODUCTS; do if setstatedir; then # # Run in a sub-shell to avoid name collisions # ( if ! ${STATEDIR}/firewall status > /dev/null 2>&1; then ${STATEDIR}/firewall ${OPTIONS} stop fi ) fi done if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then ipset -R < "$SAVE_IPSETS" fi return 0 } # Clear the firewall shorewall_stop () { local PRODUCT local STATEDIR printf "Clearing \"Shorewall-based firewalls\": " for PRODUCT in $PRODUCTS; do if setstatedir; then # # Run in sub-shell to avoid name collisions # ( if ! ${STATEDIR}/firewall status > /dev/null 2>&1; then ${STATEDIR}/firewall ${OPTIONS} clear fi ) fi done if [ -n "$SAVE_IPSETS" ]; then mkdir -p $(dirname "$SAVE_IPSETS") if ipset -S > "${SAVE_IPSETS}.tmp"; then grep -qE -- '^(-N|create )' "${SAVE_IPSETS}.tmp" && mv -f "${SAVE_IPSETS}.tmp" "$SAVE_IPSETS" || rm -f "${SAVE_IPSETS}.tmp" else rm -f "${SAVE_IPSETS}.tmp" fi fi return 0 } # # This is modified by the installer when ${SHAREDIR} <> /usr/share # . /usr/share/shorewall/shorewallrc # check if shorewall-init is configured or not if [ -f "$SYSCONFDIR/shorewall-init" ]; then . $SYSCONFDIR/shorewall-init if [ -z "$PRODUCTS" ]; then echo "ERROR: No products configured" >&2 exit 6 fi else echo "ERROR: ${SYSCONFDIR}/shorewall-init not found" >&2 exit 1 fi case "$1" in start) firewall_stopped 'start' && shorewall_start ;; stop) firewall_stopped 'stop' && shorewall_stop ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0