LMTP back end TCPIP channel

LMTP back end TCP/IP channel
On an LMTP back end Message Store host, the typical TCP/IP channels and servers are replaced instead by an LMTP server, defined in Unified Configuration as a   channel and corresponding   service under the Dispatcher: msconfig&#x3e; show channel:tcp_&#x2a; role.channel:tcp_lmtpss.official_host_name = tcp_lmtpss-daemon role.channel:tcp_lmtpss.flagtransfer (novalue) role.channel:tcp_lmtpss.identnonenumeric (novalue) role.channel:tcp_lmtpss.lmtp (novalue) msconfig&#x3e; show dispatcher.service:&#x2a;MTP&#x2a; role.dispatcher.service:LMTPSS.image = IMTA_BIN:tcp_lmtp_server role.dispatcher.service:LMTPSS.logfilename = IMTA_LOG:tcp_lmtpss_server.log role.dispatcher.service:LMTPSS.parameter = CHANNEL=tcp_lmtpss role.dispatcher.service:LMTPSS.stacksize = 2048000 role.dispatcher.service:LMTPSS.tcp_ports = 225 msconfig&#x3e; show mapping:PORT_ACCESS role.mapping:PORT_ACCESS.rule TCP&#x7c;&#x2a;&#x7c;225&#x7c;&#x2a;&#x7c;&#x2a; $C$&#x7c;INTERNAL_IP;$1&#x7c;$Y$E role.mapping:PORT_ACCESS.rule TCP&#x7c;&#x2a; $N500 Do not connect to this machine msconfig&#x3e; show mapping:INTERNAL_IP role.mapping:INTERNAL_IP.rule internal-host-or-subnet $Y role.mapping:INTERNAL_IP.rule another-internal-host-or-subnet $Y ... role.mapping:INTERNAL_IP.rule ${::1} $Y role.mapping.INTERNAL_IP.rule 127.0.0.l $Y role.mapping:INTERNAL_IP.rule &#x2a; $N A recipe that creates this configuration would be: description("Configure backend store accessible via LMTP"); keywords(&#x5b;"backend", "store", "LMTP"&#x5d;); myIP = ""; feIPs = &#x5b;&#x5d;; if (length(myIP) &#x3c;= 0) { myIP = read("Enter the IP address of this host: "); } if (length(feIPs) &#x3c;= 0) { loop { ip = read("Enter the IP address of a frontend machine (&#x3c;RET&#x3e; if no more): "); exitif (ip == ""); push(feIPs, ip); } } if exists_channel("tcp_lmtpss") { warn("WARNING: tcp_lmtpss channel already exists, will not be added"); } else { print("INFO: Adding tcp_lmtpss channel\n"); add_channel("tcp_lmtpss",              &#x5b;"flagtransfer", "",                "identnonenumeric", "",                "lmtp", "",                "official_host_name", "tcp_lmtpss-daemon"&#x5d;); } if exists_group("dispatcher.service:LMTPSS") { warn("WARNING: Dispatcher.service:LMTPSS group already exists, will not be created"); } else { print("INFO: Creating dispatcher.service:LMTPSS group\n"); add_group("dispatcher.service:LMTPSS",            &#x5b;"image", "IMTA_BIN:tcp_lmtp_server",              "logfilename", "IMTA_LOG:tcp_lmtpss_server.log",              "parameter", "CHANNEL=tcp_lmtpss",              "tcp_ports", "225",              "stacksize", "2048000"&#x5d;); } print("INFO: Replace PORT_ACCESS mapping\n"); replace_mapping("PORT_ACCESS",                &#x5b;"TCP&#x7c;&#x2a;&#x7c;225&#x7c;&#x2a;&#x7c;&#x2a;", "$C$&#x7c;INTERNAL_IP;$1&#x7c;$Y$E",                  "TCP&#x7c;&#x2a;", "$N500 Do not connect to this machine"&#x5d;); internal_ip = &#x5b;"${::1}", "$Y", "127.0.0.1", "$Y", "&#x2a;", "$N"&#x5d;; ipaddrs = &#x5b;feIPs&#x5d;; push(ipaddrs, myIP); loop { exitif (ipaddrs == &#x5b;&#x5d;); ip = pop(ipaddrs); push(internal_ip, "$Y"); push(internal_ip, ip); } print("INFO: Replace INTERNAL_IP mapping\n"); replace_mapping("INTERNAL_IP", internal_ip); In legacy configuration, this would be defined as a  channel in the   file: tcp_lmtpss flagtransfer identnonumeric lmtp tcp_lmtpss-daemon and a Dispatcher definition of the LMTPSS server in the  file: ! ! rfc 2033 LMTP server - store ! &#x5b;SERVICE=LMTPSS&#x5d; PORT=225 IMAGE=IMTA_BIN:tcp_lmtp_server LOGFILE=IMTA_LOG:tcp_lmtpss_server.log PARAMETER=CHANNEL=tcp_lmtpss STACKSIZE=2048000 ! Uncomment the following line and set INTERFACE_ADDRESS to an appropriate ! host IP (dotted quad) if the dispatcher needs to listen on a specific ! interface (e.g. in a HA environment). !INTERFACE_ADDRESS= and with   and    mapping tables in the   file: PORT_ACCESS TCP&#x7c;&#x2a;&#x7c;225&#x7c;&#x2a;&#x7c;&#x2a;  $C$&#x7c;INTERNAL_IP;$1&#x7c;$Y$E TCP&#x7c;&#x2a;          $N500 Do not connect to this machine INTERNAL_IP host&#x27;s-own-public-IP                     $Y another-public-IP-for-host               $Y ...  internal-host-or-subnet                   $Y another-internal-host-or-subnet          $Y ...  ${::1}                                    $Y 127.0.0.1                                $Y &#x2a;                                        $N Note that this configuration is only appropriate for back ends where delivery is only performed by LMTP. In particular, the  and   mapping mapping tables shown here would not be appropriate for back ends that also accept mail via SMTP.
 * 1) Back end&#x27;s IP address
 * 2) Script will prompt for address if left black
 * 3) myIP = "10.133.152.193";
 * 1) List of frontend machines that access this store via LMTP
 * 2) Script will prompt for addresses if left blank
 * 3) feIPs = &#x5b;"10.133.152.192", "10.133.152.193"&#x5d;;
 * 1) Prompt for myIP and feIP if needed
 * 1) Configure LMTP back end
 * 1) Replace PORT_ACCESS mapping
 * 1) add PORT_ACCESS mapping entries
 * 1) list of IP addresses

See also:
 * lmtp Option
 * flagtransfer Option
 * identnonenumeric Option
 * logfile options
 * image Option
 * logfilename Option
 * parameter Option
 * stacksize Option
 * tcp_ports Option
 * Dispatcher options
 * Typical TCPIP channels and servers
 * LMTP server options
 * TCPIP-channel-specific options
 * LMTP channels