Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, March 29, 2024

Diff for scripts/shell/firewall/fw-universal.sh between version 2.26 and 2.35

version 2.26, 2005/06/29 16:16:46 version 2.35, 2006/01/10 01:33:26
Line 9 
Line 9 
 # Licensed under terms of GNU General Public License.  # Licensed under terms of GNU General Public License.
 # All rights reserved.  # All rights reserved.
 #  #
 # $Platon: scripts/shell/firewall/fw-universal.sh,v 2.25 2005/06/29 15:24:04 rajo Exp $  # $Platon: scripts/shell/firewall/fw-universal.sh,v 2.30 2005/11/01 00:36:24 rajo Exp $
 #  #
 # Changelog:  # Changelog:
 # 2003-10-24 - created  # 2003-10-24 - created
Line 19  DESC="firewall"
Line 19  DESC="firewall"
 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
   
 DEFAULT_FIREWALL_CONFIG="${DEFAULT_FIREWALL_CONFIG:=/etc/default/firewall}"  DEFAULT_FIREWALL_CONFIG="${DEFAULT_FIREWALL_CONFIG:=/etc/default/firewall}"
   DEFAULT_CACHE_DIR="${DEFAULT_CACHE_DIR:=/var/cache/firewall}"
   
 if [ -f "$DEFAULT_FIREWALL_CONFIG" ]; then  if [ -f "$DEFAULT_FIREWALL_CONFIG" ]; then
         echo "Reading config file $DEFAULT_FIREWALL_CONFIG"          echo "Reading config file $DEFAULT_FIREWALL_CONFIG"
Line 40  LOG_LIMIT="${LOG_LIMIT:=-m limit --limit
Line 41  LOG_LIMIT="${LOG_LIMIT:=-m limit --limit
 # Paths:  # Paths:
 #IPTABLES=":" # for testing only - does nothing  #IPTABLES=":" # for testing only - does nothing
 IPTABLES="${IPTABLES:=$DEBUG/sbin/iptables}"  IPTABLES="${IPTABLES:=$DEBUG/sbin/iptables}"
   IPTABLES_SAVE="${IPTABLES_SAVE:=$DEBUG/sbin/iptables-save}"
   IPTABLES_RESTORE="${IPTABLES_RESTORE:=$DEBUG/sbin/iptables-restore}"
   
 if [ "x$LOGGING" = "xoff" ]; then  if [ "x$LOGGING" = "xoff" ]; then
         IPTABLES_LOG=": log turned off"          IPTABLES_LOG=": log turned off"
 else  else
Line 53  AWK="${AWK:=/usr/bin/awk}"
Line 57  AWK="${AWK:=/usr/bin/awk}"
   
 # loopback interface  # loopback interface
 LO_IFACE="${LO_IFACE:=lo}"  LO_IFACE="${LO_IFACE:=lo}"
 LO_IP="IP_$LO_IFACE"  
   
 #  #
 # CONSTANTS - Do not edit  # CONSTANTS - Do not edit
Line 88  load_modules()
Line 91  load_modules()
         fi          fi
 } # }}}  } # }}}
   
   load_cache()
   { # {{{
   
           if [ ! -d "$DEFAULT_CACHE_DIR" ]; then
                   mkdir -p "$DEFAULT_CACHE_DIR";
           fi
   
           config=`cat $DEFAULT_FIREWALL_CONFIG`;
           md5key=`echo "config = '$config' parsed_interfaces ='$parsed_interfaces' parsed_routes='$parsed_routes'" | md5sum | awk '{ print $1; }'`;
           CACHE_FILE="$DEFAULT_CACHE_DIR/$md5key"
   
           #echo "CACHE_FILE=$CACHE_FILE"
   
           if [ -f "$CACHE_FILE" ]; then
                   echo "Loading rules from cache file $CACHE_FILE"
                   $IPTABLES_RESTORE -c < $CACHE_FILE;
                   forward_on # this has nothing to do with IPtables rules, we need to run them explicitly
                   exit 0;
           fi
   } # }}}
   
 # unload necessary modules from $MODULES variable  # unload necessary modules from $MODULES variable
 unload_modules()  unload_modules()
 { # {{{  { # {{{
Line 129  antispoof_on()
Line 153  antispoof_on()
         done          done
 } # }}}  } # }}}
   
   # Turn on IP packets forwarding
 forward_on()  forward_on()
 { # {{{  { # {{{
         echo -en "NAT: Enabling packet forwarding..."          # NAT requires turn on IP forwarding
         echo 1 > /proc/sys/net/ipv4/ip_forward          if [ ! -z "$NAT_LAN_IFACE" ]; then
         echo " done."                  echo -en "NAT: Enabling packet forwarding..."
                   echo 1 > /proc/sys/net/ipv4/ip_forward
                   echo " done."
           fi
 } # }}}  } # }}}
   
 forward_off()  forward_off()
Line 377  masquerade()
Line 405  masquerade()
                                 echo -en " $src_port -> $local_machine:$dest_port"                                  echo -en " $src_port -> $local_machine:$dest_port"
                                 $IPTABLES -t nat -A PREROUTING -p TCP -i $NAT_LAN_IFACE -d ${!lan_ip} \                                  $IPTABLES -t nat -A PREROUTING -p TCP -i $NAT_LAN_IFACE -d ${!lan_ip} \
                                 --dport $src_port -j DNAT --to $local_machine:$dest_port                                  --dport $src_port -j DNAT --to $local_machine:$dest_port
                                 $IPTABLES -A FORWARD -p TCP -i eth0 -d $local_machine --dport $dest_port -j ACCEPT                                  $IPTABLES -A FORWARD -p TCP -i $NAT_LAN_IFACE -d $local_machine --dport $dest_port -j ACCEPT
                         done                          done
                         echo " done."                          echo " done."
                 fi                  fi
Line 394  log_new_connections()
Line 422  log_new_connections()
 { # {{{  { # {{{
         if [ ! -z "$NAT_LOG_NEW_CONNECTIONS" ]; then          if [ ! -z "$NAT_LOG_NEW_CONNECTIONS" ]; then
                 if [ "x$NAT_LOG_NEW_CONNECTIONS" = "xyes" ]; then                  if [ "x$NAT_LOG_NEW_CONNECTIONS" = "xyes" ]; then
                         echo -en "Logging new connections:"                          if [ "x$NAT_LOG_NEW_CONNECTIONS" = "xyes" ]; then
                         $IPTABLES_LOG -A INPUT   -m state --state NEW -j LOG --log-prefix "IN  connection: "                                  NAT_LOG_NEW_CONNECTIONS="TCP UDP"
                         $IPTABLES_LOG -A OUTPUT  -m state --state NEW -j LOG --log-prefix "OUT connection: "                          fi
                         $IPTABLES_LOG -A FORWARD -m state --state NEW -j LOG --log-prefix "FWD connection: "                          echo -en "Logging new connections $NAT_LOG_NEW_CONNECTIONS:"
                           for proto in $NAT_LOG_NEW_CONNECTIONS; do
                                   $IPTABLES_LOG -A INPUT   -m state --state NEW -p $proto -j LOG --log-prefix "IN  connection: "
                                   $IPTABLES_LOG -A OUTPUT  -m state --state NEW -p $proto -j LOG --log-prefix "OUT connection: "
                                   $IPTABLES_LOG -A FORWARD -m state --state NEW -p $proto -j LOG --log-prefix "FWD connection: "
                           done
                         echo " done."                          echo " done."
                 fi                  fi
         fi          fi
Line 476  allow_accept_all()
Line 509  allow_accept_all()
 allow_input()  allow_input()
 { # {{{  { # {{{
   
           if [ ! -z "$NAT_LAN_IFACE" ]; then
                   for client_ip in $NAT_CLIENT_DROP; do
                           echo -en " !$client_ip";
                           $IPTABLES -A INPUT -s $client_ip -i $NAT_SUBNET_IFACE -j DROP
                   done
           fi
         if [ ! -z "$ALL_ACCEPT_INPUT_TCP" ]; then          if [ ! -z "$ALL_ACCEPT_INPUT_TCP" ]; then
                 echo -en "Accepting ALL INPUT TCP connections on ports:"                  echo -en "Accepting ALL INPUT TCP connections on ports:"
                 for port in $ALL_ACCEPT_INPUT_TCP; do                  for port in $ALL_ACCEPT_INPUT_TCP; do
Line 616  log_forward_drop()
Line 655  log_forward_drop()
   
 } # }}}  } # }}}
   
   do_ip_accounting()
   { # {{{
   
           if [ ! "x$DO_LOCAL_IP_ACCOUNTING" = "xno" ]; then
                   if [ ! -z "$NAT_LAN_IFACE" ]; then
                           IPACCT_NAME="ZORBCOUNT"
                           IPACCT_IN_NAME="ZORBCOUNTIN"
                           IPACCT_OUT_NAME="ZORBCOUNTOUT"
                           $IPTABLES -N $IPACCT_NAME               # whole network
                           $IPTABLES -N $IPACCT_IN_NAME    # download: from server to client
                           $IPTABLES -A $IPACCT_IN_NAME
                           $IPTABLES -N $IPACCT_OUT_NAME   # upload: from client to server
                           $IPTABLES -A $IPACCT_OUT_NAME
   
                           ip="IP_$NAT_SUBNET_IFACE";
                           netmask="Mask_$NAT_SUBNET_IFACE"
                           localnet="${!ip}/${!netmask}"
   
                           $IPTABLES -I INPUT  -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME
                           $IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME
   
                           $IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME
                           $IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME
   
                           for client_ip in $IP_ACCT_CLIENTS; do
                                   $IPTABLES -A $IPACCT_NAME -s $client_ip
                                   $IPTABLES -A $IPACCT_NAME -d $client_ip
                           done
   
                           if [ ! "x$DO_LOCAL_IP_ACCOUNTING" = "xno" ]; then
                                   accountig_ports=`echo "$NAT_TCP_PORT_REDIRECT " | awk -v RS=' ' -v FS=:  '{ print $2; }' | sort -u -r -g `
                                   for port in $accountig_ports; do
                                           $IPTABLES -I INPUT -i $NAT_SUBNET_IFACE -p TCP --dport $port -j $IPACCT_NAME
                                           $IPTABLES -I INPUT -i $NAT_SUBNET_IFACE -p UDP --dport $port -j $IPACCT_NAME
                                           $IPTABLES -I OUTPUT -o $NAT_SUBNET_IFACE -p TCP --sport $port -j $IPACCT_NAME
                                           $IPTABLES -I OUTPUT -o $NAT_SUBNET_IFACE -p UDP --sport $port -j $IPACCT_NAME
                                   done
                           fi
   
                           $IPTABLES -A $IPACCT_NAME -s $localnet
                           $IPTABLES -A $IPACCT_NAME -d $localnet
   
                   fi
           fi
   
   } # }}}
   
 accept_related()  accept_related()
 { # {{{  { # {{{
   
         echo -en "Accepting ESTABLISHED, RELATED packets for IP:"          echo -en "Accepting ESTABLISHED, RELATED packets for IP:"
         for iface in $INTERFACES; do          for iface in $INTERFACES; do
                 ip="IP_$iface";                  ip="IP_$iface";
Line 646  accept_loopback()
Line 732  accept_loopback()
 parse_ifconfig()  parse_ifconfig()
 { # {{{  { # {{{
         # Parse output from ifconfig:          # Parse output from ifconfig:
         eval `$IFCONFIG | \          parsed_interfaces=`$IFCONFIG | \
                 $AWK 'BEGIN { interfaces=""; }                  $AWK 'BEGIN { interfaces=""; }
                         /^[a-zA-Z0-9]+[ \t]+/ { # Linux                          /^[a-zA-Z0-9]+[ \t]+/ { # Linux
                                 iface=$1;                                  iface=$1;
Line 676  parse_ifconfig()
Line 762  parse_ifconfig()
                         }                          }
                         END { printf "\ninterfaces=\"%s\";      export interfaces;\n", interfaces; }                          END { printf "\ninterfaces=\"%s\";      export interfaces;\n", interfaces; }
         '`          '`
           eval "$parsed_interfaces";
   
         eval `perl -e '          parsed_routes=`perl -e '
         $\ = "\n";          $\ = "\n";
         open(FILE, "/proc/net/route") or die "Can not open /proc/net/route: $!";          open(FILE, "/proc/net/route") or die "Can not open /proc/net/route: $!";
         my @columns = split(/\s+/, <FILE>);          my @columns = split(/\s+/, <FILE>);
Line 724  parse_ifconfig()
Line 811  parse_ifconfig()
   
         } # }}}          } # }}}
         '`          '`
           eval "$parsed_routes";
   
         # Now we have defined variables like this:          # Now we have defined variables like this:
         # IFACE_eth0 HWaddr_eth0 IP_eth0 Bcast_eth0 Mask_eth0          # IFACE_eth0 HWaddr_eth0 IP_eth0 Bcast_eth0 Mask_eth0
         # IFACE_lo   HWaddr_lo   IP_lo   Bcast_lo   Mask_lo          # IFACE_lo   HWaddr_lo   IP_lo   Bcast_lo   Mask_lo
Line 764  case "$1" in
Line 853  case "$1" in
         start)          start)
                 echo -n "Starting $DESC: "                  echo -n "Starting $DESC: "
                 # Inicialize modules                  # Inicialize modules
                 $DEPMOD -a                  #$DEPMOD -a
                 load_modules                  load_modules
                   load_cache
                 set_default_policy                  set_default_policy
                 remove_chains                  remove_chains
                 #                  #
Line 790  case "$1" in
Line 880  case "$1" in
                 log_input_drop                  log_input_drop
                 log_output_drop                  log_output_drop
                 log_forward_drop                  log_forward_drop
                   forward_on
                   do_ip_accounting
                   $IPTABLES_SAVE -c > $CACHE_FILE
                 ;;                  ;;
   
         stop)          stop)
Line 814  case "$1" in
Line 907  case "$1" in
                 $IPTABLES -L -nv                  $IPTABLES -L -nv
                 ;;                  ;;
   
           purge)
                   find $DEFAULT_CACHE_DIR -type f -ls -exec rm -f {} \;
                   ;;
   
         *)          *)
                 echo "Usage: $0 {start|stop|really-off|status}" >&2                  echo "Usage: $0 {start|stop|really-off|status|purge}" >&2
                 exit 1                  exit 1
                 ;;                  ;;
 esac  esac

Legend:
Removed from v.2.26  
changed lines
  Added in v.2.35

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top