[Exim] Multidomain support with exim

Top Page
Delete this message
Reply to this message
Author: Hennion
Date:  
To: exim-users
Subject: [Exim] Multidomain support with exim
Hi,

I currently have 1 mail server, which serves our school's internet and mail needs. It runs Redhat enterprise 2.4.9-13. On it is running exim 3.34. Currently we run novell on our main servers, but I am setiing up a test server running linux. To test the full functionallity of Linux, I have set up a second domain name for our email. So the problem is, I need to set up exim to serve both domains. The first which is already set up is wpps.wcape.school.za, and the second one which I need to set up, to go to a diffrent IP address to the first is wpps1.wcape.school.za. How does one do this? I have included my config file.

Thanks

Paul

p.s. I had to take the first couple of comments out, because i could not paste it all in, (microsoft products!!)

―---------------------------------------------------------------------------------------
######################################################################
##                                                                  ##
##              EXIM MAIL TRANSPORT CONFIGURATION FILE              ##
##                                                                  ##
######################################################################



######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################


accept_timeout = 10m

auto_thaw = 1d

check_spool_space = 10M

collapse_source_routes = true

delay_warning = 4h:12h:36h

delay_warning_condition = "\
${if match{$h_precedence:}{(?i)bulk|list|junk}{no}{yes}}"
deliver_load_max = 6
deliver_queue_load_max = 5
dns_check_names = true
exim_user = exim
exim_group = mail
freeze_tell_mailmaster = false
gecos_name = "$1"
gecos_pattern = "^([^,]*),"
helo_strict_syntax = false

#----------------------------------------------------------------------------
# The RFCs mandate that a server must not reject a message because it
# doesn't like the HELO or EHLO command, or indeed if there isn't a HELO or
# EHLO command at all. However, some sites like to be stricter. If
# helo_verify is set, Exim checks incoming calls from all hosts that do not
# match helo_verify_except_hosts or helo_verify_except_nets, and accepts an
# incoming SMTP call only if:
#
#         .   A HELO or EHLO command is received;
#
#                       and
#
#            .   The host name given in that command either:
#
#                (i)  is an IP literal matching the calling
#                     address of the host (the
#                     RFCs specifically allow this), or
#
#                (ii) matches the host name that Exim obtains by doing
#                     a reverse lookup of the calling host address, or
#
#               (iii) when looked up using gethostbyname() yields the
#                     calling host address.
#
# If no HELO or EHLO is given, MAIL FROM commands are rejected; if a bad
# HELO or EHLO is given, it is rejected with a 550 error. Rejections are
# logged in the main and reject logs.


helo_verify = 0.0.0.0/0

#----------------------------------------------------------------------------
# The setting below causes Exim to do a reverse DNS lookup on all incoming
# IP calls, in order to get the true host name. If you feel this is too
# expensive, you can specify the networks for which a lookup is done, or
# remove the setting entirely.

host_lookup = 0.0.0.0/0

#----------------------------------------------------------------------------
# Set exim to ignore failures to deliver error messages. If this option is
# set, failed addresses in error messages (that is, messages whose senders
# are '<>') are discarded (with a log entry). The default action is to freeze
# such messages for human attention.

ignore_errmsg_errors = true

#----------------------------------------------------------------------------
# Set exim to discard frozen error messages

ignore_errmsg_errors_after = 1s

#----------------------------------------------------------------------------
# This option specifies the length of time to keep messages whose spool
# files have been corrupted in some way. This should, of course, never
# happen. At the next attempt to deliver such a message, it gets removed.
# The incident is logged. [Default = 4d]

keep_malformed = 1d

#----------------------------------------------------------------------------
# Specify your local domains as a colon-separated list here. If this option
# is not set, the qualify_recipient value is used as the only local domain.
# If you do not want to do any local deliveries, uncomment the following line,
# but do not supply any data for it.

local_domains = "wppstdfg.wcape.school.za"

#----------------------------------------------------------------------------
# The log_all_parents option causes all intermediate addresses between an
# original envelope address and the final delivery address to be included in
# the log line in parentheses after the first address that follows "=>".
# Without this, intermediate addresses are not included, except that if the
# final delivery is a to pipe or file or autoreply, the immediately preceding
# parent address is listed.

log_all_parents = true

#----------------------------------------------------------------------------
# Log the original recepients, before rewriting.

log_received_recipients = true

#----------------------------------------------------------------------------
# If this option is set, the unrewritten original sender of a message is
# added to the end of the log line that records the message's arrival,
# after the word 'from' (before the recipients if log_received_recipients
# is also set).

log_received_sender = true

#----------------------------------------------------------------------------
# Log mail rejections

log_refused_recipients = true

#----------------------------------------------------------------------------
# Log mail header rewrites

log_rewrites = true

#----------------------------------------------------------------------------
# Log smtp result.

log_smtp_confirmation = true

#----------------------------------------------------------------------------
# This option turns on more verbose logging of incoming SMTP connections, at
# log level 4. This does not apply to batch SMTP, but it does apply to SMTP
# connections from local processes that use the -bs option, including
# incoming calls using inetd. A log line is written whenever a connection is
# established or closed. If a connection is dropped in the middle of a
# message, a log line is always written, but otherwise nothing is written at
# the start and end of connections unless log_smtp_connections is set.

log_smtp_connections = true

#----------------------------------------------------------------------------
# If this option is set, syntax errors in incoming SMTP commands are logged
# at level 4. For an external connection, the host identity is given; for
# an internal connection using -bs the sender identification (normally the
# calling user) is given.

log_smtp_syntax_errors = true

#----------------------------------------------------------------------------
# Log message subject.

log_subject = true

#----------------------------------------------------------------------------
# Set message size limit, 10MB

message_size_limit = 10M

#----------------------------------------------------------------------------
# No local deliveries will ever be run under the uids of these users.

never_users = root:daemon:bin:lp:sync:shutdown:adm:halt

#----------------------------------------------------------------------------
# If you want Exim to support the "percent hack" for all your local domains,
# uncomment the following line. This is the feature by which mail addressed
# to x%y@z (where z is one of your local domains) is locally rerouted to
# x@y and sent on. Otherwise x%y is treated as an ordinary local part.

# percent_hack_domains=*

#----------------------------------------------------------------------------
# Specify your host's canonical name here. If this option is not set, the
# uname() function is called to obtain the name.

# primary_hostname =

#---------------------------------------------------------------------------
# The -M and -q command-line options require the caller to be an admin user
# unless prod_requires_admin is set false. See also queue_list_requires_admin.

prod_requires_admin = true

#----------------------------------------------------------------------------
# Specify the domain you want to be added to all unqualified addresses
# here. If this option is not set, the primary_hostname value is used.

qualify_domain = wpps.wcape.school.za

#----------------------------------------------------------------------------
# If you want unqualified recipient addresses to be qualified with a different
# domain to unqualified sender addresses, specify the recipient domain here.
# If this option is not set, the qualify_domain value is used.

qualify_recipient = wpps.wcape.school.za

#----------------------------------------------------------------------------
# The -bp command-line option requires the caller to be an admin user unless
# queue_list_requires_admin is set false. Otherwise, only messages that the
# caller submitted are displayed. See also prod_requires_admin.

queue_list_requires_admin = true

#----------------------------------------------------------------------------
# Do not attempt immediate delivery if load is above this

queue_only_load = 4

#----------------------------------------------------------------------------
# Controls the maximum number of queue-running processes that the Exim daemon
# will run simultaneously.

queue_run_max = 4

#-----------------------------------------------------------------------------
# Queue management - disable automatic dequeuing ... for virus scanning

queue_only = true

#----------------------------------------------------------------------------
# When a message is to be delivered to a remote machine, the number of
# Received headers is counted, and if it is greater than this parameter,
# a mail loop is assumed to have occurred, the delivery is abandoned, and
# a delivery error message is generated.

received_headers_max = 15

#----------------------------------------------------------------------------
# When this option is set, the addresses of recipients received from a
# remote host are verified as they are received, unless the host matches
# an entry in either receiver_verify_except_hosts or
# receiver_verify_except_nets. If receiver_verify_addresses, is set, only
# those addresses that match are verified. If receiver_verify_senders, or
# receiver_verify_senders_except is set, verification happens only for
# messages whose senders meet the criteria.
#
# If an address is invalid, an incoming SMTP call gets an error response
# to the RCPT TO command. If an address cannot immediately be verified, a
# temporary error code is given. The receiver_try_verify option is less
# severe: it operates in the same way, except that an address is accepted
# if it cannot immediately be verified. Verification failures are logged.

receiver_verify = true

#----------------------------------------------------------------------------
# If the recipients_max option is > zero, it specifies the maximum number of
# recipients for any message. This applies to the original list of recipi-
# ents supplied with the message. SMTP messages get a 452 response for all
# recipients over the limit; earlier recipients are delivered as normal.
# Non-SMTP messages with too many recipients are failed, and no deliveries
# are done. Note that the RFCs specify that an SMTP server should accept at
# least 100 RCPT commands in a single message.

recipients_max = 200

#----------------------------------------------------------------------------
# Control which hosts may use us as relay host

relay_domains = "*.wcape.school.za"

#----------------------------------------------------------------------------
# Set the maximum number of parallel deliveries done from a queue run

remote_max_parallel = 4

#----------------------------------------------------------------------------
# Set order into which domains are sorted before delivery starts

# remote_sort = "*.localdomain"

#----------------------------------------------------------------------------
# Set maximum size of bounce message return to sender

return_size_limit = 20K

#-----------------------------------------------------------------------------
# Sets which hosts we don't do an ident on.

rfc1413_hosts = "*"

#----------------------------------------------------------------------------
# This sets the timeout on RFC 1413 identification calls. If it is set to
# zero, no RFC 1413 calls are ever made.

rfc1413_query_timeout = 0s

#----------------------------------------------------------------------------
# If this option is set, incoming SMTP calls are accepted only from the
# hosts listed, possibly also qualified by an RFC 1413 identification.
# (Calls from networks listed in sender_net_accept are also accepted.)
# However, if a call arrives from a host (and identification) which is also
# listed in sender_host_reject or from a network listed in
# sender_net_reject, the call is rejected, unless the host matches
# sender_host_reject_except or sender_net_reject_except.

# sender_host_accept = "mail.gateway"

#----------------------------------------------------------------------------
# The setting below locks out the use of your host as a mail relay by any
# other host. If you want to permit relaying through your host from certain
# hosts or IP networks, you need to vary this option and/or make use of the
# other three options in the set sender_{host,net}_{accept,reject}_relay.
# See the section of the manual entitled "Control of relaying" for more info.
# Removing this setting altogether is not recommended, because there are many
# unscrupulous people out there who will make use of open relays to try to
# disguise the source of unsolicited bulk mail. By default, disable all
# relaying (help fight SPAM!).

host_accept_relay = "10.0.1.9:!*"

#----------------------------------------------------------------------------
# However, make sure that unqualified addresses are not now rejected as well

# sender_unqualified_nets = localdomain.0.0/netmask.0.0

#----------------------------------------------------------------------------
# If this option is true, envelope sender addresses on incoming SMTP
# messages are checked to ensure that they are valid. Messages with invalid
# envelope senders are rejected with a permanent error code if
# sender_verify_reject is set (the default). Otherwise a warning is logged.
# See section 39.2 for details of the rejection, which can happen at three
# different points in the SMTP dialogue. If a sender cannot immediately be
# verified, a temporary error code is returned after reading the data (so
# the headers can be logged). The sender_try_verify option is less severe:
# it operates in exactly the same way as sender_verify except that if an
# address cannot immediately be verified, it is accepted instead of being
# temporarily rejected.

sender_verify = true

sender_verify_reject = true

#----------------------------------------------------------------------------
# Experience shows that many messages are sent out onto the Internet with
# invalid sender addresses in the envelopes (i.e. in the MAIL FROM command of
# the SMTP dialogue), but with valid addresses in the Sender, From, or
# Reply-to header fields. If sender_verify is true and this option is also
# true, an invalid envelope sender or one that cannot immediately be verified
# is replaced by a valid value from the headers.

sender_verify_fixup = true

#----------------------------------------------------------------------------
# Set maximum number of incoming connections

smtp_accept_max = 30

#----------------------------------------------------------------------------
# This option restricts the number of simultaneous IP connections from a
# single host (strictly, from a single IP address) to the Exim daemon. The
# default value of zero imposes no limit. If this option is set, it is
# required that smtp_accept_max be set non-zero.

smtp_accept_max_per_host = 8

#----------------------------------------------------------------------------
# Set to only queue incomming messages if more than given number of
# simultaneous SMTP connections are received.

smtp_accept_queue = 10

#---------------------------------------------------------------------------
# This option limits the number of delivery processes that Exim starts
# automatically when receiving messages via SMTP, whether via the daemon
# or by the use of -bs or -bS. If the value of the option is greater than
# zero, and the number of messages received in a single SMTP session exceeds
# this number, subsequent messages are placed on the spool, but no delivery
# process is started. This helps to limit the number of Exim processes when
# a server restarts after downtime and there is a lot of mail waiting for it
# on other systems. On large systems the default should probably be increased.

smtp_accept_queue_per_connection = 4

#----------------------------------------------------------------------------
# Reserve SMTP connections for local domain (as in smtp_reserve_hosts).

smtp_accept_reserve = 6

#----------------------------------------------------------------------------
# Set custom mailer signature

smtp_banner = "${primary_hostname} ESMTP"

#-----------------------------------------------------------------------------
# When this option is set, if an incoming SMTP session encounters the SIZE
# option on a MAIL FROM command, it checks that there is enough space in the
# spool directory's partition to accept a message of that size, while still
# leaving free the amount specified by check_spool_space (even if that value
# is zero). If there isn't enough space, a temporary error code is returned.

smtp_check_spool_space = true

#----------------------------------------------------------------------------
# Set connection backlog - anti denial of service

smtp_connect_backlog = 10

#----------------------------------------------------------------------------
# Set load for reserved hosts

smtp_load_reserve = 5

#----------------------------------------------------------------------------
# Reserve connections for local domain hosts

smtp_reserve_hosts = "*.wcape.school.za"

#---------------------------------------------------------------------------
# If this option is set, it causes Exim to split its input directory into 62
# subdirectories, each with a single alphanumeric character as its name. The
# fifth character of the message id is used to allocate messages to
# subdirectories; this is the least significant base-62 digit of the time of
# arrival of the message.
#
# Splitting up the spool in this way may provide better performance on
# systems where there are long mail queues, by reducing the number of files
# in any one directory. The msglog directory is also split up in a similar
# way to the input directory; however, if preserve_message_logs is set, all
# old msglog files are still placed in the single directory msglog.OLD.
#
# It is not necessary to take any special action for existing messages when
# changing split_spool_directory. Exim notices messages that are in the
# 'wrong' place, and continues to process them. If the option is turned off
# after a period of being on, the subdirectories will eventually empty and
# get deleted.

split_spool_directory = true

#----------------------------------------------------------------------------
# Set mail spool directory

spool_directory = /var/spool/exim

#-----------------------------------------------------------------------------
# Redundant pairs of angle brackets round 'route-addr' items in addresses are
# stripped. For example, <<xxx@???>> is treated as <xxx@???>. If this
# is in the envelope and the message is passed on to another MTA, the excess
# angle brackets are not passed on. If this option is not set, multiple pairs
# of angle brackets cause a syntax error.

strip_excess_angle_brackets = true

#-----------------------------------------------------------------------------
# A trailing dot at the end of a domain in an address is ignored. If this
# is in the envelope and the message is passed on to another MTA, the dot is
# not passed on. If this option is not set, a dot at the end of a domain
# causes a syntax error.

strip_trailing_dot = true

#----------------------------------------------------------------------------
# If you are running Exim under its own uid (recommended), then you should
# set up that uid as a trusted user by de-commenting the following and
# changing the name if necessary.

trusted_users = exim


######################################################################
#                      TRANPORTS CONFIGURATION                       #
######################################################################
#                       ORDER DOES NOT MATTER                        #-----
#     Only one appropriate transport is called for each delivery.    #
######################################################################


# This transport is used for local delivery to user mailboxes. By default
# it will be run under the uid and gid of the local user, and requires
# the sticky bit to be set on the /var/mail directory. Some systems use
# the alternative approach of running mail deliveries under a particular
# group instead of using the sticky bit. The commented options below show
# how this can be done.

local_delivery:
driver = appendfile
file = /var/spool/mail/${local_part}
# user = ${local_part},
# group = mail,
# mode = 0660

# This transport is used for handling pipe addresses generated by alias
# or .forward files. It has a conventional name, since it is not actually
# mentioned elsewhere in this configuration file. (A different name *can*
# be specified via the "address_pipe_transport" option if you really want
# to.) If the pipe generates any standard output, it is returned to the sender
# of the message as a delivery error. Set return_fail_output instead if you
# want this to happen only when the pipe fails to complete normally.

address_pipe:
driver = pipe
# ignore_status,
return_output

# This transport is used for handling file addresses generated by alias
# or .forward files. It has a conventional name, since it is not actually
# mentioned elsewhere in this configuration file.

address_file:
driver = appendfile

# This transport is used for handling file addresses generated by alias
# or .forward files if the path ends in "/", which causes it to be treated
# as a directory name rather than a file name. Each message is then delivered
# to a unique file in the directory. If instead you want all such deliveries to
# be in the "maildir" format that is used by some other mail software,
# uncomment the final option below. If this is done, the directory specified
# in the .forward or alias file is the base maildir directory.
#
# Should you want to be able to specify either maildir or non-maildir
# directory-style deliveries, then you must set up yet another transport,
# called address_directory2. This is used if the path ends in "//" so should
# be the one used for maildir, as the double slash suggests another level
# of directory. In the absence of address_directory2, paths ending in //
# are passed to address_directory.

address_directory:
driver = appendfile
no_from_hack
prefix = ""
suffix = ""
# maildir_format

# This transport is used for handling autoreplies generated by the filtering
# option of the forwardfile director. It has a conventional name, since it
# is not actually mentioned elsewhere in this configuration file.

address_reply:
driver = autoreply

# This transport is used for delivering messages over SMTP connections.

remote_smtp:
driver = smtp
command_timeout = 1m
connect_timeout = 10s
keepalive = true
max_rcpt = 60


######################################################################
#                      DIRECTORS CONFIGURATION                       #
#             Specifies how local addresses are handled              #
######################################################################
#                          ORDER DOES MATTER                         #
#   A local address is passed to each in turn until it is accepted.  #
######################################################################


# Local addresses are those with a domain that matches some item in the
# "local_domains" setting above, or those which are passed back from the
# routers because of a "self=local" setting (not used in this configuration).

# This director handles aliasing using a traditional /etc/aliases file.
# If any of your aliases expand to pipes or files, you will need to set
# up a user and a group for these deliveries to run under. You can do
# this by uncommenting the "user" option below (changing the user name
# as appropriate) and adding a "group" option if necessary.
system_aliases:
driver = aliasfile
file_transport = address_file
pipe_transport = address_pipe
file = /etc/aliases
search_type = lsearch
# user = exim

# This director handles forwarding using traditional .forward files.
# If you want it also to allow mail filtering when a forward file
# starts with the string "# Exim filter", uncomment the "filter" option.
# The check_ancestor option means that if the forward file generates an
# address that is an ancestor of the current one, the current one gets
# passed on instead. This covers the case where A is aliased to B and B
# has a .forward file pointing to A.

userforward:
driver = forwardfile
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
file = .forward
no_verify
check_ancestor
filter


# This director matches local user mailboxes.

localuser:
driver = localuser
transport = local_delivery



######################################################################
#                      ROUTERS CONFIGURATION                         #
#            Specifies how remote addresses are handled              #
######################################################################
#                          ORDER DOES MATTER                         #
#  A remote address is passed to each in turn until it is accepted.  #
######################################################################


# Remote addresses are those with a domain that does not match any item
# in the "local_domains" setting above.

# The follow router routes all non-local messages to a gateway
# mail exchanger, which will do the actual remote transport of the mail.

relayrouter:
driver = domainlist
transport = remote_smtp
route_list = "*wpps.wcape.school.za 10.0.1.9 byname"

# This router routes to remote hosts over SMTP using a DNS lookup with
# default options.

lookuphost:
driver = lookuphost
transport = remote_smtp

# This router routes to remote hosts over SMTP by explicit IP address,
# given as a "domain literal" in the form [nnn.nnn.nnn.nnn]. The RFCs
# require this facility, which is why it is enabled by default in Exim.
# If you want to lock it out, set forbid_domain_literals in the main
# configuration section above.

literal:
driver = ipliteral
transport = remote_smtp




######################################################################
#                      RETRY CONFIGURATION                           #
######################################################################


# This single retry rule applies to all domains and all errors. It specifies
# retries every 15 minutes for 2 hours, then increasing retry intervals,
# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
# hours, then retries every 8 hours until 4 days have passed since the first
# failed delivery.

# Domain               Error       Retries
# ------               -----       -------


*                      timeout_DNS F,1h,12m;
*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h





######################################################################
#                      REWRITE CONFIGURATION                         #
######################################################################


# End of Exim configuration file






---------------------------------------------------------------
Paul Hennion
IT Director
Western Province Preparatory School

Email address: pauhen@???
Phone: (021) 761 8074
Fax: (021) - 762 6120