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

Diff for scripts/shell/firewall/fw-universal.sh between version 2.76 and 2.91

version 2.76, 2011/01/16 12:18:14 version 2.91, 2012/02/14 22:52:12
Line 1 
Line 1 
 #!/bin/bash  #!/bin/bash
   
   ### BEGIN INIT INFO
   # Provides:          firewall
   # Required-Start:    $network
   # Required-Stop:     $remote_fs
   # Default-Start:     S
   # Default-Stop:      0 6
   # Short-Description: Starts firewall
   # Description:       Handle universal firewall script by Platon Group
   #                    http://platon.sk/cvs/cvs.php/scripts/shell/firewall/
   # Author:            Lubomir Host <rajo@platon.sk>
   # Copyright:         (c) 2003-2011 Platon Group
   ### END INIT INFO
   
 #  #
 # This will be universal firewalling script for Linux kernel (iptables) in near future  # This will be universal firewalling script for Linux kernel (iptables) in near future
 # Can be started by init or by hand.  # Can be started by init or by hand.
Line 9 
Line 22 
 # 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.75 2010-10-22 12:20:42 nepto Exp $  # $Platon: scripts/shell/firewall/fw-universal.sh,v 2.90 2012-02-11 19:38:51 rajo Exp $
 #  #
 # Changelog:  # Changelog:
 # 2003-10-24 - created  # 2003-10-24 - created
   # 2011-07-20 - implemented XEN_MODE
 #  #
   
 ### BEGIN INIT INFO  
 # Provides:          firewall  
 # Required-Start:    $network $remote_fs  
 # Required-Stop:     $network $remote_fs  
 # Default-Start:     2 3 4 5  
 # Default-Stop:      0 1 6  
 # Short-Description: Starts firewall  
 # Description:       Handle universal firewall script by Platon Group  
 #                    http://platon.sk/cvs/cvs.php/scripts/shell/firewall/  
 # Author:            Lubomir Host <rajo@platon.sk>  
 # Copyright:         (c) 2003-2011 Platon Group  
 ### END INIT INFO  
   
 umask 077 # security  umask 077 # security
   
Line 74  IPTABLES="${IPTABLES:=$DEBUG/sbin/iptabl
Line 76  IPTABLES="${IPTABLES:=$DEBUG/sbin/iptabl
 IPTABLES_SAVE="${IPTABLES_SAVE:=$DEBUG/sbin/iptables-save}"  IPTABLES_SAVE="${IPTABLES_SAVE:=$DEBUG/sbin/iptables-save}"
 IPTABLES_RESTORE="${IPTABLES_RESTORE:=$DEBUG/sbin/iptables-restore}"  IPTABLES_RESTORE="${IPTABLES_RESTORE:=$DEBUG/sbin/iptables-restore}"
   
   IPTABLES_TABLES="${IPTABLES_TABLES:=filter nat mangle}"
   
   
 if [ "x$LOGGING" = "xoff" ]; then  if [ "x$LOGGING" = "xoff" ]; then
         IPTABLES_LOG=": log turned off"          IPTABLES_LOG=": log turned off"
 else  else
Line 89  PERL="${PERL:=/usr/bin/perl}"
Line 94  PERL="${PERL:=/usr/bin/perl}"
 # shaping  # shaping
 TC="${TC:=/sbin/tc}"  TC="${TC:=/sbin/tc}"
   
   # update script
   UPDATE_SCRIPT="${UPDATE_SCRIPT:=update_from_cvs}"
   
 # loopback interface  # loopback interface
 LO_IFACE="${LO_IFACE:=lo}"  LO_IFACE="${LO_IFACE:=lo}"
 # Hide NAT clients behind firewall  # Hide NAT clients behind firewall
Line 161  load_cache()
Line 169  load_cache()
   
         if [ ! -d "$DEFAULT_CACHE_DIR" ]; then          if [ ! -d "$DEFAULT_CACHE_DIR" ]; then
                 mkdir -p "$DEFAULT_CACHE_DIR";                  mkdir -p "$DEFAULT_CACHE_DIR";
                   if [ "$?" -ne "0" ]; then
                           print_info "ERROR: unable to create cache dir in load_cache()";
                           return;
                   fi
         fi          fi
   
         config=`cat $DEFAULT_FIREWALL_CONFIG $0 $DEFAULT_FIREWALL_CONFIG_DIR/deploy-servers.list $DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf `; # config file and firewalling script          config="";
         md5key=`echo "config = '$config' parsed_interfaces ='$parsed_interfaces' parsed_routes='$parsed_routes'" | md5sum | $AWK '{ print $1; }'`;          if [ -r "$DEFAULT_FIREWALL_CONFIG" ]; then
                   config="$config ` cat \"$DEFAULT_FIREWALL_CONFIG\" `";
           fi
           if [ -r "$0" ]; then
                   config="$config ` cat \"$0\" `";
           fi
           if [ -r "$DEFAULT_FIREWALL_CONFIG_DIR/deploy-servers.list" ]; then
                   config="$config ` cat \"$DEFAULT_FIREWALL_CONFIG_DIR/deploy-servers.list\" `";
           fi
           if [ -r "$DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf" ]; then
                   config="$config ` cat \"$DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf\" `";
           fi
           md5key=`echo "config='$config' parsed_interfaces='$parsed_interfaces' parsed_routes='$parsed_routes'" | md5sum | $AWK '{print $1;}'`;
         CACHE_FILE="$DEFAULT_CACHE_DIR/$md5key"          CACHE_FILE="$DEFAULT_CACHE_DIR/$md5key"
   
         #echo "CACHE_FILE=$CACHE_FILE"          #echo "CACHE_FILE=$CACHE_FILE"
Line 219  set_default_policy()
Line 243  set_default_policy()
 { # {{{  { # {{{
         # Set default policy          # Set default policy
         for chain in INPUT OUTPUT FORWARD; do          for chain in INPUT OUTPUT FORWARD; do
                   if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then
                           print_info "XEN_MODE enabled: default policy for FORWARD forced to ACCEPT";
                           $IPTABLES -P $chain ACCEPT;
                           continue;
                   fi
                 $IPTABLES -P $chain $DEFAULT_POLICY                  $IPTABLES -P $chain $DEFAULT_POLICY
         done          done
 } # }}}  } # }}}
Line 252  forward_off()
Line 281  forward_off()
 remove_chains()  remove_chains()
 { # {{{  { # {{{
   
         for table in filter nat mangle; do          if [ "X$XEN_MODE" = "Xon" ]; then
                 $IPTABLES -t $table -F # clear all chains                  print_info "XEN_MODE enabled: not clearing FORWARD chain";
                 $IPTABLES -t $table -X # remove all chains                  $IPTABLES --flush INPUT
                 $IPTABLES -t $table -Z # zero counts                  $IPTABLES --flush OUTPUT
         done                  $IPTABLES --flush spoof
                   # TODO!!!
           else
                   for table in $IPTABLES_TABLES; do
                           $IPTABLES -t $table -F # clear all chains
                           $IPTABLES -t $table -X # remove all chains
                           $IPTABLES -t $table -Z # zero counts
                   done
           fi
   
 } # }}}  } # }}}
   
Line 267  nmap_scan_filter()
Line 304  nmap_scan_filter()
         print_info -en "Turning on nmap scan filter "          print_info -en "Turning on nmap scan filter "
   
         for chain in INPUT FORWARD; do          for chain in INPUT FORWARD; do
                   if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then
                           print_info -ne " XEN_MODE ";
                           continue;
                   fi
   
                 #  Nie je nastaveny ziaden bit                  #  Nie je nastaveny ziaden bit
                 $IPTABLES_LOG   -A $chain   -p TCP --tcp-flags ALL NONE  $LOG_LIMIT "nmap scan $chain ALL NONE: "                  $IPTABLES_LOG   -A $chain   -p TCP --tcp-flags ALL NONE  $LOG_LIMIT "nmap scan $chain ALL NONE: "
                 print_info -en "."                  print_info -en "."
   
                 $IPTABLES               -A $chain   -p TCP --tcp-flags ALL NONE -j DROP                  $IPTABLES               -A $chain   -p TCP --tcp-flags ALL NONE -j DROP
                 print_info -en "."                  print_info -en "."
   
Line 277  nmap_scan_filter()
Line 320  nmap_scan_filter()
                 for flags in   SYN,FIN   SYN,RST   FIN,RST   ; do                  for flags in   SYN,FIN   SYN,RST   FIN,RST   ; do
                         $IPTABLES_LOG   -A $chain   -p TCP --tcp-flags $flags $flags $LOG_LIMIT "nmap scan $chain $flags: "                          $IPTABLES_LOG   -A $chain   -p TCP --tcp-flags $flags $flags $LOG_LIMIT "nmap scan $chain $flags: "
                         print_info -en "."                          print_info -en "."
   
                         $IPTABLES               -A $chain   -p TCP --tcp-flags $flags $flags -j DROP                          $IPTABLES               -A $chain   -p TCP --tcp-flags $flags $flags -j DROP
                         print_info -en "."                          print_info -en "."
                 done                  done
Line 285  nmap_scan_filter()
Line 329  nmap_scan_filter()
                 for flags in   FIN   PSH   URG   ; do                  for flags in   FIN   PSH   URG   ; do
                         $IPTABLES_LOG   -A $chain   -p TCP --tcp-flags ACK,$flags $flags $LOG_LIMIT "nmap scan $chain ACK,$flags: "                          $IPTABLES_LOG   -A $chain   -p TCP --tcp-flags ACK,$flags $flags $LOG_LIMIT "nmap scan $chain ACK,$flags: "
                         print_info -en "."                          print_info -en "."
   
                         $IPTABLES               -A $chain   -p TCP --tcp-flags ACK,$flags $flags -j DROP                          $IPTABLES               -A $chain   -p TCP --tcp-flags ACK,$flags $flags -j DROP
                         print_info -en "."                          print_info -en "."
                 done                  done
Line 299  invalid_packet_filter()
Line 344  invalid_packet_filter()
 { # {{{  { # {{{
   
         print_info -en "Turning on INVALID packet filter "          print_info -en "Turning on INVALID packet filter "
   
         for chain in INPUT OUTPUT FORWARD; do          for chain in INPUT OUTPUT FORWARD; do
                   if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then
                           print_info -ne " XEN_MODE ";
                           continue;
                   fi
                 $IPTABLES_LOG   -A $chain -m state --state INVALID $LOG_LIMIT "INVALID $chain: "                  $IPTABLES_LOG   -A $chain -m state --state INVALID $LOG_LIMIT "INVALID $chain: "
                 print_info -en "."                  print_info -en "."
                 $IPTABLES               -A $chain -m state --state INVALID -j DROP                  $IPTABLES               -A $chain -m state --state INVALID -j DROP
Line 356  anti_spoof_filter()
Line 406  anti_spoof_filter()
   
                 for iface in $ANTISPOOF_IFACE; do                  for iface in $ANTISPOOF_IFACE; do
                         print_info -en " $iface"                          print_info -en " $iface"
                         $IPTABLES -A FORWARD -i $iface -j spoof  
                           if [ "X$XEN_MODE" = "Xon" ]; then
                                   print_info -ne " XEN_MODE ";
                           else
                                   $IPTABLES -A FORWARD -i $iface -j spoof
                           fi
                         $IPTABLES -A INPUT   -i $iface -j spoof                          $IPTABLES -A INPUT   -i $iface -j spoof
                 done                  done
                 print_info " done."                  print_info " done."
Line 404  mangle_output()
Line 459  mangle_output()
   
 } # }}}  } # }}}
   
 # Masquerade local subnet  
 masquerade()  masquerade()
 { # {{{  { # {{{
           if [ "X$XEN_MODE" = "Xon" ]; then
                   print_info "XEN_MODE enabled: masquerade is not supported in this mode";
                   return;
           fi
         if [ ! -z "$NAT_LAN_IFACE" ]; then          if [ ! -z "$NAT_LAN_IFACE" ]; then
         print_info -en "NAT: Enabling packet forwarding..."          print_info -en "NAT: Enabling packet forwarding..."
         echo 1 > /proc/sys/net/ipv4/ip_forward          echo 1 > /proc/sys/net/ipv4/ip_forward
Line 418  masquerade()
Line 476  masquerade()
                 localnet="$ip/${!netmask}"                  localnet="$ip/${!netmask}"
   
                 lan_ip="`get_first_ip_addr IP_$NAT_LAN_IFACE`"                  lan_ip="`get_first_ip_addr IP_$NAT_LAN_IFACE`"
   
                 # alow packets from private subnet                  # alow packets from private subnet
                 $IPTABLES -A FORWARD -s ! $localnet -i $NAT_SUBNET_IFACE -j DROP                  $IPTABLES -A FORWARD -s ! $localnet -i $NAT_SUBNET_IFACE -j DROP
                 for client_ip in $NAT_CLIENT_DROP; do                  for client_ip in $NAT_CLIENT_DROP; do
Line 465  masquerade()
Line 523  masquerade()
                         if [ "x$NAT_FORWARD_MICROSOFT" = "xno" ]; then                          if [ "x$NAT_FORWARD_MICROSOFT" = "xno" ]; then
                                 $IPTABLES -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP                                  $IPTABLES -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
   
                                 for port in 69 135 445 1434 6667; do                                  for port in 67 68 69 135 445 1434 6667; do
                                         $IPTABLES -A FORWARD -p TCP --dport $port -j DROP                                          $IPTABLES -A FORWARD -p TCP --dport $port -j DROP
                                         $IPTABLES -A FORWARD -p UDP --dport $port -j DROP                                          $IPTABLES -A FORWARD -p UDP --dport $port -j DROP
                                 done                                  done
Line 490  masquerade()
Line 548  masquerade()
                         print_info " done."                          print_info " done."
                 fi                  fi
   
                   # NAT_FORWARD_TCP_HOSTS {{{
                   if [ ! -z "$NAT_FORWARD_TCP_HOSTS" ]; then
                           print_info -en "\tAccepting FORWARD TCP hosts:"
                           for host in $NAT_FORWARD_TCP_HOSTS; do
                                   print_info -en " $host"
                                   $IPTABLES -A FORWARD -p TCP -d $host -m state --state NEW -j ACCEPT
                           done
                           print_info " done."
                   fi
                   # }}}
   
                   # NAT_FORWARD_UDP_HOSTS {{{
                   if [ ! -z "$NAT_FORWARD_UDP_HOSTS" ]; then
                           print_info -en "\tAccepting FORWARD UDP hosts:"
                           for host in $NAT_FORWARD_UDP_HOSTS; do
                                   print_info -en " $host"
                                   $IPTABLES -A FORWARD -p UDP -d $host -m state --state NEW -j ACCEPT
                           done
                           print_info " done."
                   fi
                   # }}}
   
                   # NAT_FORWARD_TCP_CLIENTS {{{
                   if [ ! -z "$NAT_FORWARD_TCP_CLIENTS" ]; then
                           print_info -en "\tAccepting FORWARD TCP clients:"
                           for client in $NAT_FORWARD_TCP_CLIENTS; do
                                   print_info -en " $client"
                                   $IPTABLES -A FORWARD -p TCP -s $client -m state --state NEW -j ACCEPT
                           done
                           print_info " done."
                   fi
                   # }}}
   
                   # NAT_FORWARD_UDP_CLIENTS {{{
                   if [ ! -z "$NAT_FORWARD_UDP_CLIENTS" ]; then
                           print_info -en "\tAccepting FORWARD UDP clients:"
                           for client in $NAT_FORWARD_UDP_CLIENTS; do
                                   print_info -en " $client"
                                   $IPTABLES -A FORWARD -p UDP -s $client -m state --state NEW -j ACCEPT
                           done
                           print_info " done."
                   fi
                   # }}}
   
                 print_info -en "\tAccepting ICMP packets:"                  print_info -en "\tAccepting ICMP packets:"
                 for type in $ACCEPT_ICMP_PACKETS; do                  for type in $ACCEPT_ICMP_PACKETS; do
                         print_info -en " $type"                          print_info -en " $type"
Line 577  drop_output()
Line 679  drop_output()
                         print_info -en "$riface: Dropping outgoing packets from ports:"                          print_info -en "$riface: Dropping outgoing packets from ports:"
                         for port in $DROP_OUTPUT_TCP; do                          for port in $DROP_OUTPUT_TCP; do
                                 print_info -en " $port"                                  print_info -en " $port"
                                 $IPTABLES -A FORWARD -p TCP --sport $port -o $riface -j DROP  
                                   if [ "X$XEN_MODE" = "Xon" ]; then
                                           print_info -ne " XEN_MODE ";
                                   else
                                           $IPTABLES -A FORWARD -p TCP --sport $port -o $riface -j DROP
                                   fi
                                 $IPTABLES -A OUTPUT  -p TCP --sport $port -o $riface -j DROP                                  $IPTABLES -A OUTPUT  -p TCP --sport $port -o $riface -j DROP
                         done                          done
                         print_info " done."                          print_info " done."
Line 587  drop_output()
Line 694  drop_output()
                         print_info -en "$riface: Dropping outgoing packets from ports:"                          print_info -en "$riface: Dropping outgoing packets from ports:"
                         for port in $DROP_OUTPUT_UDP; do                          for port in $DROP_OUTPUT_UDP; do
                                 print_info -en " $port"                                  print_info -en " $port"
                                 $IPTABLES -A FORWARD -p UDP --sport $port -o $riface -j DROP  
                                   if [ "X$XEN_MODE" = "Xon" ]; then
                                           print_info -ne " XEN_MODE ";
                                   else
                                           $IPTABLES -A FORWARD -p UDP --sport $port -o $riface -j DROP
                                   fi
                                 $IPTABLES -A OUTPUT  -p UDP --sport $port -o $riface -j DROP                                  $IPTABLES -A OUTPUT  -p UDP --sport $port -o $riface -j DROP
                         done                          done
                         print_info " done."                          print_info " done."
Line 617  bann_ip_adresses()
Line 729  bann_ip_adresses()
                 for banned_ip in $BANNED_IP; do                  for banned_ip in $BANNED_IP; do
                         print_info -en " $banned_ip"                          print_info -en " $banned_ip"
                         $IPTABLES -A INPUT              -s $banned_ip -j DROP                          $IPTABLES -A INPUT              -s $banned_ip -j DROP
                         $IPTABLES -A FORWARD    -s $banned_ip -j DROP  
                           if [ "X$XEN_MODE" = "Xon" ]; then
                                           print_info -ne " XEN_MODE ";
                           else
                                   $IPTABLES -A FORWARD    -s $banned_ip -j DROP
                           fi
                 done                  done
                 print_info " done."                  print_info " done."
         fi          fi
Line 630  allow_accept_all()
Line 747  allow_accept_all()
                 for iface in $IFACE_ACCEPT_ALL; do                  for iface in $IFACE_ACCEPT_ALL; do
                         print_info -en " $iface"                          print_info -en " $iface"
                         $IPTABLES -A INPUT   -i $iface -j ACCEPT                          $IPTABLES -A INPUT   -i $iface -j ACCEPT
                         $IPTABLES -A FORWARD -i $iface -j ACCEPT  
                         $IPTABLES -A OUTPUT  -o $iface -j ACCEPT                          $IPTABLES -A OUTPUT  -o $iface -j ACCEPT
                           if [ "X$XEN_MODE" = "Xon" ]; then
                                   print_info -ne " XEN_MODE ";
                           else
                                   $IPTABLES -A FORWARD -i $iface -j ACCEPT
                           fi
                 done                  done
                 print_info " done."                  print_info " done."
         fi          fi
Line 648  drop_input()
Line 769  drop_input()
         if [ ! -z "$ALL_DROP_INPUT_TCP" ]; then          if [ ! -z "$ALL_DROP_INPUT_TCP" ]; then
                 print_info -en "Drop ALL INPUT TCP connections on ports:"                  print_info -en "Drop ALL INPUT TCP connections on ports:"
                 for port in $ALL_DROP_INPUT_TCP; do                  for port in $ALL_DROP_INPUT_TCP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for riface in $REAL_INTERFACES; do                          for riface in $REAL_INTERFACES; do
                                 print_info -en " $port($riface)"                                  print_info -en " $port($riface)"
                                 $IPTABLES -A INPUT -i $riface -p TCP --dport $port -j DROP                                  $IPTABLES -A INPUT -i $riface -p TCP $port_rule -j DROP
                         done                          done
                 done                  done
                 print_info " done."                  print_info " done."
Line 658  drop_input()
Line 786  drop_input()
         if [ ! -z "$ALL_DROP_INPUT_UDP" ]; then          if [ ! -z "$ALL_DROP_INPUT_UDP" ]; then
                 print_info -en "Drop ALL INPUT UDP connections on ports:"                  print_info -en "Drop ALL INPUT UDP connections on ports:"
                 for port in $ALL_DROP_INPUT_UDP; do                  for port in $ALL_DROP_INPUT_UDP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for riface in $REAL_INTERFACES; do                          for riface in $REAL_INTERFACES; do
                                 print_info -en " $port($riface)"                                  print_info -en " $port($riface)"
                                 $IPTABLES -A INPUT -i $riface -p UDP --dport $port -j DROP                                  $IPTABLES -A INPUT -i $riface -p UDP $port_rule -j DROP
                         done                          done
                 done                  done
                 print_info " done."                  print_info " done."
Line 668  drop_input()
Line 803  drop_input()
         if [ ! -z "$REAL_DROP_INPUT_TCP" ]; then          if [ ! -z "$REAL_DROP_INPUT_TCP" ]; then
                 print_info -en "Drop REAL all INPUT TCP connections for ALL interfaces on ports:"                  print_info -en "Drop REAL all INPUT TCP connections for ALL interfaces on ports:"
                 for port in $REAL_DROP_INPUT_TCP; do                  for port in $REAL_DROP_INPUT_TCP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         print_info -en " $port(ALL)"                          print_info -en " $port(ALL)"
                         $IPTABLES -A INPUT -p TCP --dport $port -j DROP                          $IPTABLES -A INPUT -p TCP $port_rule -j DROP
                 done                  done
                 print_info " done."                  print_info " done."
         fi          fi
         if [ ! -z "$REAL_DROP_INPUT_UDP" ]; then          if [ ! -z "$REAL_DROP_INPUT_UDP" ]; then
                 print_info -en "Drop REAL all INPUT UDP connections for ALL interfaces on ports:"                  print_info -en "Drop REAL all INPUT UDP connections for ALL interfaces on ports:"
                 for port in $REAL_DROP_INPUT_UDP; do                  for port in $REAL_DROP_INPUT_UDP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         print_info -en " $port(ALL)"                          print_info -en " $port(ALL)"
                         $IPTABLES -A INPUT -p UDP --dport $port -j DROP                          $IPTABLES -A INPUT -p UDP $port_rule -j DROP
                 done                  done
                 print_info " done."                  print_info " done."
         fi          fi
Line 688  reject_input()
Line 837  reject_input()
         if [ ! -z "$ALL_REJECT_INPUT_TCP" ]; then          if [ ! -z "$ALL_REJECT_INPUT_TCP" ]; then
                 print_info -en "Reject ALL INPUT TCP connections on ports:"                  print_info -en "Reject ALL INPUT TCP connections on ports:"
                 for port in $ALL_REJECT_INPUT_TCP; do                  for port in $ALL_REJECT_INPUT_TCP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for riface in $REAL_INTERFACES; do                          for riface in $REAL_INTERFACES; do
                                 print_info -en " $port($riface)"                                  print_info -en " $port($riface)"
                                 $IPTABLES -A INPUT -i $riface -p TCP --dport $port -j REJECT --reject-with $REJECT_WITH                                  $IPTABLES -A INPUT -i $riface -p TCP $port_rule -j REJECT --reject-with $REJECT_WITH
                         done                          done
                 done                  done
                 print_info " done."                  print_info " done."
Line 698  reject_input()
Line 854  reject_input()
         if [ ! -z "$ALL_REJECT_INPUT_UDP" ]; then          if [ ! -z "$ALL_REJECT_INPUT_UDP" ]; then
                 print_info -en "Reject ALL INPUT UDP connections on ports:"                  print_info -en "Reject ALL INPUT UDP connections on ports:"
                 for port in $ALL_REJECT_INPUT_UDP; do                  for port in $ALL_REJECT_INPUT_UDP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for riface in $REAL_INTERFACES; do                          for riface in $REAL_INTERFACES; do
                                 print_info -en " $port($riface)"                                  print_info -en " $port($riface)"
                                 $IPTABLES -A INPUT -i $riface -p UDP --dport $port -j REJECT --reject-with $REJECT_WITH                                  $IPTABLES -A INPUT -i $riface -p UDP $port_rule -j REJECT --reject-with $REJECT_WITH
                         done                          done
                 done                  done
                 print_info " done."                  print_info " done."
Line 708  reject_input()
Line 871  reject_input()
         if [ ! -z "$REAL_REJECT_INPUT_TCP" ]; then          if [ ! -z "$REAL_REJECT_INPUT_TCP" ]; then
                 print_info -en "Reject REAL all INPUT TCP connections for ALL interfaces on ports:"                  print_info -en "Reject REAL all INPUT TCP connections for ALL interfaces on ports:"
                 for port in $REAL_REJECT_INPUT_TCP; do                  for port in $REAL_REJECT_INPUT_TCP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         print_info -en " $port(ALL)"                          print_info -en " $port(ALL)"
                         $IPTABLES -A INPUT -p TCP --dport $port -j REJECT --reject-with $REJECT_WITH                          $IPTABLES -A INPUT -p TCP $port_rule -j REJECT --reject-with $REJECT_WITH
                 done                  done
                 print_info " done."                  print_info " done."
         fi          fi
         if [ ! -z "$REAL_REJECT_INPUT_UDP" ]; then          if [ ! -z "$REAL_REJECT_INPUT_UDP" ]; then
                 print_info -en "Reject REAL all INPUT UDP connections for ALL interfaces on ports:"                  print_info -en "Reject REAL all INPUT UDP connections for ALL interfaces on ports:"
                 for port in $REAL_REJECT_INPUT_UDP; do                  for port in $REAL_REJECT_INPUT_UDP; do
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for riface in $REAL_INTERFACES; do                          for riface in $REAL_INTERFACES; do
                                 print_info -en " $port(ALL)"                                  print_info -en " $port(ALL)"
                                 $IPTABLES -A INPUT -p UDP --dport $port -j REJECT --reject-with $REJECT_WITH                                  $IPTABLES -A INPUT -p UDP $port_rule -j REJECT --reject-with $REJECT_WITH
                         done                          done
                 done                  done
                 print_info " done."                  print_info " done."
Line 732  allow_input()
Line 909  allow_input()
                 for port in $ALL_ACCEPT_INPUT_TCP; do                  for port in $ALL_ACCEPT_INPUT_TCP; do
                         src_ip=""                          src_ip=""
                         eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                          eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for iface in $INTERFACES; do                          for iface in $INTERFACES; do
                                 riface="IFname_$iface";                                  riface="IFname_$iface";
                                 print_info -en " $port($iface)"`[ ! -z $src_ip ] && echo "[$src_ip]"`                                  print_info -en " $port($iface)"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                                 IPS="IP_$iface";                                  IPS="IP_$iface";
                                 for ip in ${!IPS}; do                                  for ip in ${!IPS}; do
                                         if [ -z "$src_ip" ]; then                                          if [ -z "$src_ip" ]; then
                                                 $IPTABLES -A INPUT -i ${!riface} -d $ip -p TCP --dport $port -j ACCEPT                                                  $IPTABLES -A INPUT -i ${!riface} -d $ip -p TCP $port_rule -j ACCEPT
                                         else                                          else
                                                 $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP --dport $port -j ACCEPT                                                  $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP $port_rule -j ACCEPT
                                         fi                                          fi
                                 done                                  done
                         done                          done
Line 752  allow_input()
Line 936  allow_input()
                 for port in $ALL_ACCEPT_INPUT_UDP; do                  for port in $ALL_ACCEPT_INPUT_UDP; do
                         src_ip=""                          src_ip=""
                         eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                          eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         for iface in $INTERFACES; do                          for iface in $INTERFACES; do
                                 riface="IFname_$iface";                                  riface="IFname_$iface";
                                 print_info -en " $port($iface)"`[ ! -z $src_ip ] && echo "[$src_ip]"`                                  print_info -en " $port($iface)"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                                 IPS="IP_$iface";                                  IPS="IP_$iface";
                                 for ip in ${!IPS}; do                                  if [ "x$port" = "x67" ]; then # DHCP requests doesn't have destination IP specified
                                         if [ -z "$src_ip" ]; then                                          $IPTABLES -A INPUT -i ${!riface} -p UDP --dport $port -j ACCEPT
                                                 $IPTABLES -A INPUT -i ${!riface} -d $ip -p UDP --dport $port -j ACCEPT                                  else
                                         else                                          for ip in ${!IPS}; do
                                                 $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP --dport $port -j ACCEPT                                                  if [ -z "$src_ip" ]; then
                                         fi                                                          $IPTABLES -A INPUT -i ${!riface} -d $ip -p UDP $port_rule -j ACCEPT
                                 done                                                  else
                                                           $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP $port_rule -j ACCEPT
                                                   fi
                                           done
                                   fi
                         done                          done
                 done                  done
                 print_info " done."                  print_info " done."
Line 773  allow_input()
Line 968  allow_input()
                 for port in $REAL_ACCEPT_INPUT_TCP; do                  for port in $REAL_ACCEPT_INPUT_TCP; do
                         src_ip=""                          src_ip=""
                         eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                          eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                         print_info -en " $port(ALL)"`[ ! -z $src_ip ] && echo "[$src_ip]"`                          print_info -en " $port(ALL)"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         if [ -z "$src_ip" ]; then                          if [ -z "$src_ip" ]; then
                                 $IPTABLES -A INPUT -p TCP --dport $port -j ACCEPT                                  $IPTABLES -A INPUT -p TCP $port_rule -j ACCEPT
                         else                          else
                                 $IPTABLES -A INPUT -s $src_ip -p TCP --dport $port -j ACCEPT                                  $IPTABLES -A INPUT -s $src_ip -p TCP $port_rule -j ACCEPT
                         fi                          fi
                 done                  done
                 print_info " done."                  print_info " done."
Line 787  allow_input()
Line 989  allow_input()
                 for port in $REAL_ACCEPT_INPUT_UDP; do                  for port in $REAL_ACCEPT_INPUT_UDP; do
                         src_ip=""                          src_ip=""
                         eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                          eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                         print_info -en " $port(ALL)"`[ ! -z $src_ip ] && echo "[$src_ip]"`                          print_info -en " $port(ALL)"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                           echo $port | grep -q ,
                           multiport="$?";
                           if [ "$multiport" -eq 0 ]; then
                                   port_rule="--match multiport --dports $port"
                           else
                                   port_rule="--dport $port"
                           fi
                         if [ -z "$src_ip" ]; then                          if [ -z "$src_ip" ]; then
                                 $IPTABLES -A INPUT -p UDP --dport $port -j ACCEPT                                  $IPTABLES -A INPUT -p UDP $port_rule -j ACCEPT
                         else                          else
                                 $IPTABLES -A INPUT -s $src_ip -p UDP --dport $port -j ACCEPT                                  $IPTABLES -A INPUT -s $src_ip -p UDP $port_rule -j ACCEPT
                         fi                          fi
                 done                  done
                 print_info " done."                  print_info " done."
Line 850  allow_input()
Line 1059  allow_input()
                         for port in $REJECT_INPUT_TCP; do                          for port in $REJECT_INPUT_TCP; do
                                 src_ip=""                                  src_ip=""
                                 eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                                  eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                                 print_info -en " $port"`[ ! -z $src_ip ] && echo "[$src_ip]"`                                  print_info -en " $port"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                                   echo $port | grep -q ,
                                   multiport="$?";
                                   if [ "$multiport" -eq 0 ]; then
                                           port_rule="--match multiport --dports $port"
                                   else
                                           port_rule="--dport $port"
                                   fi
                                 for ip in ${!IPS}; do                                  for ip in ${!IPS}; do
                                         if [ -z $src_ip ]; then                                          if [ -z "$src_ip" ]; then
                                                 $IPTABLES -A INPUT -i ${!riface} -d $ip -p TCP --dport $port -j REJECT --reject-with $REJECT_WITH                                                  $IPTABLES -A INPUT -i ${!riface} -d $ip -p TCP $port_rule -j REJECT --reject-with $REJECT_WITH
                                         else                                          else
                                                 $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP --dport $port -j REJECT --reject-with $REJECT_WITH                                                  $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP $port_rule -j REJECT --reject-with $REJECT_WITH
                                         fi                                          fi
                                 done                                  done
                         done                          done
Line 867  allow_input()
Line 1083  allow_input()
                         for port in $REJECT_INPUT_UDP; do                          for port in $REJECT_INPUT_UDP; do
                                 src_ip=""                                  src_ip=""
                                 eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                                  eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                                 print_info -en " $port"`[ ! -z $src_ip ] && echo "[$src_ip]"`                                  print_info -en " $port"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                                   echo $port | grep -q ,
                                   multiport="$?";
                                   if [ "$multiport" -eq 0 ]; then
                                           port_rule="--match multiport --dports $port"
                                   else
                                           port_rule="--dport $port"
                                   fi
                                 for ip in ${!IPS}; do                                  for ip in ${!IPS}; do
                                         if [ -z $src_ip ]; then                                          if [ -z "$src_ip" ]; then
                                                 $IPTABLES -A INPUT -i ${!riface} -d $ip -p UDP --dport $port -j REJECT --reject-with $REJECT_WITH                                                  $IPTABLES -A INPUT -i ${!riface} -d $ip -p UDP $port_rule -j REJECT --reject-with $REJECT_WITH
                                         else                                          else
                                                 $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP --dport $port -j REJECT --reject-with $REJECT_WITH                                                  $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP $port_rule -j REJECT --reject-with $REJECT_WITH
                                         fi                                          fi
                                 done                                  done
                         done                          done
Line 883  allow_input()
Line 1106  allow_input()
                 # ACCEPT {{{                  # ACCEPT {{{
                 if [ ! -z "$ACCEPT_INPUT_TCP" ]; then                  if [ ! -z "$ACCEPT_INPUT_TCP" ]; then
                         print_info -en "$iface: Accepting INPUT TCP connections on ports:"                          print_info -en "$iface: Accepting INPUT TCP connections on ports:"
                           counter=0;
                         for port in $ACCEPT_INPUT_TCP; do                          for port in $ACCEPT_INPUT_TCP; do
                                 src_ip=""                                  src_ip=""
                                 eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`                                  eval `echo $port | awk -v FS=: '/:/ { printf "src_ip=\"%s\"; port=\"%s\";", $1, $2; }'`
                                 if [ -n "$src_ip" -a "$port" = "0" ]; then                                  if [ -n "$src_ip" -a "$port" = "0" ]; then
                                         port="ALL";                                          port="ALL";
                                 fi                                  fi
                                 print_info -en " $port"`[ ! -z $src_ip ] && echo "[$src_ip]"`                                  print_info -en " $port"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                                   if [ $(( ++counter )) -ge 5 ]; then counter=0; print_info ""; fi;
                                   echo $port | grep -q ,
                                   multiport="$?";
                                   if [ "$multiport" -eq 0 ]; then
                                           port_rule="--match multiport --dports $port"
                                   else
                                           port_rule="--dport $port"
                                   fi
                                 for ip in ${!IPS}; do                                  for ip in ${!IPS}; do
                                         if [ -z $src_ip ]; then                                          if [ -z "$src_ip" ]; then
                                                 $IPTABLES -A INPUT -i ${!riface} -d $ip -p TCP --dport $port -j ACCEPT                                                  $IPTABLES -A INPUT -i ${!riface} -d $ip -p TCP $port_rule -j ACCEPT
                                         else                                          else
                                                 if [ "$port" = "ALL" ]; then                                                  if [ "$port" = "ALL" ]; then
                                                         $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP -j ACCEPT                                                          $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP -j ACCEPT
                                                 else                                                  else
                                                         $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP --dport $port -j ACCEPT                                                          $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p TCP $port_rule -j ACCEPT
                                                 fi                                                  fi
                                         fi                                          fi
                                 done                                  done
Line 913  allow_input()
Line 1145  allow_input()
                                 if [ -n "$src_ip" -a "$port" = "0" ]; then                                  if [ -n "$src_ip" -a "$port" = "0" ]; then
                                         port="ALL";                                          port="ALL";
                                 fi                                  fi
                                 print_info -en " $port"`[ ! -z $src_ip ] && echo "[$src_ip]"`                                  echo $port | grep -q ,
                                   multiport="$?";
                                   if [ "$multiport" -eq 0 ]; then
                                           port_rule="--match multiport --dports $port"
                                   else
                                           port_rule="--dport $port"
                                   fi
                                   print_info -en " $port"`[ ! -z "$src_ip" ] && echo "[$src_ip]"`
                                 #$IPTABLES -A INPUT -i $iface -d ${!INET_IP} -p UDP --dport $port -j ACCEPT                                  #$IPTABLES -A INPUT -i $iface -d ${!INET_IP} -p UDP --dport $port -j ACCEPT
                                 #$IPTABLES -A INPUT -i $iface --source 192.168.1.0/16 -p UDP --dport $port -j ACCEPT                                  #$IPTABLES -A INPUT -i $iface --source 192.168.1.0/16 -p UDP --dport $port -j ACCEPT
                                 for ip in ${!IPS}; do                                  if [ "x$port" = "x67" ]; then # DHCP requests doesn't have destination IP specified
                                         if [ -z $src_ip ]; then                                          $IPTABLES -A INPUT -i ${!riface} -p UDP --dport $port -j ACCEPT
                                                 $IPTABLES -A INPUT -i ${!riface} -d $ip -p UDP --dport $port -j ACCEPT                                  else
                                         else                                          for ip in ${!IPS}; do
                                                 if [ "$port" = "ALL" ]; then                                                  if [ -z "$src_ip" ]; then
                                                         $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP -j ACCEPT                                                          $IPTABLES -A INPUT -i ${!riface} -d $ip -p UDP $port_rule -j ACCEPT
                                                 else                                                  else
                                                         $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP --dport $port -j ACCEPT                                                          if [ "$port" = "ALL" ]; then
                                                                   $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP -j ACCEPT
                                                           else
                                                                   $IPTABLES -A INPUT -i ${!riface} -s $src_ip -d $ip -p UDP $port_rule -j ACCEPT
                                                           fi
                                                 fi                                                  fi
                                         fi                                          done
                                 done                                  fi
                         done                          done
                         print_info " done."                          print_info " done."
                 fi                  fi
Line 938  allow_input()
Line 1181  allow_input()
                 ip="`get_first_ip_addr IP_$ANTISPOOF_IFACE`";                  ip="`get_first_ip_addr IP_$ANTISPOOF_IFACE`";
                 print_info -en "Accepting traceroute:"                  print_info -en "Accepting traceroute:"
   
                 $IPTABLES -A OUTPUT -o $ANTISPOOF_IFACE -p UDP \                  if [ "X$XEN_MODE" = "Xon" ]; then
                         --sport $TRACEROUTE_SRC_PORTS --dport $TRACEROUTE_DEST_PORTS \                          print_info -ne " XEN_MODE ";
                         -s $ip -d $ANYWHERE -j ACCEPT                  else
                           $IPTABLES -A OUTPUT -o $ANTISPOOF_IFACE -p UDP \
                 for iface in $TRACEROUTE_IFACE; do                                  --sport $TRACEROUTE_SRC_PORTS --dport $TRACEROUTE_DEST_PORTS \
                         $IPTABLES -A FORWARD -p UDP -i $iface --sport $TRACEROUTE_SRC_PORTS \                                  -s $ip -d $ANYWHERE -j ACCEPT
                                 --dport $TRACEROUTE_DEST_PORTS -j ACCEPT  
                 done                          for iface in $TRACEROUTE_IFACE; do
   
                                   $IPTABLES -A FORWARD -p UDP -i $iface --sport $TRACEROUTE_SRC_PORTS \
                                           --dport $TRACEROUTE_DEST_PORTS -j ACCEPT
                           done
                   fi
                 print_info " done."                  print_info " done."
         fi          fi
   
Line 1086  do_ip_accounting()
Line 1334  do_ip_accounting()
                         $IPTABLES -I INPUT  -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME                          $IPTABLES -I INPUT  -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME
                         $IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME                          $IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME
   
                         $IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME                          if [ "X$XEN_MODE" = "Xon" ]; then
                         $IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME                                  print_info -ne " XEN_MODE ";
                           else
                                   $IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME
                                   $IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME
                           fi
   
                         for client_ip in $IP_ACCT_CLIENTS; do                          for client_ip in $IP_ACCT_CLIENTS; do
                                 $IPTABLES -A $IPACCT_NAME -s $client_ip                                  $IPTABLES -A $IPACCT_NAME -s $client_ip
Line 1143  shaping_on()
Line 1395  shaping_on()
 { # {{{  { # {{{
   
         mark_idx=1          mark_idx=1
         if [ ! -z $SHAPING_IFACE ]; then          if [ ! -z "$SHAPING_IFACE" ]; then
                 for iface in $SHAPING_IFACE; do                  for iface in $SHAPING_IFACE; do
                         echo "Shaping for interface $iface"                          echo "Shaping for interface $iface"
                         shaping_classes="${iface}_SHAPING_CLASSES"                          shaping_classes="${iface}_SHAPING_CLASSES"
Line 1157  shaping_on()
Line 1409  shaping_on()
                                 burst="${iface}_SHAPING_BURST_${class}"                                  burst="${iface}_SHAPING_BURST_${class}"
                                 netmask="${iface}_SHAPING_NETMASK_${class}"                                  netmask="${iface}_SHAPING_NETMASK_${class}"
                                 echo -e "\tshaping \"$class\" traffic: rate=${!rate} burst=${!burst} netmask=${!netmask}"                                  echo -e "\tshaping \"$class\" traffic: rate=${!rate} burst=${!burst} netmask=${!netmask}"
                                 if [ -z ${!netmask} ]; then                                  if [ -z "${!netmask}" ]; then
                                         $IPTABLES -t mangle -A OUTPUT -j MARK --set-mark 0x$mark_idx                                          $IPTABLES -t mangle -A OUTPUT -j MARK --set-mark 0x$mark_idx
                                 else                                  else
                                         $IPTABLES -t mangle -A OUTPUT -d ${!netmask} -j MARK --set-mark 0x$mark_idx                                          $IPTABLES -t mangle -A OUTPUT -d ${!netmask} -j MARK --set-mark 0x$mark_idx
                                 fi                                  fi
   
                                 if [ -z ${!rate} ]; then                                  if [ -z "${!rate}" ]; then
                                         # SFQ for local traffic                                          # SFQ for local traffic
                                         $TC qdisc add dev $iface parent 1:$mark_idx handle $((10 + $mark_idx)): sfq perturb 10                                          $TC qdisc add dev $iface parent 1:$mark_idx handle $((10 + $mark_idx)): sfq perturb 10
                                 else                                  else
Line 1181  shaping_on()
Line 1433  shaping_on()
   
 shaping_off()  shaping_off()
 { # {{{  { # {{{
         if [ ! -z $SHAPING_IFACE ]; then          if [ ! -z "$SHAPING_IFACE" ]; then
                 echo -en "Shaping turned off for interface"                  echo -en "Shaping turned off for interface"
                 for iface in $SHAPING_IFACE; do                  for iface in $SHAPING_IFACE; do
                         echo -en " $iface"                          echo -en " $iface"
Line 1193  shaping_off()
Line 1445  shaping_off()
   
 shaping_status()  shaping_status()
 { # {{{  { # {{{
         if [ ! -z $SHAPING_IFACE ]; then          if [ ! -z "$SHAPING_IFACE" ]; then
                 echo "# Shaping status: "                  echo "# Shaping status: "
                 $TC qdisc list                  $TC qdisc list
         else          else
Line 1205  shaping_status()
Line 1457  shaping_status()
   
 add_banned_ip()  add_banned_ip()
 { # {{{  { # {{{
         echo "# `date '+%Y-%m-%d %X' ` - ${SSH_CLIENT:=local}" >> $DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf          echo "# `date '+%Y-%m-%d %X' `" >> $DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf
         TMPFILE=`mktemp -t fw-universal.sh-XXXXXX` || exit 1          TMPFILE=`mktemp -t fw-universal.sh-XXXXXX` || exit 1
         trap 'rm -f $TMPFILE' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15          trap 'rm -f $TMPFILE' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
         if [ -z "$*" ]; then          if [ -z "$*" ]; then
                 print_info "Reading banned IP's from STDIN:"                  #print_info "Reading banned IP's from STDIN:"
                 cat >> $TMPFILE                  cat >> $TMPFILE
         else          else
                 for IP in $*; do                  for IP in $*; do
Line 1218  add_banned_ip()
Line 1470  add_banned_ip()
         fi          fi
         read_config_ips $TMPFILE >> $DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf          read_config_ips $TMPFILE >> $DEFAULT_FIREWALL_CONFIG_DIR/BANNED_IP.conf
         rm -f $TMPFILE          rm -f $TMPFILE
           # start with new firewalling rules
           $0 start
 } # }}}  } # }}}
   
 deploy_block()  deploy_block()
Line 1228  deploy_block()
Line 1482  deploy_block()
         fi          fi
         print_info "Deploying to local rules ..."          print_info "Deploying to local rules ..."
         add_banned_ip $*          add_banned_ip $*
         # start the some script twice to refresh rules (new blocked IP's)          # start the same script twice to refresh rules (new blocked IP's)
         QUIET=yes $0 start          QUIET=yes $0 start
         TMPFILE=`mktemp -t fw-universal.sh-XXXXXX` || exit 1          TMPFILE=`mktemp -t fw-universal.sh-XXXXXX` || exit 1
         trap 'rm -f $TMPFILE' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15          trap 'rm -f $TMPFILE' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
         for i in $*; do          for i in $*; do
                 echo $i >> $TMPFILE;                  echo "block $i" >> $TMPFILE;
         done          done
         while read conn keyfile          while read conn keyfile
         do          do
            case "$conn" in                  case "$conn" in
                    ""|\#*)                          ""|\#*)
                            continue                                  continue
                            ;;                                  ;;
            esac                  esac
            print_info "Deploying to $conn ...";                  print_info "=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
            cat $TMPFILE | ssh -i $keyfile $conn $0 block                  print_info "Deploying to $conn ...";
                   cat $TMPFILE | ssh -i $keyfile $conn $0 remote
         done < $DEFAULT_FIREWALL_CONFIG_DIR/deploy-servers.list          done < $DEFAULT_FIREWALL_CONFIG_DIR/deploy-servers.list
         rm -f $TMPFILE          rm -f $TMPFILE
 } # }}}  } # }}}
   
   update_from_cvs()
   { # {{{
           cd /etc/firewall && cvs up -d
   } # }}}
   
   update()
   { # {{{
           $UPDATE_SCRIPT
   } # }}}
   
   deploy_update()
   { # {{{
           print_info "Updating local firewall ..."
           $0 update
   
           # start the same script twice to refresh rules (updated scripts and configs)
           QUIET=yes $0 start
           while read conn keyfile
           do
                   case "$conn" in
                           ""|\#*)
                                   continue
                                   ;;
                   esac
   
                   print_info "=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
                   print_info "Updating $conn ...";
                   echo "update" | ssh -i $keyfile $conn $0 remote
           done < $DEFAULT_FIREWALL_CONFIG_DIR/deploy-servers.list
   } # }}}
   
   remote()
   { # {{{
           while read comnd par
           do
                   case "$comnd" in
                           block)
                                   echo "Blocking '$par'..."
                                   add_banned_ip $par
                                   ;;
                           update)
                                   echo "Updating firewall scripts..."
                                   update
                                   ;;
                           ""|\#*)
                                   echo "Line '$comnd $par' ignored"
                                   continue
                                   ;;
                   esac
           done
   } # }}}
   
 # Parse output from ifconfig: - tested on Linux and FreeBSD  # Parse output from ifconfig: - tested on Linux and FreeBSD
 # http://platon.sk/cvs/cvs.php/scripts/shell/firewall/ifconfig-parse.sh  # http://platon.sk/cvs/cvs.php/scripts/shell/firewall/ifconfig-parse.sh
 parse_ifconfig()  parse_ifconfig()
Line 1486  case "$1" in
Line 1793  case "$1" in
                 # start the some script twice to refresh rules (new blocked IP's)                  # start the some script twice to refresh rules (new blocked IP's)
                 QUIET=yes $0 start;                  QUIET=yes $0 start;
                 ;;                  ;;
           update)
                   update;
                   ;;
         deploy-block)          deploy-block)
                 shift;                  shift;
                 deploy_block $*;                  deploy_block $*;
                 ;;                  ;;
           deploy-update)
                   deploy_update;
                   ;;
           remote)
                   remote;
                   ;;
         *)          *)
                 echo "Usage: $0 {start|stop|really-off|status|purge|block|deploy-block}" >&2                  echo "Usage: $0 {start|stop|really-off|status|purge|block|deploy-block|deploy-update|update}" >&2
                 exit 1                  exit 1
                 ;;                  ;;
 esac  esac

Legend:
Removed from v.2.76  
changed lines
  Added in v.2.91

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