Questions and Answers
Bjorn Satdeva
Firewalls are a hot topic these days. Several companies
have announced
firewall products over the last few months, and in recent
days we
have even seen an announcement from Big Blue. Unfortunately,
not all
commercial offerings are of the high quality we could
want. The good
news is that the Internet Engineering Task Force has
convened a working
group to create a standard (RFC), to be based on the
SOCKS protocol
originally designed and implemented by Dave Koblas.
The IBM firewall,
along with several other upcoming products, is based
on SOCKS, and
the new NetScape client program from Mosaic, Inc., uses
it. It is
still much to early to tell for sure, but it looks like
the marketplace
is converging towards SOCKS as the firewall strategy
of choice.
As I promised in an earlier column, I am including an
overview of
the 1994 SANS System Administrator Salary Survey, conducted
by Alan
Paller, the moving force behind the SANS conferences.
More than 650
surveys, including many from Sys Admin readers, were
returned,
making this the most comprehensive survey of its kind
to date. The
results of the survey are too large to print here in
their totality,
but I've reported some of the most essential findings
in the sidebar,
"Selected Information from the SANS Salary Survey,"
where
you will also find information on how to request a more
complete report.
And speaking of conferences, the winter USENIX conference
takes place
January 16th to 20th. I have written a lot about USENIX
in past columns,
so will keep it short this time. However, this conference
is a very
good place to go both for its useful tutorials and as
a place to meet
your peers. Contact information for USENIX is below.
I have recently started to administer a small network
of UNIX systems, and I am trying to understand routing.
Can you help?
Complete coverage of routing and routing protocols
would
require a book, so I will limit this answer to the basics.
The kernel
needs routing information to determine where a given
packet must be
sent in order for it to arrive at its destination. If
you only have
one network where all hosts are directly connected,
this is easy,
as the necessary routing information will automatically
be entered
into the kernel's routing tables by the ifconfig utility
(which
is used to bring up the ethernet controller). However,
if you have
more than one network, it is no longer as simple, and
you will need
to explicitly add information to the kernel routing
table.
In real life, you would normally use a program such
as gated
to maintain the kernel tables more or less automatically.
However,
before you can start to understand how such programs
work, you will
need to understand the most basic form of routing, usually
referred
to as static routing. With static routing, each route
is added into
the kernel route table by the route utility and this
information
will never change of its own accord.
Each route added to the table tells the kernel where
it should send
a packet for a given network. Therefore, each route
command
will consist of two pieces of information, a network
address and the
IP address (on the local network) where the packet for
that network
should be sent. A somewhat simplistic example is shown
in Figure 1,
where hosts are represented by upper-case letters and
networks by
lower-case letters (you name your networks using the
/etc/networks
file). In the example in Figure 1, if the host "A"
needs to
send a packet to some host on the network "c",
it cannot reach
that host directly, but it can talk to the host "C",
which
in turn can talk to all hosts on the "c" network.
You can
add a route on "A" which tells the kernel
that any packet
destined for the "c" network should be sent
to host "C,"
which will know how to forward the package. In this
case, the complete
routing on "A" can be configured by adding
the following route
statements to a startup file to be executed during boot:
route add -net b B
route add -net c C
route add -net d D
route add -net e E
If this were a real case, you would use the raw IP addresses
for both hosts and networks rather than the names, since
at bootup
your name service would probably not be available.
One more point: if you are connected to the Internet,
you do not want
to keep the routes to all possible networks in the world
in your kernel's
routing table; it would take way too much memory and
would be a nightmare
to maintain. The kernel therefore needs a default route,
that is,
the route to be used when no other route in the kernel
table matches
your need. The default route on any system should always
point in
the direction of the Internet gateway. You can also
use the default
route on hosts connected to only one network (this is
most likely
the case for all your workstations, but may not be the
case for your
servers), to point to the one host on the network that
is connected
to the rest of your local network.
Using static routes is complicated and can take a great
deal of work
to maintain when the network changes. If your site has
more than just
a few networks, you will need to use tools that maintain
the routing
tables dynamically. Several different programs can do
this, but in
my opinion the best is gated, which is available by
anonymous
ftp from gated.cornell.edu.
I have been volunteered to become a system administrator
and need to climb the learning curve fast. Along with
getting Sys
Admin, I have been told to "get in touch with LISA
and go to
the Usenix (sp?) conference." Can you point me
in the right direction
and make any other suggestions?
Subscribing to Sys Admin and attending the relevant
conferences will certainly give you what looks like
a much-needed
boost. Attending the tutorials at either the LISA System
Administration
conference, the USENIX main conferences, or the SANS
(System Administration,
Networking and Security) conference will give you much
information
to work with. I like to recommend these tutorials because
they are
presented by people who work with the material they
teach on
a daily basis. In addition to this, there are now many
good (and even
more not-so-good) books available on various topics
related to
system administration. A very good overall book is Evi
Nemeth's UNIX
System Administration Handbook, from Prentice Hall;
it is now several
years old, but is still one of the best of its kind
on the market,
and an updated version will be out soon.
There are specialized books available from many sources,
but the overall
best selection can be found from O'Reilly and Associates,
where Tim
O'Reilly has for many years been working towards a very
comprehensive
coverage of UNIX. Depending on your specific area of
responsibility,
some of the O'Reilly books you might want to check out
are:
TCP/IP Network Administration, by Craig Hunt
Managing NFS and NIS, by Hal Stern
DNS and BIND, by Cricket Liu and Paul Albitz
Practical UNIX Security, by Simson Garfinkel
and Gene Spafford
sendmail, by Bryan Costales, with Eric Allman
and Neil Rickert
Managing UUCP and Usenet, by Tim O'Reilly and
Grace Todino
Other good books are available, but the above represent
a very good
basic library and should keep you busy for a while.
If you cannot
get the books from a local bookstore, you can send e-mail
to Computer
Literacy at info@clbooks.com, where they should be able
to
help you. O'Reilly maintains an online catalog at gopher.ora.com.
Finally, you will probably find the proceedings of the
past LISA and
SANS conferences useful (LISA IV and SANS III, to the
present). They
are all available from the USENIX conference office:
USENIX Conference Office
22672 Lambert Street, Suite 613
El Toro, CA 92630 USA
(714) 588-8649; FAX: (714) 588-9706
E-mail: conference@usenix.org
You will also be able to find some of the papers from
past conferences on ftp.sage.usenix.org, an archive
maintained
by Mark Verber from Xerox Parc.
I'm taking a course which looks into the different
aspects
of the Internet and I need some information on expanding
email delivery
to incorporate a confirmed delivery time. I was wondering
if you had
any thoughts on this matter. Any help would be appreciated.
It would have been good if you had included a bit more
context, such as whether the delivery time in question
is for the
local mail reader, or whether you expect to get a return
receipt back
with the delivery time at the destination. However,
as each such issue
can cast light on how the e-mail delivery system works,
I will address
several of them.
First, the recipient of the mail can see not only the
time of delivery
in the mail headers, but also the time of delivery for
each host the
mail has passed through. Each such host adds a "Received"
line, which tells the time of delivery on that host.
The following
example is taken from a real message, with a line number
prepended
to the description:
1: Received: from heimdal.sysadmin.com by
thor.sysadmin.com (8.6.9.1/8.6.5) with ESMTP id SAA05594
for <bjorn@thor.sysadmin.com>; Thu, 8 Dec 1994 18:07:15 -0800
2: Received: from localhost (ftp@localhost)
by heimdal.sysadmin.com (8.6.9/8.6.5) id RAA09949
for <bjorn@sysadmin.com>; Thu, 8 Dec 1994 17:57:22 -0800
3: Received: from relay2.uu.net(192.48.96.7)
by heimdal.sysadmin.com via smap (V1.3mjr)
id sma009945; Thu Dec 8 17:56:55 1994
4: Received: by relay2.UU.NET
id QQxtle22937; Thu, 8 Dec 1994 16:39:21 -0500
5: Received: from hofmann.CS.Berkeley.EDU by relay2.UU.NET with SMTP
id QQxtle22917; Thu, 8 Dec 1994 16:39:15 -0500
6: Received: from ics.uci.edu (ics.uci.edu [128.195.1.1])
by hofmann.CS.Berkeley.EDU (8.6.9/8.6.6.Beta11) with SMTP
id NAA23544 for <bind@ucbarpa.berkeley.edu>;
Thu, 8 Dec 1994 13:39:13 -0800
7: Received: from USENET by q2.ics.uci.edu id aa29767; 8 Dec 94 13:39 PST
8: Received: from news.service.uci.edu by q2.ics.uci.edu id aa29752;
8 Dec 94 13:38 PST
9: Received: by news.service.uci.edu id AA22388
(5.65c/IDA-1.4.4 for fa-bind@ics.uci.edu); Thu, 8 Dec 1994 13:38:42 -0800
Line one is from the final delivery, which took place
on Thursday, December 8th, 1994. Each received line
lists which host
received the email, and from whom, and often which protocol
and version
of the software was used. There is not a fixed format
for the "Received"
header, and each header can span several lines, so long
as subsequent
lines start with a tab. The main purpose of the "Received"
headers is to enable a postmaster to track down problems,
such as
large delays in the delivery; for most everyday users
of email, they
are of little interest.
If you are sending email to a remote host and you want
a return receipt
with the delivery time, the problem gets a good deal
more problematic.
There is no way that you can guarantee that you will
get the delivery
date back, but sendmail does support a "Return-Receipt-To"
header, which will cause the remote host to bounce the
message back
to the sender with a subject line which says "Subject:
Returned
mail: Return Receipt" to the address specified
in the "Return-Receipt-To"
header. This may do what you want, as long as the remote
site has
not turned this feature off. However, if you are hacking
your sendmail.cf
to always include the "Return-Receipt-To"
you might find that
unexpected side effects may completely break your mail
systems, especially
if you are running a mailing list or are using exploding
aliases.
These can cause mail loops which will bring your system
to a grinding
halt from many, many sendmail processes.
Let me finish with a word of warning. The e-mail system
is more complex
than it might appear at a glance, and tinkering with
rewrite rules
or header intrepretaion may cause unexpected side effects,
some of
which may not show up for quite some time. If you are
writing your
own specialized delivery agent, you not only need to
look for correct
behavior according to the various RFCs, you also need
make sure that
it does not contain subtle bugs which can be exploited
by the cracker
community. Even if you know what you're doing, the latter
is always
a possibility, as we have seen only too many times over
the years.
About the Author
Bjorn Satdeva is the president of /sys/admin, inc.,
a consulting
firm which specializes in large installation system
administration.
Bjorn is also co-founder and former president of Bay-LISA,
a San Francisco
Bay Area user's group for system administrators of large
sites. Bjorn
can be contacted at /sys/admin, inc., 2787 Moorpark
Ave., San Jose,
CA 95128; electronically at bjorn@sysadmin.com; or by
phone
at (408) 241-3111.
|