Полезная информация

17.2. Configuration

17.2.1. Basic

As your FreeBSD system comes ``out of the box''[TM], you should be able to send E-mail to external hosts as long as you have /etc/resolv.conf setup or are running a name server. If you want to have mail for your host delivered to your specific host,there are two methods:

No matter what option you choose, to have mail delivered directly to your host, you must be a full Internet host. You must have a permanent IP address. IE: NO dynamic PPP. If you are behind a firewall, the firewall must be passing on smtp traffic to you. From /etc/services:

    smtp         25/tcp mail         #Simple Mail Transfer

If you want to receive mail at your host itself, you must make sure that the DNS MX entry points to your host address, or there is no MX entry for your DNS name.

Try this:

    # hostname
    # host newbsdbox.FreeBSD.org
    newbsdbox.FreeBSD.org has address 204.216.27.xx

If that is all that comes out for your machine, mail directory to will work no problems.

If instead, you have this:

    # host newbsdbox.FreeBSD.org
    newbsdbox.FreeBSD.org has address 204.216.27.xx
    newbsdbox.FreeBSD.org mail is handled (pri=10) by freefall.FreeBSD.org

All mail sent to your host directly will end up on freefall, under the same username.

This information is setup in your domain name server. This should be the same host that is listed as your primary nameserver in /etc/resolv.conf

The DNS record that carries mail routing information is the Mail eXchange entry. If no MX entry exists, mail will be delivered directly to the host by way of the Address record.

The MX entry for freefall.FreeBSD.org at one time.

    freefall                       MX    30   mail.crl.net
    freefall                       MX    40   agora.rdrop.com
    freefall                       HINFO Pentium     FreeBSD
    freefall                       MX    10   freefall.FreeBSD.org
    freefall                       MX    20   who.cdrom.com
    freefall                       A     204.216.27.xx
    freefall                       CNAME www.FreeBSD.org

freefall has many MX entries. The lowest MX number gets the mail in the end. The others will queue mail temporarily, if freefall is busy or down.

Alternate MX sites should have separate connections to the Internet, to be most useful. An Internet Provider or other friendly site can provide this service.

dig, nslookup, and host are your friends.

17.2.2. Mail for your Domain (Network).

To setup up a network mailhost, you need to direct the mail from arriving at all the workstations. In other words, you want to hijack all mail for *.smallminingco.com and divert it to one machine, your ``mailhost''.

The network users on their workstations will most likely pick up their mail over POP or telnet.

A user account with the same username should exist on both machines. Please use adduser to do this as required. If you set the shell to /nonexistent the user will not be allowed to login.

The mailhost that you will be using must be designated the Mail eXchange for each workstation. This must be arranged in DNS (ie BIND, named). Please refer to a Networking book for in-depth information.

You basically need to add these lines in your DNS server.

    pc24.smallminingco.com A xxx.xxx.xxx.xxx       ; Workstation ip
                           MX  10 smtp.smallminingco.com    ; Your mailhost

You cannot do this yourself unless you are running a DNS server. If you do not want to run a DNS server, get somebody else like your Internet Provider to do it.

This will redirect mail for the workstation to the Mail eXchange host. It does not matter what machine the A record points to, the mail will be sent to the MX host.

This feature is used to implement Virtual E-Mail Hosting.


I have a customer with domain foo.bar and I want all mail for foo.bar to be sent to my machine smtp.smalliap.com. You must make an entry in your DNS server like:

    foo.bar                  MX  10    smtp.smalliap.com   ; your mailhost

The A record is not needed if you only want E-Mail for the domain. IE: Don't expect ping foo.bar to work unless an Address record for foo.bar exists as well.

On the mailhost that actually accepts mail for final delivery to a mailbox, sendmail must be told what hosts it will be accepting mail for.

Add pc24.smallminingco.com to /etc/sendmail.cw (if you are using FEATURE(use_cw_file)), or add a Cw myhost.smalliap.com line to /etc/sendmail.cf

If you plan on doing anything serious with sendmail you should install the sendmail source. The source has plenty of documentation with it. You will find information on getting sendmail source from the UUCP information.

17.2.3. Setting up UUCP.

Stolen from the FAQ.

The sendmail configuration that ships with FreeBSD is suited for sites that connect directly to the Internet. Sites that wish to exchange their mail via UUCP must install another sendmail configuration file.

Tweaking /etc/sendmail.cf manually is considered something for purists. Sendmail version 8 comes with a new approach of generating config files via some m4 preprocessing, where the actual hand-crafted configuration is on a higher abstraction level. You should use the configuration files under /usr/src/usr.sbin/sendmail/cf.

If you did not install your system with full sources, the sendmail config stuff has been broken out into a separate source distribution tarball just for you. Assuming you have your CD-ROM mounted, do:

    # cd /usr/src
    # tar -xvzf /cdrom/dists/src/ssmailcf.aa

Do not panic, this is only a few hundred kilobytes in size. The file README in the cf directory can serve as a basic introduction to m4 configuration.

For UUCP delivery, you are best advised to use the mailertable feature. This constitutes a database that sendmail can use to base its routing decision upon.

First, you have to create your .mc file. The directory /usr/src/usr.sbin/sendmail/cf/cf is the home of these files. Look around, there are already a few examples. Assuming you have named your file foo.mc, all you need to do in order to convert it into a valid sendmail.cf is:

    # cd /usr/src/usr.sbin/sendmail/cf/cf
    # make foo.cf

If you don't have a /usr/obj hierarchy, then:

    # cp foo.cf /etc/sendmail.cf


    # cp /usr/obj/`pwd`/foo.cf /etc/sendmail.cf

A typical .mc file might look like:

    VERSIONID(`Your version number')
    define(`UUCP_RELAY', your.uucp.relay)
    define(`UUCP_MAX_SIZE', 200000)
    Cw    your.alias.host.name
    Cw    youruucpnodename.UUCP

The nodns and nocanonify features will prevent any usage of the DNS during mail delivery. The UUCP_RELAY clause is needed for bizarre reasons, do not ask. Simply put an Internet hostname there that is able to handle .UUCP pseudo-domain addresses; most likely, you will enter the mail relay of your ISP there.

Once you have this, you need this file called /etc/mailertable. A typical example of this gender again:

    # makemap hash /etc/mailertable.db < /etc/mailertable
    horus.interface-business.de   uucp-dom:horus
    .interface-business.de        uucp-dom:if-bus
    interface-business.de         uucp-dom:if-bus
    .heep.sax.de                  smtp8:%1 horus.UUCP
    uucp-dom:horus                if-bus.UUCP
    uucp-dom:if-bus .         uucp-dom:sax

As you can see, this is part of a real-life file. The first three lines handle special cases where domain-addressed mail should not be sent out to the default route, but instead to some UUCP neighbor in order to ``shortcut'' the delivery path. The next line handles mail to the local Ethernet domain that can be delivered using SMTP. Finally, the UUCP neighbors are mentioned in the .UUCP pseudo-domain notation, to allow for a uucp-neighbor!recipient override of the default rules. The last line is always a single dot, matching everything else, with UUCP delivery to a UUCP neighbor that serves as your universal mail gateway to the world. All of the node names behind the uucp-dom: keyword must be valid UUCP neighbors, as you can verify using the command uuname.

As a reminder that this file needs to be converted into a DBM database file before being usable, the command line to accomplish this is best placed as a comment at the top of the mailertable. You always have to execute this command each time you change your mailertable.

Final hint: if you are uncertain whether some particular mail routing would work, remember the -bt option to sendmail. It starts sendmail in ``address test mode''; simply enter 0, followed by the address you wish to test for the mail routing. The last line tells you the used internal mail agent, the destination host this agent will be called with, and the (possibly translated) address. Leave this mode by typing Control-D.

    % sendmail -bt
    ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
    Enter <ruleset> <address>
    > 0 foo@interface-business.de
    rewrite: ruleset  0   input: foo @ interface-business . de
    rewrite: ruleset  0 returns: $# uucp-dom $@ if-bus $: foo < @ interface-business . de