#!/bin/sh

SERVER_IP="1.2.3.4"

LO_IP="127.0.0.1"
LO_NETMASK="127.0.0.0"

ETH0_IP="10.0.0.254"
ETH0_NETMASK="10.0.0.0"

ETH1_IP="192.168.1.254"
ETH1_NETMASK="192.168.1.0"

TUN0_IP="192.168.254.1"
TUN0_NETMASK="192.168.254.0"

startFirewall()
  {
    echo -n "Starting Firewall .................... "
    echo "Done."
    echo

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

#   ALLOWED_IP="1.2.3.4"
#
#   RESTRICTED_COMPUTER="192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4"
#
#   for COMPUTER in ${RESTRICTED_COMPUTER}
#     do
#       for IP in ${ALLOWED_IP}
#         do
#           echo -n "Allowed Forward: ${COMPUTER} -> ${IP} .................... "
#             /sbin/iptables --table filter --append FORWARD --source ${COMPUTER} --destination ${IP} --in-interface eth1 --jump ACCEPT
#           echo "Done."
#         done
#       /sbin/iptables --table filter --append FORWARD --source ${COMPUTER} --destination 0/0 --in-interface eth1 --jump DROP
#     done

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    echo

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    SEGMENT_PREFIX="192.168.1."
    PORT_PREFIX="590"
    PORT_SUFIX="1 2 3 4 5 6 7"
    STANDART_PORT="5900"

    for SUFIX in ${PORT_SUFIX}
      do
        echo -n "Allowed Prerouting: ${SERVER_IP} -> ${SEGMENT_PREFIX}${SUFIX} | ${PORT_PREFIX}${SUFIX} -> ${STANDART_PORT} .................... "
          /sbin/iptables --table nat --append PREROUTING --protocol TCP --destination ${ETH0_IP} --destination-port ${PORT_PREFIX}${SUFIX} --jump DNAT --to ${SEGMENT_PREFIX}${SUFIX}:${STANDART_PORT}
          /sbin/iptables --table filter --append INPUT --protocol TCP --match multiport --destination-port ${PORT_PREFIX}${SUFIX} --jump ACCEPT
        echo "Done."      
      done

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    echo

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    echo -n "Create Rules for Chain: INPUT .................... "
    /sbin/iptables --table filter --append INPUT --protocol TCP --match multiport --destination-port 25,110,143 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol TCP --match multiport --destination-port 53 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol UDP --match multiport --destination-port 53 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol TCP --match multiport --destination-port 80,443 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol TCP --match multiport --destination-port 100 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol UDP --match multiport --destination-port 1194 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol TCP --match multiport --destination-port 3478,3479,5222,5269,7777,9090 --jump ACCEPT

    /sbin/iptables --table filter --append INPUT --protocol ICMP --icmp-type 0 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol ICMP --icmp-type 3 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol ICMP --icmp-type 8 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol ICMP --icmp-type 11 --jump ACCEPT

    /sbin/iptables --table filter --append INPUT --protocol ALL --in-interface lo --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol ALL --in-interface eth1 --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --protocol ALL --in-interface tun0 --jump ACCEPT

    /sbin/iptables --table filter --append INPUT --match state --state RELATED,ESTABLISHED --jump ACCEPT
    /sbin/iptables --table filter --append INPUT --match limit --limit 1/second --limit-burst 5 --jump LOG --log-prefix "KMF: "

    /sbin/iptables --table filter --policy INPUT DROP
    echo "Done."

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    echo -n "Create Rules for Chain: OUTPUT .................... "
    /sbin/iptables --table filter --append OUTPUT --protocol ALL --source ${LO_IP} --jump ACCEPT
    /sbin/iptables --table filter --append OUTPUT --protocol ALL --source ${ETH0_IP} --jump ACCEPT
    /sbin/iptables --table filter --append OUTPUT --protocol ALL --source ${ETH1_IP} --jump ACCEPT
    /sbin/iptables --table filter --append OUTPUT --protocol ALL --source ${TUN0_IP} --jump ACCEPT

    /sbin/iptables --table filter --policy OUTPUT DROP
    echo "Done."

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

#   echo -n "Create Rules for Chain: FORWARD .................... "
#   /sbin/iptables --table filter --append FORWARD --destination 0/0 --protocol TCP --match multiport --destination-port 21,80,443,30000:65535 --in-interface eth1 --jump ACCEPT
#   /sbin/iptables --table filter --append FORWARD --destination 0/0 --protocol UDP --match multiport --destination-port 1024:65535 --in-interface eth1 --jump ACCEPT
#
#   /sbin/iptables --table filter --append FORWARD --source 192.168.1.3 --destination 0/0 --in-interface eth1 --jump ACCEPT
#
#   /sbin/iptables --table filter --append FORWARD --destination 0/0 --in-interface eth1 --jump DROP
#   echo "Done."

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    echo -n "Create Rules for Chain: POSTROUTING .................... "
    /sbin/iptables --table nat --insert POSTROUTING --out-interface eth0 --jump MASQUERADE
    /sbin/iptables --table nat --insert PREROUTING --destination ${SERVER_IP} --jump DNAT --to-destination ${ETH0_IP}
    echo "Done."

##################################################################################################################################################################################
##################################################################################################################################################################################
##################################################################################################################################################################################

    echo
    /etc/init.d/iptables save active
    echo
  }

stopFirewall()
  {
    echo -n "Shutdown Firewall .................... "
    /sbin/iptables -t nat -F
    /sbin/iptables -t nat -X
    /sbin/iptables -t filter -F
    /sbin/iptables -t filter -X
    /sbin/iptables -t filter -P INPUT ACCEPT
    /sbin/iptables -t filter -P OUTPUT ACCEPT
    /sbin/iptables -t filter -P FORWARD ACCEPT
    echo "Done."
    echo
    /etc/init.d/iptables save active
    echo
  }

case $1 in
  start)
  echo
  startFirewall
  ;;
  stop)
  echo
  stopFirewall
  ;;
  restart)
  echo
  stopFirewall
  startFirewall
  ;;
  *)
  echo "Usage: firewall { start | stop | restart } "
  ;;
esac
