E-mail over UUCP: The professional solution for dialup users
ArticleCategory: [Do not translate this]
System Administration
AuthorImage:[Do not translate this]
TranslationInfo:[Do not translate this]
original in en Guido
Socher
AboutTheAuthor:[Translate the paragraph below]
Guido has been using UUCP for many years and thinks that
it is the best way to connect the mail system on your computer
to the Internet.
Abstract:[Translate the paragraph below]
UUCP is one of the very old protocols of the Internet.
It is in many cases now replaced by more modern protocols but
it is still one of the best solutions for sending e-Mail from and
to a dialup sites. Unfortunately many people connecting from home
via a dialup link are not aware of the great potentials of UUCP and
do not demand this service. As a consequence less service oriented
Service providers do not offer UUCP these days.
ArticleIllustration:[Do not try to translate this]
ArticleBody:[Translate everything below]
Introduction
UUCP is very old protocol and was originally used to copy any type
of files between Unix systems. Thus the name: "Unix to Unix Copy".
These early computer systems were not permanently connected via a
network. Instead dialup modem connections where used to exchange
data in regular time intervals.
To copy the file mynotes.txt to a remote system called "mars" one would
use the command:
uucp mynotes.txt mars!~/mynotes.txt
This copies for the moment the data just to a "spool directory" and
later on when a dialup connection is made to that site the files will get
physically copied over.
Today this type of application for UUCP is hardly used anymore.
More modern protocols such as TCP/IP and e.g scp are now available to copy
files between computer systems.
UUCP could do much more than that. It allowed you to execute a limited
number of commands remotely. To send the command "rnews" on the remote
system "mars" data from stdin one would issue the command:
cat somedata.txt | uux - mars!rnews
Again the command rnews would not be executed immediately on the remote
site but only later on when a dialup connection to "mars" was established.
The command would be parked in the local "spool directory".
What does all this have to do with e-mail?
E-mail is typically an application where it does not matter if
the sending of the data is delayed a bit. Typically you would go through
your mail, write e.g some reply messages to friends and "send it off".
However you don't want to have all your reply windows from your mail
application open all the time until you connect again to your ISP.
You want to "send" the mail and close this window. If it is really
immediately send is not important here as long as it gets send out
later on.
This is exactly the type of application that you can reliably and
easily implement with UUCP.
Your own mail system
UUCP is flexible. You can set it up such that you have your own
mailserver for a whole network of computers. Your Linux computer
can be the central mail system serving e-mail to all kind of computers
and operating systems in your private LAN (Local Area Network):
Setting up a mailserver this way can be convenient for a family and
very cost efficient for a small company. You can provide e-mail
accounts to any number of users and at the same time you just need
a dialup connection to your ISP. A company will probably establish
that connection periodically (e.g every hour) and private persons
would e.g set it only up if they go online for other reasons.
To conclude: E-mail over UUCP is not something old and dusty. It is
a very convenient, cost efficient, and smart application of UUCP.
How does it work?
Using UUCP you will get from your ISP your own MX Domain (MX=Mail
Exchanger, Domain name part of e-mail address). E.g if your
ISP's home page is at www.my-friendly-isp.com then he might give Joe Miller
the domain miller.my-friendly-isp.com. All mail for that domain will be
send to Joe Miller's mailserver using UUCP. Joe can then configure
any number of users: [email protected],
[email protected], [email protected] ...
It's all up to Joe. Since you get a free mail server with Linux which can again
serve different protocols such as pop, imap, nfs or mail box
directly over the local filesystem ... etc there is no restriction to
the type of operating system or e-mail client that users use to access
their mail.
UUCP as such is a stand alone protocol and you could run it directly
hardware level (e.g the modem line without any ppp-protocol) however you can
run it as well over TCP/IP and this gives you new possibilities:
You can have one dedicated ISP somewhere in the world with a good backbone
connection (e.g in Amsterdam) and you connect to the Internet via any
random ISP using cheap local connections. Since UUCP runs on top of
TCP/IP the physical location of your E-mail/UUCP ISP does not matter
any longer. It's accessible from anywhere in the world through the
Internet.
Setting it up
Most Linux distributions have a package called uucp and it contains
usually Tailer UUCP. If it is not already on any of your CDs then
you can get it at:
www.airs.com/ian
Apart from the UUCP package you need as well a mail system that
can handle UUCP. I will describe Sendmail in this article but most
other systems can handle UUCP too. A mail system that can
handle UUCP will have a command called rmail in the rpm or deb package.
Mail is send to your system via remote command execution, similar
to the uux/rnews example above. rmail is the command that receives the
mail via the UUCP "pipe" and feeds it into your mail system.
The following information is needed by your ISP to setup the account:
- The name of the MX domain that you would like to have, e.g
miller.my-friendly-isp.com
- A login name for the UUCP connection
- A password for the UUCP connection
- Your UUCP system name. A short string like e.g your hostname.
- Contact for administrative questions and general mail form your ISP,
usually postmaster
- UUCP over IP? Say yes here and do not choose an ISP that does not
provide this. You want E-mail over UUCP and UUCP over IP.
The data you need from you ISP:
- The domainname of the server where you can connect to via UUCP. Could
e.g be something like uucp.my-friendly-isp.com
- His UUCP system name
Testing the account step by step
UUCP over TCP/IP uses TCP port 540 and you can therefore easily
test your account before going into the configuration of your UUCP
system. That way you can be sure that your ISP made no mistakes and
that you have the right IDs and passwords. Run the command:
telnet uucp.my-friendly-isp.com 540
You will get then something like this:
Trying 1.2.3.42...
Connected to uucp.my-friendly-isp.com
Escape character is '^]'.
login:
Type login name and password:
Trying 1.2.3.42...
Connected to uucp.my-friendly-isp.com
Escape character is '^]'.
login: linux
Password: tux.1234
Shere=mfic
After a successful login the other side answers with "Shere" which stands
for System here followed by the name of the remote system (check against
the data from your ISP).
To close the connection use crtl-] and then type "q" at the telnet prompt:
^]
telnet> q
Connection closed.
Now you know that your account is setup correctly.
Configuring your UUCP system
To receive (and finally send out) mail via UUCP you need to put the
right configuration data into the UUCP configuration files. These
files are usually found in /etc/uucp. You need to create/edit the
following files:
- call -- this file contains the login/password
- sys -- this file defines how to get to a give system. Ie you configure
it to use TCP/IP
- port -- essentially defines to use port 540 for tcp connections.
- config -- overall config file
All files must be owned by user uucp and group uucp. The file call
must not be world readable (chmod 640 call).
Log files are usually written in /var/log/uucp/ and /var/spool/uucp/
must contain a directory with the name of the remote system. Make
sure that both are writable for the user uucp.
call
# call file
# The format is just remote-system-name login-name password.
mfic linux tux.1234
port
# port file
# No need to change this
type tcp
port tcp
service 540
sys
# sys file
# defines information about the remote system
# system name of your ISP:
system mfic
# the server of your ISP:
address uucp.my-friendly-isp.com
# do not change the next 3 lines, see documentation of Tailer UUCP
# for details
time Any 2
port tcp
chat-timeout 60
# allowed commands:
commands rmail
# take the password and user name from the call file:
call-login *
call-password *
# do not change the next line:
chat ogin: \L assword: \P
#
config
# The config file just defines the path names
# of the other files and directories as well as your
# system name.
# Your system name:
nodename oblelix
# max number of request from other systems to execute in parallel:
max-uuxqts 2
# The UUCP spool directory
spool /var/spool/uucp
# The other fields are usually already compiled into
# as defaults:
# pubdir /var/spool/uucppublic
# logfile /var/log/uucp/Log
# statfile /var/log/uucp/Stats
# debugfile /var/log/uucp/Debug
# callfile /etc/uucp/call
# ....
After saving the config files run the command "uuchk". It's probably in
sbin: /usr/sbin/uuchk
The output is a summary of your configuration including some default
values that you have not set. The hostname of your ISPs server,
uucp.my-friendly-isp.com in our example, appears as "phone number":
Phone number uucp.my-friendly-isp.com
This is strange but correct for UUCP over TCP/IP.
Check especially
that all the directories, log files, debug files etc are pointing to
the right place and belong to the user uucp.
Now you should be able to receive mail via UUCP but your local mailer
(MTA=mail transport agent) still needs to know that it is allowed
to handle mail for the domain registered with your ISP. In our case
this domain is miller.my-friendly-isp.com. The configuration of
this domain depends on your MTA. In sendmail you need
to write miller.my-friendly-isp.com on a single line in the file
/etc/sendmail.cw:
# sendmail.cw define the domains for which we handle mail
miller.my-friendly-isp.com
Now we are ready to test receiving e-mail via UUCP. Sending out
mails will not yet work because sendmail is not fully configured yet.
Run
/usr/sbin/uucico -x 11 -S mfic
mfic is the UUCP system name of my-friendly-isp.com.
Open a second terminal window and watch the result with
"tail -f /var/log/uucp/Debug".
The "-x 11" specifies the highest debug level and should only be used
during testing. You will see all the details of the UUCP protocol. Watch out
for any errors. If you get at the end something like
uucico mfic - (2001-06-22 20:20:57.73 1020) Call complete (31 seconds 42835
bytes 1381 bps)
then everything is working. Congratulations!
Run the command "uulog". It will print a more compressed summary about
the mails received via UUCP/rmail.
Setting up sendmail to send e-mail out via UUCP
Sendmail uses a m4 pre-processor based configuration system. Other
mail systems such as postfix have more readable config files and
it is no problem to edit them directly. I am using sendmail therefore
I am describing my experiences with sendmail here. Your are welcome to
add information about a different MTA on the talkback page below.
I saw that postfix just requires that you edit the transport/transport.db
and you need a definition for uucp in the master.cf that seems to be all
but I have not much experience with postfix.
The m4 configuration system might not be included in the same package as
sendmail it self. Check the CDs of your distribution your might need
to install a package called something like "sendmail-cf".
Create a new sendmail-uucp.mc file in the cf directory for sendmail
(probably /usr/lib/sendmail-cf/cf):
#divert(-1)
# `This is config sends outgoing mail via uucp using /usr/bin/uux
#
# to generate a sendmail.cf out of this .mc file use the sendmail sources
# and run m4 thisfile.mc > sendmail.cf.'
divert(0)
include(`../m4/cf.m4')
VERSIONID(`UUCP, Jan 28 2001, without DNS')
undefine(`BITNET_RELAY')
undefine(`DECNET_RELAY')
undefine(`UUCP_RELAY')
OSTYPE(`linux')
MASQUERADE_AS(miller.my-friendly-isp.com)
MASQUERADE_DOMAIN(localdomain)
MASQUERADE_DOMAIN(localhost)
# ` add any local hostnames here:'
MASQUERADE_DOMAIN(philosophus)
# ` needed if you use an internal domain that does not exist: '
FEATURE(`masquerade_envelope')
FEATURE(always_add_domain)
# ` read allowed domains from cw file: '
FEATURE(use_cw_file)
FEATURE(local_procmail)
# `important for uucp:'
FEATURE(accept_unresolvable_domains)dnl
# `the /etc/passwd entry: mail:*:8:12:mail:/var/spool/mail:'
define(`confDEF_USER_ID',``8:12'')
define(`confSAFE_QUEUE',`True')
define(`confDELIVERY_MODE',`background')dnl
# 'replace mfic by the UUCP system name of your ISP:'
define(`SMART_HOST',uucp-uudom:mfic)dnl
define(`confSERVICE_SWITCH_FILE',/etc/service.switch)dnl
define(`confHOSTS_FILE',/etc/hosts)dnl
define(`UUCP_MAILER_MAX',1024000)dnl
MAILER(procmail)dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(uucp)dnl
Adapt the file to your situation and compile it with the command:
m4 sendmail-uucp.mc > sendmail.cf
Copy the sendmail.cf file to /etc and restart sendmail with
/etc/rc.d/init.d/sendmail restart
The above path for the init script is for redhat/mandrake. It's different
for Suse, Debian etc...
In the /etc/service.switch file you should use:
hosts files
aliases files
Now send an E-mail to somebody. You can do this with your favorite mail
program or directly from the unix command line using:
echo "hello john, just testing..." | Mail [email protected]
This mail will not directly be send out. Instead it will be queued in
the UUCP system. You should see it if you run:
uustat -a
uustat will print:
mfic.CRJjd4uAAAPs mfic joe 07-24 20:19 Executing rmail [email protected]
(sending 50 bytes)
Next run
/usr/sbin/uucico -x 11 -S mfic
mfic is again the UUCP system name at my-friendly-isp.com.
You can now watch the Debug file and observe how the mail is sent out.
All automatic
Create the following /usr/bin/uumail script:
#!/bin/sh
hostn=uucp.my-friendly-isp.com
# first check that the server of my ISP is reachable.
# This requires a more recent version of ping where you can
# specify the timeout:
if ping -w 3 -qn -c 1 $hostn > /dev/null ; then
/usr/sbin/uucico -S mfic
#sleep 1
#uulog -s mfic -5
else
echo "ERROR: $hostn is down"
exit 1
fi
Make the script executable with "chmod 755 /usr/bin/uumail"
and run it manually to see that it works.
To exchange e-mails automatically every time you go online just
add the line /usr/bin/uumail to /etc/ppp/ip-up.
Ok, that's it. Your mail system is up and running.
Things to do
The mail system is completely configured. All the users (/etc/passwd,
command adduser) will automatically
be able to send and receive mail.
The mail will be stored in the traditional spool folders under
/var/spool/mail and can be read locally. If you want that user
are able to read the mail via the protocols pop3 or imap then
you need to install a package which is usually called "imap" and
provides the daemons /usr/sbin/imapd and /usr/sbin/ipop3d
In /etc/inetd.conf you just start them by uncommenting the lines:
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
imap stream tcp nowait root /usr/sbin/tcpd imapd
If you have xinetd then you need to create an appropriate config
file for this service (see as well the LinuxFocus
article 175 on this subject).
Remember as well to enable access in the /etc/hosts.allow file
if users access mail from other host in your local LAN:
# hosts.allow , tcp wrapper config file
# anybody can get access to imap:
imapd: ALL
# pop3 is only allowed from 2 hosts:
ipop3d: 10.0.0.1, 10.0.0.2, 127.0.0.1
Finding an ISP
Finding a good and reliable Internet Service Provider for UUCP is
sometimes not easy especially since most ISPs target
at Mr. Noclue Windowspreinstalled.
I know 2 rather good ISPs in Germany that do offer
E-mail over UUCP:
Both of them are organizations and you basically join the
organization to use the service. Prices are roughly between
11 and 20 Euro per Month.
At LinuxFocus.org we can as well provide e-mail over UUCP to a
limited number of friendly Linux fans, if you join our organization
and support us financially and/or work with us regularly. Contact
me if you are interested.
A good way to find a suitable ISP in your country might be
to just try a search in Google or any other search engine.
The smaller more service and customer oriented ISPs will most
likely have e-mail over UUCP as a product.
References
- The UUCP HOWTO
as published by linuxdoc.org
- The Tailer UUCP documentation (more than
300K of html)