Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Tuesday, May 26, 2020

Diff for scripts/shell/firewall/fw-universal.sh between version 2.25 and 2.0

version 2.25, 2005/06/29 15:24:04 version 2.0, 2004/11/14 15:23:09
Line 5 
Line 5 
 # Can be started by init or by hand.  # Can be started by init or by hand.
 #  #
 # Developed by Lubomir Host 'rajo' <rajo AT platon.sk>  # Developed by Lubomir Host 'rajo' <rajo AT platon.sk>
 # Copyright (c) 2003-2005 Platon SDG, http://platon.sk/  # Copyright (c) 2003-2004 Platon SDG, http://platon.sk/
 # 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.24 2005/04/18 22:49:30 rajo Exp $  # $Platon: scripts/shell/firewall/fw-universal.sh,v 1.1 2003/10/24 15:40:44 rajo Exp $
 #  #
 # Changelog:  # Changelog:
 # 2003-10-24 - created  # 2004-11-14 - created
 #  #
   
 DESC="firewall"  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_CONFIG="${DEFAULT_CONFIG:=/etc/default/firewall}"
   
 if [ -f "$DEFAULT_FIREWALL_CONFIG" ]; then  if [ -f "$DEFAULT_CONFIG" ]; then
         echo "Reading config file $DEFAULT_FIREWALL_CONFIG"          echo "Reading config file $DEFAULT_CONFIG"
         . $DEFAULT_FIREWALL_CONFIG          . $DEFAULT_CONFIG
 fi  fi
   
 #  #
Line 33  DEFAULT_POLICY="${DEFAULT_POLICY:=DROP}"
Line 33  DEFAULT_POLICY="${DEFAULT_POLICY:=DROP}"
 # which modules to load  # which modules to load
 MODULES="${MODULES:=}"  MODULES="${MODULES:=}"
   
 LOG_LIMIT="${LOG_LIMIT:=-m limit --limit 12/h --limit-burst 10 -j LOG --log-level notice --log-prefix}"  LOG_LIMIT="${LOG_LIMIT:=-m limit --limit 12/h --limit-burst 10}"
   
 # Paths:  # Paths:
 #IPTABLES=":" # for testing only - does nothing  #IPTABLES=":" # for testing only - does nothing
 IPTABLES="${IPTABLES:=$DEBUG/sbin/iptables}"  IPTABLES="${IPTABLES:=/sbin/iptables}"
 if [ "x$LOGGING" = "xoff" ]; then  
         IPTABLES_LOG=": log turned off"  
 else  
         IPTABLES_LOG="${IPTABLES_LOG:=$DEBUG/sbin/iptables}"  
 fi  
 IFCONFIG="${IFCONFIG:=/sbin/ifconfig}"  IFCONFIG="${IFCONFIG:=/sbin/ifconfig}"
 DEPMOD="${DEPMOD:=/sbin/depmod}"  DEPMOD="${DEPMOD:=/sbin/depmod}"
 MODPROBE="${MODPROBE:=/sbin/modprobe}"  MODPROBE="${MODPROBE:=/sbin/modprobe}"
Line 53  AWK="${AWK:=/usr/bin/awk}"
Line 48  AWK="${AWK:=/usr/bin/awk}"
 LO_IFACE="${LO_IFACE:=lo}"  LO_IFACE="${LO_IFACE:=lo}"
 LO_IP="IP_$LO_IFACE"  LO_IP="IP_$LO_IFACE"
   
 #  # Which ports will be allowed on INPUT (TCP connections)
 # CONSTANTS - Do not edit  ALL_ACCEPT_INPUT_TCP="${ALL_ACCEPT_INPUT_TCP:=}"
 #  # interface eth0
 ANYWHERE="0.0.0.0/0"                            # Match any IP address  eth0_ACCEPT_INPUT_TCP="${eth0_ACCEPT_INPUT_TCP:=}"
 BROADCAST_SRC="0.0.0.0"                         # Broadcast Source Address  # interface ppp0
 BROADCAST_DEST="255.255.255.255"        # Broadcast Destination Address  ppp0_ACCEPT_INPUT_TCP="${ppp0_ACCEPT_INPUT_TCP:=}"
 CLASS_A="10.0.0.0/8"                            # Class-A Private (RFC-1918) Networks  
 CLASS_B="172.16.0.0/12"                         # Class-B Private (RFC-1918) Networks  # Which ports will be allowed on INPUT (UDP connections)
 CLASS_C="192.168.0.0/16"                        # Class-C Private (RFC-1918) Networks  # interface eth0
 CLASS_D_MULTICAST="224.0.0.0/4"         # Class-D Multicast Addresses  eth0_ACCEPT_INPUT_UDP="${eth0_ACCEPT_INPUT_UDP:=}"
 CLASS_E_RESERVED_NET="240.0.0.0/5"      # Class-E Reserved Addresses  # interface ppp0
 PRIVPORTS="0:1023"                                      # Well-Known, Privileged Port Range  ppp0_ACCEPT_INPUT_UDP="${ppp0_ACCEPT_INPUT_UDP:=}"
 UNPRIVPORTS="1024:65535"                        # Unprivileged Port Range  
 TRACEROUTE_SRC_PORTS="32769:65535"      # Traceroute Source Ports  
 TRACEROUTE_DEST_PORTS="33434:33523"     # Traceroute Destination Ports  
   
   
 # allow some ICMP packets - needed for ping etc.  # allow some ICMP packets - needed for ping etc.
 ACCEPT_ICMP_PACKETS="${ACCEPT_ICMP_PACKETS:=echo-reply destination-unreachable echo-request time-exceeded}"  ACCEPT_ICMP_PACKETS="${ACCEPT_ICMP_PACKETS:=echo-reply destination-unreachable echo-request time-exceeded}"
   
   
 # load necessary modules from $MODULES variable  # load necessary modules from $MODULES variable
 load_modules()  load_modules()
 { # {{{  { # {{{
Line 100  unload_modules()
Line 90  unload_modules()
 print_iface_status()  print_iface_status()
 { # {{{  { # {{{
         # Print interfaces:          # Print interfaces:
         echo "# iface   | IP addr       | Gateway       | broadcast     | netmask       | HW addr"          echo "# iface   | IP addr       | broadcast     | netmask       | HW addr"
         for iface in $interfaces; do          for iface in $interfaces; do
                 IP="IP_$iface"; Gateway="Gateway_$iface"; Bcast="Bcast_$iface"; Mask="Mask_$iface"; HWaddr="HWaddr_$iface";                  IP="IP_$iface"; Bcast="Bcast_$iface"; Mask="Mask_$iface"; HWaddr="HWaddr_$iface";
                 echo "$iface    | ${!IP}        | ${!Gateway}   | ${!Bcast}     | ${!Mask}      | ${!HWaddr}"                  echo "$iface    | ${!IP}        | ${!Bcast}     | ${!Mask}      | ${!HWaddr}"
         done          done
 } # }}}  } # }}}
   
Line 123  antispoof_on()
Line 113  antispoof_on()
         done          done
 } # }}}  } # }}}
   
 forward_on()  
 { # {{{  
         echo -en "NAT: Enabling packet forwarding..."  
         echo 1 > /proc/sys/net/ipv4/ip_forward  
         echo " done."  
 } # }}}  
   
 forward_off()  
 { # {{{  
         echo -en "NAT: Disabling packet forwarding..."  
         echo 0 > /proc/sys/net/ipv4/ip_forward  
         echo " done."  
 } # }}}  
   
 # clear status of iptable chains  # clear status of iptable chains
 remove_chains()  remove_chains()
 { # {{{  { # {{{
           $IPTABLES -F # clear all chains
           $IPTABLES -X # remove all chains
   } # }}}
   
         for table in filter nat mangle; do  # all packets on loopback are accpted
                 $IPTABLES -t $table -F # clear all chains  set_loopback()
                 $IPTABLES -t $table -X # remove all chains  { # {{{
                 $IPTABLES -t $table -Z # zero counts          $IPTABLES -A INPUT  -j ACCEPT -i $LO_IFACE
         done          $IPTABLES -A OUTPUT -j ACCEPT -o $LO_IFACE
   
 } # }}}  } # }}}
   
 # DROP packages from nmap(1)  # DROP packages from nmap(1)
Line 157  nmap_scan_filter()
Line 135  nmap_scan_filter()
   
         for chain in INPUT FORWARD; do          for chain in INPUT FORWARD; do
                 #  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 -A $chain   -p TCP --tcp-flags ALL NONE  $LOG_LIMIT -j LOG --log-prefix "nmap scan $chain ALL NONE: "
                 echo -en "."                  echo -en "."
                 $IPTABLES               -A $chain   -p TCP --tcp-flags ALL NONE -j DROP                  $IPTABLES -A $chain   -p TCP --tcp-flags ALL NONE -j DROP
                 echo -en "."                  echo -en "."
   
                 # dva odporujuuce si flagy su nastavene:                  # dva odporujuuce si flagy su nastavene:
                 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 -A $chain   -p TCP --tcp-flags $flags $flags $LOG_LIMIT -j LOG --log-prefix "nmap scan $chain $flags: "
                         echo -en "."                          echo -en "."
                         $IPTABLES               -A $chain   -p TCP --tcp-flags $flags $flags -j DROP                          $IPTABLES -A $chain   -p TCP --tcp-flags $flags $flags -j DROP
                         echo -en "."                          echo -en "."
                 done                  done
   
                 # je nastavene len $flags bez predpokladaneho ACK                  # je nastavene len $flags bez predpokladaneho ACK
                 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 -A $chain   -p TCP --tcp-flags ACK,$flags $flags $LOG_LIMIT -j LOG --log-prefix "nmap scan $chain ACK,$flags: "
                         echo -en "."                          echo -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
                         echo -en "."                          echo -en "."
                 done                  done
         done          done
Line 189  invalid_packet_filter()
Line 167  invalid_packet_filter()
   
         echo -en "Turning on INVALID packet filter "          echo -en "Turning on INVALID packet filter "
         for chain in INPUT OUTPUT FORWARD; do          for chain in INPUT OUTPUT FORWARD; do
                 $IPTABLES_LOG   -A $chain -m state --state INVALID $LOG_LIMIT "INVALID $chain: "                  $IPTABLES -A $chain -m state --state INVALID $LOG_LIMIT  -j LOG --log-prefix "INVALID $chain: "
                 echo -en "."                  echo -en "."
                 $IPTABLES               -A $chain -m state --state INVALID -j DROP                  $IPTABLES -A $chain -m state --state INVALID -j DROP
                 echo -en "."                  echo -en "."
         done          done
   
Line 218  syn_flood()
Line 196  syn_flood()
 anti_spoof_filter()  anti_spoof_filter()
 { # {{{  { # {{{
   
         #   http://www.iana.com/assignments/ipv4-address-space  #   http://www.iana.com/assignments/ipv4-address-space
   
         if [ ! -z "$ANTISPOOF_IFACE" ]; then          INET_IFACE=$1
   
                 echo -en "Turning on antispoof filter for interfaces: "          $IPTABLES -N spoof
                 $IPTABLES -N spoof  
   
                 # Ochrana proti Spoogingu zo spatnej slucky          echo "Turning on antispoof filter for interface $INET_IFACE "
                 $IPTABLES_LOG   -A spoof -s 127.0.0.0/8 $LOG_LIMIT "RESERVED:127.0.0.0/8 src"          # Ochrana proti Spoogingu zo spatnej slucky
                 $IPTABLES               -A spoof -s 127.0.0.0/8 -j DROP          $IPTABLES -A spoof -i $INET_IFACE -s 127.0.0.0/8 $LOG_LIMIT -j LOG --log-prefix "Reserved IP:127.0.0.0/8 src"
                 $IPTABLES_LOG   -A spoof -d 127.0.0.0/8 $LOG_LIMIT "RESERVED:127.0.0.0/8 dest"          $IPTABLES -A spoof -i $INET_IFACE -s 127.0.0.0/8 -j DROP
                 $IPTABLES               -A spoof -d 127.0.0.0/8 -j DROP          $IPTABLES -A spoof -i $INET_IFACE -d 127.0.0.0/8 $LOG_LIMIT -j LOG --log-prefix "Reserved IP:127.0.0.0/8 dest"
                 # Ochrana proti Spoofingu Internetu z adries urcenych pre lokalne siete          $IPTABLES -A spoof -i $INET_IFACE -d 127.0.0.0/8 -j DROP
                 $IPTABLES_LOG   -A spoof -s 192.168.0.0/16 $LOG_LIMIT "RESERVED:192.168.0.0/16 src"          # Ochrana proti Spoofingu Internetu z adries urcenych pre lokalne siete
                 $IPTABLES               -A spoof -s 192.168.0.0/16 -j DROP              # RFC1918          $IPTABLES -A spoof -i $INET_IFACE -s 192.168.0.0/16 $LOG_LIMIT -j LOG --log-prefix "Reserved IP:192.168.0.0/16 src"
                 $IPTABLES_LOG   -A spoof -s 172.16.0.0/12 $LOG_LIMIT "RESERVED:172.16.0.0/12 src"          $IPTABLES -A spoof -i $INET_IFACE -s 192.168.0.0/16 -j DROP             # RFC1918
                 $IPTABLES               -A spoof -s 172.16.0.0/12 -j DROP               # RFC1918          $IPTABLES -A spoof -i $INET_IFACE -s 172.16.0.0/12 $LOG_LIMIT -j LOG --log-prefix "Reserved IP:172.16.0.0/12 src"
                 $IPTABLES_LOG   -A spoof -s 10.0.0.0/8  $LOG_LIMIT "RESERVED:10.0.0.0/8 src"          $IPTABLES -A spoof -i $INET_IFACE -s 172.16.0.0/12 -j DROP              # RFC1918
                 $IPTABLES               -A spoof -s 10.0.0.0/8 -j DROP  # RFC1918 len pre sietovy interface do Internetu, kedze 10.0.0.0 je adresa LAN          $IPTABLES -A spoof -i $INET_IFACE -s 10.0.0.0/8  $LOG_LIMIT -j LOG --log-prefix "Reserved IP:10.0.0.0/8 src"
                 $IPTABLES_LOG   -A spoof -s 96.0.0.0/4 $LOG_LIMIT "RESERVED:96.0.0.0/4 src"          $IPTABLES -A spoof -i $INET_IFACE -s 10.0.0.0/8 -j DROP  # RFC1918 len pre sietovy interface do Internetu, kedze 10.0.0.0 je adresa LAN
                 $IPTABLES               -A spoof -s 96.0.0.0/4 -j DROP                          # IANA          $IPTABLES -A spoof -i $INET_IFACE -s 96.0.0.0/4 $LOG_LIMIT -j LOG --log-prefix "Reserved IP:96.0.0.0/4 src"
           $IPTABLES -A spoof -i $INET_IFACE -s 96.0.0.0/4 -j DROP                         # IANA
                 for iface in $ANTISPOOF_IFACE; do          echo " done."
                         echo -en " $iface"  
                         $IPTABLES -A FORWARD -i $iface -j spoof  
                         $IPTABLES -A INPUT   -i $iface -j spoof  
                 done  
                 echo " done."  
         fi  
 } # }}}  } # }}}
   
 mangle_prerouting()  mangle_prerouting()
Line 290  mangle_output()
Line 261  mangle_output()
   
 } # }}}  } # }}}
   
 # Masquerade local subnet  
 masquerade()  
 { # {{{  
         if [ ! -z "$NAT_LAN_IFACE" ]; then  
         echo -en "NAT: Enabling packet forwarding..."  
         echo 1 > /proc/sys/net/ipv4/ip_forward  
         echo " done."  
                 echo -en "NAT: Masquerading local subnet: $NAT_SUBNET_IFACE --> $NAT_LAN_IFACE"  
   
                 ip="IP_$NAT_SUBNET_IFACE";  
                 netmask="Mask_$NAT_SUBNET_IFACE"  
                 localnet="${!ip}/${!netmask}"  
   
                 lan_ip="IP_$NAT_LAN_IFACE"  
   
                 # alow packets from private subnet  
                 $IPTABLES -A FORWARD -s ! $localnet -i $NAT_SUBNET_IFACE -j DROP  
                 for client_ip in $NAT_CLIENT_DROP; do  
                         echo -en " !$client_ip";  
                         $IPTABLES -A FORWARD -s $client_ip -i $NAT_SUBNET_IFACE -j DROP  
                 done  
   
                 for redirect in $NAT_TCP_PORT_REDIRECT; do  
                         eval `echo $redirect | awk -v FS=: '{ printf "remote_port=%s; local_port=%s;", $1, $2; }'`  
                         echo -en " $remote_port:$local_port"  
                         $IPTABLES -t nat -A PREROUTING -p TCP \  
                                 -i ! $NAT_LAN_IFACE -d ! ${!lan_ip} \  
                                 --dport $remote_port -j REDIRECT --to-port $local_port  
                 done  
   
                 #$IPTABLES -t nat -A POSTROUTING -s $localnet -o $NAT_LAN_IFACE -j MASQUERADE  
                 $IPTABLES -t nat -A POSTROUTING -o $NAT_LAN_IFACE -j MASQUERADE  
   
                 echo " done."  
   
                 # don't forward Miscrosoft protocols - NOT RFC compliant packets  
                 if [ ! -z "$NAT_FORWARD_MICROSOFT" ]; then  
                         if [ "x$NAT_FORWARD_MICROSOFT" = "xno" ]; then  
                                 $IPTABLES -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP  
   
                                 for port in 69 135 445 1434 6667; do  
                                         $IPTABLES -A FORWARD -p TCP --dport $port -j DROP  
                                         $IPTABLES -A FORWARD -p UDP --dport $port -j DROP  
                                 done  
                         fi  
                 fi  
   
                 if [ ! -z "$NAT_FORWARD_TCP_PORTS" ]; then  
                         echo -en "\tAccepting FORWARD TCP ports:"  
                         for port in $NAT_FORWARD_TCP_PORTS; do  
                                 echo -en " $port"  
                                 $IPTABLES -A FORWARD -p TCP --dport $port -m state --state NEW -j ACCEPT  
                         done  
                         echo " done."  
                 fi  
   
                 if [ ! -z "$NAT_FORWARD_UDP_PORTS" ]; then  
                         echo -en "\tAccepting FORWARD UDP ports:"  
                         for port in $NAT_FORWARD_UDP_PORTS; do  
                                 echo -en " $port"  
                                 $IPTABLES -A FORWARD -p UDP --dport $port -m state --state NEW -j ACCEPT  
                         done  
                         echo " done."  
                 fi  
   
                 echo -en "\tAccepting ICMP packets:"  
                 for type in $ACCEPT_ICMP_PACKETS; do  
                         echo -en " $type"  
                         $IPTABLES -A FORWARD -p ICMP --icmp-type $type -j ACCEPT  
                 done  
                 #$IPTABLES_LOG -A FORWARD -p ICMP -j LOG --log-prefix "FWD ICMP: "  
                 echo " done."  
   
                 # Port forwarding to local machines  
                 if [ ! -z "$NAT_TCP_PORT_FORWARD" ]; then  
                         echo -en "\tForwarding ports to local machines:"  
                         for redirect in $NAT_TCP_PORT_FORWARD; do  
                                 eval `echo $redirect | awk -v FS=: '{ printf "src_port=%s; local_machine=%s; dest_port=%s;", $1, $2, $3; }'`  
                                 echo -en " $src_port -> $local_machine:$dest_port"  
                                 $IPTABLES -t nat -A PREROUTING -p TCP -i $NAT_LAN_IFACE -d ${!lan_ip} \  
                                 --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  
                         done  
                         echo " done."  
                 fi  
   
                 # Keep state of connections from private subnets  
                 $IPTABLES -A OUTPUT  -m state --state NEW -o $NAT_LAN_IFACE -j ACCEPT  
                 #$IPTABLES -A FORWARD -m state --state NEW -o $NAT_LAN_IFACE -j ACCEPT  
                 $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT  
   
         fi  
 } # }}}  
   
 log_new_connections()  
 { # {{{  
         if [ ! -z "$NAT_LOG_NEW_CONNECTIONS" ]; then  
                 if [ "x$NAT_LOG_NEW_CONNECTIONS" = "xyes" ]; then  
                         echo -en "Logging new connections:"  
                         $IPTABLES_LOG -A INPUT   -m state --state NEW -j LOG --log-prefix "IN  connection: "  
                         $IPTABLES_LOG -A OUTPUT  -m state --state NEW -j LOG --log-prefix "OUT connection: "  
                         $IPTABLES_LOG -A FORWARD -m state --state NEW -j LOG --log-prefix "FWD connection: "  
                         echo " done."  
                 fi  
         fi  
 } # }}}  
   
 drop_output()  
 { # {{{  
   
         for iface in $INTERFACES; do  
                 ip="IP_$iface";  
                 drop_output_tcp="${iface}_DROP_OUTPUT_TCP"  
                 DROP_OUTPUT_TCP="${!drop_output_tcp}"  
                 drop_output_udp="${iface}_DROP_OUTPUT_UDP"  
                 DROP_OUTPUT_UDP="${!drop_output_udp}"  
   
                 if [ ! -z "$DROP_OUTPUT_TCP" ]; then  
                         echo -en "$iface: Dropping outgoing packets from ports:"  
                         for port in $DROP_OUTPUT_TCP; do  
                                 echo -en " $port"  
                                 $IPTABLES -A FORWARD -p TCP --sport $port -o $iface -j DROP  
                                 $IPTABLES -A OUTPUT  -p TCP --sport $port -o $iface -j DROP  
                         done  
                         echo " done."  
                 fi  
   
                 if [ ! -z "$DROP_OUTPUT_UDP" ]; then  
                         echo -en "$iface: Dropping outgoing packets from ports:"  
                         for port in $DROP_OUTPUT_UDP; do  
                                 echo -en " $port"  
                                 $IPTABLES -A FORWARD -p UDP --sport $port -o $iface -j DROP  
                                 $IPTABLES -A OUTPUT  -p UDP --sport $port -o $iface -j DROP  
                         done  
                         echo " done."  
                 fi  
         done  
   
 } # }}}  
   
 bann_ip_adresses()  
 { # {{{  
         #  
         # This feature has been developed for following reason:  
         # UbiCrawler spam our website with many requests (they are duplicit requests of the same page!)  
         # And this web robot doesn't accept HTTP META tags (http://www.robotstxt.org/wc/faq.html#extension)  
         #  
         # Bann them too!  
         #  
         #IP address is: 146.48.97.11 146.48.97.13  
         # User Agent: "UbiCrawler/v0.4beta (http://ubi.iit.cnr.it/projects/ubicrawler/)"  
         #  
         if [ ! -z "$BANNED_IP" ]; then  
                 echo -en "Dropping ALL packets from IP:"  
                 for banned_ip in $BANNED_IP; do  
                         echo -en " $banned_ip"  
                         $IPTABLES -A INPUT              -s $banned_ip -j DROP  
                         $IPTABLES -A FORWARD    -s $banned_ip -j DROP  
                 done  
                 echo " done."  
         fi  
 } # }}}  
   
 allow_accept_all()  
 { # {{{  
         if [ ! -z "$IFACE_ACCEPT_ALL" ]; then  
                 echo -en "Accepting ALL packets on interfaces:"  
                 for iface in $IFACE_ACCEPT_ALL; do  
                         echo -en " $iface"  
                         $IPTABLES -A INPUT   -i $iface -j ACCEPT  
                         $IPTABLES -A FORWARD -i $iface -j ACCEPT  
                         $IPTABLES -A OUTPUT  -o $iface -j ACCEPT  
                 done  
                 echo " done."  
         fi  
 } # }}}  
   
 allow_input()  allow_input()
 { # {{{  { # {{{
   
         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 481  allow_input()
Line 274  allow_input()
                 done                  done
                 echo " done."                  echo " done."
         fi          fi
         if [ ! -z "$ALL_ACCEPT_INPUT_UDP" ]; then  
                 echo -en "Accepting ALL INPUT UDP connections on ports:"  
                 for port in $ALL_ACCEPT_INPUT_UDP; do  
                         for iface in $INTERFACES; do  
                                 ip="IP_$iface";  
                                 echo -en " $port($iface)"  
                                 $IPTABLES -A INPUT -i $iface -p UDP --dport $port -j ACCEPT  
                         done  
                 done  
                 echo " done."  
         fi  
   
         for iface in $INTERFACES; do          for iface in $INTERFACES; do
                 ip="IP_$iface";                  ip="IP_$iface";
Line 501  allow_input()
Line 283  allow_input()
                 ACCEPT_INPUT_UDP="${!accept_input_udp}"                  ACCEPT_INPUT_UDP="${!accept_input_udp}"
   
                 if [ ! -z "$ACCEPT_INPUT_TCP" ]; then                  if [ ! -z "$ACCEPT_INPUT_TCP" ]; then
                         echo -en "$iface: Accepting INPUT TCP connections on ports:"                          echo -en "$iface: Accepting INPUT TCP connections on ports: "
                         for port in $ACCEPT_INPUT_TCP; do                          for port in $ACCEPT_INPUT_TCP; do
                                 echo -en " $port"                                  echo -en " $port"
                                 $IPTABLES -A INPUT -i $iface -d ${!ip} -p TCP --dport $port -j ACCEPT                                  $IPTABLES -A INPUT -i $iface -d ${!ip} -p TCP --dport $port -j ACCEPT
Line 510  allow_input()
Line 292  allow_input()
                 fi                  fi
   
                 if [ ! -z "$ACCEPT_INPUT_UDP" ]; then                  if [ ! -z "$ACCEPT_INPUT_UDP" ]; then
                         echo -en "$iface: Accepting INPUT UDP connections on ports:"                          echo -en "$iface: Accepting INPUT UDP connections on ports: "
                         for port in $ACCEPT_INPUT_UDP; do                          for port in $ACCEPT_INPUT_UDP; do
                                 echo -en " $port"                                  echo -en " $port"
                                 #$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
Line 521  allow_input()
Line 303  allow_input()
                 fi                  fi
         done          done
   
         # Enable outgoing TRACEROUTE requests (required e.g. by Skype, http://www.skype.com)  
         if [ ! -z "$TRACEROUTE_IFACE" ]; then  
                 ip="IP_$ANTISPOOF_IFACE";  
                 echo -en "Accepting traceroute:"  
   
                 $IPTABLES -A OUTPUT -o $ANTISPOOF_IFACE -p UDP \  
                         --sport $TRACEROUTE_SRC_PORTS --dport $TRACEROUTE_DEST_PORTS \  
                         -s ${!ip} -d $ANYWHERE -j ACCEPT  
   
                 for iface in $TRACEROUTE_IFACE; do  
                         $IPTABLES -A FORWARD -p UDP -i $iface --sport $TRACEROUTE_SRC_PORTS \  
                                 --dport $TRACEROUTE_DEST_PORTS -j ACCEPT  
                 done  
                 echo " done."  
         fi  
   
 } # }}}  } # }}}
   
 # ACCEPT all packets from our IP address  # ACCEPT all packets from our IP address
Line 564  allow_icmp()
Line 330  allow_icmp()
         $IPTABLES -A INPUT -p TCP --dport 113 -j REJECT --reject-with tcp-reset #AUTH server          $IPTABLES -A INPUT -p TCP --dport 113 -j REJECT --reject-with tcp-reset #AUTH server
   
         # accept only allowed ICMP packets          # accept only allowed ICMP packets
         for type in $ACCEPT_ICMP_PACKETS; do          for type in echo-reply destination-unreachable echo-request time-exceeded; do
                 echo -en " $type"                  echo -en " $type"
                 for iface in $INTERFACES; do                  for iface in $INTERFACES; do
                         ip="IP_$iface";                          ip="IP_$iface";
                         $IPTABLES -A INPUT -i $iface -d ${!ip} -p ICMP --icmp-type $type -j ACCEPT                          $IPTABLES -A INPUT -i $iface -d ${!ip} -p ICMP --icmp-type $type -j ACCEPT
                 done                  done
         done          done
         #$IPTABLES_LOG -A INPUT  -p ICMP -j LOG --log-prefix "IN  ICMP: "  
         #$IPTABLES_LOG -A OUTPUT -p ICMP -j LOG --log-prefix "OUT ICMP: "  
         echo " done."          echo " done."
   
 } # }}}  } # }}}
Line 580  allow_icmp()
Line 344  allow_icmp()
 log_input_drop()  log_input_drop()
 { # {{{  { # {{{
   
         if [ ! "x$LOGGING" = "xoff" ]; then          prefix="input drop: "
                 prefix="input drop: "          echo "Input drop is logged with prefix '$prefix'"
                 echo "Input drop is logged with prefix '$prefix'"          $IPTABLES -A INPUT $LOG_LIMIT -j LOG --log-prefix "$prefix"
                 $IPTABLES_LOG -A INPUT $LOG_LIMIT "$prefix"  
         fi  
   
 } # }}}  } # }}}
   
 log_output_drop()  log_output_drop()
 { # {{{  { # {{{
   
         if [ ! "x$LOGGING" = "xoff" ]; then          prefix="output drop: "
                 prefix="output drop: "          echo "Output drop is logged with prefix '$prefix'"
                 echo "Output drop is logged with prefix '$prefix'"          # Ostatní pakety logujeme (neměly by být žádné takové)
                 $IPTABLES_LOG -A OUTPUT $LOG_LIMIT "$prefix"          $IPTABLES -A OUTPUT $LOG_LIMIT -j LOG --log-prefix "$prefix"
         fi  
   
 } # }}}  
   
 log_forward_drop()  
 { # {{{  
   
         if [ ! "x$LOGGING" = "xoff" ]; then  
                 prefix="forward drop: "  
                 echo "Forward drop is logged with prefix '$prefix'"  
                 $IPTABLES_LOG -A FORWARD $LOG_LIMIT "$prefix"  
         fi  
   
 } # }}}  } # }}}
   
Line 617  accept_related()
Line 367  accept_related()
         for iface in $INTERFACES; do          for iface in $INTERFACES; do
                 ip="IP_$iface";                  ip="IP_$iface";
                 echo -en " ${!ip}($iface)"                  echo -en " ${!ip}($iface)"
                 $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT                  $IPTABLES -A INPUT -i $iface -d ${!ip} -m state --state ESTABLISHED,RELATED -j ACCEPT
         done          done
         echo " done."          echo " done."
   
Line 628  accept_loopback()
Line 378  accept_loopback()
   
         # Loopback není radno omezovat          # Loopback není radno omezovat
         echo -en "Accepting loopback:"          echo -en "Accepting loopback:"
         $IPTABLES -A INPUT  -i $LO_IFACE -j ACCEPT          $IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT
         $IPTABLES -A OUTPUT -o $LO_IFACE -j ACCEPT  
         echo " done."          echo " done."
   
 } # }}}  } # }}}
Line 670  parse_ifconfig()
Line 419  parse_ifconfig()
                         END { printf "\ninterfaces=\"%s\";      export interfaces;\n", interfaces; }                          END { printf "\ninterfaces=\"%s\";      export interfaces;\n", interfaces; }
         '`          '`
   
         eval `perl -e '  
         $\ = "\n";  
         open(FILE, "/proc/net/route") or die "Can not open /proc/net/route: $!";  
         my @columns = split(/\s+/, <FILE>);  
         while (my $line = <FILE>) {  
                 my $iface;  
                 my @vals = split(/\s+/, $line);  
                 foreach my $key (@columns) {  
                         $iface->{$key} = shift @vals;  
                 }  
   
                 foreach my $key (qw( Gateway Destination )) {  
                         print "${key}_$iface->{Iface}=",  
                                 qw("), hex2ip($iface->{$key}), qw("),  
                                 "; export ${key}_$iface->{Iface};";  
                 }  
                 foreach my $key (qw( Flags MTU Metric Window IRTT )) {  
                         print "${key}_$iface->{Iface}=",  
                                 qw("), $iface->{$key}, qw("),  
                                 "; export ${key}_$iface->{Iface};";  
                 }  
         }  
         close(FILE);  
   
   
         sub hex2ip  
         { # {{{  
                 my ($str) = @_;  
                 my @block;  
   
                 my $hex = uc($str);  
   
                 while (length($hex)) {  
                         my $x = ord(substr($hex, 0, 1));  
                         my $y = ord(substr($hex, 1, 1));  
   
                         $x = $x > 64 ? $x - 55 : $x - 48;  
                         $y = $y > 64 ? $y - 55 : $y - 48;  
   
                         push @block, 16 * $x + $y;  
                         $hex = substr($hex, 2);  
                 }  
   
                 return join(".", reverse @block);  
   
         } # }}}  
         '`  
         # 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 728  parse_ifconfig()
Line 430  parse_ifconfig()
 parse_ifconfig  parse_ifconfig
 print_iface_status  print_iface_status
   
 #  # $interfaces - all interfaces
 # Split interfaces into 2 groups:  
 #  
 # $INTERFACES_ACCEPT_ALL - interfaces withouth restrictions  
 #  
 # $INTERFACES - all interfaces withouth loopback  # $INTERFACES - all interfaces withouth loopback
 #               and devices without restrictions (e.g. tun0 tun1 tap0 ...)  
 #  
 # list of all interfaces is in $interfaces variable  
 #  
 INTERFACES=""  INTERFACES=""
 INTERFACES_ACCEPT_ALL=""  
 regexp='^\('`echo $IFACE_ACCEPT_ALL | sed 's/ /\\\|/g; s/+/.*/g;'`'\)$'  
 for iface in $interfaces; do  for iface in $interfaces; do
         #if [ "o$iface" = "olo" ]; then continue; fi          if [ "o$iface" = "olo" ]; then continue; fi
         echo $iface | grep -q -e "$regexp"          INTERFACES="$INTERFACES $iface";
         if [ $? = 0 ] || [ "o$iface" = "olo" ]; then # lo interface is always here  
                 INTERFACES_ACCEPT_ALL="$INTERFACES_ACCEPT_ALL $iface";  
         else  
                 INTERFACES="$INTERFACES $iface";  
         fi  
 done  done
 INTERFACES_ACCEPT_ALL="$IFACE_ACCEPT_ALL"  
   
   
 case "$1" in  case "$1" in
Line 759  case "$1" in
Line 445  case "$1" in
                 # Inicialize modules                  # Inicialize modules
                 $DEPMOD -a                  $DEPMOD -a
                 load_modules                  load_modules
                 set_default_policy  
                 remove_chains                  remove_chains
                 #                  #
                 # (un)commnet next lines as needed                  # (un)commnet next lines as needed
                 #                  #
                 bann_ip_adresses                  set_default_policy
                 allow_accept_all                  set_loopback
                 nmap_scan_filter                  nmap_scan_filter
                 invalid_packet_filter                  invalid_packet_filter
                 anti_spoof_filter                  #anti_spoof_filter eth0
                 syn_flood                  syn_flood
                 mangle_prerouting                  mangle_prerouting
                 mangle_output                  mangle_output
                 log_new_connections  
                 drop_output  
                 allow_input                  allow_input
                 allow_output                  allow_output
                 allow_icmp                  allow_icmp
                 accept_related                  accept_related
                 accept_loopback                  accept_loopback
                 masquerade  
                 log_input_drop                  log_input_drop
                 log_output_drop                  log_output_drop
                 log_forward_drop  
                 ;;                  ;;
   
         stop)          stop)
                 echo -n "Stopping $DESC: "                  echo -n "Stopping $DESC: "
                 set_default_policy  
                 remove_chains                  remove_chains
                   set_default_policy
                 unload_modules                  unload_modules
                 forward_off  
                 ;;                  ;;
   
         status)          status)
Line 799  case "$1" in
Line 479  case "$1" in
                 ;;                  ;;
   
         *)          *)
                 echo "Usage: $0 {start|stop|status}" >&2                  echo "Usage: $0 {start|stop|stop}" >&2
                 exit 1                  exit 1
                 ;;                  ;;
 esac  esac

Legend:
Removed from v.2.25  
changed lines
  Added in v.2.0

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