NAME
SYNOPSIS
DESCRIPTION
OPTIONS
CONFIGURATION
PAMSUPPORT FOR SMTPAUTH
FILES
SEE ALSO
AUTHOR

## NAME

smtpserver - zmailer SMTP server

## SYNOPSIS

smtpserver [ -46aignBVvw ] [ -p port ] [ -l SYSLOG ] [ -l logfile ] [ -s[ftveR] ] [ -s strict ] [ -I pidfile ] [ -L maxloadaver ] [ -M SMTPmaxsize ] [ -P postoffice ] [ -R router ] [ -C cfgfile ] [ -T '[1.2.3.4]' ]

## DESCRIPTION

This program implements the server side of the SMTP protocol as described in RFC821, and knows about the common extensions to the protocol expected by Sendmail and BSMTP clients.

By default the program will kill the previous smtpserver daemon, if any, then detach and listen for SMTP connections. Incoming messages will be submitted for processing using the zmailer(3) interface to ZMailer. Nontrivial address checking is done asynchronously, although this behaviour can be changed by a command line option if you cannot afford to transfer data just to bounce it back. All checking is done by executing the router(8) program in interactive mode, and executing a wellknown shell function with wellknown parameters for each request.

## OPTIONS

| -4 | Explicitely to use IPv4 type of socket even on machines that is capable to do IPv6 type of sockets.
| -6 | Explicitely to (try to) use IPv6 type of socket even if the machine does not support it. For a default the server will try to use IPv6, if it has been compiled on an environment where it is present, but will do a fallback to IPv4 in case the runtime system does not have IPv6.
| -a | turn on RFC931/RFC1413 indentification protocol, and log the information acquired with it to the submitted file.
| -w | turn on usage of "whoson" protocol. This option is available even if actual code is not available.
| -g | the gullible option will make the program believe any information it is told (such as origin of a connection) without checking.
| -i | runs the server interactively, which makes it usable for processing a batched SMTP stream (BSMTP) on stdin. With -v option this echoes incoming BSMTP to create more accurate faximille of BITNET BSMTP mailers.
| -l SYSLOG | A magic value of "SYSLOG" for the logfile is interpreted by directing all session log stuff thru syslogd; something which may require better syslogd, than your system has by default; see ``syslogng'' at a well indexed free software sites.
| -l logfile | specifies a logfile and enables recording of incoming SMTP conversations. If you want both file based session log, and syslog() based, issue this option after ``-l SYSLOG'' one.
| -n -p -B | indicates the program is being run from inetd(8). specifies the TCP port to listen on instead of the default SMTP port, 25. flags the email to arrive via BSMTP channel (via BITNET, for example).
| -I pidfile -L maxloadaver | specifies an alternate PID file location. tells the maximum loadaverage the system is under when we still accept email in.
| -M SMTPmaxsize | Defines the asolute maximum size we accept from incoming email. (Default: infinite) (This is local policy issue.)
| -P postoffice -R router -C cfgfile | specifies an alternate POSTOFFICE directory. specifies an alternate router (8) program to use for address verification. specifies nonstandard configuration file location; the default is $MAILSHARE/smtpserver.conf.

| -s strict | this turns on all kinds of strict smtp protocol adherence checks, which in normal life can be relaxed slightly. Great for compliance testing ;)
| -s [ftveRS] | specifies the style of address verification to be performed. There are four independent commands that can invoke some kind of address verification, and four independent flags to control whether this should be done. They are: f check MAIL FROM addresses t check RCPT TO addresses v check VRFY command argument e check EXPN command argument R require addresses to be of syntax: local@remote (strict 821) S allow sloppy input for systems incapable to respect RFC 821 properly; WinCE1.0 (and 2.0) does: "MAIL FROM:user@domain" :( The flags are concatenated to form the argument to the -s option. The default is ve.
| -T '[1.2.3.4]' |

-T '[ipv6.hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:1.2.3.4]'

| Supply (in interactive mode) test address for policy dataset address testing. The optionset recommended for that case is: i d 1 T '[1.2.3.4]' A notable detail is that to see what really is going on in the policy analysis, one must usei the ``d 1'' option to turn on the debugging early enough to see its initial verdict at the time the ``220..'' greeting banner is produced.. Also notable is that brackets in the supplied IP address must be present, otherwise illegal syntax will be reported. (Using RFC 821 address literal parser here.)

| -V

## CONFIGURATION

If the MAILSHARE/smtpserver.conf exists it is read to configure two kinds of things:

| PARAM -entries | allow server starttime parametrization of several things, including: - helptexts - acceptance/rejection database definitions
| The style (-s) option |
|  | behaviour based on glob patterns matching the HELO/EHLO name given by a remote client. Lines beginning with a # or whitespace are ignored in the file, and all other lines must consist of two tokens: a shellstyle (glob) pattern starting at the beginning of the line, whitespace, and a sequence of style flags. The first matching line is used. As a special case, the flags section may start with a ! character in which case the remainder of the line is a failure comment message to print at the client. This configuration capability is intended as a way to control misbehaving client software or mailers.
| PARAM maxsize | This is synonym to starttime -M option.

PARAM min-availspace 5000

| This defines, in kilobytes, the minimum available space in

POSTOFFICE directory after the message has been accepted in.

PARAM max-error-recipients

| This defines how many recipients can be on a message whose source address is MAIL FROM:<>. That is, is an error message. (Sometimes SPAMs are tried to inject in that form...)

PARAM MaxSameIpSource

| This sets the maximum number of active connections from any given single IP address. When the limit is reached, system tells the remote end: ``450 Too many simultaneous connections...'' (and then closes the connection.) When the limit is exceeded by factor of four, the server just closes the connection without telling anything. Do note that this works only when the smtpserver is running as its own daemon, not while run from under inetd!

PARAM MaxParallelConnections

| This limits how many simultaneous connections the server will accept in total e.g. how many childs a master server can have running. Default value: 800. Exceeding the limit by less than 100 will get a message ``450 Too many simultaneous connections...'' printed to the connection. In every case the connection is closed right after the possible message. Do note that this works only when the smtpserver is running as its own daemon, not while run from under inetd!

PARAM ListenQueueSize
This sets the listen queue size parameter for listen(2) call at the server. PARAM TcpRcvBufferSize

| This sets setsockopt(SO_RCVBUF) value, in case the system default is not suitable.

PARAM TcpXmitBufferSize

| This sets setsockopt(SO_SNDBUF) value, in case the system default is not suitable.

PARAM RcptLimitCount 10000

| This sets the maximum number of accepted recipients per one message transaction. Default (and minimum!) value is 100, which is mandated by the RFC 821.

PARAM BindPort 25

PARAM BindAddress [0.0.0.0]

PARAM BindAddress [IPv6.0::0]

PARAM BindAddress iface:ifacename

| Per default the server mode SMTPserver binds to port 25 and any locally accepted address, but occasionally people seem to want to have separate server instances with different configurations, and for those cases are these parameters.

PARAM DEBUGcmd

PARAM EXPNcmd

PARAM VRFYcmd

| This trio (DEBUGcmd, EXPNcmd, VRFYcmd) are enablers of like named SMTP verbs which have some uses in the debug mode. They are normally disabled, but running them enabled does not allow direct attacks with them. (That we know of.)

PARAM enable-router

|  | This enables interactive router use where user inputs reach the router. As things turn out, while the canned scripts should be safe against any and all inputs, a careless change in the router scripts may endanger this status. Per default this is disabled to protect your system. To enable EXPN and VRFY, this must be enabled, but be very carefull when you do this. This is also required for interactive router processing of ``MAIL FROM'' and ``RCPT TO'' addresses.
| PARAM smtp-auth |
|  | This enables 'SMTP AUTH' facility (AUTH verb, plus optional parameter to MAIL verb). With this the users who are able to 'login' successfully to this host, are then able to relay the email thru the server unlimited.

PARAM AUTH-LOGIN-also-without-TLS

| This enables 'SMTP AUTH' facility usage also without running under SSL/TLS security envelope.

PARAM MSA-mode

| Enable Message Submission Agent mode, where smtpserver requires successful user authentication during SMTP sessions initiated from outside of the trusted networks or the networks with relaying enabled (see "fulltrustnet" and "relaycustnet" at the sample proto/db/smtppolicy.src file).

PARAM SMTP-auth-pipe /path/to/program

| This is a path to the external authentication program. The authenticator should read a username from command line and a password from standard input. Exit status 0 means successful authentication. It is relatively easy to make a mistake in external authentication program that follows the specification. Use this option only if you know exactly what you do! BE CAREFULL!

PARAM No8BITMIME

PARAM NoCHUNKING

PARAM NoDSN

PARAM NoEHLO

PARAM NoENCHANCEDSTATUS(CODES)

PARAM NoETRN

PARAM NoPIPELINING

| This set are disablers of like named Extended SMTP EHLO responses, plus EHLO verb itself, e.g. using these will turn off given (for example ``PIPELINING'') response from the EHLO replies, and then a client possibly capable to feed PIPELINING will not do it unless it breaks

| rules, and does it even when the server does not report facility being

| available.

| If you want to disable any of these, you better have a good reason for it,

| as in general they work quite fine. |  |  |  |  |  |
| Of these, 8BITMIME can not adverticement can be turned off. | in | reality | be | disabled, | only | its

PARAM no-multiline-replies

| Turn off ZMailer's default multiline replies; many systems (especially

|  | from M$ breed) don't do RFC 821 Appendix E properly...
| PARAM policydb | This defines smtp input policy filtering/analysis database location. See the comments at the sample proto/db/smtppolicy.src file.

PARAM contentfilter @MAILBIN@/smtpcontentfilter

| An external program for received message content analysis.

| The interface to the program is simple, smtpserver writes relative

| PARAM tarpit n1 n2 | filepath of the programs stdin, ending it with a newline. begins with a signed integer, then if an additional message space separates the integer from the message. | The reply follows, a |

| This defines a prereply slowdown factor, and next delay multiplier

| (both are integers). Default values are (0, 0). Delay tops at 250

| (seconds). The ``n1'' is used as the initial tarpit delay, and ``n2'' is

multiplier for formula: next = prev + (prev * n2)

PARAM rcvd-ident

PARAM rcvd-whoson

PARAM rcvd-auth-user

PARAM rcvd-tls-mode

PARAM rcvd-tls-peer

| This quintet controls what possibly collected data is shown at the

| published ``Received:'' header that this system generates.

PARAM etrn-cluster node-name-or-address mq2-username mq2-passwd

| In loadbalance clusters a network level loadbalancer may distribute the incoming SMTP connections to multiple real machines, and by using this parameter (repeatedly) to list those peers, system can relay user initiated ETRN requests to all cluster nodes. This method requires that the scheduler runs its mailq service in MAILQv2 mode! |

Here is a possible configuration file:

| `#`

| `# smtpserver.conf autogenerated edition`

| `# #PARAM maxsize 10000000 # Same as M option #PARAM minavailspace 5000 # Minimum free in POSTOFFICE after # # message has arrived; in kBs. #PARAM maxerrorrecipients 3 # More than this is propably SPAM!`

`#PARAM maxunknowncommands 10 # More than this is propably broken`

| `#` |  | `# client`
| `#PARAM MaxSameIpSource #` | `10` | `# Max simultaneous connections # from any IP source address`

`#PARAM MaxParallelConnections 800 # Max simultaneous connections
# # in total to the server
#PARAM TcpRcvBufferSize 32000 # Should not need to set!
#PARAM TcpXmitBufferSize 32000 # Should not need to set!`

| `#` |  |
| `#PARAM ListenQueueSize #` |  | `10 # listen(2) parameter`
| `#PARAM RcptLimitCount # # #PARAM BindPort` |  | `10000 # Max number of recipients for one # MAIL FROM session. Minimum: 100` `25 # Binding port`

`#PARAM BindAddress [0.0.0.0] # Binding address for multihomers.. #PARAM BindAddress [IPv6.0::0] # and here is for IPv6 NO SPACES!
#
# Enables of some commands:
#PARAM DEBUGcmd`

| `PARAM PARAM` | `EXPNcmd VRFYcmd`

`PARAM enablerouter`

| `# # # # # # # #` |  | `# This is a security decission for you. # This is needed for EXPN/VRFY and interactive # processing of MAIL FROM and RCPT TO addresses. # However it also may allow external user entrance # to ZMailer router shell environment with some # suitably pervert input, if quotation rules are # broken in the scripts.` |

`#PARAM smtpauth`

| `# # # #` |  | `# enable if you want to allow SMTP to autenticate # with the default code against system /etc/passwd # (or whatever source getpwnam() uses for it..)` |

`#PARAM AUTHLOGINalsowithoutTLS
# # Enable, if the "AUTH LOGIN" is to be allowed to
# # be used without running under SSL/TLS security
# # envelope.
#
#PARAM MSAmode`

| `# # # # # # #` |  | `# Message Submission Agent mode. Require # successful user authentication during SMTP # sessions initiated from outside of the trusted # networks or the networks with relaying enabled # (see "fulltrustnet" and "relaycustnet" in # smtppolicy.src file).` |

`#PARAM SMTPauthpipe /path/to/program`

| `# # # # #` |  | `# External authentication program. The # authenticator should read a username from # command line and a password from standard input. # Exit status 0 means successful authentication.` |

`# Disablers of some facility adverticements
#PARAM NoEHLO
#PARAM NoPIPELINING
#PARAM No8BITMIME
#PARAM NoCHUNKING
#PARAM NoDSN
#PARAM NoETRN`

`#PARAM nomultilinereplies # except to EHLO
#
# HDR220 metatags:
# %% '%' character
# %H SS>myhostname
# %I '+IDENT' if 'identflg' is set
# %V VersionNumb
# %T curtime string
# %X xlatelang parameter
#
#PARAM hdr220 %H ZMailer ESMTPserver %V running at Yoyodyne Inc.
#PARAM hdr220 %H (NO UCE)(NO UBE) our local time is now %T
#
PARAM help
PARAM help This mailserver is at Yoyodyne Propulsion Inc.
PARAM help Our telephone number is: +12345678900, and
PARAM help telefax number is: +12345678999
PARAM help Our businesshours are MonFri: 08001700 (TZ: 0700)
PARAM help
PARAM help Questions regarding our email service should be sent
PARAM help via email to address <postmaster@OURDOMAIN>
PARAM help Reports about abuse are to be sent to: <abuse@OURDOMAIN>
PARAM help
#
# Uncomment following for not to strip incoming addresses of
# form: <@aa,@bb:cc@dd> into nonsourcerouted base form: <cc@dd>
#
#PARAM allowsourceroute
#
# The policy database:
# (NOTE: See `makedb' for its default suffixes!)`

| `#` |
| `PARAM policydb #` | `@DBTYPE@ @MAILVAR@/db/smtppolicy`

`# External program for received message content analysis:
#PARAM contentfilter @MAILBIN@/smtpcontentpolicyanalysis`

| `#PARAM tarpit 0 0 #PARAM tarpit 20 2` `#` | `# No "tarpit" for 4XX/5XX reply codes # Initial delay: 20 secs, next = prev + (prev * 2)`

`# TLSv1/SSLv[23] parameters;
# all must be used for the system to work!`

| `# # See`

`# http://www.aet.tucottbus.de/personen/jaenicke/pfixtls/doc/setup.html #`

| `#PARAM usetls` |  |
| `#PARAM tlsCAfile #PARAM tlscertfile #PARAM tlskeyfile` | `/opt/mail/db/smtpserverCAcert.pem /opt/mail/db/smtpservercert.pem /opt/mail/db/smtpserverkey.pem` |

`# # Then some futher thoughs that may materialize some time..`

| `#PARAM tlsloglevel #PARAM tlsccertvd #PARAM tlsaskcert #PARAM tlsrequirecert` | `0 0 0 0` |

`##PARAM tlsCApath ... (somewhen: verify client's certificates)
##PARAM tlsenforcetls 1`

`# Elements to be added into "Received:" header's
# initial comment part:
#`

| `#PARAM rcvdident # #PARAM rcvdwhoson #PARAM rcvdauthuser #PARAM rcvdtlsmode #PARAM rcvdtlsccert` |  | `# The ident lookup result # (or even admitting it having queried) # Likewise for "whoson" # Authenticated Username # Cipher or not # Client Certificate reference` |

| `# A loadbalanced server cluster may want to communicate`

| `# the ETRN request to cluster components, here is how:`

| `# See also: doc/guides/etrncluster`

| `#`

| `#PARAM etrncluster localhost mq2username mq2passwd`

| `#PARAM etrncluster node2nameoraddress mq2username mq2passwd #PARAM etrncluster node3nameoraddress mq2username mq2passwd #... #PARAM etrncluster node40nameoraddress mq2username mq2passwd # # # HELO/EHLOpattern styleflags # [max loadavg] # localhost 999 ftveR some.host.domain 999 !NO EMAIL ACCEPTED FROM YOUR MACHINE # If the host presents itself as: HELO [1.2.3.4] be lenient to # it.. The syntax below is due to these patterns being SHGLOB # style patterns where the brackets are special characters. [*] 999 ve # Per default demant strict syntactic adherence, including fully # qualified addresses for MAIL FROM, and RCPT TO. To be lenient # on that detail, remove the "R" from "veR" string below: * 999 veR`

## PAMSUPPORT FOR SMTPAUTH

If the system has <security/pam_appl.h> file, following file will also be needed for the
system:

`/etc/pam.d/smtpauthlogin
#%PAM1.0`

| `auth auth account` | `required /lib/security/pam_pwdb.so shadow required /lib/security/pam_nologin.so required /lib/security/pam_pwdb.so` |

## FILES

/etc/zmailer.conf
/var/spool/postoffice/.pid.smtpserver (POSTOFFICE/.pid.smtpserver)
/local/share/mail/smtpserver.conf (MAILSHARE/smtpserver.conf)

## SEE ALSO

| router(8) |
| RFC 821 RFC 1123 | The basic SMTP specification Various 821 parameter clarifications

Several extended SMTP facilities are implemented:

| RFC 1341/1521/2045 RFC 1342/1522/2047 RFC 1425/1651/1869 RFC 1426/1652 RFC 1427/1653/1870 RFC 1428 RFC 1830 |  | MIME specification (body, formats) MIME specification (headers) ESMTP EHLO framework ESMTP 8BITMIME ESMTP SIZE Basic MIME conversion rules ESMTP CHUNKING |

| RFC 1854/2197 RFC 1891 RFC 1985 RFC 2034 RFC 2487 RFC 2554+M$ Exchange RFC 2554+NetScape RFC 2852 |  | ESMTP PIPELINING ESMTP DSN ESMTP ETRN ESMTP ENHANCEDSTATUSCODES ESMTP STARTTLS ESMTP AUTH LOGIN ESMTP AUTH=LOGIN ESMTP DELIVERBY

## AUTHOR

This program authored and copyright by:
Rayan Zachariassen (was at U of Toronto)
Extended SMTP, policy facilities, etc. by
Matti Aarnio <mea@nic.funet.fi>