home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / mini / Bridge+Firewall < prev    next >
Text File  |  1998-05-07  |  21KB  |  859 lines

  1.   Linux Bridge+Firewall Mini-HOWTO version 1.2.0
  2.   Peter Breuer (ptb@it.uc3m.es)
  3.   v, 19 December 1997
  4.   ____________________________________________________________
  5.  
  6.   Table of Contents
  7.  
  8.  
  9.   1. Introduction
  10.  
  11.   2. What and Why (and How?)
  12.  
  13.      2.1 What
  14.      2.2 Why
  15.      2.3 How?
  16.  
  17.   3. BRIDGING
  18.  
  19.      3.1 Software
  20.      3.2 Prior Reading.
  21.      3.3 Boot configuration
  22.      3.4 Kernel configuration
  23.      3.5 Network addresses
  24.      3.6 Network routing
  25.      3.7 Card configuration
  26.      3.8 Additional routing
  27.      3.9 Bridge Configuration
  28.      3.10 Try it out
  29.      3.11 Checks
  30.  
  31.   4. FIREWALLING
  32.  
  33.      4.1 Software and reading
  34.      4.2 Preliminary checks
  35.      4.3 Default rule
  36.      4.4 Holes per address
  37.      4.5 Holes per protocol
  38.      4.6 Checks
  39.  
  40.  
  41.   ______________________________________________________________________
  42.  
  43.   1.  Introduction
  44.  
  45.   You should look at the original Bridging mini-HOWTO
  46.   <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Bridge> by Chris Cole
  47.   for a different perspective on this.  He is chris@polymer.uakron.edu.
  48.   The version of his HOWTO that I have based this document on
  49.   (alternatively, ripped off) is 1.03 dated Aug 23 1996.
  50.  
  51.  
  52.  
  53.   2.  What and Why (and How?)
  54.  
  55.  
  56.  
  57.   2.1.  What
  58.  
  59.   A bridge is an intelligent connecting wire betwen two network cards.
  60.   A firewall is an intelligent insulator.
  61.  
  62.  
  63.   2.2.  Why
  64.  
  65.   You might want a bridge if you have several computers:
  66.  
  67.   1. to save the price of a new hub when you just happen to have an
  68.      extra ethernet card available.
  69.  
  70.   2. to save the bother of learning how to do IP-forwarding and other
  71.      tricks when you _have_ two cards in your computer.
  72.  
  73.   3. to avoid maintenance work in the future when things change around!
  74.  
  75.  
  76.   ``Several computers'' might be as few as three if those are routing or
  77.   bridging or just moving around the room from time to time! You also
  78.   might want a bridge just for the fun of finding out what it does.
  79.   ``2'' was what I wanted a bridge for.
  80.  
  81.  
  82.   If you are really interested in ``1'', you have to be one of the very
  83.   few.  Check the NET-2-HOWTO
  84.   <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/NET-2-HOWTO> and the
  85.   Serial-HOWTO <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Serial-HOWTO>
  86.   for better tricks.
  87.  
  88.  
  89.   You want a firewall if
  90.  
  91.  
  92.   1. you are trying to protect your network from external accesses, or
  93.  
  94.   2. you are trying to deny access to the world outside from your
  95.      network.
  96.  
  97.  
  98.   Curiously, I needed ``2'' here too.  Policy at my university presently
  99.   is that we should not act as internet service providers to
  100.   undergraduates.
  101.  
  102.  
  103.   2.3.  How?
  104.  
  105.   I started out bridging the network cards in a firewalling machine and
  106.   ended up firewalling without having cut the bridge. It seems to work
  107.   and is more flexible than either configuration alone. I can take down
  108.   the firewall and keep bridging or take down the bridge when I want to
  109.   be more circumspect.
  110.  
  111.  
  112.   I would guess that the bridge code lives just above the physical
  113.   device layer and the firewalling code lives one layer higher up, so
  114.   that the bridging and firewalling configurations effectively act as
  115.   though they are running connected together ``in sequence'' and not
  116.   ``in parallel'' (ouch!). Diagram:
  117.  
  118.  
  119.  
  120.        -> Bridge-in -> Firewall-in -> Kernel -> Firewall-out -> Bridge-out ->
  121.  
  122.  
  123.  
  124.  
  125.  
  126.   There is no other way to explain how one machine can be a
  127.   ``conductor'' and an ``insulator'' at the same time.  There are a few
  128.   caveats but I'll come to those later.  Basically you must route
  129.   packets that you want to firewall.  Anyway, it all seems to work
  130.   together nicely for me.  Here is what you do ...
  131.  
  132.  
  133.   3.  BRIDGING
  134.  
  135.   3.1.  Software
  136.  
  137.   Get the bridge configuration utility
  138.   <ftp://shadow.cabi.net/pub/Linux/BRCFG.tgz> from Alan Cox's home
  139.   pages. This is the same reference as in Chris' document. I just didn't
  140.   realize that it was an ftp and not an http URL ...
  141.  
  142.  
  143.  
  144.   3.2.  Prior Reading.
  145.  
  146.   Read the Multiple Ethernet HOWTO
  147.   <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Multiple-Ethernet>
  148.   for some advice on getting more than one network card recognized and
  149.   configured.
  150.  
  151.  
  152.   Yet more details of the kind of boot magic that you may need are in
  153.   the Boot Prompt HOWTO
  154.   <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/BootPrompt-HOWTO>.
  155.  
  156.  
  157.   You may be able to get away without the NET-2 HOWTO
  158.   <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/NET-2-HOWTO>. It is a good
  159.   long read and you will have to pick from it the details you need.
  160.  
  161.  
  162.   3.3.  Boot configuration
  163.  
  164.   The reading material above will tell you that you need to prepare the
  165.   kernel to recognize a second ethernet device at boot up by adding this
  166.   to your /etc/lilo.conf, and then re-run lilo:
  167.  
  168.  
  169.  
  170.        append = "ether=0,0,eth1"
  171.  
  172.  
  173.  
  174.  
  175.  
  176.   Note the "eth1". "eth0" is the first card. "eth1" is the second card.
  177.   You can always add the boot parameters in your response to the line
  178.   that lilo offers you. This is for three cards:
  179.  
  180.  
  181.  
  182.        linux ether=0,0,eth1 ether=0,0,eth2
  183.  
  184.  
  185.  
  186.  
  187.  
  188.   I use loadlin to boot my kernel from DOS:
  189.  
  190.  
  191.  
  192.        loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.   Note that this trick makes the kernel probe at bootup. That will not
  200.   happen if you load the ethernet drivers as modules (for safety since
  201.   the probe order can't be determined) so if you use modules you will
  202.   have to add the appropriate IRQ and port parameters for the driver in
  203.   your /etc/conf.modules.  I have at least
  204.  
  205.  
  206.  
  207.  
  208.        alias eth0 3c509
  209.        alias eth1 de620
  210.        options 3c509 irq=5 io=0x210
  211.        options de620 irq=7 bnc=1
  212.  
  213.  
  214.  
  215.  
  216.  
  217.   You can tell if you use modules by using ``ps -aux'' to see if kerneld
  218.   is running and checking that there are .o files in a subdirectory of
  219.   your /lib/modules directory. You want the directory named with what
  220.   uname -r tells you. If you have kerneld and/or you have a foo.o then
  221.   edit /etc/conf.modules and read the man page for depmod carefully.
  222.  
  223.  
  224.   Note also that until recently (kernel 2.0.25) the 3c509 driver could
  225.   not be used for more than one card if used as a module. I have seen a
  226.   patch floating around that fixes the oversight. It may be in the
  227.   kernel when you read this.
  228.  
  229.  
  230.   3.4.  Kernel configuration
  231.  
  232.   Recompile the kernel with bridging enabled.
  233.  
  234.  
  235.  
  236.        CONFIG_BRIDGE=y
  237.  
  238.  
  239.  
  240.  
  241.  
  242.   I also compiled with firewalling and IP-forwarding and -masquerading
  243.   and the rest enabled. Only if you want firewalling too ...
  244.  
  245.  
  246.  
  247.        CONFIG_FIREWALL=y
  248.        CONFIG_NET_ALIAS=y
  249.        CONFIG_INET=y
  250.        CONFIG_IP_FORWARD=y
  251.        CONFIG_IP_MULTICAST=y
  252.        CONFIG_IP_FIREWALL=y
  253.        CONFIG_IP_FIREWALL_VERBOSE=y
  254.        CONFIG_IP_MASQUERADE=y
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.   You don't need all of this. What you do need apart from this is the
  262.   standard net configuration:
  263.  
  264.  
  265.        CONFIG_NET=y
  266.  
  267.  
  268.  
  269.  
  270.  
  271.   and I do not think you need worry about any of the other networking
  272.   options. I have any options that I did not actually compile into the
  273.   kernel available through kernel modules that I can add in later.
  274.  
  275.  
  276.   Install the new kernel in place, rerun lilo and reboot with the new
  277.   kernel. Nothing should have changed at this point!
  278.  
  279.  
  280.  
  281.   3.5.  Network addresses
  282.  
  283.   Chris says that a bridge should not have an IP address but that is not
  284.   the setup to be described here.
  285.  
  286.  
  287.   You are going to want to use the machine for connecting to the net so
  288.   you need an address and you need to make sure that you have the
  289.   loopback device configured in the normal way so that your software can
  290.   talk to the places they expect to be able to talk to. If loopback is
  291.   down the name resolver or other net sevices might fail. See the
  292.   NET-2-HOWTO, but your standard configuration should already have done
  293.   this bit:
  294.  
  295.  
  296.  
  297.        ifconfig lo 127.0.0.1 route add -net 127.0.0.0
  298.  
  299.  
  300.  
  301.  
  302.  
  303.   You will have to give addresses to your network cards. I altered the
  304.   /etc/rc.d/rc.inet1 file in my slackware (3.x) to setup two cards and
  305.   you should also essentially just look for your net configuration file
  306.   and double or treble the number of instructions in it.  Suppose that
  307.   you already have an address at
  308.  
  309.  
  310.  
  311.        192.168.2.100
  312.  
  313.  
  314.  
  315.  
  316.  
  317.   (that is in the private net reserved address space, but never mind -
  318.   it won't hurt anybody if you use this address by mistake) then you
  319.   probably already have a line like
  320.  
  321.  
  322.  
  323.        ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1
  324.  
  325.  
  326.  
  327.  
  328.  
  329.   in your configuration. The first thing you are going to probably want
  330.   to do is cut the address space reached by this card in half so that
  331.   you can eventually bridge or firewall the two halves.  So add a line
  332.   which reduces the mask to address a smaller number of machines:
  333.  
  334.  
  335.  
  336.        ifconfig eth0 netmask 255.255.255.128
  337.  
  338.  
  339.  
  340.  
  341.  
  342.   Try it too. That restricts the card to at most the address space
  343.   between .0 and .127.
  344.  
  345.  
  346.   Now you can set your second card up in the other half of the local
  347.   address space. Make sure that nobody already has the address. For
  348.   symmetry I set it at 228=128+100 here. Any address will do so long as
  349.   it is not in the other card's mask, and even then, well, maybe. Avoid
  350.   special addresses like .0, .1, .128 etc. unless you really know what
  351.   you are doing.
  352.  
  353.  
  354.  
  355.        ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1
  356.  
  357.  
  358.  
  359.  
  360.  
  361.   That restricts the second card to addresses between .128 and .255.
  362.  
  363.  
  364.   3.6.  Network routing
  365.  
  366.   This is where I have to announce the caveats in the bridging +
  367.   firewalling scheme: you cannot firewall packets which are not routed.
  368.   No routes, no firewall. At least this appears to be true in the 2.0.30
  369.   and more recent kernels. The firewalling filters are closely involved
  370.   with the ip-forwarding code.
  371.  
  372.  
  373.   That does not mean that you cannot bridge. You can bridge between two
  374.   cards and firewall them from a third. You can have only two cards and
  375.   firewall both of them against an outside IP such as a nearby router,
  376.   provided that the router is routed by you to exactly one of the cards.
  377.  
  378.  
  379.   In other words, since I will be doing firewalling, so I want to
  380.   precisely control the physical destination of some packets.
  381.  
  382.  
  383.   I have the small net of machines attached to a hub hanging off eth0,
  384.   so I configure a net there:
  385.  
  386.  
  387.  
  388.        route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0
  389.  
  390.  
  391.  
  392.  
  393.  
  394.   The 128 would be 0 if I had a full class C network there.  I don't, by
  395.   definition, since I just halved the address space.  The "dev eth0" is
  396.   not necessary here because the cards address falls within the mask,
  397.   but it may be necessary for you.  One might need more than one card
  398.   holding up this subnet (127 machines on one segment, oh yeah) but
  399.   those cards would be being bridged under the same netmask so that they
  400.   appear as one to the routing code.
  401.  
  402.  
  403.   On the other card I have a line going straight through to a big router
  404.   that I trust.
  405.  
  406.  
  407.                                                client 129
  408.            __                                        |    __
  409.   client 1   \    .0                    .128         |   /   net 1
  410.   client 2 --- Hub - eth0 - Kernel - eth1 - Hub - Router --- net 2
  411.   client 3 __/       .100            .228         .2 |   \__ net 3
  412.                                                      |
  413.                                                client 254
  414.  
  415.  
  416.  
  417.  
  418.   I attach the address of the router to that card as a fixed ("static")
  419.   route because it would otherwise fall within the first cards netmask
  420.   and the kernel would be thinking wrongly about how to send packets to
  421.   the big router. I will want to firewall these packets and that is
  422.   another reason fow wanting to route them specifically.
  423.  
  424.  
  425.  
  426.        route add 192.168.2.2 dev eth1
  427.  
  428.  
  429.  
  430.  
  431.  
  432.   I don't need it, since I don't have any more machines in that half of
  433.   the address space, but I declare a net also on the second card.
  434.   Separating my interfaces into two sets via routing will allow me to do
  435.   very tight firewalling eventually , but you can get away with far less
  436.   routing than this.
  437.  
  438.  
  439.  
  440.        route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.   I also need to send all non-local packets out to the world so I tell
  448.   the kernel to send them to the big router
  449.  
  450.  
  451.  
  452.        route add default gw 192.168.2.2
  453.  
  454.  
  455.  
  456.  
  457.  
  458.   3.7.  Card configuration
  459.  
  460.   So much was standard networking setup, but we are bridging so we also
  461.   have to listen on both (?) cards for packets that are not aimed at us.
  462.   The following should go into the network configuration file.
  463.        ifconfig promisc eth0 ifconfig promisc eth1
  464.  
  465.  
  466.  
  467.  
  468.  
  469.   The man page says allmulti=promisc, but it didn't work for me.
  470.  
  471.  
  472.   3.8.  Additional routing
  473.  
  474.   One thing that I noticed was that I had to put at least the second
  475.   card into a mode where it would respond to the big router's questions
  476.   about which machines I was hiding in my local net.
  477.  
  478.  
  479.  
  480.        ifconfig arp eth1
  481.  
  482.  
  483.  
  484.  
  485.  
  486.   For good measure I did this to the other card too.
  487.  
  488.  
  489.  
  490.        ifconfig arp eth0.
  491.  
  492.  
  493.  
  494.  
  495.  
  496.   3.9.  Bridge Configuration
  497.  
  498.   Put bridging enabling on and into your configuration file:
  499.  
  500.  
  501.  
  502.        brcfg -enable
  503.  
  504.  
  505.  
  506.  
  507.  
  508.   You should have been trying this out in real time all along, of
  509.   course!  The bridge configure will bring up some numbers. You can
  510.   experiment with turning on and off the ports one at a time
  511.  
  512.  
  513.  
  514.        brcfg -port 0 -disable/-enable
  515.         brcfg -port 1 -disable/-enable
  516.  
  517.  
  518.  
  519.  
  520.  
  521.   You get status reports anytime by just running
  522.  
  523.  
  524.  
  525.        brcfg
  526.  
  527.  
  528.  
  529.   without any parameters. You will see that the bridge listens,learns,
  530.   and then does forwarding. (I don't understand why the code repeats the
  531.   same hardware addresses for both my cards, but never mind .. Chris'
  532.   howto say that is OK)
  533.  
  534.  
  535.   3.10.  Try it out
  536.  
  537.   If you are still up and running as things are, try out your
  538.   configuration script for real by taking down both cards and then
  539.   executing it:
  540.  
  541.  
  542.  
  543.        ifconfig eth0 down ifconfig eth1 down /etc/rc.d/rc.inet1
  544.  
  545.  
  546.  
  547.  
  548.  
  549.   With any luck the various subsystems (nfs, ypbind, etc.)  won't
  550.   notice. Do not try this unless you are sitting at the keyboard!
  551.  
  552.  
  553.   If you want to be more careful than this, you should take down as many
  554.   daemons as possible beforehand, and unmount nfs directories. The worst
  555.   that can happen is that you have to reboot in single-user mode (the
  556.   "single" parameter to lilo or loadlin), and take out your changes
  557.   before rebooting with things the way they were before you started.
  558.  
  559.  
  560.   3.11.  Checks
  561.  
  562.   Verify that there is different traffic on each interface:
  563.  
  564.  
  565.  
  566.        tcpdump -i eth0
  567.  
  568.  
  569.  
  570.        tcpdump -i eth1
  571.  
  572.  
  573.  
  574.  
  575.  
  576.   You should get used to using tcpdump to look for things that should
  577.   not be happening or that are happening and should not.
  578.  
  579.  
  580.   For instance look for packets that have gone through the bridge to the
  581.   second card from the internal net. Here I am looking for packets from
  582.   the machine with address .22:
  583.  
  584.  
  585.  
  586.        tcpdump -i eth1 -e host 192.168.2.22
  587.  
  588.  
  589.  
  590.  
  591.  
  592.   Then send a ping from the .22 host to the router. You should see the
  593.   packet reported by tcpdump.
  594.  
  595.   At this stage you should have a bridge ready that also has two network
  596.   addreses.  Test that you can ping them from outside and inside your
  597.   local net, and that you can telnet and ftp around between inside and
  598.   outside too.
  599.  
  600.  
  601.   4.  FIREWALLING
  602.  
  603.   4.1.  Software and reading
  604.  
  605.   You should read the Firewall-HOWTO
  606.   <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Firewall-HOWTO>.
  607.  
  608.  
  609.   That will tell you where to get ipfwadm if you don't already have it.
  610.   There are other tools you can get but I made no progress until I tried
  611.   ipfwadm. It is nice and low level! You can see exactly what it is
  612.   doing.
  613.  
  614.  
  615.   4.2.  Preliminary checks
  616.  
  617.   You have compiled IP-forwarding and masquerading into the kernel so
  618.   you will want to check that the firewall is in its default (accepting)
  619.   state with
  620.  
  621.  
  622.  
  623.        ipfwadm -I -l ipfwadm -O -l ipfwadm -F -l
  624.  
  625.  
  626.  
  627.  
  628.  
  629.   That is respectively, "display the rules affecting the .."  incoming
  630.   or outgoing or forwarding (masquerading) ".. sides of the firewall".
  631.   The "-l" means "list".
  632.  
  633.  
  634.   You might have compiled in accounting too:
  635.  
  636.  
  637.  
  638.        ipfwadm -A -l
  639.  
  640.  
  641.  
  642.  
  643.  
  644.   You should see that there are no rules defined and that the default is
  645.   to accept every packet. You can get back to this working state anytime
  646.   with
  647.  
  648.  
  649.  
  650.        ipfwadm -I -f
  651.        ipfwadm -O -f
  652.        ipfwadm -F -f
  653.  
  654.  
  655.  
  656.  
  657.  
  658.   The "-f" means "flush". You may need to use that.
  659.  
  660.  
  661.   4.3.  Default rule
  662.  
  663.   I want to cut the world off from my internal net and do nothing else,
  664.   so I will want to give as a last (default) rule that the firewall
  665.   should ignore any packets coming in from the internal net and directed
  666.   to outside.  I put all the rules (in this order) into
  667.   /etc/rc.d/rc.firewall and execute it from /etc/rc.d/rc.local at
  668.   bootup.
  669.  
  670.  
  671.  
  672.        ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0
  673.  
  674.  
  675.  
  676.  
  677.  
  678.   The "-S" is the source address/mask. The "-D" is the destination
  679.   address/mask.
  680.  
  681.  
  682.   This format to is rather long-winded. Ipfwadm is intelligent about
  683.   network names and some common abbreviations. Check the man pages.
  684.  
  685.  
  686.   It is possibly more convenient to put some or all of these rules on
  687.   the outgoing half of the firewall by using "-O" instead of "-I", but
  688.   I'll state the rules here all formulated for the incoming half.
  689.  
  690.  
  691.   4.4.  Holes per address
  692.  
  693.   Before that default rule, I have to place some rules that serve as
  694.   exceptions to this general denial of external services to internal
  695.   clients.
  696.  
  697.  
  698.   I want to treat the firewall machines address on the internal net
  699.   specially.  I will stop people logging in to the firewall machine
  700.   unless they have special permission, but once they are there they
  701.   should be allowed to talk to the world.
  702.  
  703.  
  704.  
  705.        ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \
  706.         -D 0.0.0.0/0.0.0.0
  707.  
  708.  
  709.  
  710.  
  711.  
  712.   I also want the internal clients to be able to talk to the firewalling
  713.   machine. Maybe they can persuade it to let them get out!
  714.  
  715.  
  716.  
  717.        ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \
  718.         -D 192.168.2.100/255.255.255.255
  719.  
  720.  
  721.  
  722.  
  723.  
  724.   Check at this point that you can get in to the clients from outside
  725.   the firewall via telnet, but that you cannot get out. That should mean
  726.   that you can just about make first contact, but the clients cannot
  727.   send you any prompts. You should be able to get all the way in if you
  728.   use the firewall machine as a staging post. Try rlogin and ping too,
  729.   with tcpdump running on one card or the other. You should be able to
  730.   make sense of what you see.
  731.  
  732.  
  733.   4.5.  Holes per protocol
  734.  
  735.   I went on to relax the rules protocol by protocol. I want to allow
  736.   pings from the outside to the inside to get an echo back, for
  737.   instance, so I inserted the rule:
  738.  
  739.  
  740.  
  741.        ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \
  742.         -D 0.0.0.0/0.0.0.0
  743.  
  744.  
  745.  
  746.  
  747.  
  748.   The "-P icmp" works the protocol-specific magic.
  749.  
  750.  
  751.  
  752.   Until I get hold of an ftp proxy I am also allowing ftp calls out with
  753.   port-specific relaxations. This targets ports 20 21 and 115 on outside
  754.   machines.
  755.  
  756.  
  757.  
  758.        ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
  759.         -D 0.0.0.0/0.0.0.0 20 21 115
  760.  
  761.  
  762.  
  763.  
  764.  
  765.   I could not make sendmail between the local clients work without a
  766.   nameserver. Rather than set up a nameserver right then on the
  767.   firewall, I just lifted the firewall for tcp domain service queries
  768.   precisely aimed at the nearest existing nameserver and put its address
  769.   in the clients /etc/resolv.conf ("nameserver 123.456.789.31" on a
  770.   separate line).
  771.  
  772.  
  773.  
  774.        ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
  775.         -D 123.456.789.31/255.255.255.255 54
  776.  
  777.  
  778.  
  779.  
  780.  
  781.   You can find which port number and protocol a service requires with
  782.   tcpdump. Trigger the service with a an ftp or a telnet or whatever to
  783.   or from the internal machine and then watch for it on the input and
  784.   output ports of the firewall with tcpdump:
  785.  
  786.  
  787.  
  788.        tcpdump -i eth1 -e host client04
  789.  
  790.  
  791.  
  792.  
  793.   for example. The /etc/services file is another important source of
  794.   clues. To let telnet and ftp IN to the firewall from outside, you have
  795.   to allow the local clients to call OUT on a specific port. I
  796.   understand why this is necessary for ftp - it's the server that
  797.   establishes the data stream in the end - but I am not sure why telnet
  798.   also needs this.
  799.  
  800.  
  801.  
  802.        ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \
  803.         -D 0.0.0.0/0.0.0.0
  804.  
  805.  
  806.  
  807.  
  808.  
  809.   There is a particular problem with some daemons that look up the
  810.   hostname of the firewalling machine in order to decide what is their
  811.   networking address. Rpc.yppasswdd is the one I had trouble with. It
  812.   insists on broadcasting information that says it is outside the
  813.   firewall (on the second card). That means the clients inside can't
  814.   contact it.
  815.  
  816.  
  817.   Rather than start IP aliasing or change the daemon code, I mapped the
  818.   name to the inside card address on the clients in their /etc/hosts.
  819.  
  820.  
  821.  
  822.   4.6.  Checks
  823.  
  824.   You want to test that you can still telnet, rlogin and ping from the
  825.   outside. From the inside you should be able to ping out. You should
  826.   also be able to telnet to the firewall machine from the inside and the
  827.   latter should be able to do anything.
  828.  
  829.  
  830.   That is it. At this point you probably want to learn about rpc/Yellow
  831.   Pages and the interaction with the password file. The firewalled
  832.   network wants to run without its unprivileged users being able to log
  833.   on to the firewall - and thus get out. Some other HOWTO!
  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.