home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / mini / Cipe+Masq < prev    next >
Text File  |  1999-05-12  |  56KB  |  1,981 lines

  1.   The Linux Cipe+Masquerading mini-HOWTO
  2.   Anthony Ciaravalo, acj@home.com
  3.   v1.2, 21 April 1999
  4.  
  5.   How to setup a VPN using Cipe on a linux masquerading firewall.
  6.   ______________________________________________________________________
  7.  
  8.   Table of Contents
  9.  
  10.  
  11.   1. Introduction
  12.  
  13.      1.1 Copyright statement
  14.      1.2 Disclaimer
  15.      1.3 Feedback
  16.      1.4 Getting the files
  17.  
  18.   2. Firewall Configuration
  19.  
  20.      2.1 VPN Network Diagram
  21.      2.2 A little reference
  22.      2.3 Additional notes about scripts and the VPN
  23.  
  24.   3. Machine A Specific Configuration
  25.  
  26.      3.1 /etc/cipe/options.machineB
  27.      3.2 /etc/cipe/options.machineC
  28.      3.3 /etc/rc.d/rc.cipe
  29.      3.4 Gateway
  30.  
  31.   4. Machine B Specific Configuration
  32.  
  33.      4.1 /etc/cipe/options.machineA
  34.      4.2 /etc/rc.d/rc.cipe
  35.      4.3 Gateway
  36.  
  37.   5. Machine C Specific Configuration
  38.  
  39.      5.1 /etc/cipe/options.machineA
  40.      5.2 /etc/rc.d/rc.cipe
  41.      5.3 Gateway
  42.  
  43.   6. Common Machine Configuration
  44.  
  45.      6.1 /etc/cipe/ip-up
  46.         6.1.1 Kernel 2.0, ipfwadm, cipe 1.0.x
  47.         6.1.2 Kernel 2.1/2.2, ipchains, cipe 1.2.x
  48.      6.2 /etc/cipe/ip-down
  49.         6.2.1 Kernel 2.0, ipfwadm, cipe 1.0.x
  50.         6.2.2 Kernel 2.1/2.2, ipchains, cipe 1.2.x
  51.  
  52.   7. Example masquerading firewall scripts
  53.  
  54.      7.1 Kernel 2.0, ipfwadm
  55.      7.2 Kernel 2.1/2.2, ipchains
  56.  
  57.   8. Putting it all together
  58.  
  59.   9. Connecting to the WAN
  60.  
  61.   10. References
  62.  
  63.      10.1 Web Sites
  64.      10.2 Documentation
  65.  
  66.  
  67.   ______________________________________________________________________
  68.  
  69.   1.  Introduction
  70.  
  71.   This is the Linux Cipe+Masquerading mini-HOWTO.  It shows how to setup
  72.   a Virtual Private Network between your LAN and other LAN's using Cipe
  73.   on linux masquerading firewall machines.  It also shows an example
  74.   masquerading firewall configuration.
  75.  
  76.  
  77.   1.1.  Copyright statement
  78.  
  79.   C)opyright 1998, 1999 Anthony Ciaravalo, acj@home.com
  80.  
  81.   Unless otherwise stated, Linux HOWTO documents are copyrighted by
  82.   their respective authors. Linux HOWTO documents may be reproduced and
  83.   distributed in whole or in part, in any medium physical or electronic,
  84.   as long as this copyright notice is retained on all copies. Commercial
  85.   redistribution is allowed and encouraged; however, the author would
  86.   like to be notified of any such distributions.
  87.  
  88.   All translations, derivative works, or aggregate works incorporating
  89.   any Linux HOWTO documents must be covered under this copyright notice.
  90.   That is, you may not produce a derivative work from a HOWTO and impose
  91.   additional restrictions on its distribution. Exceptions to these rules
  92.   may be granted under certain conditions; please contact the Linux
  93.   HOWTO coordinator at the address given below.
  94.  
  95.   If you have questions, please contact Tim Bynum, the Linux HOWTO
  96.   coordinator, at tjbynum@wallybox.cei.net or linux-
  97.   howto@metalab.unc.edu
  98.  
  99.  
  100.   1.2.  Disclaimer
  101.  
  102.   Use of the information and examples in this document is at your own
  103.   risk.  There are many security issues involved when connecting
  104.   networks across the internet.  Even though information is encrypted,
  105.   an improperly configured firewall may result in a security breach.
  106.   Precautions can be taken to protect your cipe connections, but it does
  107.   not guarantee 100% security.  The author does not guarantee the
  108.   information provided in this document will provide a secure networking
  109.   environment.  Even though I have tried to be as accurate as possible
  110.   creating this document, I am not responsible for any problems or
  111.   damages incurred due to actions taken based on the information in this
  112.   document.
  113.  
  114.  
  115.   1.3.  Feedback
  116.  
  117.   Send questions, comments, suggestions, or corrections to acj@home.com.
  118.  
  119.  
  120.   1.4.  Getting the files
  121.  
  122.   This howto was written based on Cipe versions 1.0.1 and 1.2.0.  See
  123.   reference section for link to Cipe home page.
  124.  
  125.  
  126.  
  127.   2.  Firewall Configuration
  128.  
  129.   This howto assumes you already configured your kernel to support IP
  130.   masquerade.  See references below for information on configuring your
  131.   kernel for a linux firewall.
  132.  
  133.   2.1.  VPN Network Diagram
  134.  
  135.   This setup uses a star/hub configuration.  It will set up a cipe
  136.   connection from Machine A to Machine B and another from Machine A to
  137.   Machine C.
  138.  
  139.  
  140.  
  141.        ______________________________________________________________________
  142.  
  143.                           Machine A
  144.                        eth0: 192.168.1.1
  145.                        eth1: real ip 1
  146.                       /               \
  147.                      /                 \
  148.             Machine B                  Machine C
  149.           eth0: 192.168.2.1           eth0:192.168.3.1
  150.           eth1: real ip 2             eth1: real ip 3
  151.        ______________________________________________________________________
  152.  
  153.  
  154.  
  155.  
  156.  
  157.   2.2.  A little reference
  158.  
  159.  
  160.  
  161.        ______________________________________________________________________
  162.  
  163.        eth0 is the local network (fake address)
  164.        eth1 is the internet address (real address)
  165.  
  166.        Port A is any valid port you would like to choose
  167.        Port B is any other valid port you would like to choose
  168.  
  169.        Key A is any valid key you would like to choose  (read cipe doc for info)
  170.        Key B is any valid key you would like to choose
  171.        ______________________________________________________________________
  172.  
  173.  
  174.  
  175.  
  176.  
  177.   2.3.  Additional notes about scripts and the VPN
  178.  
  179.   The ip-up scripts currently only allow class c traffic through the
  180.   cipe interface.  If you wish for machine B to communicate with Machine
  181.   C then you will need to change the appropriate ip-up and ip-down
  182.   scripts.  Specifically, you need to change the ptpaddr and myaddr
  183.   netmasks.  There are two ip-up scripts, one for ipchains and one for
  184.   ipfwadm.  Same with the ip-down scripts.  Change the appropriate
  185.   incoming, outgoing, and forwarding cipe interface firewall rules
  186.   netmask from /24 to /16. Any cipe firewall rule changes you make in
  187.   ip-up for ipfwadm, make sure the ip-down script reflects the change so
  188.   it will be properly removed from the list when the interface goes
  189.   down.  For the ipchains file, anything added in a chain does not need
  190.   ip-down reflection since ip-down will flush all the rules in the user
  191.   defined chain.
  192.  
  193.   You will also need to uncomment the network route in the rc.cipe for
  194.   Machine B and C that adds each others network to their route table.
  195.  
  196.  
  197.  
  198.  
  199.   3.  Machine A Specific Configuration
  200.  
  201.   3.1.  /etc/cipe/options.machineB
  202.  
  203.  
  204.  
  205.        ______________________________________________________________________
  206.  
  207.        #uncomment 1 below
  208.        #name for cipe 1.0.x
  209.        #device          cip3b0
  210.        #name for cipe 1.2.x
  211.        device          cipcb0
  212.  
  213.        # remote internal (fake) ip address
  214.        ptpaddr         192.168.2.1
  215.        # my cipe (fake) ip address
  216.        ipaddr          192.168.1.1
  217.        # my real ip address and cipe port
  218.        me              (real ip 1):(port A)
  219.        # remote real ip address and cipe port
  220.        peer            (real ip 2):(port A)
  221.        #unique 128 bit key
  222.        key             (Key A)
  223.        ______________________________________________________________________
  224.  
  225.  
  226.  
  227.  
  228.  
  229.   3.2.  /etc/cipe/options.machineC
  230.  
  231.  
  232.  
  233.        ______________________________________________________________________
  234.  
  235.        #uncomment 1 below
  236.        #name for cipe 1.0.x
  237.        #device          cip3b1
  238.        #name for cipe 1.2.x
  239.        device          cipcb1
  240.  
  241.        # remote internal (fake) ip address
  242.        ptpaddr         192.168.3.1
  243.        # my cipe (fake) ip address
  244.        ipaddr          192.168.1.1
  245.        # my real ip address and cipe port
  246.        me              (real ip 1):(port B)
  247.        # remote real ip address and cipe port
  248.        peer            (real ip 3):(port B)
  249.        #unique 128 bit key
  250.        key             (Key B)
  251.        ______________________________________________________________________
  252.  
  253.  
  254.  
  255.  
  256.  
  257.   3.3.  /etc/rc.d/rc.cipe
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.   ______________________________________________________________________
  266.  
  267.   !#/bin/bash
  268.   #rc.cipe  3/29/1999
  269.   #Send questions or comments to acj@home.com.
  270.  
  271.   #Setup script path
  272.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  273.  
  274.   #Options filenames in cipe directory for cipe interfaces
  275.   options="options.machineB options.machineC"
  276.  
  277.   #Automatically obtain options filenames from cipe directory
  278.   #options=`/bin/ls /etc/cipe/options.*`
  279.  
  280.   #Uncomment 1 below for the cipe module name
  281.   #cipemod="cip3b"        #for cipe 1.0
  282.   cipemod="cipcb"        #for cipe 1.2
  283.  
  284.   #Check for cipe module and load if not already loaded
  285.   grep $cipemod /proc/modules >/dev/null
  286.   if [ "$?" = "1" ]; then
  287.           echo Loading cipe module.
  288.           modprobe $cipemod
  289.           if [ "$?" = "1" ]; then
  290.                   echo Error loading cipe module...exiting.
  291.                   exit
  292.           fi
  293.   else
  294.           echo Cipe module already loaded.
  295.   fi
  296.  
  297.   #Remove any existing cipe interfaces
  298.   cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`
  299.  
  300.   if [ "$cipeif" != "" ]; then
  301.           echo Removing existing cipe interface(s).
  302.           for i in $cipeif; do
  303.                   ifconfig $i down
  304.           done
  305.   fi
  306.  
  307.   #Setup cipe interfaces
  308.   echo -n "Setting up cipe interface(s): "
  309.   for config in $options; do
  310.           echo -n $config" "
  311.           ciped -o $config
  312.   done
  313.   echo
  314.   echo
  315.  
  316.   #Add routes for other remote networks via cipe interface(s)
  317.   #route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
  318.  
  319.   ______________________________________________________________________
  320.  
  321.  
  322.  
  323.  
  324.  
  325.   3.4.  Gateway
  326.  
  327.   All machines on network 192.168.1.0 must have 192.168.1.1 as gateway.
  328.   If you don't it will not work.
  329.  
  330.  
  331.   4.  Machine B Specific Configuration
  332.  
  333.   4.1.  /etc/cipe/options.machineA
  334.  
  335.  
  336.  
  337.        ______________________________________________________________________
  338.  
  339.        #uncomment 1 below
  340.        #name for cipe 1.0.x
  341.        #device          cip3b0
  342.        #name for cipe 1.2.x
  343.        device          cipcb0
  344.  
  345.        #remote internal (fake) ip address
  346.        ptpaddr         192.168.1.1
  347.        # my cipe (fake) ip address
  348.        ipaddr          192.168.2.1
  349.        # my real ip address and cipe port
  350.        me              (real ip 1):(port A)
  351.        # remote real ip address and cipe port
  352.        peer            (real ip 2):(port A)
  353.        #unique 128 bit key
  354.        key             (Key A)
  355.        ______________________________________________________________________
  356.  
  357.  
  358.  
  359.  
  360.  
  361.   4.2.  /etc/rc.d/rc.cipe
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.   ______________________________________________________________________
  398.  
  399.  
  400.  
  401.   !#/bin/bash
  402.   #rc.cipe  3/29/1999
  403.   #Send questions or comments to acj@home.com.
  404.  
  405.   #Setup script path
  406.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  407.  
  408.   #Options filenames in cipe directory for cipe interfaces
  409.   options="options.machineA"
  410.  
  411.   #Automatically obtain options filenames from cipe directory
  412.   #options=`/bin/ls /etc/cipe/options.*`
  413.  
  414.   #Uncomment 1 below for the cipe module name
  415.   #cipemod="cip3b"        #for cipe 1.0
  416.   cipemod="cipcb"        #for cipe 1.2
  417.  
  418.   #Check for cipe module and load if not already loaded
  419.   grep $cipemod /proc/modules >/dev/null
  420.   if [ "$?" = "1" ]; then
  421.           echo Loading cipe module.
  422.           modprobe $cipemod
  423.           if [ "$?" = "1" ]; then
  424.                   echo Error loading cipe module...exiting.
  425.                   exit
  426.           fi
  427.   else
  428.           echo Cipe module already loaded.
  429.   fi
  430.  
  431.   #Remove any existing cipe interfaces
  432.   cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`
  433.  
  434.   if [ "$cipeif" != "" ]; then
  435.           echo Removing existing cipe interface(s).
  436.           for i in $cipeif; do
  437.                   ifconfig $i down
  438.           done
  439.   fi
  440.  
  441.   #Setup cipe interfaces
  442.   echo -n "Setting up cipe interface(s): "
  443.   for config in $options; do
  444.           echo -n $config" "
  445.           ciped -o $config
  446.   done
  447.   echo
  448.   echo
  449.  
  450.   #Add routes for other remote networks via cipe interface(s)
  451.   #route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
  452.   #route to machine C network
  453.   #route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.1
  454.   ______________________________________________________________________
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.   4.3.  Gateway
  464.  
  465.   All machines on network 192.168.2.0 must have 192.168.2.1 as gateway.
  466.   If you don't it will not work.
  467.  
  468.  
  469.  
  470.   5.  Machine C Specific Configuration
  471.  
  472.   5.1.  /etc/cipe/options.machineA
  473.  
  474.  
  475.  
  476.        ______________________________________________________________________
  477.  
  478.        #uncomment 1 below
  479.        #name for cipe 1.0.x
  480.        #device          cip3b0
  481.        #name for cipe 1.2.x
  482.        device          cipcb0
  483.  
  484.        #remote internal (fake) ip address
  485.        ptpaddr         192.168.1.1
  486.        # my cipe (fake) ip address
  487.        ipaddr          192.168.3.1
  488.        # my real ip address and cipe port
  489.        me              (real ip 3):(port B)
  490.        #remote real ip address and cipe port
  491.        peer            (real ip 1):(port B)
  492.        #unique 128 bit key
  493.        key             (Key B)
  494.        ______________________________________________________________________
  495.  
  496.  
  497.  
  498.  
  499.  
  500.   5.2.  /etc/rc.d/rc.cipe
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.   ______________________________________________________________________
  530.  
  531.   !#/bin/bash
  532.   #rc.cipe  3/29/1999
  533.   #Send questions or comments to acj@home.com.
  534.  
  535.   #Setup script path
  536.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  537.  
  538.   #Options filenames in cipe directory for cipe interfaces
  539.   options="options.machineA"
  540.  
  541.   #Automatically obtain options filenames from cipe directory
  542.   #options=`/bin/ls /etc/cipe/options.*`
  543.  
  544.   #Uncomment 1 below for the cipe module name
  545.   #cipemod="cip3b"        #for cipe 1.0
  546.   cipemod="cipcb"        #for cipe 1.2
  547.  
  548.   #Check for cipe module and load if not already loaded
  549.   grep $cipemod /proc/modules >/dev/null
  550.   if [ "$?" = "1" ]; then
  551.           echo Loading cipe module.
  552.           modprobe $cipemod
  553.           if [ "$?" = "1" ]; then
  554.                   echo Error loading cipe module...exiting.
  555.                   exit
  556.           fi
  557.   else
  558.           echo Cipe module already loaded.
  559.   fi
  560.  
  561.   #Remove any existing cipe interfaces
  562.   cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`
  563.  
  564.   if [ "$cipeif" != "" ]; then
  565.           echo Removing existing cipe interface(s).
  566.           for i in $cipeif; do
  567.                   ifconfig $i down
  568.           done
  569.   fi
  570.  
  571.   #Setup cipe interfaces
  572.   echo -n "Setting up cipe interface(s): "
  573.   for config in $options; do
  574.           echo -n $config" "
  575.           ciped -o $config
  576.   done
  577.   echo
  578.   echo
  579.  
  580.   #Add routes for other remote networks via cipe interface(s)
  581.   #route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
  582.   #route to machine B network
  583.   #route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1
  584.   ______________________________________________________________________
  585.  
  586.  
  587.  
  588.  
  589.  
  590.   5.3.  Gateway
  591.  
  592.   All machines on network 192.168.2.0 must have 192.168.2.1 as gateway.
  593.   If you don't it will not work.
  594.  
  595.   6.  Common Machine Configuration
  596.  
  597.   6.1.  /etc/cipe/ip-up
  598.  
  599.   6.1.1.  Kernel 2.0, ipfwadm, cipe 1.0.x
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.   ______________________________________________________________________
  662.  
  663.   #!/bin/bash
  664.   # ip-up <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
  665.   #3/29/1999
  666.   #An example ip-up script for the older 1.x 2.x kernels using ipfwadm that
  667.   #will setup routes and firewall rules to connect your local class c network
  668.   #to a remote class c network.
  669.  
  670.   #The rules are configured to prevent spoofing and stuffed routing between
  671.   #the networks.  There are also additional security enhancements commented
  672.   #out towards the bottom of the script.
  673.   #Send questions or comments to acj@home.com.
  674.  
  675.   #--------------------------------------------------------------------------
  676.   #Set some script variables
  677.   device=$1               # the CIPE interface
  678.   me=$2                   # our UDP address
  679.   pid=$3                  # the daemon's process ID
  680.   ipaddr=$4               # IP address of our CIPE device
  681.   vptpaddr=$5              # IP address of the remote CIPE device
  682.   option=$6               # argument supplied via options
  683.  
  684.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  685.  
  686.   #comment/uncomment to enable/disbale kernel logging for all unauthorized
  687.   #access attempts. Must be same as ip-down script in order to remove rules.
  688.   log="-o"
  689.  
  690.   #--------------------------------------------------------------------------
  691.   umask 022
  692.  
  693.   # just a logging example
  694.   #echo "UP   $*" >> /var/adm/cipe.log
  695.  
  696.   # many systems like these pid files
  697.   #echo $3 > /var/run/$device.pid
  698.  
  699.   #--------------------------------------------------------------------------
  700.  
  701.   #add route entry for remote cipe network
  702.   network=`expr $ptpaddr : '\([0-9]*\.[0-9]*\.[0-9]*\.\)'`0
  703.   route add -net $network netmask 255.255.255.0 dev $device
  704.  
  705.   #need to add route entry for host in 2.0 kernels
  706.   route add -host $ptpaddr dev $device
  707.  
  708.   #--------------------------------------------------------------------------
  709.   #cipe interface incoming firewall rules
  710.   #must be inserted into list in reverse order
  711.  
  712.   #deny all other incoming packets to cipe interface
  713.   ipfwadm -I -i deny -W $device -S 0/0 -D 0/0 $log
  714.  
  715.   #accept incoming packets from remotenet to localnet on cipe interface
  716.   ipfwadm -I -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
  717.  
  718.   #accept incoming packets from localnet to remotenet on cipe interface
  719.   ipfwadm -I -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
  720.  
  721.   #deny incoming packets, cipe interface, claiming to be from localnet; log
  722.   ipfwadm -I -i deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
  723.  
  724.   #--------------------------------------------------------------------------
  725.   #cipe interface outgoing firewall rules
  726.   #must be inserted into list in reverse order
  727.   #deny all other outgoing packets from cipe interface
  728.   ipfwadm -O -i deny -W $device -S 0/0 -D 0/0 $log
  729.  
  730.   #accept outgoing from remotenet to localnet on cipe interface
  731.   ipfwadm -O -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
  732.  
  733.   #accept outgoing from localnet to remotenet on cipe interface
  734.   ipfwadm -O -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
  735.  
  736.   #deny outgoing to localnet from localnet, cipe interface, deny; log
  737.   ipfwadm -O -i deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
  738.  
  739.   #--------------------------------------------------------------------------
  740.   #The forwarding is configured so machines on your local network do not get
  741.   #masqueraded to the remote network.  This provides better access control
  742.   #between networks.  Must be inserted into list in reverse order
  743.  
  744.   #deny all other forwarding through cipe interface; log
  745.   ipfwadm -F -i deny -W $device -S 0/0 -D 0/0 $log
  746.  
  747.   #accept forwarding from remotenet to localnet on cipe interfaces
  748.   ipfwadm -F -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
  749.  
  750.   #accept forwarding from localnet to remotenet on cipe interfaces
  751.   ipfwadm -F -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
  752.  
  753.   #--------------------------------------------------------------------------
  754.   #Make sure forwarding is enabled in the kernel. The kernel by default may
  755.   #have forwarding disabled.
  756.   /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
  757.  
  758.   #--------------------------------------------------------------------------
  759.   #Optional security enhancement - set default forward policy to
  760.   #DENY or REJECT.  If your forwarding default policy is DENY/REJECT
  761.   #you will need to add the following rules to your main forward chain.  It
  762.   #is a good idea to have all default policies set for DENY or
  763.   #REJECT.
  764.  
  765.   #define machine interfaces
  766.   #localif="eth0"
  767.   #staticif="eth1"                ;cable modem users
  768.   #staticif="ppp0"                ;dialup users
  769.  
  770.   #a real sloppy way to get the peer ip address from the options file - a new
  771.   #argument with peer ip:port passed to script would be nice.
  772.   #both lines need to be uncommented
  773.   #peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
  774.   #peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
  775.  
  776.   #must log peer ip address for ip-down script
  777.   #echo $peer > /var/run/$device.peerip
  778.  
  779.   #accept forwarding from localnet to remotenet on internal network interface
  780.   #ipfwadm -F -i accept -W $localif -S $ipaddr/24 -D $ptpaddr/24
  781.   #accept forwarding from remotenet to localnet on internal network interface
  782.   #ipfwadm -F -i accept -W $localif -S $ptpaddr/24 -D $ipaddr/24
  783.   #accept forwarding on staticif from me to peer
  784.   #myaddr=`echo $me | cut -f1 -d:`
  785.   #ipfwadm -F -i accept -W $staticif -S $myaddr -D $peer
  786.   #--------------------------------------------------------------------------
  787.   #Other optional security enhancement
  788.   #block all incoming requests from everywhere to our cipe udp port
  789.   #except our peer's udp port
  790.  
  791.   #need to determine udp ports for the cipe interfaces
  792.   #get our udp port
  793.   #if [ "$option" = "" ]; then
  794.   #       myport=`echo $me | cut -f2 -d:`
  795.   #else
  796.   #       myport=$option
  797.   #fi
  798.  
  799.   #get remote udp port -- peerfile variable must be set above
  800.   #peerport=`grep peer $peerfile | cut -f2 -d:`
  801.  
  802.   #must log peer udp port for ip-down script
  803.   #echo $peerport > /var/run/$device.peerport
  804.  
  805.   #get our ip address
  806.   #myaddr=`echo $me | cut -f1 -d:`
  807.  
  808.   #deny and log all requests to cipe udp port must be inserted first
  809.   #ipfwadm -I -i deny -P udp -W $staticif -S 0/0 -D $myaddr $myport $log
  810.   #accept udp packets from peer at udp cipe port to my udp cipe port
  811.   #ipfwadm -I -i accept -P udp -W $staticif -S $peer $peerport \
  812.   #-D $myaddr $myport
  813.  
  814.   exit 0
  815.   ______________________________________________________________________
  816.  
  817.  
  818.  
  819.  
  820.  
  821.   6.1.2.  Kernel 2.1/2.2, ipchains, cipe 1.2.x
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.   ______________________________________________________________________
  860.  
  861.   #!/bin/bash
  862.   # ip-up <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
  863.   #3/29/1999
  864.   #An example ip-up script for the newer 2.1/2.2 kernels using ipchains that
  865.   #will setup routes and firewall rules to connect your local class c network
  866.   #to a remote class c network.  This script creates 3 user defined chains
  867.   #-input, output, and forward - for each cipe interface, based on the
  868.   #interface name. It will then insert a rule into each of the built-in
  869.   #input, output, and forward chains to use the user defined chains. The
  870.   #rules are configured to prevent spoofing and stuffed routing between the
  871.   #networks. There are also additional security enhancements commented out
  872.   #towards the bottom of the script.
  873.   #Send questions or comments to acj@home.com.
  874.  
  875.   #--------------------------------------------------------------------------
  876.  
  877.   #Set some script variables
  878.   device=$1               # the CIPE interface
  879.   me=$2                   # our UDP address
  880.   pid=$3                  # the daemon's process ID
  881.   ipaddr=$4               # IP address of our CIPE device
  882.   ptpaddr=$5              # IP address of the remote CIPE device
  883.   option=$6               # argument supplied via options
  884.  
  885.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  886.  
  887.   #comment/uncomment to enable/disbale kernel logging for all unauthorized
  888.   #access attempts. Must be same as ip-down script in order to remove rules.
  889.   log="-l"
  890.  
  891.   #--------------------------------------------------------------------------
  892.   umask 022
  893.   # just a logging example
  894.   #echo "UP   $*" >> /var/adm/cipe.log
  895.  
  896.   # many systems like these pid files
  897.   #echo $3 > /var/run/$device.pid
  898.  
  899.   #--------------------------------------------------------------------------
  900.   #add route entry for remote cipe network
  901.   network=`expr $ptpaddr : '\([0-9]*\.[0-9]*\.[0-9]*\.\)'`0
  902.   route add -net $network netmask 255.255.255.0 dev $device
  903.  
  904.   #--------------------------------------------------------------------------
  905.   #create new ipchain for cipe interface input rules
  906.   ipchains -N $device"i"
  907.   #flush all rules in chain (sanity flush)
  908.   ipchains -F $device"i"
  909.   #deny incoming packets, cipe interface, claiming to be from localnet; log
  910.   ipchains -A $device"i" -j DENY -i $device -s $ipaddr/24 -d $ipaddr/24 $log
  911.   #accept incoming packets from localnet to remotenet on cipe interface
  912.   ipchains -A $device"i" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
  913.   #accept incoming packets from remotenet to localnet on cipe interface
  914.   ipchains -A $device"i" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
  915.   #deny all other incoming packets
  916.   ipchains -A $device"i" -j DENY -s 0/0 -d 0/0 $log
  917.  
  918.   #--------------------------------------------------------------------------
  919.   #create new ipchain for cipe interface output rules
  920.   ipchains -N $device"o"
  921.   #flush all rules in chain (sanity flush)
  922.   ipchains -F $device"o"
  923.   #deny outgoing to localnet from localnet, cipe interface, deny; log
  924.   ipchains -A $device"o" -j DENY -i $device -s $ipaddr/24 -d $ipaddr/24 $log
  925.   #accept outgoing from localnet to remotenet on cipe interface
  926.   ipchains -A $device"o" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
  927.   #accept outgoing from remotenet to localnet on cipe interface
  928.   ipchains -A $device"o" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
  929.   #deny all other outgoing packets
  930.   ipchains -A $device"o" -j DENY -s 0/0 -d 0/0 $log
  931.  
  932.   #--------------------------------------------------------------------------
  933.   #The forward chain is configured so machines on your local network do not
  934.   #get masqueraded to the remote network.  This provides better access
  935.   #control between networks.
  936.  
  937.   #create new ipchain for cipe interface forward rules
  938.   ipchains -N $device"f"
  939.   #flush all rules in chain (sanity flush)
  940.   ipchains -F $device"f"
  941.   #accept forwarding from localnet to remotenet on cipe interfaces
  942.   ipchains -A $device"f" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
  943.   #accept forwarding from remotenet to localnet on cipe interfaces
  944.   ipchains -A $device"f" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
  945.   #deny all other forwarding; log
  946.   ipchains -A $device"f" -j DENY -s 0/0 -d 0/0 $log
  947.  
  948.   #--------------------------------------------------------------------------
  949.   #Make sure forwarding is enabled in the kernel. New kernels by default have
  950.   #forwarding disabled.
  951.   /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
  952.  
  953.   #--------------------------------------------------------------------------
  954.   #insert rules to main input, output, and forward chains to enable new rules
  955.   #for the cipe interface
  956.   ipchains -I input -i $device -j $device"i"
  957.   ipchains -I output -i $device -j $device"o"
  958.   ipchains -I forward -i $device -j $device"f"
  959.  
  960.   #--------------------------------------------------------------------------
  961.   #Optional security enhancement - set built-in forward chain policy to
  962.   #DENY or REJECT.  If your main forward chain default policy is DENY/REJECT
  963.   #you will need to add the following rules to your main forward chain.  It
  964.   #is a good idea to have all built-in chain default policies set for DENY or
  965.   #REJECT.
  966.  
  967.   #define machine interfaces
  968.   #localif="eth0"
  969.   #staticif="eth1"                ;cable modem users
  970.   #staticif="ppp0"                ;dialup users
  971.  
  972.   #a real sloppy way to get the peer ip address from the options file - a new
  973.   #argument with peer ip:port passed to script would be nice.
  974.   #both lines need to be uncommented
  975.   #peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
  976.   #peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
  977.  
  978.   #must log peer ip address for ip-down script
  979.   #echo $peer > /var/run/$device.peerip
  980.  
  981.   #accept forwarding from localnet to remotenet on internal network interface
  982.   #ipchains -I forward -j ACCEPT -i $localif -s $ipaddr/24 -d $ptpaddr/24
  983.   #accept forwarding from remotenet to localnet on internal network interface
  984.   #ipchains -I forward -j ACCEPT -i $localif -s $ptpaddr/24 -d $ipaddr/24
  985.   #accept forwarding on staticif from me to peer
  986.   #myaddr=`echo $me | cut -f1 -d:`
  987.   #ipchains -I forward -j ACCEPT -i $staticif -s $myaddr -d $peer
  988.   #--------------------------------------------------------------------------
  989.   #Other optional security enhancement
  990.   #block all incoming requests from everywhere to our cipe udp port
  991.   #except our peer's udp port
  992.  
  993.   #need to determine udp ports for the cipe interfaces
  994.   #get our udp port
  995.   #if [ "$option" = "" ]; then
  996.   #       myport=`echo $me | cut -f2 -d:`
  997.   #else
  998.   #       myport=$option
  999.   #fi
  1000.  
  1001.   #get remote udp port -- peerfile variable must be set above
  1002.   #peerport=`grep peer $peerfile | cut -f2 -d:`
  1003.  
  1004.   #must log peer udp port for ip-down script
  1005.   #echo $peerport > /var/run/$device.peerport
  1006.  
  1007.   #get our ip address
  1008.   #myaddr=`echo $me | cut -f1 -d:`
  1009.  
  1010.   #deny and log all requests to cipe udp port must be inserted first
  1011.   #ipchains -I input -j DENY -p udp -i $staticif -s 0/0 \
  1012.   #-d $myaddr $myport $log
  1013.   #accept udp packets from peer at udp cipe port to my udp cipe port
  1014.   #ipchains -I input -j ACCEPT -p udp -i $staticif -s $peer $peerport \
  1015.   # -d $myaddr $myport
  1016.  
  1017.   #--------------------------------------------------------------------------
  1018.   # Set up spoofing protection in kernel as an additional security measure
  1019.   #--------------------------------------------------------------------------
  1020.   #Why do I have spoofing protection in the firewall rules in addition to
  1021.   #this script that sets up spoof protection for each interface in the
  1022.   #kernel? Guess I'm paranoid.
  1023.  
  1024.   if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
  1025.           echo -n "Setting up IP spoofing protection..."
  1026.           iface="/proc/sys/net/ipv4/conf/$device/rp_filter"
  1027.           echo 1 > $iface
  1028.           echo "done."
  1029.   else
  1030.           echo "Cannot setup spoof protection in kernel for $device" \
  1031.                   | mail -s"Security Warning: $device" root
  1032.           exit 1
  1033.   fi
  1034.  
  1035.   exit 0
  1036.   ______________________________________________________________________
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.   6.2.  /etc/cipe/ip-down
  1043.  
  1044.   6.2.1.  Kernel 2.0, ipfwadm, cipe 1.0.x
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.   ______________________________________________________________________
  1058.  
  1059.   #!/bin/bash
  1060.  
  1061.   # ip-down <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
  1062.   #3/29/1999
  1063.   #An example ip-down script for the older 1.x 2.x kernels using ipfwadm that
  1064.   #will remove firewall rules that were setup to connect your local class c
  1065.   #network to a remote class c network.
  1066.  
  1067.   #--------------------------------------------------------------------------
  1068.   #Set some script variables
  1069.   device=$1               # the CIPE interface
  1070.   me=$2                   # our UDP address
  1071.   pid=$3                  # the daemon's process ID
  1072.   ipaddr=$4               # IP address of our CIPE device
  1073.   ptpaddr=$5              # IP address of the remote CIPE device
  1074.   option=$6               # argument supplied via options
  1075.  
  1076.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  1077.  
  1078.   #comment/uncomment to enable/disbale kernel logging for all unauthorized
  1079.   #access attempts. Must be same as ip-down script in order to remove rules.
  1080.   log="-o"
  1081.  
  1082.   #--------------------------------------------------------------------------
  1083.   umask 022
  1084.  
  1085.   # just a logging example
  1086.   #echo "DOWN   $*" >> /var/adm/cipe.log
  1087.  
  1088.   # many systems like these pid files
  1089.   #rm -f /var/run/$device.pid
  1090.  
  1091.   #--------------------------------------------------------------------------
  1092.   #cipe interface incoming firewall rules
  1093.  
  1094.   #delete (deny all other incoming packets to cipe interface)
  1095.   ipfwadm -I -d deny -W $device -S 0/0 -D 0/0 $log
  1096.  
  1097.   #delete (accept incoming packets from remotenet to localnet on cipe
  1098.   #interface)
  1099.   ipfwadm -I -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
  1100.  
  1101.   #delete (accept incoming packets from localnet to remotenet on cipe
  1102.   #interface)
  1103.   ipfwadm -I -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
  1104.  
  1105.   #delete (deny incoming packets, cipe interface, claiming to be from
  1106.   #localnet and log)
  1107.   ipfwadm -I -d deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
  1108.  
  1109.   #--------------------------------------------------------------------------
  1110.   #cipe interface incoming firewall rules
  1111.  
  1112.   #delete (deny all other outgoing packets from cipe interface)
  1113.   ipfwadm -O -d deny -W $device -S 0/0 -D 0/0 $log
  1114.  
  1115.   #delete (accept outgoing from remotenet to localnet on cipe interface)
  1116.   ipfwadm -O -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
  1117.  
  1118.   #delete (accept outgoing from localnet to remotenet on cipe interface)
  1119.   ipfwadm -O -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
  1120.  
  1121.   #delete (deny outgoing to localnet from localnet, cipe interface, deny
  1122.   #and log)
  1123.   ipfwadm -O -d deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
  1124.  
  1125.   #--------------------------------------------------------------------------
  1126.   #cipe interface forwarding firewall rules
  1127.  
  1128.   #delete (deny all other forwarding through cipe interface; log)
  1129.   ipfwadm -F -d deny -W $device -S 0/0 -D 0/0 $log
  1130.  
  1131.   #delete (accept forwarding from remotenet to localnet on cipe interfaces)
  1132.   ipfwadm -F -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
  1133.  
  1134.   #delete (accept forwarding from localnet to remotenet on cipe interfaces)
  1135.   ipfwadm -F -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
  1136.  
  1137.   #--------------------------------------------------------------------------
  1138.   #Optional security enhancement - set default forward policy to
  1139.   #DENY or REJECT.  If your forwarding default policy is DENY/REJECT
  1140.   #you will need to add the following rules to your main forward chain.  It
  1141.   #is a good idea to have all default policies set for DENY or
  1142.   #REJECT.
  1143.  
  1144.   #define machine interfaces
  1145.   #localif="eth0"
  1146.   #staticif="eth1"                ;cable modem users
  1147.   #staticif="ppp0"                ;dialup users
  1148.  
  1149.   #a real sloppy way to get the peer ip address from the options file - a new
  1150.   #argument with peer ip:port passed to script would be nice.
  1151.   #both lines need to be uncommented
  1152.   #peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
  1153.   #peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
  1154.  
  1155.   #must log peer ip address for ip-down script
  1156.   #echo $peer > /var/run/$device.peerip
  1157.  
  1158.   #delete (accept forwarding from localnet to remotenet on internal network
  1159.   interface)
  1160.   #ipfwadm -F -d accept -W $localif -S $ipaddr/24 -D $ptpaddr/24
  1161.   #delete (accept forwarding from remotenet to localnet on internal network
  1162.   interface)
  1163.   #ipfwadm -F -d accept -W $localif -S $ptpaddr/24 -D $ipaddr/24
  1164.   #delete (accept forwarding on staticif from me to peer)
  1165.   #myaddr=`echo $me | cut -f1 -d:`
  1166.   #ipfwadm -F -d accept -W $staticif -S $myaddr -D $peer
  1167.   #--------------------------------------------------------------------------
  1168.   #Other optional security enhancement
  1169.   #block all incoming requests from everywhere to our cipe udp port
  1170.   #except our peer's udp port
  1171.  
  1172.   #need to determine udp ports for the cipe interfaces
  1173.   #get our udp port
  1174.   #if [ "$option" = "" ]; then
  1175.   #       myport=`echo $me | cut -f2 -d:`
  1176.   #else
  1177.   #       myport=$option
  1178.   #fi
  1179.  
  1180.   #get remote udp port -- peerfile variable must be set above
  1181.   #peerport=`grep peer $peerfile | cut -f2 -d:`
  1182.  
  1183.   #must log peer udp port for ip-down script
  1184.   #echo $peerport > /var/run/$device.peerport
  1185.  
  1186.   #get our ip address
  1187.   #myaddr=`echo $me | cut -f1 -d:`
  1188.  
  1189.   #delete (deny and log all requests to cipe udp port must be inserted first)
  1190.   #ipfwadm -I -d deny -P udp -W $staticif -S 0/0 -D $myaddr $myport $log
  1191.   #delete (accept udp packets from peer at udp cipe port to my udp cipe port)
  1192.   #ipfwadm -I -d accept -P udp -W $staticif -S $peer $peerport \
  1193.   #-D $myaddr $myport
  1194.  
  1195.   exit 0
  1196.   ______________________________________________________________________
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.   6.2.2.  Kernel 2.1/2.2, ipchains, cipe 1.2.x
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.   ______________________________________________________________________
  1256.  
  1257.   #!/bin/sh
  1258.   # ip-down <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
  1259.   #3/29/1999
  1260.   #An example ip-down script for the newer 2.1/2.2 kernels using ipchains
  1261.   #that will remove firewall rules that were setup to connect your local
  1262.   #class c network to a remote class c network.  Optional security
  1263.   #enhancement rules removal is also added and commented towards end of
  1264.   #script.
  1265.   #Send questions or comments to acj@home.com.
  1266.  
  1267.   #--------------------------------------------------------------------------
  1268.   #Set some script variables
  1269.   device=$1               # the CIPE interface
  1270.   me=$2                   # our UDP address
  1271.   pid=$3                  # the daemon's process ID
  1272.   ipaddr=$4               # IP address of our CIPE device
  1273.   ptpaddr=$5              # IP address of the remote CIPE device
  1274.   option=$6               # argument supplied via options
  1275.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  1276.  
  1277.   #comment/uncomment to enable/disbale kernel logging for all unauthorized
  1278.   #access attempts
  1279.   #must be same as ip-up script in order to remove rules
  1280.   log="-l"
  1281.  
  1282.   #--------------------------------------------------------------------------
  1283.   umask 022
  1284.  
  1285.   # Logging example
  1286.   #echo "DOWN $*" >> /var/adm/cipe.log
  1287.  
  1288.   # remove the daemon pid file
  1289.   #rm -f /var/run/$device.pid
  1290.  
  1291.   #--------------------------------------------------------------------------
  1292.   #remove rules from main input, output, and forward chains for cipe
  1293.   #interface
  1294.   ipchains -D input -i $device -j $device"i"
  1295.   ipchains -D output -i $device -j $device"o"
  1296.   ipchains -D forward -i $device -j $device"f"
  1297.  
  1298.   #--------------------------------------------------------------------------
  1299.   #flush all rules in cipe interface input chain
  1300.   ipchains -F $device"i"
  1301.   #remove cipe interface input chain
  1302.   ipchains -X $device"i"
  1303.  
  1304.   #--------------------------------------------------------------------------
  1305.   #flush all rules in cipe interface output chain
  1306.   ipchains -F $device"o"
  1307.   #remove cipe interface output chain
  1308.   ipchains -X $device"o"
  1309.  
  1310.   #--------------------------------------------------------------------------
  1311.   #flush all rules in cipe interface forward chain
  1312.   ipchains -F $device"f"
  1313.   #remove cipe interface forward chain
  1314.   ipchains -X $device"f"
  1315.  
  1316.   #--------------------------------------------------------------------------
  1317.   #Remove optional security enhancement rules
  1318.  
  1319.   #get peer ip address
  1320.   #peer=`cat /var/run/$device.peerip`
  1321.   #define machine interfaces
  1322.   #localif="eth0"
  1323.   #staticif="eth1"                ;cable modem users
  1324.   #staticif="ppp0"                ;dialup users
  1325.  
  1326.   #get our ip address
  1327.   #myaddr=`echo $me |cut -f1 -d:`
  1328.  
  1329.   #delete (accept forwarding from localnet to remotenet on internal network
  1330.   #interface)
  1331.   #ipchains -D forward -j ACCEPT -i $localif -s $ipaddr/24 -d $ptpaddr/24
  1332.   #delete (accept forwarding from remotenet to localnet on internal network
  1333.   #interface)
  1334.   #ipchains -D forward -j ACCEPT -i $localif -s $ptpaddr/24 -d $ipaddr/24
  1335.   #delete (accept forwarding on staticif from me to peer)
  1336.   #ipchains -D forward -j ACCEPT -i $staticif -s $myaddr -d $peer
  1337.  
  1338.   #remove peer ip file
  1339.   #rm /var/run/$device.peerip
  1340.  
  1341.   #--------------------------------------------------------------------------
  1342.   #Remove other optional security enhancement rules
  1343.  
  1344.   #get peer udp port
  1345.   #peerport=`cat /var/run/$device.peerport`
  1346.  
  1347.   #get our udp port
  1348.   #if [ "$option" = "" ]; then
  1349.   #        myport=`echo $me | cut -f2 -d:`
  1350.   #else
  1351.   #        myport=$option
  1352.   #fi
  1353.  
  1354.   #delete (deny and log all requests to cipe udp port must be inserted first)
  1355.   #ipchains -D input -j DENY -p udp -i $staticif -s 0/0 \
  1356.   #-d $myaddr $myport $log
  1357.   #delete (accept udp packets from peer at udp cipe port to my udp cipe port)
  1358.   #ipchains -D input -j ACCEPT -p udp -i $staticif -s $peer $peerport \
  1359.   #-d $myaddr $myport
  1360.  
  1361.   #remove peer port file
  1362.   #rm /var/run/$device.peerport
  1363.  
  1364.   #--------------------------------------------------------------------------
  1365.  
  1366.   exit 0
  1367.   ______________________________________________________________________
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.   7.  Example masquerading firewall scripts
  1375.  
  1376.   7.1.  Kernel 2.0, ipfwadm
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.   ______________________________________________________________________
  1388.  
  1389.   #!/bin/sh
  1390.   #04/04/1999
  1391.   #example rc.firewall script for the 2.0 kernels using ipfwadm
  1392.   #I cant take full credit for this script.  I had found it a few
  1393.   #years ago and made slight modifications.
  1394.   #Send questions or comments to acj@home.com.
  1395.  
  1396.   #---------------------------------------------------------------------
  1397.   #Variables
  1398.   #---------------------------------------------------------------------
  1399.  
  1400.   #local ethernet interface
  1401.   localip=
  1402.   localif=eth0
  1403.  
  1404.   #static ethernet interface
  1405.   staticip=
  1406.   staticif=eth1
  1407.  
  1408.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  1409.  
  1410.   #---------------------------------------------------------------------
  1411.   #Incoming Firewall Policies
  1412.   #---------------------------------------------------------------------
  1413.   #flush incoming firewall policies
  1414.   /sbin/ipfwadm -I -f
  1415.  
  1416.   #set incoming firewall policy default to deny
  1417.   /sbin/ipfwadm -I -p deny
  1418.  
  1419.   #---------------------------------------------------------------------
  1420.  
  1421.   #local interface, local machines, going anywhere is valid
  1422.   /sbin/ipfwadm -I -a accept -V $localip -S $localip/24 -D 0.0.0.0/0
  1423.   #remote interface, claiming to be local machines (IP spoofing) deny and log
  1424.   /sbin/ipfwadm -I -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o
  1425.   #remote interface, any source, going to staticip address is valid
  1426.   /sbin/ipfwadm -I -a accept -V $staticip -S 0.0.0.0/0 -D $staticip/32
  1427.   #loopback interface is valid
  1428.   /sbin/ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
  1429.   #all other incoming is denied and logged
  1430.   /sbin/ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o
  1431.  
  1432.   #---------------------------------------------------------------------
  1433.   #Outgoing Firewall Policies
  1434.   #---------------------------------------------------------------------
  1435.  
  1436.   #flush outgoing firewall policies
  1437.   /sbin/ipfwadm -O -f
  1438.  
  1439.   #set outgoing firewall policy default to deny
  1440.   /sbin/ipfwadm -O -p deny
  1441.  
  1442.   #---------------------------------------------------------------------
  1443.  
  1444.   #local interface, any source going to local net is valid
  1445.   /sbin/ipfwadm -O -a accept -V $localip -S 0.0.0.0/0 -D $localip/24
  1446.   #outgoing to localnet on static interface, stuffed routing, deny
  1447.   /sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o
  1448.   #outgoing from localnet on static interface, stuffed masquerading, deny
  1449.   /sbin/ipfwadm -O -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o
  1450.   #outgoing to localnet on static interface, stuffed masquerading, deny
  1451.   /sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o
  1452.   #anything else outgoing on remote interface is valid
  1453.   /sbin/ipfwadm -O -a accept -V $staticip -S $staticip/32 -D 0.0.0.0/0
  1454.   #loopback interface is valid
  1455.   /sbin/ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
  1456.   #all other outgoing is denied and logged
  1457.   /sbin/ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o
  1458.  
  1459.   #--------------------------------------------------------------------------
  1460.   #Forwarding firewall policies
  1461.   #--------------------------------------------------------------------------
  1462.  
  1463.   #flush forwarding policies
  1464.   /sbin/ipfwadm -F -f
  1465.  
  1466.   #set forwarding policy default to deny
  1467.   /sbin/ipfwadm -F -p deny
  1468.  
  1469.   #masquerade from localnet on local interface to anywhere
  1470.   /sbin/ipfwadm -F -a masquerade -W $staticif -S $localip/24 -D 0.0.0.0/0
  1471.   #all other forwarding is denied
  1472.   /sbin/ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0
  1473.  
  1474.   exit 0
  1475.   ______________________________________________________________________
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.   7.2.  Kernel 2.1/2.2, ipchains
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.   ______________________________________________________________________
  1520.  
  1521.   #!/bin/sh
  1522.   #04/04/1999
  1523.   #example rc.firewall script for the newer 2.1/2.2 kernels using ipchains
  1524.   #that creates user defined chains for each interface.  There are firewall
  1525.   #rules for spoofing protection which may be unnecessary since the newer
  1526.   #kernels can have kernel spoofing protection enabled.  You might say it's
  1527.   #super paranoid checking.
  1528.   #Send questions or comments to acj@home.com.
  1529.  
  1530.   #---------------------------------------------------------------------
  1531.   #Variables
  1532.   #---------------------------------------------------------------------
  1533.  
  1534.   #local ethernet interface
  1535.   localip=
  1536.   localif=eth0
  1537.  
  1538.   #static ethernet interface
  1539.   staticip=
  1540.   staticif=eth1
  1541.  
  1542.   #loopback interface
  1543.   loopback=lo
  1544.  
  1545.   PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
  1546.  
  1547.   #---------------------------------------------------------------------
  1548.   #Flush built-in input, output, and forward ipchains; set default policy
  1549.   #Good policy to deny all packets especially while setting up chains
  1550.   #---------------------------------------------------------------------
  1551.  
  1552.   #set incoming firewall policy default to deny
  1553.   ipchains -P input DENY
  1554.  
  1555.   #flush incoming firewall policies
  1556.   ipchains -F input
  1557.  
  1558.   #---------------------------------------------------------------------
  1559.  
  1560.   #set outgoing firewall policy default to deny
  1561.   ipchains -P output DENY
  1562.  
  1563.   #flush outgoing firewall policies
  1564.   ipchains -F output
  1565.  
  1566.   #---------------------------------------------------------------------
  1567.  
  1568.   #set forwarding firewall policy default to deny
  1569.   ipchains -P forward DENY
  1570.  
  1571.   #flush forwarding firewall policies
  1572.   ipchains -F forward
  1573.  
  1574.   #---------------------------------------------------------------------
  1575.   #flush all policies  -redundant for main policies, but also flushes user
  1576.   #defined policies
  1577.   #ipchains -F
  1578.  
  1579.   #remove all user defined policies - you may or may not want to enable this
  1580.   #ipchains -X
  1581.  
  1582.   #---------------------------------------------------------------------
  1583.   #Incoming Firewall Policies
  1584.   #---------------------------------------------------------------------
  1585.   #create new input chain for static ethernet interface
  1586.   ipchains -N $staticif"-i"
  1587.  
  1588.   #flush all rules in chain (sanity flush)
  1589.   ipchains -F $staticif"-i"
  1590.  
  1591.   #block incoming tcp SYN packets to all ports on staticif and log
  1592.   #this may be a little harsh but its a nice feature
  1593.   #ipchains -A $staticif"-i" -j DENY -p tcp -y -i $staticif -s 0/0 \
  1594.   #-d $staticip : -l
  1595.  
  1596.   #remote interface, claiming to be local machines (IP spoofing) deny and log
  1597.   ipchains -A $staticif"-i" -j DENY -i $staticif -s $localip/16 -d 0/0 -l
  1598.  
  1599.   #remote interface, any source, going to staticip address is valid
  1600.   ipchains -A $staticif"-i" -j ACCEPT -i $staticif -s 0/0 -d $staticip/32
  1601.  
  1602.   #all other incoming is denied and logged
  1603.   ipchains -A $staticif"-i" -j DENY -s 0/0 -d 0/0 -l
  1604.  
  1605.   #---------------------------------------------------------------------
  1606.  
  1607.   #create new input chain for local ethernet interface
  1608.   ipchains -N $localif"-i"
  1609.  
  1610.   #flush all rules in chain (sanity flush)
  1611.   ipchains -F $localif"-i"
  1612.  
  1613.   #local interface, local machines, going anywhere is valid
  1614.   ipchains -A $localif"-i" -j ACCEPT -i $localif -s $localip/24 -d 0/0
  1615.  
  1616.   #all other incoming is denied and logged
  1617.   ipchains -A $localif"-i" -j DENY -s 0/0 -d 0/0 -l
  1618.  
  1619.   #---------------------------------------------------------------------
  1620.  
  1621.   #create new input chain for loopback interface
  1622.   ipchains -N $loopback"-i"
  1623.  
  1624.   #flush all rules in chain (sanity flush)
  1625.   ipchains -F $loopback"-i"
  1626.  
  1627.   #loopback interface is valid
  1628.   ipchains -A $loopback"-i" -j ACCEPT -i $loopback -s 0/0 -d 0/0
  1629.  
  1630.   #all other incoming is denied and logged
  1631.   ipchains -A $loopback"-i" -j DENY -s 0/0 -d 0/0 -l
  1632.  
  1633.   #--------------------------------------------------------------------------
  1634.   #Forwarding firewall policies
  1635.   #--------------------------------------------------------------------------
  1636.  
  1637.   #create new forward chain for static ethernet interface
  1638.   ipchains -N $staticif"-f"
  1639.  
  1640.   #flush all rules in chain (sanity flush)
  1641.   ipchains -F $staticif"-f"
  1642.  
  1643.   #masquerade from localnet on static interface to anywhere
  1644.   ipchains -A $staticif"-f" -j MASQ -i $staticif -s $localip/24 -d 0/0
  1645.  
  1646.   #all other forwarding is denied and logged
  1647.   ipchains -A $staticif"-f" -j DENY -s 0/0 -d 0/0 -l
  1648.  
  1649.   #---------------------------------------------------------------------
  1650.  
  1651.   #create new forward chain for local ethernet interface
  1652.   ipchains -N $localif"-f"
  1653.  
  1654.   #flush all rules in chain (sanity flush)
  1655.   ipchains -F $localif"-f"
  1656.  
  1657.   #all other forwarding is denied and logged
  1658.   ipchains -A $localif"-f" -j DENY -s 0/0 -d 0/0 -l
  1659.  
  1660.   #---------------------------------------------------------------------
  1661.  
  1662.   #create new forward chain for loopback interface
  1663.   ipchains -N $loopback"-f"
  1664.  
  1665.   #flush all rules in chain (sanity flush)
  1666.   ipchains -F $loopback"-f"
  1667.  
  1668.   #all other forwarding is denied and logged
  1669.   ipchains -A $loopback"-f" -j DENY -s 0/0 -d 0/0 -l
  1670.  
  1671.  
  1672.   #---------------------------------------------------------------------
  1673.   #Outgoing Firewall Policies
  1674.   #---------------------------------------------------------------------
  1675.  
  1676.   #create new output chain for static ethernet interface
  1677.   ipchains -N $staticif"-o"
  1678.  
  1679.   #flush all rules in chain (sanity flush)
  1680.   ipchains -F $staticif"-o"
  1681.  
  1682.   #outgoing to localnet on remote interface(stuffed routing) deny & log
  1683.   ipchains -A $staticif"-o" -j DENY -i $staticif -s 0/0 -d $localip/24 -l
  1684.  
  1685.   #outgoing from local net on remote interface, stuffed masquerading, deny
  1686.   ipchains -A $staticif"-o" -j DENY -i $staticif -s $localip/24 -d 0/0 -l
  1687.  
  1688.   #anything else outgoing on remote interface is valid
  1689.   ipchains -A $staticif"-o" -j ACCEPT -i $staticif -s $staticip/32 -d 0/0
  1690.  
  1691.   #all other outgoing is denied and logged
  1692.   ipchains -A $staticif"-o" -j DENY -s 0/0 -d 0/0 -l
  1693.  
  1694.   #---------------------------------------------------------------------
  1695.  
  1696.   #create new output chain for local ethernet interface
  1697.   ipchains -N $localif"-o"
  1698.  
  1699.   #flush all rules in chain (sanity flush)
  1700.   ipchains -F $localif"-o"
  1701.  
  1702.   #local interface, any source going to local net is valid
  1703.   ipchains -A $localif"-o" -j ACCEPT -i $localif -s 0/0 -d $localip/24
  1704.  
  1705.   #all other outgoing is denied and logged
  1706.   ipchains -A $localif"-o" -j DENY -s 0/0 -d 0/0 -l
  1707.  
  1708.   #---------------------------------------------------------------------
  1709.  
  1710.   #create new output chain for loopback interface
  1711.   ipchains -N $loopback"-o"
  1712.  
  1713.   #flush all rules in chain (sanity flush)
  1714.   ipchains -F $loopback"-o"
  1715.  
  1716.   #loopback interface is valid
  1717.   ipchains -A $loopback"-o" -j ACCEPT -i $loopback -s 0/0 -d 0/0
  1718.   #all other outgoing is denied and logged
  1719.   ipchains -A $loopback"-o" -j DENY -s 0/0 -d 0/0 -l
  1720.  
  1721.   #--------------------------------------------------------------------------
  1722.   #make sure forwarding is enabled in the kernel
  1723.   #--------------------------------------------------------------------------
  1724.  
  1725.   /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
  1726.  
  1727.   #--------------------------------------------------------------------------
  1728.   #Add pointers to built-in chains to enable user defined chains
  1729.   #change the order in each chain to optimize filtering for an interface
  1730.   #--------------------------------------------------------------------------
  1731.  
  1732.   #add local interface input chain
  1733.   ipchains -A input -i $localif -j $localif"-i"
  1734.  
  1735.   #add static interface input chain
  1736.   ipchains -A input -i $staticif -j $staticif"-i"
  1737.  
  1738.   #add loopback interface input chain
  1739.   ipchains -A input -i $loopback -j $loopback"-i"
  1740.  
  1741.   #-------------------------------------------------------------------------
  1742.  
  1743.   #add local interface output chain
  1744.   ipchains -A output -i $localif -j $localif"-o"
  1745.  
  1746.   #add static interface output chain
  1747.   ipchains -A output -i $staticif -j $staticif"-o"
  1748.  
  1749.   #add loopback interface output chain
  1750.   ipchains -A output -i $loopback -j $loopback"-o"
  1751.  
  1752.   #-------------------------------------------------------------------------
  1753.  
  1754.   #add local interface forward chain
  1755.   ipchains -A forward -i $localif -j $localif"-f"
  1756.  
  1757.   #add static interface forward chain
  1758.   ipchains -A forward -i $staticif -j $staticif"-f"
  1759.  
  1760.   #add loopback interface forward chain
  1761.   ipchains -A forward -i $loopback -j $loopback"-f"
  1762.  
  1763.   #---------------------------------------------------------------------
  1764.   #Super Paranoid check --- even though default policy is set for deny,
  1765.   #block all packets on any interface
  1766.   #---------------------------------------------------------------------
  1767.  
  1768.   #all other incoming is denied and logged
  1769.   ipchains -A input -j DENY -s 0/0 -d 0/0 -l
  1770.  
  1771.   #all other output is denied and logged
  1772.   ipchains -A output -j DENY -s 0/0 -d 0/0 -l
  1773.  
  1774.   #all other forwarding is denied and logged
  1775.   ipchains -A forward -j DENY -s 0/0 -d 0/0 -l
  1776.  
  1777.   exit 0
  1778.   ______________________________________________________________________
  1779.  
  1780.  
  1781.  
  1782.  
  1783.   8.  Putting it all together
  1784.  
  1785.   This is an example rc.local script to start everything when your
  1786.   system boots.  It will add spoofing protection in the kernel if you
  1787.   are using a 2.2 kernel, setup the masquerading firewall policies, and
  1788.   start the cipe interface(s).
  1789.  
  1790.  
  1791.  
  1792.        ______________________________________________________________________
  1793.  
  1794.        #!/bin/bash
  1795.        #4/4/99
  1796.        #an example rc.local script
  1797.        #Send questions or comments to acj@home.com
  1798.  
  1799.        echo
  1800.  
  1801.        #Set up spoof protection in kernel -- from IPChains HOWTO by Paul Russell
  1802.  
  1803.        #this is only for the newer 2.1/2.2 kernels
  1804.  
  1805.        #if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
  1806.        #   echo -n "Setting up IP spoofing protection..."
  1807.        #   for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
  1808.        #       echo 1 > $f
  1809.        #   done
  1810.        #   echo "done."
  1811.        #else
  1812.        #   echo PROBLEMS SETTING UP IP SPOOFING PROTECTION.  BE WORRIED.
  1813.        #   echo "CONTROL-D will exit from this shell and continue system startup."
  1814.        #   echo
  1815.        #   # Start a single user shell on the console
  1816.        #   /sbin/sulogin $CONSOLE
  1817.        #fi
  1818.  
  1819.        echo
  1820.  
  1821.        #Setup firewall policies
  1822.        if [ -x /etc/rc.d/rc.firewall ]; then
  1823.                echo Setting up firewall packet filtering policies.
  1824.                echo
  1825.                . /etc/rc.d/rc.firewall
  1826.        fi
  1827.  
  1828.        #Start cipe interfaces
  1829.        if [ -x /etc/rc.d/rc.cipe ]; then
  1830.                echo Starting VPN interfaces.
  1831.                . /etc/rc.d/rc.cipe
  1832.        fi
  1833.  
  1834.        exit 0
  1835.        ______________________________________________________________________
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.   9.  Connecting to the WAN
  1843.  
  1844.   At this point your cipe interface should be up and running.  Try
  1845.   pinging machines on the other network(s).  If you cannot ping check
  1846.   the following on the firewall machine:
  1847.  
  1848.  
  1849.   ╖  Check that forwarding is enabled in the kernel.
  1850.  
  1851.   ╖  Do an ifconfig to check if the cipe interface is up.
  1852.  
  1853.  
  1854.  
  1855.        cipcb0  Link encap:IPIP Tunnel  HWaddr
  1856.                inet addr:192.168.1.1  P-t-P:192.168.2.1  Mask:255.255.255.255
  1857.                UP POINTOPOINT NOTRAILERS RUNNING NOARP  MTU:1442  Metric:1
  1858.                RX packets:28163 errors:6 dropped:0 overruns:0 frame:6
  1859.                TX packets:29325 errors:0 dropped:0 overruns:0 carrier:0
  1860.                collisions:0 txqueuelen:100
  1861.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.   ╖  Check the route table for a host entry for the other cipe host on
  1867.      the cipe interface.
  1868.  
  1869.  
  1870.  
  1871.        192.168.2.1    *      255.255.255.255 UH    0   0        0 cipcb0
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.   ╖  Check the route table for a network entry to the other network(s)
  1878.      on the cipe interface.
  1879.  
  1880.  
  1881.  
  1882.        192.168.2.0    *      255.255.255.0   U     0   0        0  cipcb0
  1883.  
  1884.  
  1885.  
  1886.  
  1887.  
  1888.   ╖  Check the log files for any error messages.
  1889.  
  1890.   If your other machines behind your firewall cannot access machines
  1891.   behind the other firewall check that the gateway is properly setup on
  1892.   both ends.
  1893.  
  1894.   Once you are able to ping, ftp, telnet, etc. to machines on the other
  1895.   network, the next step is to get your networks to see each other and
  1896.   access each other using SAMBA browsing.  A few hints: lmhosts or wins
  1897.   server is required, trusted domains for NT.  I have set these up, but
  1898.   that is not the purpose of this document (at least not for now).
  1899.  
  1900.   If you used the example firewall masquerading script, then all of your
  1901.   machines should also be able to connect to the internet.  If you
  1902.   cannot, then you might want to check the log files.  You may also want
  1903.   to try using tcpdump to see what is happening with the packets.
  1904.  
  1905.  
  1906.  
  1907.   10.  References
  1908.  
  1909.   10.1.  Web Sites
  1910.  
  1911.   Cipe Home Page <http://sites.inka.de/~bigred/devel/cipe.html>
  1912.  
  1913.   Masq Home Page <http://ipmasq.cjb.net>
  1914.  
  1915.   Samba Home Page <http://samba.anu.edu.au>
  1916.  
  1917.   Linux HQ <http://www.linuxhq.com>  ---great site for lots of linux
  1918.   info
  1919.  
  1920.  
  1921.  
  1922.   10.2.  Documentation
  1923.  
  1924.   cipe.info: info file included with cipe distribution
  1925.  
  1926.   Firewall HOWTO, by Mark Grennan, markg@netplus.net
  1927.  
  1928.   IP Masquerade mini-HOWTO,by  Ambrose Au, ambrose@writeme.com
  1929.  
  1930.   IPChains-Howto, by Paul Russell, Paul.Russell@rustcorp.com.au
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.