From: <Saved by Microsoft Internet Explorer 5>
Subject: Guide to Building an OpenBSD PPPoE Gateway
Date: Fri, 16 Mar 2001 02:20:24 -0500
MIME-Version: 1.0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://real.ath.cx/BSDinstall.html
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Guide to Building an OpenBSD PPPoE Gateway</TITLE>
<SCRIPT> PrxRealOpen=3Dwindow.open; function PrxNullWin(){this.window;} =
function PrxOpen(url,nam,atr){return(new PrxNullWin());} =
window.open=3DPrxOpen;</SCRIPT>

<SCRIPT> function NoError(){return(true);} onerror=3DNoError; </SCRIPT>

<SCRIPT> function NoBox(txt){ return(1);} window.alert=3DNoBox; =
window.confirm=3DNoBox; window.prompt=3DNoBox;function =
submit(){return(NULL);}</SCRIPT>

<SCRIPT> function moveTo(){return true;}function resizeTo(){return =
true;}</SCRIPT>

<META http-equiv=3DCONTENT-TYPE content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"Guide for building a PPP and PPPoE gateway using =
OpenBSD."=20
name=3Ddescription>
<META=20
content=3D"openbsd gateway, openbsd firewall, pppoe gateway, pppoe =
firewall, openbsd pppoe gateway, sympatico pppoe, sympatico hse, =
sympatico openbsd"=20
name=3Dkeywords>
<STYLE>H1 {
	COLOR: #ffffff
}
TD P {
	COLOR: #000000; TEXT-ALIGN: left
}
P {
	COLOR: #000000; TEXT-ALIGN: left
}
A:link {
	COLOR: #0000ef
}
A:visited {
	COLOR: #51188e
}
</STYLE>

<META content=3D"MSHTML 5.50.4611.1300" name=3DGENERATOR></HEAD>
<BODY text=3D#000000 vLink=3D#51188e aLink=3D#ff0000 link=3D#0000ef =
bgColor=3D#f8f8ff><A=20
name=3DTop></A>
<H2>A Step-by-Step Guide to Building an OpenBSD PPPoE Gateway</H2>
<P>by Real Ouellet (<A =
href=3D"mailto:hello@real.ath.cx">hello@real.ath.cx</A>)=20
<P>
<P>
<HR>

<DL><B>Last changes:</B> <BR><BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.10=20
  [2001-03-14]</FONT></B></FONT>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_10_1">DONT=20
  call "do_ipcheck" from "ppp.linkup".</A>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_10_2">"ppp"=20
  source code: replaced the convoluted CVS download method with a =
simple, direct=20
  URL.</A> <BR></DD></DL></FONT><BR><A=20
href=3D"http://real.ath.cx/BSDinstall.html#FullChangelog">Full =
Changelog</A> <BR>
<HR>

<P>
<P>
<H3>Introduction</H3>
<P>Why would one install his own personal gateway to the Internet? =
Because one=20
can! And also because it simply is the most reliable, safest way to =
connect=20
machines to a dedicated xDSL modem. Moreover, we can stash a whole bunch =
of=20
useful features in such a little box. Here is a list: <BR>
<DL>
  <DT>PPPoE Gateway=20
  <DD>PPPoE is a curious beast forced down our throats by some DSL =
providers. On=20
  one side, it does not really break anything, has low overhead and =
allows you=20
  to change IP adresses very easily &amp; quickly. On the other side, it =
sucks=20
  big time because it <I>does</I> add overhead to the IP packets, is=20
  proprietary, non-standard, forces you to change IP adresses =
unpredictably, and=20
  is unsupported in most operating systems. A good PPPoE gateway simply =
hides=20
  PPPoE from the machines on your internal network. It makes life much =
easier=20
  because you don't have to install any special "access manager" =
software on=20
  your windoze boxen. They will just work (provided you set their IP =
address and=20
  MTU correctly). <BR>
  <DT>Firewall=20
  <DD>A firewall is quite mandatory for any machine directly connected =
to the=20
  Big Bad Internet. We want an industrial-strength stateful inspection =
firewall=20
  and this is what we'll get. <BR>
  <DT>NAT (Network Adress Translation)=20
  <DD>The name seems complex, but it is really quite simple: this allows =
the=20
  gateway machine to act on the internet on behalf of all the machines =
located=20
  on the intranet (your internal home network). Even though you might =
have two,=20
  three or even ten computers on your local network, a NAT equipped =
gateway will=20
  hide them to outside observers. They will only see a single <I>very =
busy</I>=20
  machine, with a single IP address. <BR>
  <DT>DNS (Domain Name Service) cache=20
  <DD>Having your own DNS server will lower the latency of getting DNS=20
  translations for all the machines on your intranet. This will not =
really=20
  decrease the traffic on your DSL modem by a large percentage, but it =
will=20
  improve the quality of the "internet experience" on your local =
network. <BR>
  <DT>Dynamic DNS tracker=20
  <DD>Free dynamic DNS services are extremely useful to xDSL customers. =
They=20
  allow you to have your very own domain name, free of charge, which =
will follow=20
  in real-time your IP address changes. The catch is that the top-level =
part of=20
  your domain must be one of their supplied choices. They are not =
<I>that</I>=20
  bad, really... Personally, I use <A target=3D_top=20
  href=3D"http://www.dyndns.org/">DYNDNS</A> but any of the multiple =
free dynamic=20
  DNS providers out there will do just fine. Simply make sure they have =
a client=20
  "updater" which can compile and run under OpenBSD. <BR>
  <DT>WEB server=20
  <DD>Most ISP's only allow a few megabytes of disk for web service. =
Moreover,=20
  they never give you direct access to the web logs. Having your own web =
server=20
  allows you the luxury of using all the disk space you want, plus the =
added=20
  advantage of complete control over the web service (cgi-bin) and its =
logs.=20
  Moreover, OpenBSD comes with a crypto-enabled version of Apache and =
all the=20
  tools you need to create RSA-keyed certificates. <BR>
  <DT>Mail server=20
  <DD>Have you ever wanted to create a temporary email address just to =
receive=20
  some password? Or simply wanted addresses tailored for specific =
domains of=20
  interest? These are only a few of the many advantages of having your =
own mail=20
  server. <BR>
  <DT>NTP server=20
  <DD>The Network Time Protocol allow you to synchronize the gateway's =
clock to=20
  one of the numerous atomic time references available on the internet.=20
  Moreover, the same program is also used as a local time server, so =
that all=20
  your intranet machines can themselves synchronize their clocks to the=20
  gateway's clock. NTP synchronizations are made in tiers, like this, in =
order=20
  to lower the burden on the public time servers. </DD></DL><BR><BR>
<P>This page is for all those of you who have are lucky enough to enjoy =
a=20
dedicated xDSL connection and would like to have a small firewall =
installation.=20
In my search for the holy grail, i found the answer to most of my wishes =
in the=20
OpenBSD package. This step-by-step guide is a collection of notes taken =
while I=20
was installing the thing. They are intended to help my friends do their =
own=20
setups very quickly and easily, without having to bug me too much ;) =
&nbsp;They=20
should help you too.=20
<P>Constructive comments can be sent <A=20
href=3D"mailto:hello@real.ath.cx">there</A> ... Have fun and GOOD LUCK!=20
<P>
<HR>

<HR>

<P>
<H3>Getting some hardware</H3>
<P>The first thing to think about when one embarks on the firewalling =
adventure=20
is to establish on what hardware you are going to install the thing. =
This seems=20
unimportant at first, but don't forget that this box will be turned on =
24/7, so=20
the components you use must be reliable.=20
<P>What are the minimum requirements? My system uses about 50% of its =
CPU to=20
support Sympatico's ADSL rate (around 900 kbps). It is built with the =
following=20
components:=20
<OL>
  <LI>An ancient 486 motherboard (with an ISA bus) given to me by a =
friend=20
  (thanks Christian!). It runs at 66 MHz.=20
  <LI>32 MB of brand new RAM i bought for it.=20
  <LI>A 200 MB hard disk, which was dying after about 1 year of faithful =
use (it=20
  came with the motherboard). This disk was recently replaced with the =
cheapest=20
  brand new drive i could find. I didn't know they still made those slow =
3600=20
  RPM drives ;) Anyway, the old drive is kept as a kind of extreme =
emergency=20
  backup.=20
  <LI>Two ISA-bus ethernet cards. I'll talk more about this later.=20
  <LI>A CD-ROM drive. <I>Very</I> optional, but can make life easier.=20
  <LI>A "home" grade hub &amp; cat5 cabling. This is not strictly =
necessary if=20
  you'll have only one machine connected to your firewall: you can make =
do with=20
  a special <A target=3D_top=20
  =
href=3D"http://www.stg.brown.edu/~sjd/wiring/CAT5-wiring.html">"crossover=
"=20
  cat5</A> cable instead. The cable that comes with xDSL modems is =
usually=20
  (always?) a crossover cable. Anyway, for two or more machines, the hub =
is=20
  mandatory. Small hubs can be bought for a very reasonable price (~40$ =
cdn).=20
  <BR><B>or</B><BR>Alternatively, many older ethernet cards come with a =
BNC=20
  female connector. This can be used to connect the machines on your =
network=20
  with coax cables, without any hub. <I>However</I>, be warned that a =
10base-2=20
  network must follow certain rules if you want it to work flawlessly. =
Follow <A=20
  target=3D_top=20
  =
href=3D"http://www.ccmr.cornell.edu/ccmrcf/howto/10base2_network.html">th=
em</A>.=20
  </LI></OL>
<P>This gives a good approximation of what you need. The MOST important =
part is=20
the RAM. Make absolutely sure that whatever RAM you use is reliable. Old =
boxen=20
were usually setup to run Windoze, and it was not a big deal if the =
machine had=20
flaky RAM because of the way Windoze works...=20
<P>OpenBSD (like any real OS out there) is much less tolerant of flaky =
RAM,=20
because it actually uses all of it. It <B>will</B> crash quite quickly =
if your=20
RAM is marginal, probably within 5-10 minutes. You have been warned.=20
<P>Finally, the OpenBSD hardware list is <A target=3D_top=20
href=3D"http://www.openbsd.org/i386.html">there</A>. Try to make sure =
that=20
whatever hardware you use in your gateway box figures on that list. It's =
a long=20
list ;)=20
<P>
<H4>The ethernet cards</H4>
<P>There is a boring thing of which we must talk about here. You see, =
there are=20
many kinds of ethernet cards, and you must make sure you have the right =
ones for=20
your machine. If you have a PCI-based machine, then all is well. =
Whatever=20
ethernet card you put in there will probably be supported by OpenBSD. =
However,=20
you must be a bit more careful if you have an ISA-based machine.=20
<P>It is most likely that your box will not have any ethernet cards to =
start=20
with since most people did not have networks at home in the pre-historic =
era of=20
4 years ago. You need two cards. One will be connected to the DSL modem =
(the=20
big, bad outerworld), while the other is connected to your internal =
network hub=20
(your intranet). The gateway's job will be to pass (or block) packets =
between=20
those two network cards. For security, its very important that the =
outside world=20
packets cannot reach directly any of the intranet machines. This is the =
reason=20
why we use two ethernet cards: complete logical and <I>electrical</I> =
isolation.=20
Why so much isolation? For example, if someone(s) were launching a full=20
(distributed or not) denial of service attack on your gateway box, its=20
internet-connected ethernet card would be extremely busy, but your =
intranet=20
would see nothing of this. While any communication with the outside =
world would=20
probably fail, at least your intranet machines would still be able to =
talk to=20
each other.=20
<P>ISA cards use dedicated I/O ports and IRQ's in your machine. Those =
must be=20
setup either with jumpers directly on the card, or with a special DOS =
program if=20
the card is of the more recent "Plug &amp; Play" type. This DOS program =
is=20
always supplied with the card, when purchased brand new.=20
<P>If your card is Plug&amp;Play, you must <B>disable</B> the =
Plug&amp;Play, and=20
program specific I/O port and IRQ values with the setup software that =
comes with=20
the card. Make sure that you program both cards with different sets of =
I/O ports=20
and IRQs! Otherwise they will battle each other for cycles on the bus =
and the=20
result will not be pretty. Once you have set the parameters on the card =
it will=20
remember them and you don't have to reprogram anything later on, even if =
the=20
computer is turned off.=20
<P>It is good at this point to know a few magic numbers:=20
<TABLE cellSpacing=3D30>
  <TBODY>
  <TR>
    <TH>Card Type</TH>
    <TH>I/O #1</TH>
    <TH>IRQ #1
    <TH>Mem #1</TH></TH>
    <TH>I/O #2</TH>
    <TH>IRQ #2</TH>
    <TH>Mem #2</TH>
  <TR>
    <TD>NE2000 (ne)</TD>
    <TD>0x240 </TD>
    <TD>9 </TD>
    <TD>-- </TD>
    <TD>0x300 </TD>
    <TD>10 </TD>
    <TD>-- </TD></TR>
  <TR>
    <TD>SMC WD-8003 (we)</TD>
    <TD>0x280 </TD>
    <TD>9 </TD>
    <TD>0xd0000 </TD>
    <TD>0x300 </TD>
    <TD>10 </TD>
    <TD>0xcc000 </TD></TR></TBODY></TABLE>
<P>For example, i use two cards made by AOpen: the model ALN-101. They =
are=20
Plug&amp;Play and use the NE2000 chip. The first one is setup at I/O =
port 0x240,=20
IRQ 9. It is known as "ne0" in the GENERIC openBSD kernel. The second =
one is set=20
at I/O port 0x300, IRQ 10. It is known as "ne1". If the cards were =
programmed=20
differently, the GENERIC kernel would not recognize them "out of the =
box" and=20
you would have to re-configure the kernel. It can be done, but its much =
easier=20
to setup the hardware once than re-configure the kernel every time it =
gets=20
upgraded.=20
<P>One more thing: some cards can be used in the so-called "full-duplex" =
mode.=20
Be aware that if you want to use an ethernet card in full-duplex, your=20
<B>hub</B> must also be full-duplex, as well as the other ethernet cards =
in the=20
system. A full-duplex hub is much more expensive and not necessary at =
all.=20
Unless you know what you are doing, program your ethernet cards to use =
the=20
<B>half-duplex</B> mode, otherwise it won't play nice with the other =
components=20
in your local network, including the xDSL modem ;)=20
<P>
<H4>The hard disk</H4>
<P>The most secure storage medium is one which can't be erased. Some =
firewalls=20
actually use setups like this (with CD-ROMS) but we'll build our =
firewall with a=20
classic, writeable hard drive because:=20
<OL>
  <LI>We don't need "Absolute Security", do we? We can't have it anyway =
;)=20
  <LI>We want to use an "out-of-the-box" OpenBSD distro. This will make =
security=20
  maintenance much easier. </LI></OL>
<P>Almost any hard disk out there will work OK, since 200 MB is a safe =
minimum=20
size. The only thing you must remember is that this disk will run 24/7, =
so if=20
you use an <I>old</I> drive, it will likely die relatively soon. The =
venerable=20
drive my friend gave me lasted 6 months before i had to change it, YMMV. =

<P>
<H4>No keyboard?</H4>
<P>Of course you'll need a keyboard... and a monitor too, but just for =
the=20
installation. After the firewall is successfully installed, you will be =
able to=20
talk to it through encrypted <I>ssh</I> connections over your internal =
network,=20
so a keyboard &amp; monitor will not be really useful at that point.=20
<P>
<HR>

<H3>Getting the software</H3>
<P>We will be using <A target=3D_top =
href=3D"http://www.openbsd.org/">OpenBSD</A>.=20
Why? Because it is the most secure freely available operating system out =
there.=20
It could also be the most secure operating system, but i don't want to =
go into=20
that... All the source code included in the mainstream distribution CD's =
has=20
been audited for <I>years</I> by the OpenBSD team, which is why =
sometimes an=20
exploit published on BugTraq is found not to work on OpenBSD simply =
because the=20
faulty code was already fixed months ago.=20
<P>I strongly suggest you buy their CD-ROM kit as it comes with a set of =
very=20
cool stickers... You can also download their stuff for free, of course, =
but you=20
won't have the stickers then ;)=20
<P>This FAQ was initially written with OpenBSD version 2.7, but since =
then i got=20
and installed release <B>2.8</B> on my system and all is well.=20
<P>The easiest way to install the software is to use a CD-ROM drive on =
your=20
firewall box. If you don't have that, you can do a network install with =
the=20
"ftp" protocol, either directly to an outside OpenBSD <A target=3D_top=20
href=3D"http://www.openbsd.org/ftp.html#ftp">mirror</A>, or to one of =
your own=20
internal machines equipped with an ftp server. Be aware that if your DSL =

provider forces you to use PPPoE (boooo!), then of course your link to =
the=20
outside world will not be functional yet at installation time, which is =
one more=20
reason to use the CD-ROM. If your machine can boot a CD-ROM, great! It =
will=20
gladly boot the OpenBSD disc. Otherwise, simply create a boot diskette =
according=20
to the README and boot that. This diskette is also your rescue disk, so =
don't=20
lose it.=20
<P>
<HR>

<H3>Installing OpenBSD</H3>
<P>The installation of OpenBSD is very easy, once you have the right =
hardware,=20
and the right answers to some of the questions. In the following steps, =
i'll=20
assume you can follow the instructions of the install program and focus =
only on=20
the tricky little things you should know to make your life easier.=20
<P>
<DL>
  <DT>
  <H4>fdisk &amp; disklabel</H4>
  <DD>After you boot the installer, one of the very first things you'll =
have to=20
  do is partition your disk. This is done with the "fdisk" and =
"disklabel"=20
  programs. The installer will ask you if you want to use the entire =
hard disk=20
  for OpenBSD. Answer <B>No</B>, even if it is not entirely true. If you =
say=20
  yes, the whole fdisk step will be bypassed, and you will not be able =
to change=20
  the default cylinder/head/sector configuration in order to boot off =
the hard=20
  disk without resorting to the silly "FDISK /MBR" DOS command which is =
a stupid=20
  solution to a stupid problem.=20
  <P>The default OpenBSD fdisk partition setup choice is in slot #3... =
If you=20
  want, you can move your OpenBSD partition in slot #0 with no ill =
effect. No=20
  good effect, either. Its just a "feel good" thingie.=20
  <P>This is more important: &nbsp;to make sure your system boots off =
the hard=20
  disk, you must set the starting CHS (cylinder/head/sector) to C=3D0, =
<B>H=3D0</B>,=20
  S=3D1, because fdisk suggested an incorrect value for H in OpenBSD =
2.7, and=20
  still does in 2.8 ... If you use "1", as it suggests, your system will =
not be=20
  able to boot from the hard disk.=20
  <P>After the disk is partitioned with fdisk, you use <FONT=20
  face=3Dmonospace>disklabel</FONT> to further organize the partition. A =
label=20
  behaves like a traditional partition (as used in Linux, for example), =
except=20
  that you can put as many labels as you want in the single OpenBSD =
partition.=20
  This is useful.=20
  <P>On my old 2.7 system, the disk labels looked like =
this:<BR><BR><FONT=20
  face=3Dmonospace><PRE>  a:  2097648        0    4.2BSD     1024  8192  =
  16   # /               1 GB
  b:   262080  2097648      swap                        # SWAP          =
128 MB
  c: 20015856        0    unused        0     0         # (whole disk)   =
10 GB
  d:  2097648  2359728    4.2BSD     1024  8192    16   # /usr           =
 1 GB
  e:  2097648  4457376    4.2BSD     1024  8192    16   # /tmp           =
 1 GB
  f:  2097648  6555024    4.2BSD     1024  8192    16   # /var           =
 1 GB
  g:  4194288  8652672    4.2BSD     1024  8192    16   # /usr/local     =
 2 GB
  h:  7168896 12846960    4.2BSD     1024  8192    16   # /home          =
 3 GB
</PRE></FONT><BR>Now, on my new 2.8 system, they are much simpler and =
look=20
  like this: <BR><BR><FONT face=3Dmonospace><PRE>#        size   offset  =
  fstype   [fsize bsize   cpg]
  a: 18874800        0    4.2BSD     1024  8192    16   # (Cyl.    0 - =
18724)
  b:  1141056 18874800      swap                        # (Cyl. 18725 - =
19856)
  c: 20015856        0    unused        0     0         # (Cyl.    0 - =
19856)
</PRE></FONT>
  <P>As you see, the 'c' label is a placeholder for the whole disk, in =
all=20
  cases. Don't delete or otherwise change this, or you'll be in trouble. =
Or so=20
  they say... ;)=20
  <P>
  <P>The "df" command said this (old system), after the OS is installed, =
with=20
  its complete source trees: <BR><FONT face=3Dmonospace><PRE>Filesystem  =
    1K-blocks     Used    Avail Capacity  Mounted on
/dev/wd0a         1015269    25985   938521     3%    /
/dev/wd0d         1015269   480284   484222    50%    /usr
/dev/wd0e         1015269        1   964505     0%    /tmp
/dev/wd0f         1015269     5141   959365     1%    /var
/dev/wd0g         2030307     8698  1920094     0%    /usr/local
/dev/wd0h         3470505       27  3296953     0%    /home
</PRE></FONT>
  <P>and now says this on my new system:=20
  <P><FONT face=3Dmonospace><PRE>Filesystem                           =
1K-blocks     Used    Avail Capacity  Mounted on
/dev/wd0a                              9137589   503054  8177656     6%  =
  /
</PRE></FONT>
  <P>
  <P>In this example, the full OpenBSD source tree is installed, which =
explains=20
  why the thing uses up about 500 MB. Without the source tree, you only =
need=20
  about 120 MB in there, but having the source tree allows you to make =
security=20
  patches as they are published. This is important and i'll talk about =
it more=20
  later.</P>
  <P>
  <P></P>
  <DT>
  <H4>Active FTP</H4>
  <DD>If you do an FTP install to a private FTP server, it might be =
necessary to=20
  use active FTP.=20
  <P></P>
  <DT>
  <H4>Don't forget SSL!</H4>
  <DD>The crytographic packages are very important, don't forget to =
install them=20
  as well. In release 2.7, they were installed after the first set of =
packages,=20
  in a second round of ftp downloads. With release 2.8, they are =
automatically=20
  installed, without special efforts.=20
  <P></P>
  <DT>
  <H4>UTC time zone</H4>
  <DD>Keep your server in the UTC time zone. This way, your firewall =
logs will=20
  be timestamped in UTC time and it will be simpler to have them =
interpreted by=20
  the <FONT face=3Dmonospace>abuse@...</FONT> services of ISP's. Also, =
it is=20
  important to make sure the gateway is time-synchronized to one of the =
numerous=20
  public NTP servers out there, because having only an IP address is not =
enough=20
  to pin down internet abusers. In this age of dynamic IP allocations =
you need=20
  <B>both</B> IP address and exact time in order to positively identify =
the=20
  origin of an IP packet. Keep your gateway synchronized.=20
  <P>Why not GMT instead? Read all about it <A target=3D_top=20
  href=3D"http://www.fai.org/astronautics/time.asp">there</A>.=20
  <P>How to change the timezone? Simply by making <FONT=20
  face=3Dmonospace>/etc/localtime</FONT> point to <FONT=20
  face=3Dmonospace>/usr/share/zoneinfo/UTC</FONT> with a soft link: =
<BR><BR><FONT=20
  face=3Dmonospace>ln -s /usr/share/zoneinfo/UTC /etc/localtime</FONT>=20
  <P></P>
  <DT>
  <H4>First Boot</H4>
  <DD><FONT face=3Dmonospace>reboot</FONT> ... did your machine boot =
correctly? If=20
  not, please consult the numerous FAQ's available at <A target=3D_top=20
  href=3D"http://www.openbsd.org/">the OpenBSD site</A>. Are you sure =
you set=20
  <I>H=3D0</I> in fdisk? By the way, if it doesn't boot from hard disk, =
you can=20
  probably still force it by first booting the install diskette, and =
entering=20
  "<FONT face=3Dmonospace>boot wd0a:/bsd</FONT>" at the initial prompt. =
You have=20
  about 5 seconds to make your mind, when you see this prompt, so act =
quickly.=20
  <P>On first boot, you will probably get a message like "ssh-keygen: =
generating=20
  new DSA host key...", followed with an equivalent message for the RSA =
host=20
  key. They might take quite a long time on a 486 (5-10 minutes), so =
<B>Don't=20
  Panic! <FONT size=3D-1>(tm)</FONT></B> , the machine is not crashed, =
and the=20
  boot process will eventually follow its course, given time. This will =
happen=20
  only on the first boot.=20
  <P></P>
  <DT>
  <H4>Kernel extra configuration</H4>
  <DD>If, at this point, the kernel sees all you devices (including both =

  ethernet cards), congratulations. If not, you can reconfigure the =
kernel=20
  without having to recompile it by simply using the <FONT=20
  face=3Dmonospace>config</FONT> utility. Typically, you would copy your =
current=20
  kernel (the "<FONT face=3Dmonospace>/bsd</FONT>" file) to an =
appropriate backup=20
  name (e.g. "<FONT face=3Dmonospace>/bsd.ORIGINAL</FONT>"), and issue =
this=20
  command: <BR><BR><PRE><FONT face=3Dmonospace>config -e -f =
/bsd</FONT></PRE><BR>and make whatever=20
  changes you need. You should know what you're doing in order to use =
this=20
  command without blowing your system up into tiny bits &amp; pieces. =
Don't=20
  forget to save your changes. If this modified kernel doesn't work OK, =
just=20
  boot the "<FONT face=3Dmonospace>/bsd.ORIGINAL</FONT>" kernel instead, =
and you=20
  will have another chance.
  <P></P>
  <P></P>
  <DT>
  <H4>Sys control files</H4>
  <DD>The services allowed by OpenBSD are configured by a couple of =
files in the=20
  <FONT face=3Dmonospace>/etc</FONT> directory. Actually, this directory =
contains=20
  <I>all</I> the configuration files of OpenBSD, for your convenience, =
but this=20
  is something you'll only appreciate later, when you become an =
experienced BSD=20
  maintainer... We'll come back to that <FONT =
face=3Dmonospace>/etc</FONT>=20
  directory quite often.=20
  <P>For now, just make sure that the following are enabled:=20
  <DL>
    <DT>In the file <FONT =
face=3Dmonospace>/etc/sysctl.conf</FONT>&nbsp;&nbsp;:=20
    <FONT face=3Dmonospace><PRE>net.inet.ip.forwarding=3D1
</PRE></FONT></DT></DL><BR>
  <DL>
    <DT>and in <FONT face=3Dmonospace>/etc/rc.conf</FONT>&nbsp;&nbsp;: =
<FONT=20
    face=3Dmonospace><PRE>sendmail_flags=3D"-bd -q30m"
named_flags=3D""
httpd_flags=3D"-DSSL"
ipmon_flags=3D-Ds</PRE></FONT></DT></DL><A name=3Dc1_10_2></A>
  <P></P>
  <DT>
  <H4>PPP &amp; PPPoE</H4>
  <DD>Ahhhh... the Evil Beast. Installing a good, working PPP and PPPoE =
can be=20
  quite a tricky task. In OpenBSD version 2.7, PPPoE was not included, =
you had=20
  to download it. Now, in OpenBSD 2.8, it is included, but i would=20
  <B>strongly</B> advise in favor of installing and compiling the latest =
CVS=20
  versions. Most essentially, the updated PPP supports the "mssfixup"=20
  instruction which magically allows you to avoid setting MTU's at 1492 =
or less=20
  on all of your intranet's machines. This is very recommended as it =
avoids a=20
  whole bunch of problems.=20
  <P>The source files for PPP and PPPoE are <A target=3D_top=20
  =
href=3D"http://www.openbsd.org/cgi-bin/cvsweb/src/usr.sbin/">there</A>. =
<!--=0A=
 One way which works quite well for me is to get it from one of the CVS =
servers.  Here is how its done:=0A=
=0A=
<br>=0A=
=0A=
<ol>=0A=
  <li>Login as root  </li>=0A=
  <li><font face=3D"monospace">setenv CVSROOT =
:pserver:anoncvs@cvs.bsdfr.org:/cvs</font>  </li>=0A=
  <li><font face=3D"monospace">cvs login</font>  <br><font =
size=3D"-1">(Here the password is "<font =
face=3D"monospace">anoncvs</font>")</font></li>=0A=
  <li>If you have already installed the openBSD source tree, just go to =
<font face=3D"monospace">/usr/src/usr.sbin/ppp</font> and do "<font =
face=3D"monospace">cvs -q update -d</font>"=0A=
      <br>=0A=
      Otherwise, go to <font face=3D"monospace">/usr</font> and do =
"<font face=3D"monospace">cvs co src/usr.sbin/ppp</font>"  </li>=0A=
  <li>Do the same thing for <font face=3D"monospace">pppoe</font>  </li>=0A=
  <li>Go into the <font face=3D"monospace">ppp</font> directory and do a =
"<font face=3D"monospace">make</font>", followed by a "<font =
face=3D"monospace">make install</font>"  </li>=0A=
  <li>Do the same thing for <font face=3D"monospace">pppoe</font> </li>=0A=
</ol>=0A=
=0A=
<p>=0A=
=0A=
That's it!  Now you should have brand new versions of our favorite =
programs.=0A=
-->
  <P>The configuration file for ppp is in <FONT=20
  face=3Dmonospace>/etc/ppp/ppp.conf</FONT>. Mine contains exactly this: =
<PRE>default:
 set log Phase Chat IPCP CCP tun command
 set redial 15 0
 set reconnect 15 10000

pppoe:
 set device "!/usr/sbin/pppoe -i ne0"
 disable acfcomp protocomp
 deny acfcomp
 set mtu 1488
 set speed sync
 enable lqr
 set lqrperiod 5
 set cd 5
 set dial
 set login
 set timeout 0
 set authname xxxxxxx
 set authkey xxxxxx
 add default HISADDR
 enable dns
 enable mssfixup
</PRE>
  <P>Notice how we specify the real network interface <FONT=20
  face=3Dmonospace>ne0</FONT> to pppoe (with double quotes), and that i =
use 1488=20
  for the MTU value. Also, no value is specified for the MRU, the PPP =
network=20
  address translation is not enabled, and the magic "mssfixup" is =
enabled.=20
  <P>Also notice that the <FONT face=3Dmonospace>authname</FONT> and =
<FONT=20
  face=3Dmonospace>authkey</FONT> fields don't contain double-quote =
characters.=20
  You should put in there your own ISP identification and password.=20
  <P><B>VERY IMPORTANT!</B>=20
  <P>For some reason, it seems that the routes setup automatically by =
ppp at=20
  linkup time are not quite correctly defined. This does not prevent the =

  machines on your intranet from accessing the Internet through the the =
gateway,=20
  however it might cause problems to people accessing a WEB server in =
your=20
  intranet.=20
  <P>Issuing the command "<FONT face=3Dmonospace>netstat -rn</FONT>" =
should show=20
  you something like this: <PRE>Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use    Mtu  =
Interface
default            64.229.199.1       UGS         3    90847   1500  =
tun0
64.229.199.1       64.229.199.131     UH          1        0   1500  =
tun0
127/8              127.0.0.1          UGRS        0        0  32972  lo0
127.0.0.1          127.0.0.1          UH          3     1174  32972  lo0
...
</PRE>
  <P>Notice the spurious route (64.229.199.1) which never gets used, as =
well as=20
  the <B>MTU set to 1500 on the default route</B>! This is definitely =
not=20
  normal, and will cause many weird problems. In order to have a =
properly set=20
  MTU, simply edit the file <FONT =
face=3Dmonospace>/etc/ppp/ppp.linkup</FONT> and=20
  put this in there.=20
  <P><PRE>MYADDR:
 ! sh -c "/sbin/route change default -mtu 1488"

</PRE>
  <P>This will reset the route's MTU to 1488 whenever the ppp link comes =
up. It=20
  has solved a problem I had with some ZoneAlarm users trying to access =
this web=20
  site. Now the problem is fixed. ;)=20
  <P><B>Note:</B> I consider this PPP/PPPoE setup to be a work in =
progress. I=20
  continually discover new things about it... so, please bear with me =
and=20
  <I>do</I> send me your feedback about your own experience regarding =
PPP/PPPoE.=20
  It really is a pain, but apparently we will be stuck with it for a =
long long=20
  time, so we might as well learn how to tame the thing!=20
  <P></P>
  <DT>
  <H4>Second Boot</H4>
  <DD><FONT face=3Dmonospace>reboot</FONT> ... your machine should boot =
correctly.=20
  You won't have internet access yet because the ppp program is not =
activated.=20
  If you want to try it out, just issue=20
  <P><PRE>ppp -ddial pppoe</PRE><BR>
  <P>and ping/telnet away. Be careful, though, because at this point you =
have no=20
  firewall rules set, so you are <B>very vulnerable</B>. Also, make sure =
your=20
  xDSL modem is plugged in the correct ethernet card... <BR></P>
  <DT>
  <H4>The afterboot phase</H4>
  <DD>Follow the instructions obtained by issuing the "<FONT =
face=3Dmonospace>man=20
  <A target=3D_top=20
  =
href=3D"http://www.openbsd.org/cgi-bin/man.cgi?query=3Dafterboot&amp;apro=
pos=3D0&amp;sektion=3D8&amp;format=3Dhtml">afterboot</A></FONT>"=20
  command. Actually, quoting FAQ section <A target=3D_top=20
  href=3D"http://www.openbsd.org/faq/faq2.html">2.3</A>, here is a list =
of the=20
  most useful man pages for new users:=20
  <P><PRE>     * [15]afterboot(8) - things to check after the first =
complete boot
     * [16]boot(8) - system boot strapping procedures
     * [17]passwd.conf(5) - format of the password configuration file
     * [18]adduser_proc(8) - procedure for adding new users
     * [19]adduser(8) - command for adding new users
     * [20]vipw(8) - edit the pass word file
     * [21]man(1) - display the on-line manual pages
     * [22]sendbug(1) - send a problem report (PR) about OpenBSD to a
       central support site.
     * [23]disklabel(8) - Read and write disk pack label.
     * [24]ifconfig(8) - configure network interface parameters.
     * [25]route(8) - manually manipulate the routing tables.
     * [26]netstat(1) - show network status.
     * [27]reboot, halt(8) - Stopping and restarting the system.
     * [28]shutdown(8) - close down the system at a given time.
     * [29]boot_config(8) - how to change kernel configuration at boot
</PRE><BR>
  <P>One of the first things you should do at this point is to add an=20
  unprivileged user and make him member of the wheel group. This is =
because, for=20
  security reasons, it is never a good idea to log in directly as root. =
The=20
  preferred way to gain root privileges is to login as a wheel member, =
and then=20
  use the "<FONT face=3Dmonospace>su -</FONT>" command to gain root =
privileges.=20
  <P>OpenBSD will not prevent you from logging in directly as root, but =
will=20
  warn you every time against doing it.=20
  <P>Have fun!=20
  <P></P>
  <DT>
  <H4>Firewall and NAT rule sets</H4>
  <DD>This is a tricky one. Many people earn a good living just by =
knowing how=20
  to write firewall rule sets! Here are my own ipf rules, in all their =
glory. Be=20
  aware that they might be either too restrictive, or not enough, =
depending on=20
  your context. My philosophy about this is to disallow everything by =
default,=20
  and only open whatever is known to be useful.=20
  <P>The original ipf site is <A target=3D_top=20
  href=3D"http://www.ipfilter.org/">there</A>, and an excellent firewall =
HOW-TO is=20
  available <A target=3D_top=20
  href=3D"http://www.obfuscation.org/ipf/ipf-howto.html">there</A>. =
Don't forget=20
  to <A href=3D"mailto:hello@real.ath.cx">send me</A> <I>your</I> tips =
for better=20
  rules... Thanks!=20
  <P>
  <DL>
    <DT><B><FONT face=3Dmonospace>/etc/ipnat.rules</FONT></B>=20
    <DD><PRE># $OpenBSD: ipnat.rules,v 1.2 1999/05/08 16:33:10 jason Exp =
$
#
# See /usr/share/ipf/nat.1 for examples.
# edit the ipnat=3D line in /etc/rc.conf to enable Network Address =
Translation

map tun0 192.168.1.0/24 -&gt; tun0/32 proxy port ftp ftp/tcp
map tun0 192.168.1.0/24 -&gt; tun0/32 portmap tcp/udp auto
map tun0 192.168.1.0/24 -&gt; tun0/32

</PRE></DD></DL>
  <P>Note that, for some people, performance was improved by replacing =
the=20
  second line in ipnat.rules by this one: <BR>
  <DL>
    <DD><PRE>map tun0 192.168.1.0/24 -&gt; tun0/32 portmap tcp/udp =
10000:20000
</PRE></DD></DL>
  <P>
  <P>
  <DL>
    <DT><B><FONT face=3Dmonospace>/etc/ipf.rules</FONT></B>=20
    =
<DD><PRE>#---------------------------------------------------------------=
-----------
# tun0 - external interface
# ne1 - internal interface
#------------------------------------------------------------------------=
--
# First, nasty pakets which we don't want near us at all
# pakets which are too short to be real except echo replies on lo0
block in log quick all with short
block in log quick all with opt lsrr
block in log quick all with opt ssrr
block in log quick all with ipopts
block in log quick on tun0 all with frags

block in quick on tun1 all
block out quick on tun1  all

#------------------------------------------------------------------------=
-
# fuzz any 'nmap' attempt
block in log quick on tun0 proto tcp from any to any flags FUP
block in log quick on tun0 proto tcp from any to any flags SF/SFRA
block in log quick on tun0 proto tcp from any to any flags /SFRA
#------------------------------------------------------------------------=
-

#------------------------------------------------------------------------=
--
# loopback packets left unmolested
pass in  quick on lo0 all
pass out  quick on lo0 all
#------------------------------------------------------------------------=
--


#------------------------------------------------------------------------=
--
# Group setup:
# 100 incoming tun0
# 150 outgoing tun0
# 200 incoming ne1
# 250 outgoing ne1
#------------------------------------------------------------------------=
--
block in log body on tun0 all head 100
block out log body on tun0 all head 150
#------------------------------------------------------------------------=
--
block in log on ne1 all head 200
block out log on ne1 all head 250
#------------------------------------------------------------------------=
--


#------------------------------------------------------------------------=
--
# incoming tun0 traffic - group 100
#------------------------------------------------------------------------=
--
# 1) prevent localhost spoofing
block in log quick from 127.0.0.1/32 to 192.168.1.0/24 group 100
block in log quick from any to 127.0.0.1/8 group 100
#------------------------------------------------------------------------=
--
# 2) deny pakets which should not be seen on th internet (paranoid)
block in log quick from 10.0.0.0/8 to any group 100
block in log quick from any to 10.0.0.0/8 group 100
block in log quick from 172.16.0.0/16 to any group 100
block in log quick from any to 172.16.0.0/16 group 100
block in log quick from 192.168.0.0/16 to any group 100
block in log quick from any to 192.168.0.0/16 group 100
#------------------------------------------------------------------------=
--
# 3) Implemented  Policy

# Allow WEB
pass in quick proto tcp from any to any port =3D 80 flags S/SA keep =
state group 100
pass in quick proto tcp from any to any port =3D 443 flags S/SA keep =
state group 100

# allow Mail
pass in quick proto tcp from any to any port =3D 25 flags S/SA keep =
state group 100

# allow certain classes of ICMP
pass in log quick  proto icmp all icmp-type 0 group 100
pass in log quick  proto icmp all icmp-type 3 group 100
pass in log quick  proto icmp all icmp-type 11 group 100
block in  log proto icmp all group 100

# if nothing applies, block and return icmp-replies (unreachable and =
rst)
block return-icmp(net-unr) in log proto udp from any to any group 100
block return-rst in log proto tcp from any to any group 100


#------------------------------------------------------------------------=
--
# outgoing tun0 traffic - group 150
#------------------------------------------------------------------------=
--

# ALL !!
#pass out log proto tcp/udp from any to any flags S/SA keep state keep =
frags group 150

# CVS
pass out quick proto tcp from any to any port =3D 2401 flags S/SA keep =
state group 150

# DNS
pass out quick proto tcp/udp from any to any port =3D 53 keep state =
group 150

# http-service
pass out quick proto tcp from any to any port =3D 80 flags S/SA keep =
state keep frags group 150
pass out quick proto tcp from any to any port =3D 443 flags S/SA keep =
state keep frags group 150

# smtp
pass out quick proto tcp from any to any port =3D 25 flags S/SA keep =
state group 150

# identd (that we get)
pass out quick proto tcp from any to any port =3D 113 flags S/SA keep =
state group 150

# pop3
pass out quick proto tcp from any to any port =3D 110 flags S/SA keep =
state group 150

# ftp
pass out quick proto tcp/udp from any to any port =3D 21 keep state =
group 150

# NTP
pass out quick proto udp from any to any port =3D 123  keep state group =
150

# nntp
pass out quick proto tcp from any to any port =3D 119 flags S/SA keep =
state keep frags group 150

# XMMS
pass out quick proto tcp from any to any port =3D 8000 flags S/SA keep =
state group 150
pass out quick proto tcp from any to any port =3D 7500 flags S/SA keep =
state group 150

# Napster
#pass out quick proto tcp from any to any port =3D 8888 flags S/SA keep =
state keep frags group 150
#pass out quick proto tcp from any to any port =3D 8875 flags S/SA keep =
state keep frags group 150

# IRC chat
pass out quick proto tcp from any to any port =3D 6667 flags S/SA keep =
state keep frags group 150

# Pings
pass out quick proto icmp from any to any keep state group 150

# RealAudio
pass out quick proto tcp from any to any port =3D 7070 flags S/SA keep =
state keep frags group 150
pass out quick proto tcp from any to any port =3D 8080 flags S/SA keep =
state keep frags group 150
pass out quick proto tcp from any to any port =3D 554 flags S/SA keep =
state keep frags group 150

# SHOUTCAST
pass out quick proto tcp from any to any port =3D 8038 flags S/SA keep =
state keep frags group 150


#------------------------------------------------------------------------=
--

#------------------------------------------------------------------------=
--
# incoming traffic on ne1 - group 200
#------------------------------------------------------------------------=
--
# 1) prevent localhost spoofing
block in log quick from 127.0.0.0/8 to any group 200
#block in log quick from 192.168.0.1/32 to any group 200
block in log quick from 192.168.1.2/32 to any group 200
pass in quick from 192.168.1.0/24 to any  group 200
#------------------------------------------------------------------------=
--
# outgoing traffic on ne1 - group 250
#------------------------------------------------------------------------=
--
block out log quick from 127.0.0.0/8 to any group 250
block out log quick from any to 127.0.0.0/8 group 250
#block out log quick from any to 192.168.0.1/32 group 250
pass out quick from any to any group 250
#------------------------------------------------------------------------=
--
</PRE></DD></DL><BR>That's it! Nothing too painful, as you see. Since =
<FONT=20
  face=3Dmonospace>ipf</FONT> is a stateful inspection firewall, we can =
keep our=20
  ingress rules to a strict minimum. Moreover, notice the use of the ftp =
proxy=20
  capability of <FONT face=3Dmonospace>ipnat</FONT>. It works very well. =

  <P>One last thing: in order to automagically enable your firewall when =
the=20
  link comes up, you can put the following lines in the <FONT=20
  face=3Dmonospace>/etc/ppp/ppp.linkup</FONT> file: <PRE>MYADDR:
 ! sh -c "/sbin/route change default -mtu 1488"
 ! sh -c "/sbin/ipf -Fs -FS -Fa -f  /etc/ipf.rules"
 ! sh -c "/sbin/ipnat -CF -f /etc/ipnat.rules"
</PRE>
  <P><A name=3Dc1_09_3></A></P>
  <DT>
  <H4>Adding stuff to <FONT face=3Dmonospace>/etc/rc.local</FONT></H4>
  <DD>This is where our custom startup instructions go. Those things are =
started=20
  while the kernel is in secure level 1. If you need anything started in =
a lower=20
  security level, modify <FONT =
face=3Dmonospace>/etc/rc.securelevel</FONT>=20
  instead. In order to start up PPPoE correctly, I added this at the end =
of my=20
  <FONT face=3Dmonospace>/etc/rc.local</FONT> &nbsp;&nbsp;:=20
  <P><PRE>ifconfig ne0 up
ppp -ddial pppoe
</PRE>
  <P>
  <P>This starts PPP, PPPoE, the firewall and the NAT translator =
(because the=20
  firewall and the NAT are started automatically in the <FONT=20
  face=3Dmonospace>ppp.linkup</FONT> file). If you're curious, you can =
reboot at=20
  this point, and confirm that you have a fully firewalled internet =
access:=20
  <P><PRE>pcreal# ifconfig -a
lo0: flags=3D8009<UP,LOOPBACK,MULTICAST> mtu 32972
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
lo1: flags=3D8008<LOOPBACK,MULTICAST> mtu 32972
ne0: flags=3D8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu =
1500
        media: Ethernet autoselect (10baseT)
        inet6 fe80::260:67ff:fe25:5c86%ne0 prefixlen 64 scopeid 0x1
ne1: flags=3D8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu =
1500
        media: Ethernet autoselect (10baseT)
        inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::260:67ff:fe25:283a%ne1 prefixlen 64 scopeid 0x2
sl0: flags=3Dc010<POINTOPOINT,LINK2,MULTICAST> mtu 296
sl1: flags=3Dc010<POINTOPOINT,LINK2,MULTICAST> mtu 296
ppp0: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1500
ppp1: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1500
tun0: flags=3D11<UP,POINTOPOINT> mtu 1488
        inet 64.229.199.131 --&gt; 64.229.199.1 netmask 0xff000000
tun1: flags=3D10<POINTOPOINT> mtu 1500
enc0: flags=3D0&lt;&gt; mtu 1536
enc1: flags=3D0&lt;&gt; mtu 1536
enc2: flags=3D0&lt;&gt; mtu 1536
enc3: flags=3D0&lt;&gt; mtu 1536
bridge0: flags=3D0&lt;&gt; mtu 1500
bridge1: flags=3D0&lt;&gt; mtu 1500
gre0: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1450
gif0: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1280
gif1: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1280
gif2: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1280
gif3: flags=3D8010<POINTOPOINT,MULTICAST> mtu 1280


pcreal# ipfstat -hi
0 block in log quick from any to any with short
0 block in log quick from any to any with opt lsrr
0 block in log quick from any to any with opt ssrr
0 block in log quick from any to any with ipopt
0 block in log quick on tun0 from any to any with frag
0 block in quick on tun1 from any to any
0 block in log quick on tun0 proto tcp from any to any flags FPU/FSRPAU
0 block in log quick on tun0 proto tcp from any to any flags FS/FSRA
0 block in log quick on tun0 proto tcp from any to any flags /FSRA
1 pass in quick on lo0 from any to any
1 block in log body on tun0 from any to any head 100
0 block in log quick from 127.0.0.1/32 to 192.168.1.0/24 group 100
0 block in log quick from any to 127.0.0.0/8 group 100
0 block in log quick from 10.0.0.0/8 to any group 100
0 block in log quick from any to 10.0.0.0/8 group 100
0 block in log quick from 172.16.0.0/16 to any group 100
0 block in log quick from any to 172.16.0.0/16 group 100
0 block in log quick from 192.168.0.0/16 to any group 100
0 block in log quick from any to 192.168.0.0/16 group 100
0 pass in quick proto tcp from any to any port =3D 80 flags S/SA keep =
state group 100
0 pass in quick proto tcp from any to any port =3D 443 flags S/SA keep =
state group 100
1 pass in quick proto tcp from any to any port =3D 25 flags S/SA keep =
state group 100
0 pass in log quick proto icmp from any to any icmp-type echorep group =
100
0 pass in log quick proto icmp from any to any icmp-type unreach group =
100
0 pass in log quick proto icmp from any to any icmp-type timex group 100
0 block in log proto icmp from any to any group 100
0 block return-icmp in log proto udp from any to any group 100
0 block return-rst in log proto tcp from any to any group 100
307 block in log on ne1 from any to any head 200
0 block in log quick from 127.0.0.0/8 to any group 200
0 block in log quick from 192.168.1.2/32 to any group 200
443 pass in quick from 192.168.1.0/24 to any group 200


pcreal# ipfstat -ho
0 block out quick on tun1 from any to any
1 pass out quick on lo0 from any to any
26 block out log body on tun0 from any to any head 150
0 pass out quick proto tcp from any to any port =3D 2401 flags S/SA keep =
state group 150
17 pass out quick proto tcp/udp from any to any port =3D domain keep =
state group 150
3 pass out quick proto tcp from any to any port =3D 80 flags S/SA keep =
state keep frags group 150
0 pass out quick proto tcp from any to any port =3D 443 flags S/SA keep =
state keep frags group 150
0 pass out quick proto tcp from any to any port =3D 25 flags S/SA keep =
state group 150
1 pass out quick proto tcp from any to any port =3D 113 flags S/SA keep =
state group 150
0 pass out quick proto tcp from any to any port =3D 110 flags S/SA keep =
state group 150
0 pass out quick proto tcp/udp from any to any port =3D 21 keep state =
group 150
0 pass out quick proto udp from any to any port =3D 123 keep state group =
150
0 pass out quick proto tcp from any to any port =3D 119 flags S/SA keep =
state keep frags group 150
0 pass out quick proto tcp from any to any port =3D 8000 flags S/SA keep =
state group 150
0 pass out quick proto tcp from any to any port =3D 7500 flags S/SA keep =
state group 150
0 pass out quick proto tcp from any to any port =3D 6667 flags S/SA keep =
state keep frags group 150
0 pass out quick proto icmp from any to any keep state group 150
0 pass out quick proto tcp from any to any port =3D 7070 flags S/SA keep =
state keep frags group 150
0 pass out quick proto tcp from any to any port =3D 8080 flags S/SA keep =
state keep frags group 150
0 pass out quick proto tcp from any to any port =3D 554 flags S/SA keep =
state keep frags group 150
0 pass out quick proto tcp from any to any port =3D 8038 flags S/SA keep =
state keep frags group 150
457 block out log on ne1 from any to any head 250
0 block out log quick from 127.0.0.0/8 to any group 250
0 block out log quick from any to 127.0.0.0/8 group 250
557 pass out quick from any to any group 250
</PRE>
  <P></P>
  <DT>
  <H4>The NTP daemon</H4>
  <DD>In version 2.7 of OpenBSD, the ntpd daemon is not included. =
However, you=20
  can <A target=3D_top=20
  href=3D"http://www.openbsd.org/2.7_packages/i386.html">download</A> it =
as a=20
  package, and install it with the <FONT face=3Dmonospace><A=20
  =
href=3D"http://www.openbsd.org/cgi-bin/man.cgi?query=3Dpkg_add&amp;apropo=
s=3D0&amp;sektion=3D0&amp;manpath=3DOpenBSD+Current&amp;arch=3Di386&amp;f=
ormat=3Dhtml">pkg_add</A></FONT>=20
  command. Since you have internet connectivity by now, you can download =
&amp;=20
  install it in a single command:=20
  <P><PRE>pkg_add =
ftp://ftp.openbsd.org/pub/OpenBSD/2.7/packages/i386/xntp3-5.93e-export.tg=
z</PRE>
  <P>
  <P>Once the package is installed, in order to make it work correctly, =
you must=20
  add "<FONT face=3Dmonospace>-A</FONT>" to ntp's startup script, and =
replace it=20
  with xntpd:=20
  <P><PRE>rc.securelevel:       echo -n ' ntpd';       =
/usr/local/sbin/xntpd -A </PRE>
  <P>
  <P>Moreover, you will need a valid <FONT =
face=3Dmonospace>/etc/ntp.conf</FONT>=20
  file:=20
  <P><PRE>pcreal# cat /etc/ntp.conf
server 128.100.102.201
driftfile /etc/ntp.drift
</PRE>
  <P>
  <P>Feel free to use any other atomic time server if you want. Also, =
the drift=20
  file will be created &amp; maintained automagically. <BR></P>
  <DT>
  <H4>The Dynamic DNS</H4>
  <DD>Dynamic DNS is wonderful thing. Basically, you just go to a dyndns =

  provider like <A target=3D_top href=3D"http://www.dyndns.org/">those =
nice=20
  people</A> and 10 minutes later you have your very own domain, for =
free. In=20
  order to make that domain dynamically follow your IP address changes, =
you must=20
  use a special client program which must be called whenever your IP =
changes.=20
  <P>Until recently I liked <A target=3D_top =
href=3D"http://www.ddup.org/">ddup</A>,=20
  but now i use <A target=3D_top=20
  href=3D"http://ipcheck.sourceforge.net/">ipcheck</A>. The latter is =
truly=20
  compliant with all of dyndns's client specification, and maintains its =
state=20
  automatically in system files. You will have to install the <A =
target=3D_top=20
  href=3D"http://www.openbsd.org/2.8_packages/">python package</A> if =
you use=20
  "ipcheck". Also, you'll need your user ID and password from the dyndns =

  provider.=20
  <P>One more advice: it is perfectly acceptable to have more than one =
domain=20
  pointing at the same IP address. Remember this when choosing one or =
more=20
  domain names...=20
  <P></P>
  <DT>
  <H4>Keeping your xDSL link <I>alive</I> 24/7</H4>
  <DD>xDSL connections are very reliable, but ISP's are not ;) =
&nbsp;&nbsp; For=20
  many reasons unfathomable, you will sometimes lose your connection. =
There are=20
  many methods of re-establishing that connection automatically, and =
i'll=20
  describe here two of them.=20
  <P><A name=3Dc1_09_1></A><A name=3Dc1_10_1></A><A name=3Dc1_09_2></A>
  <H4>Method 1 <FONT size=3D-1>(The one I use, now)</FONT></H4>
  <P>Make sure you initialise ppp with the "-ddial" command, and NOT the =

  "-background" command...=20
  <P>This is the simpler method. The automatic restart of the ppp link =
is=20
  handled by ppp itself (using the "-ddial" command), which is quite =
handy. This=20
  leaves us with the dyndns updates, which are performed intelligently =
by <FONT=20
  face=3Dmonospace>ipcheck.py</FONT> . An easy way of doing it is to =
create an=20
  executable file named "do_ipcheck" which contains this: <PRE>#!/bin/sh
/usr/local/sbin/ipcheck.py -q -d /etc/ipcheck -i tun0  -w Username =
Password DomainName1,DomainName2
</PRE>
  <P>with your own Username, Password and Domain names, of course. Then, =
all you=20
  have to do is to add the following line to crontab: <PRE>*/5     *     =
  *       *       *       /usr/local/sbin/do_ipcheck
</PRE>
  <P>Also, don't forget to create the directory <FONT=20
  face=3Dmonospace>/etc/ipcheck</FONT> and make sure your <FONT=20
  face=3Dmonospace>/etc/ppp/ppp.linkup</FONT> file looks like this: =
<PRE>MYADDR:
 ! sh -c "/sbin/route change default -mtu 1488"
 ! sh -c "/sbin/ipf -Fs -FS -Fa -f  /etc/ipf.rules"
 ! sh -c "/sbin/ipnat -CF -f /etc/ipnat.rules"
</PRE>
  <P>DON'T call "do_ipcheck" from "ppp.linkup" ... For some reason, the =
python=20
  script messes up with the ppp link establishment in a rather nasty =
way. Just=20
  rely on the cron job firing up within 5 minutes instead and all should =
be OK.=20
  <P>This setup should garantee the proper restart of the firewall &amp; =
ipnat=20
  each time the ppp link is brought up again.=20
  <P>
  <H4>Method 2 <FONT size=3D-1>(<B>Deprecated</B>, i'm not doing this =
anymore even=20
  if it worked reliably)</FONT></H4>
  <P>This is the "complicated method"... If you use this method, do NOT=20
  initialize ppp with the "-ddial" command. Instead, use the =
"-background"=20
  command.=20
  <P>The trick here is to have a couple of scripts working in the =
background=20
  which will try to re-establish your link automatically. I use two =
scripts for=20
  this. One monitors the DSL link proper: <FONT=20
  face=3Dmonospace>/usr/local/sbin/test_hse</FONT> &nbsp; while the =
other is used=20
  to monitor &amp; maintain the dynamic DNS: <FONT=20
  face=3Dmonospace>/usr/local/sbin/test_ddns</FONT>&nbsp;&nbsp;. Both =
must be=20
  included in the root crontab file by issuing the command "<FONT=20
  face=3Dmonospace>crontab -e</FONT>" and adding these two lines: =
<BR><BR><PRE>*/1     *       *       *       *       =
/usr/local/sbin/test_hse
*/5     *       *       *       *       /usr/local/sbin/test_ddns
</PRE><BR>
  <P>Here are my scripts. Consider them still experimental because they =
are not=20
  quite perfect yet. Yes.. i know i am no shell guru. If <I>you</I> =
happen to be=20
  one, i'll be pleased to use your scripts and put them up here. Oh, and =
don't=20
  forget to change them with domain names &amp; parameters that apply to =
your=20
  own setup! <BR><BR>
  <DL>
    <DT><B><FONT face=3Dmonospace>/usr/local/sbin/test_hse</FONT></B>=20
    <DD><PRE>#!/bin/sh


# Change IFACE to your network interface name
IFACE=3D"tun0"

IFCHECK=3D$(/sbin/ifconfig -a | grep -2 $IFACE |  cut -s -d ' ' -f 2 | =
grep '\.')

if [ "x$IFCHECK"  =3D "x" ]; then
        IFCHECK=3D"Error"
fi

DNSCHECK=3D$(host www.sympatico.ca | grep '.')



if [ "x$DNSCHECK" =3D "x" ]; then
#if ! [ "x$IFCHECK" !=3D "xError" ]; then
    #echo "We're ok, current IP is $IFCHECK"
    #/usr/bin/logger "dyndns: OK"
#else
        echo "We seem to have lost HSE connectivity..."
        /usr/bin/logger "test_hse: *** Detected loss of HSE, trying to =
restart PPPoE"
        ps ax | grep "[p]pp -" | awk '{system("kill " $1)}'
        sleep 30
        /usr/sbin/ppp -background pppoe
        IFCHECK=3D$(/sbin/ifconfig -a | grep -2 $IFACE |  cut -s -d ' ' =
-f 2 | grep '\.')
        if [ "x$IFCHECK" =3D "x" ]; then
            echo "Timeout on ppp, aborting without an IP"
        else
            sleep 1
            /sbin/ipf -FS -Fa -f  /etc/ipf.rules
            /usr/bin/logger "test_hse: Firewall restarted with new IP: =
$IFCHECK"
            echo "Before ipnat:"
            /sbin/ipnat -l
            echo "After new ipnat:"
            /sbin/ipnat -CF -f /etc/ipnat.rules
            /sbin/ifconfig -a
            /sbin/ipnat -l
        fi
fi


</PRE><BR><BR>
    <DT><B><FONT face=3Dmonospace>/usr/local/sbin/test_ddns</FONT></B>=20
    <DD><PRE>



#!/bin/sh

# This defines the host as the first argument
HOST=3Dreal.ath.cx

# Change IFACE to your network interface name
IFACE=3D"tun0"

IFCHECK=3D$(/sbin/ifconfig -a | grep -2 $IFACE |  cut -s -d ' ' -f 2 | =
grep '\.')
DNSCHECK=3D$(host $HOST|cut -f3)

# We keep the old IP address somewhere safe...
OLDIP=3D$(cat /var/log/IFCHECK)

if [ "x$IFCHECK"  =3D "x" ]; then
        echo "No IP!"
        /usr/bin/logger "test_ddns: No HSE connection!"
        exit
fi

if [ "x$OLDIP" =3D "x$IFCHECK" ]; then
#       echo "IP's did not change!  We do nothing."
        exit
fi

if ! [ "x$IFCHECK" =3D "x$DNSCHECK" ]; then
        echo "NOT OK! DYNDNS UPDATE from $DNSCHECK to $IFCHECK."
        echo $IFCHECK &gt; /var/log/IFCHECK
        /usr/bin/logger "test_ddns: Updating dyndns to $IFCHECK"
        /usr/local/sbin/ddup --host pcreal.dyndns.org  --wildcard
        /usr/local/sbin/ddup --host real.ath.cx --wildcard
fi


</PRE></DD></DL>
  <P></P>
  <P></P>
  <DT>
  <H4>Apache</H4>
  <DD>Now would be a good time to install your <FONT=20
  face=3Dmonospace>htdocs</FONT> directory. The way i like to do this is =
to mount=20
  a read-only NFS file system over the current htdocs. This is easily=20
  accomplished by adding a line like this to your <FONT=20
  face=3Dmonospace>/etc/fstab</FONT> &nbsp;&nbsp;: =
<PRE>192.168.1.1:/usr/local/Apache/htdocs /var/www/htdocs nfs ro  </PRE>
  <P>Moreover, the web logs are kept in <FONT=20
  face=3Dmonospace>/var/www/logs</FONT>&nbsp;. Interesting stuff. =
<BR></P>
  <DT>
  <H4>Sendmail</H4>
  <DD>If you have followed all the steps of the recipe so far, your =
sendmail=20
  should be configured &amp; ready to receive mail from the internet, =
however=20
  you should know a few more things about this. First, if you want your =
gateway=20
  to receive mail for more than one domain, you must list the =
<I>other</I> fully=20
  qualified domains in the file <FONT=20
  face=3Dmonospace>/etc/mail/local-host-names</FONT> &nbsp;&nbsp;. =
Finally, if you=20
  want sendmail to relay mail from your intranet machines to the outside =

  internet you must have this file: <PRE>pcreal# cat =
/etc/mail/relay-domains
192.168.1
</PRE>
  <P>Notice that it allows relaying for the whole 192.168.1.xxx range of =
IP's.=20
  You should adapt this to you own intranet IP scheme. <BR></P>
  <DT>
  <H4>The mail popper</H4>
  <DD>All ingress mail is received &amp; kept on the gateway untill some =
POP=20
  client on the intranet gets it. I use the <A target=3D_top=20
  =
href=3D"http://www.openbsd.org/2.7_packages/i386/popa3d-0.4.tgz-long.html=
">popa3d</A>=20
  server package because it is written with security in mind. You can =
install it=20
  very easily on your gateway with this single command: <PRE>pkg_add =
ftp://ftp.openbsd.org/pub/OpenBSD/2.7/packages/i386/popa3d-0.4.tgz
</PRE>
  <P>Don't forget to add this line to the file <FONT=20
  face=3Dmonospace>/etc/inetd.conf</FONT> &nbsp;&nbsp;: <BR><PRE>pop3    =
        stream  tcp     nowait  root    /usr/local/libexec/popa3d popa3d
</PRE>
  <P></P>
  <DT>
  <H4>The installed packages</H4>
  <DD>Just to do a quick check, here are the packages you should have =
installed=20
  on your system:=20
  <P>On the version 2.7 installation: <BR><PRE>pcreal# pkg_info
ssl-2.7-intl       ssl-2.7-intl, libraries that include the RSA =
algorithm.
xntp3-5.93e-export Network Time Protocol implementation
popa3d-0.4         security first POP3 daemon
</PRE>
  <P>and on the version 2.8 installation: <BR><PRE>pcreal# pkg_info
popa3d-0.4         security first POP3 daemon
xntp3-5.93e        Network Time Protocol implementation
</PRE>
  <P></P>
  <DT>
  <H4>The Secure Shell</H4>
  <DD>The secure shell looks &amp; feels exactly like telnet, except =
that all=20
  communication between the client and the server is encrypted. It is =
the only=20
  possible way to access your gateway, because the telnet daemon is =
disabled by=20
  default. Usage is very simple: just like telnet!=20
  <P><PRE>[real@pcreal Projects]$ ssh 192.168.1.2
real@192.168.1.2's password:
Warning: Remote host denied X11 forwarding.
Last login: Sun Nov  5 12:58:08 2000 from 192.168.1.1
OpenBSD 2.7 (GENERIC) #1: Thu Nov  2 16:05:11 GMT 2000

pcreal:real {39}
</PRE><BR>
  <P>Once you are logged in as an unprivileged user, member of the wheel =
group,=20
  you can use <FONT face=3Dmonospace>su</FONT> to gain superuser =
privileges: <PRE>pcreal:real {39} su -
Password:
Terminal type? [nxterm]
pcreal#
</PRE>
  <P></P>
  <DT>
  <H4>The log files</H4>
  <DD>There are many log files of high interest maintained automatically =
by your=20
  gateway. It is usually convenient to look at them with the "<FONT=20
  face=3Dmonospace>tail -f</FONT>" command. The files i look at often =
are:=20
  <P><PRE>/var/log/messages
/var/log/maillog
/var/log/secure
/var/www/logs/access_log
</PRE><BR>
  <P>Moreover, you can grab interesting info about the blocked packets =
on your=20
  firewall with the "<FONT face=3Dmonospace>ipmon</FONT>" utility.=20
  <P>There are many other log files available for all kinds of things. =
Dig=20
  around to find more about them.=20
  <P></P>
  <DT>
  <H4>Apply the security patches!</H4>
  <DD>Security patches are published <A target=3D_top=20
  href=3D"http://www.openbsd.org/errata.html">there</A>. APPLY THEM =
RELIGIOUSLY!=20
  <P>It is not really difficult, but you will need a copy of the =
complete,=20
  original source tree of the distribution. The compressed source =
archives are=20
  to be found with the distribution files. These are the <A=20
  href=3D"ftp://ftp.openbsd.org/pub/OpenBSD/2.8">2.8 source files</A>: =
<PRE>-r--r--r--   1 service  service  64901523 Nov 27 13:04 src.tar.gz
-r--r--r--   1 service  service  14941534 Nov 27 13:04 srcsys.tar.gz
</PRE>
  <P>They total about 80 MB. Once you have them, simply unpack them to =
'<FONT=20
  face=3Dmonospace>/usr/src</FONT>' and '<FONT=20
  face=3Dmonospace>/usr/src/sys</FONT>'. The latter is the kernel =
proper.=20
  <P>Once you have your source tree, you can start downloading the =
patches, and=20
  apply them. Usually, all the currently published patches are availble =
in a=20
  single file. For 2.7, it is <A=20
  =
href=3D"ftp://ftp.openbsd.org/pub/OpenBSD/patches/2.7.tar.gz">there</A>. =
After=20
  that, simply watch the patch page from time to time, to keep updated.=20
  <P>Patches are either applied to an application (in '<FONT=20
  face=3Dmonospace>/usr/src</FONT>'), or to the kernel ( in '<FONT=20
  face=3Dmonospace>/usr/src/sys</FONT>'). Since <B>all</B> kernel =
patches should=20
  be installed, the thing i do is to apply all the kernel patches in one =

  session, then i recompile my kernel once.=20
  <P>The applications you don't use (e.g. 'X11', for example) don't have =
to be=20
  patched &amp; recompiled.=20
  <P>
  <P></P>
  <DT>
  <H4>Reboot and enjoy!</H4>
  <DD>You should be able to ssh into your new gateway from any machine =
on the=20
  intranet. </DD></DL>
<P>
<P>
<P>
<HR>

<HR>

<H2>Stuff that is not essential, but useful to know about</H2>
<P>
<P>
<DL>
  <DT>
  <H4>Using <FONT face=3Dmonospace>"mtree"</FONT> to check on files</H4>
  <DD><FONT size=3D-1>As suggested by Camiel Dobbelaar <CD@SENTIA.NL>on =
the=20
  openbsd list.</FONT>=20
  <P>The idea here is to create a unique fingerprint of each of your =
files at a=20
  point in time. Later on, when you suspect someone might have modified =
one of=20
  your files in a malicious way, you re-compute the fingerprints and =
compare=20
  with your previously stored set of fingerprints. Obviously you must be =
careful=20
  to encrypt the original set of fingerprints, or store them someplace =
safe.=20
  <P>The way to create the fingerprints is like this:=20
  <P><FONT face=3Dmonospace>mtree -c -Ksha1digest -p / &gt; =
fingerprint</FONT>=20
  <P><!or, if you want to exclude some special files, by piping the =
result of a "find" into mtree:=0A=
=0A=
<!<p><!<font face=3D"monospace"><!find / -type f \! name "*.o" | mtree =
-c -Ksha1digest ><!fingerprint</font><!<p>Later=20
  on, to check your files against the fingerprint file, you simply do:=20
  <P><FONT face=3Dmonospace>mtree -f fingerprint -p /</FONT>=20
  <P>Of course, many files <B>will</B> be different (e.g. the log files, =

  etc...). You will have to use your judgement in how to interpret the =
results.=20
  One thing is for sure: none of the basic operating system binary =
utilities=20
  should have changed, unless you did it yourself.=20
  <P></P>
  <DT>
  <H4>Using application proxies to help gard agains trojans</H4>
  <DD>If you want to increase even more the security of your firewall, =
you might=20
  want to install application proxies. This subject is rather =
complicated, but=20
  if you want to know more about it, just go <A target=3D_top=20
  href=3D"http://www.fwtk.org/">there</A>. Source code included... ;)=20
  <P></P>
  <DT>
  <H4>Seting up the MTU in Windows</H4>
  <DD><B>This is not needed anymore with the new version of ppp!</B>=20
  <P>In order to use your shiny new PPPoE gateway with windoze machines =
on your=20
  intranet, you must specify the maximum MTU in each windows machine. =
This is=20
  very well explained <A target=3D_top=20
  =
href=3D"http://www.sympaticousers.org/faq/sharing-howto.htm">there</A>.=20
  <P></P>
  <DT>
  <H4>Another "Firewall Building" page</H4>
  <DD>Matthew Patton, a nice guy who works for netsec.net has put =
together a=20
  good presentation on firewall building, available <A target=3D_top=20
  href=3D"http://members.theglobe.com/pattonme/">there</A>. You will =
also find=20
  there info about how to build a firewall on a floppy. Very cool stuff. =

</DD></DL>
<P>
<P>
<HR>

<HR>

<P>
<P>
<P><A name=3DFullChangelog></A>
<HR>

<DL><B>Full Changelog:</B> <BR><BR><BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.10=20
  [2001-03-14]</FONT></B></FONT>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_10_1">DONT=20
  call "do_ipcheck" from "ppp.linkup".</A>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_10_2">"ppp"=20
  source code: replaced the convoluted CVS download method with a =
simple, direct=20
  URL.</A> <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.09=20
  [2001-03-12]</FONT></B></FONT>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_09_1">New=20
  method for automatic dyndns updates</A>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_09_2">Better=20
  usage of the "ppp.linkup" facility</A>=20
  <DD><FONT size=3D-1><A =
href=3D"http://real.ath.cx/BSDinstall.html#c1_09_3">Usage=20
  of "-ddial" instead of "-background" with ppp</A> <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.08=20
  [2001-02-22]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Added a "ipnat" rule to allow maping of ICMP =
requests from=20
  the intranet <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.07=20
  [2001-02-21]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Updated PPP/PPPoE procedure=20
  <DD><FONT size=3D-1>Improved firewall (ipf) rules (again...) <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.06=20
  [2001-02-04]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Slightly improved firewall (ipf) rules <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.05=20
  [2001-01-31]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Time zone recommendation changed from GMT to UTC =
(thanks=20
  Thierry!) <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.04=20
  [2001-01-24]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Added info about how to specify the physical =
ethernet=20
  interface to <FONT face=3Dmonospace>pppoe</FONT>=20
  <DD><FONT size=3D-1>Added info about how to set the MTU in Windoze =
<BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.03=20
  [2001-01-15]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Added info about how to use "<FONT=20
  face=3Dmonospace>mtree</FONT>" as an alternative to the tripwire =
utility</FONT>=20
  <DD><FONT size=3D-1>Added info about "<FONT=20
  face=3Dmonospace>fwtk.org</FONT>"</FONT> <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.02=20
  [2001-01-04]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Modified the "<FONT =
face=3Dmonospace>test_ddns</FONT>"=20
  script</FONT>=20
  <DD><FONT size=3D-1>Minor changes for release 2.8</FONT> <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.01=20
  [2000-11-11]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Modified the "<FONT =
face=3Dmonospace>test_hse</FONT>"=20
  script</FONT>=20
  <DD><FONT size=3D-1>Added improvements suggested by outside =
readers</FONT> <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Version 1.0=20
  [2000-11-07]</FONT></B></FONT>=20
  <DD><FONT size=3D-1>Modified the "<FONT =
face=3Dmonospace>test_hse</FONT>"=20
  script</FONT> <BR>
  <DT><FONT size=3D-1><B><FONT face=3Dmonospace>Draft =
[2000-11-05]</FONT></B></FONT>=20

  <DD><FONT size=3D-1>Draft</FONT> </DD></DL></FONT><BR>
<P>
<HR>

<DIV align=3Dcenter><A =
href=3D"http://real.ath.cx/BSDinstall.html#Top">Back to=20
TOP</A></DIV>
<HR>

<P>
<P>
<DIV align=3Dcenter>Copyright (c) 2001 &nbsp;&nbsp;&nbsp;Real Ouellet =
</DIV>
<SCRIPT> window.open=3DPrxRealOpen; </SCRIPT>
</FONT></FONT></FONT></FONT></FONT></FONT></FONT></FONT></FONT></FONT></F=
ONT></FONT></BODY></HTML>
