###################################################################### # Runtime configuration file for Exim # ###################################################################### ifdef(`confM4_DIR', `', `define(`confM4_DIR', `../m4')') ifdef(`confACLS_DIR', `', `define(`confACLS_DIR', `.')') ifdef(`confFEATURES_DIR', `', `define(`confFEATURES_DIR', `.')') ifdef(`confDELIVERIES_DIR', `', `define(`confDELIVERIES_DIR', `.')') ifdef(`confSITE_DIR', `', `define(`confSITE_DIR', `.')') include(confFEATURES_DIR`/cfhead.m4')dnl include(confM4_DIR`/conf.default')dnl include(confSITE_DIR/`conf')dnl ###################################################################### # MAIN CONFIGURATION SETTINGS # ###################################################################### define(`SECTION', `MAIN')dnl ifdef(`confCONFDIR', `dnl', `dnl errprint(`*** ERROR: confCONFDIR variable required ')') CONFDIR=confCONFDIR .include_if_exists confCONFDIR/site/MACROS ifdef(`confPERL', `ifelse(len(X`'confPERL), `1', `dnl', `dnl perl_startup = do "confPERL" ')') ifdef(`confMYSQL', `ifelse(len(X`'confMYSQL), `1', `dnl', `dnl hide mysql_servers = confMYSQL ')') ifdef(`confPGSQL', `ifelse(len(X`'confPGSQL), `1', `dnl', `dnl hide pgsql_servers = confPGSQL ')') ifdef(`confREDIS', `ifelse(len(X`'confREDIS), `1', `dnl', `dnl hide redis_servers = confREDIS ')') ifdef(`confLOG_SELECTOR', `ifelse(len(X`'confLOG_SELECTOR), `1', `dnl', `dnl log_selector = confLOG_SELECTOR ')') hostlist relay_from_hosts = localhost : CONFDIR/hosts-relayfrom ifdef(`confETRN_ENABLE', `ifelse(confETRN_ENABLE, `NO', `dnl', `dnl dnl hostlist trusted_hosts = localhost : CONFDIR/hosts-trusted ')') hostlist trusted_hosts = localhost : CONFDIR/hosts-trusted ifdef(`confWHITE_LIST_RELAYS', `ifelse(confWHITE_LIST_RELAYS, `NO', `', ` hostlist relay_white_list = +ignore_unknown : +ignore_defer : CONFDIR/hosts-whitelist ')') ifdef(`confSMTP_SERIALIZE_HOSTS', `ifelse(confSMTP_SERIALIZE_HOSTS, `NO', `dnl', `dnl hostlist serialize_hosts = CONFDIR/hosts-serialize ')') dnl ifelse(confPRIVATE_NETWORKS_EXTENDED, `NO', ` hostlist private_networks = 127.0.0.1/8 : 10.0.0.0/8 : 172.16.0.0/12 : 192.168.0.0/16 ',` hostlist private_networks = CONFDIR/hosts-private ') dnl ifelse(confPRIVATE_NETWORKS_EXTENDED, `NO', `') ifelse_strstr(confIPv6, `YES', `dnl dnl ifdef(`confDNSLOOKUP6_ENABLE',`',`define(`confDNSLOOKUP6_ENABLE',`NO')')dnl dnl ifelse(confDNSLOOKUP6_ENABLE, `NO', `dnl', `dnl ifelse(confPRIVATE_NETWORKS6_EXTENDED, `NO', ` hostlist private_networks6 = <; 2001:db8::/32 ; fe80::/16 ; febf::/16 ; fec0::/16 ; feff::/16 ; fc00::/16 ',` hostlist private_networks6 = CONFDIR/hosts6-private ') dnl ifelse(confPRIVATE_NETWORKS6_EXTENDED, `NO', `') ') dnl ifelse(confDNSLOOKUP6_ENABLE, `NO', `', `') dnl ') dnl ifelse_strstr(confIPv6, `YES', `') domainlist local_domains = confLOCAL_DOMAINS define(`confDOMAINS_ABUSE', `')dnl ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `dnl', `dnl domainlist relay_to_domains = lsearch;CONFDIR/domains-relayto define(`confDOMAINS_ABUSE', ` : +relay_to_domains')dnl ')') ifdef(`confMAILERTABLE', `ifelse(confMAILERTABLE, `NO', `dnl', `dnl DELIVERY(`mailertable')dnl ')') #IS_NOT_QUARANTINED=${if eq{$acl_m_quarantined}{}{yes}{no}} IS_NOT_QUARANTINED=and{{eq{$acl_m_quarantined}{}}{!match{X-Spam-Action:}{quarantined}}{!forany{${sg{$acl_m_quarantined_per_rcpt}{, }{:}}}{eq{$item}{$local_part@$domain}}}} ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl FEATURE(`greylist')dnl ')') ifdef(`confSMTP_AUTH', `ifelse(confSMTP_AUTH, `NO', `dnl', `dnl FEATURE(`auth')dnl ')') ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl FEATURE(`auth_client')dnl ')') #helo_try_verify_hosts = ! +relay_from_hosts helo_accept_junk_hosts = +relay_from_hosts #sender_unqualified_hosts = +relay_from_hosts #recipient_unqualified_hosts = +relay_from_hosts ifdef(`confCHECK_RELAY_DROPPED', `ifelse(confCHECK_RELAY_DROPPED, `NO', `dnl', `dnl ACL(`check_relay_dropped')dnl ')') define(`confCHECK_HELO_FQDN', `NO')dnl ifdef(`confCHECK_HELO_FQDN_FORGED', `ifelse(confCHECK_HELO_FQDN_FORGED, `NO', `', `define(`confCHECK_HELO_FQDN', `YES')')') ifdef(`confCHECK_HELO_FQDN_DEFER', `ifelse(confCHECK_HELO_FQDN_DEFER, `NO', `', `define(`confCHECK_HELO_FQDN', `YES')')') ifdef(`confCHECK_HELO_FQDN_NOT_RESOLVABLE',`ifelse(confCHECK_HELO_FQDN_NOT_RESOLVABLE,`NO', `', `define(`confCHECK_HELO_FQDN', `YES')')') ifdef(`confCHECK_HELO_FQDN', `ifelse(confCHECK_HELO_FQDN, `NO', `dnl', `dnl ACL(`check_helo_fqdn')dnl ')') ifdef(`confCHECK_ACCESS_RELAY', `ifelse(confCHECK_ACCESS_RELAY, `NO', `dnl', `dnl ACL(`check_relay')dnl ')') ifelse(confDNSBL0_NAME, `confDNSBL0_NAME', `dnl', ` FEATURE(`dnsbl')dnl ') ifdef(`confVERIFY_SENDER', `ifelse(confVERIFY_SENDER, `NO', `dnl', `dnl FEATURE(`verify_sender')dnl ')') ifdef(`confVIRTUSERTABLE', `ifelse(confVIRTUSERTABLE, `NO', `dnl', `dnl FEATURE(`virtusertable')dnl ')') ifdef(`confDOMAIN_LITERALS', `ifelse(confDOMAIN_LITERALS, `NO', `dnl', `dnl FEATURE(`domain_literals')dnl ')') ifdef(`confCHECK_FAKE_INTERNAL', `ifelse(confCHECK_FAKE_INTERNAL, `NO', `dnl', `dnl ACL(`check_fake_internal')dnl ')') ifdef(`confLOCAL_INTERFACES', `ifelse(len(X`'confLOCAL_INTERFACES), `1', `dnl', `dnl # default with IPv4 support: # local_interfaces = 0.0.0.0 # default with IPv4 & IPv6 support: # local_interfaces = <; ::0 ; 0.0.0.0 local_interfaces = confLOCAL_INTERFACES ')') define(`confSMTP_BANNER_ADDITIONAL',`') ifdef(`confSMTP_BANNER_ADDITIONAL_ENABLE', `ifelse(confSMTP_BANNER_ADDITIONAL_ENABLE, `NO', `dnl', `dnl define(`confSMTP_BANNER_ADDITIONAL_HELO',`\nStrongly recomended to use the fully-qualified domain name (FQDN) of the SMTP client\nor address literal in the EHLO/HELO command.\nOtherwise your host address will be listed in black list.') ifelse_strstr(confCHECK_HELO_OWN`'confCHECK_ACCESS_HELO, `SUBMIT',` define(`confSMTP_BANNER_ADDITIONAL', confSMTP_BANNER_ADDITIONAL_HELO) ') ')') ifdef(`confSMTP_BANNER',`',`define(`confSMTP_BANNER',`')') ifelse(len(X`'confSMTP_BANNER), `1', ` ifelse(confANONYM_BANNER_HIDE_MTA_INFO, `NO',`',` smtp_banner = $primary_hostname ESMTP ifelse_strstr(confANONYM_BANNER_HIDE_MTA_INFO, `ALL',`daemon',`ifelse_strstr(confANONYM_BANNER_HIDE_MTA_INFO, `MTA',`daemon',`Exim`'ifelse_strstr(confANONYM_BANNER_HIDE_MTA_INFO, `VERSION',` daemon',` $version_number')')`'ifelse_strstr(confANONYM_BANNER_HIDE_MTA_INFO, `DATE',`',` $tod_full')')`'confSMTP_BANNER_ADDITIONAL ') ', ` smtp_banner = confSMTP_BANNER`'confSMTP_BANNER_ADDITIONAL ') dnl received_header_text = Received: \ dnl ${if def:sender_rcvhost \ dnl {from $sender_rcvhost\n\t}\ dnl {${if def:sender_ident {from ${quote_local_part:$sender_ident} }}\ dnl ${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\ dnl by $primary_hostname \ dnl ${if def:received_protocol {with $received_protocol}} \ dnl ${if def:tls_cipher {($tls_cipher)\n\t}}\ dnl (Exim $version_number (FreeBSD))\n\ dnl \t${if def:sender_address {(envelope-from <$sender_address>)\n\t}}\ dnl id $message_exim_id\ dnl ${if def:received_for {\n\tfor $received_for}} ifdef(`confRECEIVED_HEADER_TEXT', `dnl received_header_text = confRECEIVED_HEADER_TEXT ', `dnl ifdef(`confRECEIVED_HEADER_TEXT', `') received_header_text = Received: \ ${if def:sender_rcvhost \ ifelse_strstr(confANONYM_RCVD_HIDE_HOST_INFO, `YES', `dnl {from ${if eq{$acl_m_anonym}{anonym}{localhost ([127.0.0.1])}{$sender_rcvhost}}\n\t}\ ', `dnl ifelse_strstr(confANONYM_RCVD_HIDE_HOST_INFO, `YES', `') {from $sender_rcvhost\n\t}\ ') dnl ifelse_strstr(confANONYM_RCVD_HIDE_HOST_INFO, `YES', `') {${if def:sender_ident {from ${quote_local_part:$sender_ident} }}\ ${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\ by confRECEIVED_PRIMARY_HOSTNAME \ ${if def:received_protocol {with $received_protocol}} \ ${if def:tls_cipher {($tls_cipher)\n\t}}\ ifelse_strstr(confANONYM_RCVD_HIDE_MTA_INFO, `ALL', `', `dnl (Exim`'ifelse_strstr(confANONYM_RCVD_HIDE_MTA_INFO, `VERSION', `', ` $version_number')`'ifelse_strstr(confANONYM_RCVD_HIDE_MTA_INFO, `OS', `', ` (ifdef(`confOS2', `ifelse(len(X`'confOS2), `1', `confOS', `confOS2')', `confOS'))'))\n\t\ ') dnl ifelse_strstr(confANONYM_RCVD_HIDE_MTA_INFO, `ALL', `', `') ${if def:sender_address {(envelope-from <$sender_address>)\n\t}}\ id $message_exim_id\ ${if def:received_for {\n\tfor $received_for}} ') dnl ifdef(`confRECEIVED_HEADER_TEXT', `') acl_smtp_connect = acl_check_connect ifdef(`confETRN_ENABLE', `ifelse(confETRN_ENABLE, `NO', `dnl', `dnl acl_smtp_etrn = acl_check_etrn ')') acl_smtp_helo = acl_check_helo acl_smtp_auth = acl_check_auth acl_smtp_mail = acl_check_mail acl_smtp_rcpt = acl_check_rcpt acl_smtp_predata = acl_check_predata ifelse_strstr(confDKIM_CHECK, `YES', ` FEATURE(`dkim') ') acl_smtp_mime = acl_check_mime acl_smtp_data = acl_check_data ifelse_strstr(confIPv6, `DISABLE', `dnl define(`confIPv6', `NO')dnl disable_ipv6 = true ') dnl ifelse_strstr(confIPv6, `DISABLE', `') ifdef(`confCONFIGURE_GENERAL', `ifelse(confCONFIGURE_GENERAL, `NO', `dnl', `dnl include(confCONFIGURE_GENERAL)dnl ')') ifdef(`confQUALIFY_DOMAIN', `dnl qualify_domain = confQUALIFY_DOMAIN ', `errprint(`*** ERROR: confQUALIFY_DOMAIN must be specified ')') # qualify_recipient = ifdef(`confMESSAGE_SIZE_LIMIT', `ifelse(len(X`'confMESSAGE_SIZE_LIMIT), `1', `dnl', `dnl ifelse(confMESSAGE_SIZE_LIMIT, `0', `dnl', `dnl message_size_limit = confMESSAGE_SIZE_LIMIT ')')') #return_size_limit = 10K bounce_return_size_limit = 10K ifdef(`confEXIM_USER', `',`define(`confEXIM_USER',`mailnull')') ifdef(`confEXIM_GROUP',`',`define(`confEXIM_GROUP',`mail')') exim_user = confEXIM_USER exim_group = confEXIM_GROUP # never_users = root ifdef(`confTRUSTED_USERS', `trusted_users = confTRUSTED_USERS') ifdef(`confTRUSTED_GROUPS', `trusted_groups = confTRUSTED_GROUPS') ifelse(len(X`'confSYSTEM_FILTER), `1', `dnl', `dnl FEATURE(`system_filter')dnl ') accept_8bitmime = true # The settings below, which are actually the same as the defaults in the # code, cause Exim to make RFC 1413 (ident) callbacks for all incoming SMTP # calls. You can limit the hosts to which these calls are made, and/or change # the timeout that is used. If you set the timeout to zero, all RFC 1413 calls # are disabled. RFC 1413 calls are cheap and can provide useful information # for tracing problem messages, but some hosts and firewalls have problems # with them. This can result in a timeout instead of an immediate refused # connection, leading to delays on starting up SMTP sessions. (The default was # reduced from 30s to 5s for release 4.61.) #rfc1413_hosts = * #rfc1413_query_timeout = 5s # turn off ident requests rfc1413_hosts = : rfc1413_query_timeout = 0s #rfc1413_hosts = +relay_from_hosts #rfc1413_query_timeout = 5s smtp_return_error_details = true host_lookup = ifdef(`confHOST_LOOKUP', confHOST_LOOKUP, `*')dnl # When Exim can neither deliver a message nor return it to sender, it "freezes" # the delivery error message (aka "bounce message"). There are also other # circumstances in which messages get frozen. They will stay on the queue for # ever unless one of the following options is set. # This option unfreezes frozen bounce messages after two days, tries # once more to deliver them, and ignores any delivery failures. ifdef(`confIGNORE_BOUNCE_ERRORS_AFTER', `ifelse(len(X`'confIGNORE_BOUNCE_ERRORS_AFTER), `1', ` ignore_bounce_errors_after = 2d ', ` ignore_bounce_errors_after = confIGNORE_BOUNCE_ERRORS_AFTER ')') # This option cancels (removes) frozen messages that are older than a week. ifdef(`confTIMEOUT_FROZEN_AFTER', `ifelse(len(X`'confTIMEOUT_FROZEN_AFTER), `1', ` timeout_frozen_after = 7d ', ` timeout_frozen_after = confTIMEOUT_FROZEN_AFTER ')') ifdef(`confSTARTTLS', `ifelse(confSTARTTLS, `NO', `dnl', `dnl FEATURE(`starttls')dnl ')') ifdef(`confMESSAGE_ID_HEADER_ADD', `ifelse(confMESSAGE_ID_HEADER_ADD, `NO', `dnl', `dnl FEATURE(`add_message_id')dnl ')') ifdef(`confMAILMAN', `ifelse(confMAILMAN, `NO', `dnl', `dnl FEATURE(`mailman')dnl ')') ifdef(`confANTIVIRUS0_ACT', `dnl av_scanner = $acl_m0 ') ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') ifelse_strstr(confCONTENT_SCANNING, `DCC', `dnl FEATURE(`dcc')dnl ') ifdef(`confSRS', `ifelse(confSRS, `NO', `dnl', `dnl FEATURE(`srs')dnl ')') ifdef(`confFAKE_REJECT',`',`define(`confFAKE_REJECT', `NO')') ifdef(`confCHECK_FILE_EXT', `ifelse(confCHECK_FILE_EXT, `NO', `dnl', `dnl ACL(`check_ext')dnl ')') #dns_check_names_pattern = (?i)^(?>(?(1)\.|())[^\W_](?>[a-z0-9/-]*[^\W_])?)+$ dns_check_names_pattern = (?i)^(?>(?(1)\.|())[^\W_](?>[a-z0-9/-]*[^\W])?)+$ EXPAND_VALUE=${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}} ###################################################################### # ACL CONFIGURATION # # Specifies access control lists for incoming SMTP mail # ###################################################################### begin acl acl_check_connect: define(`SECTION', `ACL_CHECK_CONNECT')dnl warn set acl_c_pid = $pid ifdef(`confCHECK_RELAY_DROPPED', `ifelse(confCHECK_RELAY_DROPPED, `NO', `dnl', `dnl ACL(`check_relay_dropped')dnl ')') ifelse_strstr(confNO_ENFORCE_SYNC, `YES', `dnl warn hosts = confNO_ENFORCE_SYNC_HOSTS control = no_enforce_sync ') ifelse_strstr(confANONYM_RCVD_HIDE_HOST_INFO, `YES', `dnl warn set acl_m_anonym = hosts = +relay_from_hosts set acl_m_anonym = anonym ') warn set acl_c_sender_host_name = ifdef(`confHOST_LOOKUP', `ifelse(`X'confHOST_LOOKUP, `X', `', ` condition = ${if match_ip{$sender_host_address}{confHOST_LOOKUP}{yes}{no}} ')') dnl ifdef(`confHOST_LOOKUP', `ifelse(`X'confHOST_LOOKUP, `X', `', `')') set acl_c_sender_host_name = $sender_host_name define(`confRESOLVE_PTR_RECORD', `NO') ifdef(`confCHECK_RELAY_FORGED', `ifelse(confCHECK_RELAY_FORGED, `NO', `', `define(`confRESOLVE_PTR_RECORD', `YES')')') ifdef(`confCHECK_RELAY_RESOLVE', `ifelse(confCHECK_RELAY_RESOLVE, `NO', `', `define(`confRESOLVE_PTR_RECORD', `YES')')') ifdef(`confCHECK_ACCESS_RELAY', `ifelse(confCHECK_ACCESS_RELAY, `NO', `', `define(`confRESOLVE_PTR_RECORD', `YES')')') ifdef(`confCHECK_HELO_FORGED', `ifelse(confCHECK_HELO_FORGED, `NO', `', `define(`confRESOLVE_PTR_RECORD', `YES')')') ifdef(`confANTIVIRUS_0_NAME', `define(`confRESOLVE_PTR_RECORD', `YES')') ifelse(confRESOLVE_PTR_RECORD, `YES', `dnl warn set acl_c_RR = ifdef(`confHOST_LOOKUP', `dnl condition = ${if match_ip{$sender_host_address}{confHOST_LOOKUP}{yes}{no}} ') dnl ifdef(`confHOST_LOOKUP', `') ifelse_strstr(confCHECK_RELAY_RESOLVE_SKIP, `ACCESS', `dnl condition = ${lookup{$sender_host_address}iplsearch{CONFDIR/access-relay}\ {${if eq{${lc:$value}}{ok}{no}{yes}}}\ {yes}} ') dnl ifelse_strstr(confCHECK_RELAY_RESOLVE_SKIP, `ACCESS', `') condition = ${if eq{$sender_host_name}{}{yes}{no}} condition = ${if eq{$host_lookup_failed}{1}{yes}{no}} set acl_c_RR = ${lookup dnsdb{ptr=$sender_host_address}} ') dnl ifelse(confRESOLVE_PTR_RECORD, `YES', `') ifdef(`confCHECK_ACCESS_RELAY_OS', `ifelse(confCHECK_ACCESS_RELAY_OS, `NO', `dnl', `dnl ACL(`check_relay_os')dnl ')') ifdef(`confRATELIMIT', `ifelse(confRATELIMIT, `NO', `dnl', `dnl FEATURE(`ratelimit')dnl ')') ifelse_strstr(confIPv6, `YES', `dnl dnl define(`_SENDER_HOST_ADDRESS_IPV6_COMPACT', `NO')dnl ifdef(`confVERIFY_SENDER', `ifelse(confVERIFY_SENDER, `NO', `dnl', `dnl ifdef(`confVERIFY_SENDER_DEFER_OK_PHP', `ifelse(confVERIFY_SENDER_DEFER_OK_PHP, `NO', `', `define(`_SENDER_HOST_ADDRESS_IPV6_COMPACT', `YES')')') ')') dnl ifdef(`confVERIFY_SENDER', `ifelse(confVERIFY_SENDER, `NO', `', `')') ifdef(`confCHECK_HELO_FQDN_FORGED', `ifelse(confCHECK_HELO_FQDN_FORGED, `NO', `', `define(`_SENDER_HOST_ADDRESS_IPV6_COMPACT', `YES')')') ifdef(`confCHECK_HELO_FQDN_DEFER', `ifelse(confCHECK_HELO_FQDN_DEFER, `NO', `', `define(`_SENDER_HOST_ADDRESS_IPV6_COMPACT', `YES')')') ifdef(`confCHECK_HELO_FQDN_NOT_RESOLVABLE', `ifelse(confCHECK_HELO_FQDN_NOT_RESOLVABLE, `NO', `', `define(`_SENDER_HOST_ADDRESS_IPV6_COMPACT', `YES')')') dnl ifelse(_SENDER_HOST_ADDRESS_IPV6_COMPACT, `YES', `dnl warn condition = ${if isip6{$sender_host_address}{yes}{no}} set acl_c_sender_host_address_ipv6_compact = ${sg{${sg{${sg{$sender_host_address}{\N:0+\N}{:}}}{\N::+\N}{::}}}{\N^0+\N}{}} ') dnl ifelse(_SENDER_HOST_ADDRESS_IPV6_COMPACT, `YES', `') ') dnl ifelse_strstr(confIPv6, `YES', `') accept ifdef(`confETRN_ENABLE', `ifelse(confETRN_ENABLE, `NO', `dnl', `dnl FEATURE(`etrn')dnl ')') acl_check_helo: warn set acl_m_smtp_command_helo = $smtp_command accept acl_check_auth: warn set acl_m_smtp_command_auth = $smtp_command define(`SECTION', `ACL_CHECK_AUTH')dnl ifdef(`confSMTP_AUTH', `ifelse(confSMTP_AUTH, `NO', `dnl', `dnl FEATURE(`auth')dnl ')') accept acl_check_mail: define(`SECTION', `ACL_CHECK_MAIL')dnl sinclude(confSITE_DIR`/configure.backup_smtp_mail.m4') warn set acl_m_smtp_command_mail_from = ${smtp_command}${if or{\ {eq{$message_size}{-1}}\ {match{${smtp_command}}{\N(?i).+\sSIZE=\d+\N}}\ }{}{ SIZE=$message_size}} warn hosts = : set acl_m_wl_flag_msg = submitted=1 $acl_m_wl_flag_msg warn hosts = +relay_from_hosts set acl_m_wl_flag_msg = relay_from_hosts=1 $acl_m_wl_flag_msg warn authenticated = * set acl_m_wl_flag_msg = authenticated=1 $acl_m_wl_flag_msg ifdef(`confWHITE_LIST_RELAYS', `ifelse(confWHITE_LIST_RELAYS, `NO', `', ` warn hosts = +relay_white_list # domains = +local_domains ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `', ` : +relay_to_domains')') set acl_m_wl_flag_msg = white_list_relays=1 $acl_m_wl_flag_msg set acl_m_skip_verify_recipient = yes ')') ifdef(`confWHITE_LIST_SENDERS', `ifelse(confWHITE_LIST_SENDERS, `NO', `', ` warn set acl_m1 = no senders = @@wildlsearch;CONFDIR/senders-whitelist set acl_m1 = yes warn condition = ${lookup{$sender_address}wildlsearch{CONFDIR/senders-whitelist}{yes}{no}} set acl_m1 = yes warn condition = $acl_m1 # domains = +local_domains ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `', ` : +relay_to_domains')') set acl_m_wl_flag_msg = white_list_senders=1 $acl_m_wl_flag_msg ')') ifdef(`confMESSAGE_SIZE_LIMIT_OUT', `ifelse(confMESSAGE_SIZE_LIMIT_OUT, `NO', `dnl', `dnl ACL(`check_max_out_msg_size')dnl ')') ifdef(`confRATELIMIT', `ifelse(confRATELIMIT, `NO', `dnl', `dnl FEATURE(`ratelimit')dnl ')') accept condition = ${if or{\ {eq{${extract{submitted}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{authenticated}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m_wl_flag_msg}}}{1}}\ }{yes}{no}} ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') ifdef(`confCHECK_RELAY_RESOLVE', `ifelse(confCHECK_RELAY_RESOLVE, `NO', `dnl', `dnl ifelse_strstr(confCHECK_RELAY_RESOLVE, `MAIL', `dnl ACL(`check_relay_resolve')dnl ',` ifelse_strstr(confCHECK_RELAY_RESOLVE, `RCPT', `dnl', `dnl define(`confCHECK_RELAY_RESOLVE', confCHECK_RELAY_RESOLVE` RCPT') ') ')')') ifdef(`confCHECK_FAKE_INTERNAL', `ifelse(confCHECK_FAKE_INTERNAL, `NO', `dnl', `dnl ACL(`check_fake_internal')dnl ') dnl ') dnl accept acl_check_rcpt: warn set acl_m_smtp_command_rcpt_to = $smtp_command warn set acl_m_smtp_command_rcpt_tos = ${acl_m_smtp_command_rcpt_tos}${smtp_command}\n define(`SECTION', `ACL_CHECK_RCPT')dnl warn set acl_m9 = $acl_m_wl_flag_msg warn set acl_m9 = ${sg{$acl_m9}{\Nabuse_or_postmaster=\d*\N}{}} warn set acl_m9 = ${sg{$acl_m9}{\Nwhite_list_compat=\d*\N}{}} warn set acl_m9 = ${sg{$acl_m9}{\Nspam_hater=\d*\N}{}} ifdef(`confMESSAGE_SIZE_LIMIT_IN', `ifelse(confMESSAGE_SIZE_LIMIT_IN, `NO', `dnl', `dnl ACL(`check_max_in_msg_size')dnl ')') ifdef(`confSTARTTLS', `ifelse(confSTARTTLS, `NO', `dnl', `dnl FEATURE(`starttls')dnl ')') ifdef(`confSMTP_AUTH', `ifelse(confSMTP_AUTH, `NO', `dnl', `dnl FEATURE(`auth')dnl ')') ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `dnl', `dnl warn set acl_m_optional_reject = scores=0 log_message= ')') ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl define(`SECTION', `ACL_CHECK_RCPT_TOP')dnl FEATURE(`greylist')dnl define(`SECTION', `ACL_CHECK_RCPT')dnl ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') dnl ifdef(`confCHECK_ACCESS_MAIL', `ifelse(confCHECK_ACCESS_MAIL, `NO', `dnl', `dnl dnl ACL(`check_mail')dnl dnl ')') ifelse(confAWL, `NO', `', ` FEATURE(`awl')dnl ') dnl ifelse(confAWL, `NO', `', `') ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `dnl warn set acl_m0 = domains = +local_domains confDOMAINS_ABUSE local_parts = postmaster : abuse set acl_m0 = abuse set acl_m9 = abuse_or_postmaster=1 $acl_m9 set acl_m_wl_flag_msg = abuse_or_postmaster=1 $acl_m_wl_flag_msg ', `dnl warn set acl_m0 = domains = +local_domains confDOMAINS_ABUSE recipients = @@wildlsearch;CONFDIR/recipients_spam_friends set acl_m0 = abuse set acl_m9 = abuse_or_postmaster=1 $acl_m9 set acl_m_wl_flag_msg = abuse_or_postmaster=1 $acl_m_wl_flag_msg ')') dnl ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `')') ifdef(`confRECIPIENTS_SPAM_HATERS', `ifelse(confRECIPIENTS_SPAM_HATERS, `NO', `', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} recipients = @@wildlsearch;CONFDIR/recipients_spam_haters set acl_m9 = spam_hater=1 $acl_m9 # set acl_m_wl_flag_msg = spam_hater=1 $acl_m_wl_flag_msg ')') dnl ifdef(`confRECIPIENTS_SPAM_HATERS', `ifelse(confRECIPIENTS_SPAM_HATERS, `NO', `')') warn set acl_m_check_rcpt_and_accept = ifdef(`confCHECK_ACCESS_COMPAT', `ifelse(confCHECK_ACCESS_COMPAT, `NO', `dnl', `dnl ACL(`check_compat')dnl ')') ifdef(`confCHECK_ACCESS_COMPAT_RELAY', `ifelse(confCHECK_ACCESS_COMPAT_RELAY, `NO', `dnl', `dnl ACL(`check_compat_relay')dnl ')') ifdef(`confCHECK_ACCESS_RCPT', `ifelse(confCHECK_ACCESS_RCPT, `NO', `dnl', `dnl ACL(`check_rcpt')dnl ')') # Проверка существования получателей ifdef(`confCHECK_DICT_ATTACK', `ifelse(confCHECK_DICT_ATTACK, `NO', `dnl', `dnl ACL(`check_dict_attack')dnl ')') ifdef(`confVIRTUSERTABLE', `ifelse(confVIRTUSERTABLE, `NO', `dnl', `dnl FEATURE(`virtusertable')dnl ')') ifdef(`confDOMAIN_LITERALS', `ifelse(confDOMAIN_LITERALS, `NO', `dnl', `dnl FEATURE(`domain_literals')dnl ')') # Проверка существования получателей из локальных доменов deny domains = +local_domains condition = ${if eq{$acl_m_skip_verify_recipient}{yes}{no}{yes}} ! recipients = @@wildlsearch;CONFDIR/skip_verify_recipient ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `dnl log_message = User ${local_part}@${domain} verify failed ', `dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_CUSTOM', `dnl log_message = User ${local_part}@${domain} verify failed ', `dnl log_message = User ${local_part}@${domain} is unknown message = User ${local_part}@${domain} is unknown ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_CUSTOM', `', `') ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `', `') ! verify = recipient accept condition = ${if eq{$acl_m_check_rcpt_and_accept}{yes}{yes}{no}} ifdef(`confCHECK_RCPT_INCOMING_ONLY', `ifelse(confCHECK_RCPT_INCOMING_ONLY, `NO', `dnl', `dnl ACL(`check_rcpt_incoming_only')dnl ')') ifdef(`confMAILERTABLE', `ifelse(confMAILERTABLE, `NO', `dnl', `dnl DELIVERY(`mailertable')dnl ')') ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') ifelse_strstr(confVERIFY_RECIPIENT, `RCPT', `dnl deny hosts = +relay_from_hosts ! verify = recipient/callout=use_sender,confVERIFY_RECIPIENT_TIMEOUT,defer_ok message = Unrouteable address: $acl_verify_message deny authenticated = * ! verify = recipient/callout=use_sender,confVERIFY_RECIPIENT_TIMEOUT,defer_ok message = Unrouteable address: $acl_verify_message ',` ifelse_strstr(confVERIFY_RECIPIENT, `DOMAIN', `dnl deny hosts = +relay_from_hosts ! verify = recipient/defer_ok message = $local_part@$domain: Unrouteable address deny authenticated = * ! verify = recipient/defer_ok message = $local_part@$domain: Unrouteable address ') dnl ifelse_strstr(confVERIFY_RECIPIENT, `DOMAIN', `') ') dnl ifelse_strstr(confVERIFY_RECIPIENT, `RCPT', `') ifdef(`confRATELIMIT', `ifelse(confRATELIMIT, `NO', `dnl', `dnl FEATURE(`ratelimit')dnl ')') FEATURE(`antivirus', ` # warn condition = ${if eq{$acl_m9}{}{no}{yes}} warn condition = ${if or{\ {eq{${extract{submitted}{$acl_m9}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m9}}}{1}}\ {eq{${extract{authenticated}{$acl_m9}}}{1}}\ {eq{${extract{abuse_or_postmaster}{$acl_m9}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m9}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m9}}}{1}}\ {eq{${extract{white_list_compat}{$acl_m9}}}{1}}\ }{yes}{no}}') sinclude(confSITE_DIR`/configure.backup_smtp_rcpt.m4') ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl define(`SECTION', `ACL_CHECK_RCPT_MIDDLE')dnl FEATURE(`greylist')dnl define(`SECTION', `ACL_CHECK_RCPT')dnl ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') # accept condition = ${if eq{$acl_m9}{}{no}{yes}} accept condition = ${if or{\ {eq{${extract{submitted}{$acl_m9}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m9}}}{1}}\ {eq{${extract{authenticated}{$acl_m9}}}{1}}\ }{yes}{no}} control = submission/sender_retain acl = acl_check_rcpt_before_accept ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `dnl', `dnl define(`SECTION', `ACL_CHECK_RCPT_TOP')dnl warn set acl_m0 = ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `dnl domains = +local_domains confDOMAINS_ABUSE local_parts = postmaster : abuse ', `dnl recipients = @@wildlsearch;CONFDIR/recipients_spam_friends ')') dnl ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `')') set acl_m0 = accept # Проверка существования abuse адресов и spam friend-ов в рилеемых доменах FEATURE(`verify_recipient')dnl define(`SECTION', `ACL_CHECK_RCPT')dnl ')') accept domains = +local_domains ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `', ` : +relay_to_domains')') # condition = ${if eq{$acl_m9}{}{no}{yes}} # condition = ${if eq{${sg{$acl_m9}{\N\s*spam_hater=1\s*}{}}}{}{no}{yes}} condition = ${if or{\ {eq{${extract{submitted}{$acl_m9}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m9}}}{1}}\ {eq{${extract{authenticated}{$acl_m9}}}{1}}\ {eq{${extract{abuse_or_postmaster}{$acl_m9}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m9}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m9}}}{1}}\ {eq{${extract{white_list_compat}{$acl_m9}}}{1}}\ }{yes}{no}} acl = acl_check_rcpt_before_accept # Проверка корректности почтового ящика получателя deny message = Restricted characters in address domains = +local_domains local_parts = ^[.] : ^.*[@%!/|] sinclude(confSITE_DIR`/configure.acl_smtp_rcpt_top.m4') ifdef(`confCHECK_ACCESS_MAIL', `ifelse(confCHECK_ACCESS_MAIL, `NO', `dnl', `dnl ACL(`check_mail')dnl ')') ifdef(`confCHECK_ACCESS_RELAY_OS', `ifelse(confCHECK_ACCESS_RELAY_OS, `NO', `dnl', `dnl ACL(`check_relay_os')dnl ')') ifdef(`confCHECK_HELO_OWN', `ifelse(confCHECK_HELO_OWN, `NO', `dnl', `dnl ACL(`check_helo_own')dnl ')') ifdef(`confCHECK_HELO_FORGED', `ifelse(confCHECK_HELO_FORGED, `NO', `dnl', `dnl ACL(`check_helo_forged')dnl ')') ifdef(`confCHECK_ACCESS_HELO', `ifelse(confCHECK_ACCESS_HELO, `NO', `dnl', `dnl ACL(`check_helo')dnl ')') ifdef(`confCHECK_HELO_TOP_LEVEL', `ifelse(confCHECK_HELO_TOP_LEVEL, `NO', `dnl', `dnl ACL(`check_helo_top_level')dnl ')') ifdef(`confCHECK_HELO_FQDN', `ifelse(confCHECK_HELO_FQDN, `NO', `dnl', `dnl ACL(`check_helo_fqdn')dnl ')') ifdef(`confVERIFY_HELO', `ifelse(confVERIFY_HELO, `NO', `dnl', `dnl # warn on verify helo warn ! verify = helo log_message = verify HELO ($sender_helo_name) ')') ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `dnl FEATURE(`antivirus', ` warn domains = +local_domains confDOMAINS_ABUSE local_parts = postmaster : abuse set acl_m9 = abuse_or_postmaster=1 $acl_m9 set acl_m_wl_flag_msg = abuse_or_postmaster=1 $acl_m_wl_flag_msg') # Прием почты для abuse адресов accept domains = +local_domains confDOMAINS_ABUSE local_parts = postmaster : abuse set acl_m9 = abuse_or_postmaster=1 $acl_m9 set acl_m_wl_flag_msg = abuse_or_postmaster=1 $acl_m_wl_flag_msg set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain ', `dnl FEATURE(`antivirus', ` warn domains = +local_domains confDOMAINS_ABUSE recipients = @@wildlsearch;CONFDIR/recipients_spam_friends') # Прием почты для abuse адресов и spam friend-ов accept domains = +local_domains confDOMAINS_ABUSE recipients = @@wildlsearch;CONFDIR/recipients_spam_friends set acl_m9 = abuse_or_postmaster=1 $acl_m9 set acl_m_wl_flag_msg = abuse_or_postmaster=1 $acl_m_wl_flag_msg set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain ')') ifdef(`confMTA_MARK_ENABLE', `ifelse(confMTA_MARK_ENABLE, `NO', `dnl', `dnl FEATURE(`mtamark')dnl ')') ifdef(`confSPF2', `ifelse(confSPF2, `NO', `dnl', `dnl FEATURE(`spf2')dnl ')') ifdef(`confSPF', `ifelse(confSPF, `NO', `dnl', `dnl FEATURE(`spf')dnl ')') ifdef(`confSRS', `ifelse(confSRS, `NO', `dnl', `dnl FEATURE(`srs')dnl ')') ifdef(`confCHECK_DSN_RCPT_COUNT', `ifelse(confCHECK_DSN_RCPT_COUNT, `NO', `dnl', `dnl ACL(`check_dsn_rcpt_count')dnl ')') ifdef(`confCHECK_ACCESS_RELAY', `ifelse(confCHECK_ACCESS_RELAY, `NO', `dnl', `dnl ACL(`check_relay')dnl ')') ifdef(`confCHECK_ACCESS_MAIL_DOMAIN_A', `ifelse(confCHECK_ACCESS_MAIL_DOMAIN_A, `NO', `dnl', `dnl ACL(`check_mail_domain_a')dnl ')') ifdef(`confCHECK_ACCESS_MAIL_DOMAIN_MX', `ifelse(confCHECK_ACCESS_MAIL_DOMAIN_MX, `NO', `dnl', `dnl ACL(`check_mail_domain_mx')dnl ')') ifdef(`confCHECK_ACCESS_MAIL_DOMAIN_NS', `ifelse(confCHECK_ACCESS_MAIL_DOMAIN_NS, `NO', `dnl', `dnl ACL(`check_mail_domain_ns')dnl ')') ifdef(`confCHECK_ACCESS_MAIL_DOMAIN_TXT', `ifelse(confCHECK_ACCESS_MAIL_DOMAIN_TXT, `NO', `dnl', `dnl ACL(`check_mail_domain_txt')dnl ')') ifdef(`confCHECK_ACCESS_MAIL_DOMAIN_SPF', `ifelse(confCHECK_ACCESS_MAIL_DOMAIN_SPF, `NO', `dnl', `dnl ACL(`check_mail_domain_spf')dnl ')') ifdef(`confCHECK_FAKE_INTERNAL', `ifelse(confCHECK_FAKE_INTERNAL, `NO', `dnl', `dnl ACL(`check_fake_internal')dnl ')') ifdef(`confCHECK_FAKE_LOCAL', `ifelse(confCHECK_FAKE_LOCAL, `NO', `dnl', `dnl ACL(`check_fake_local')dnl ')') ifdef(`confCHECK_RELAY_RESOLVE', `ifelse(confCHECK_RELAY_RESOLVE, `NO', `dnl', `dnl ifelse_strstr(confCHECK_RELAY_RESOLVE, `RCPT', `dnl ACL(`check_relay_resolve')dnl ')')') sinclude(confSITE_DIR`/configure.acl_smtp_rcpt_middle.m4') ifdef(`confVERIFY_SENDER', `ifelse(confVERIFY_SENDER, `NO', `dnl', `dnl FEATURE(`verify_sender')dnl ')') ifdef(`confCHECK_SMTP_COMMANDS', `ifelse(confCHECK_SMTP_COMMANDS, `NO', `dnl', `dnl ACL(`check_smtp_commands')dnl ')') ifelse(confDNSBL0_NAME, `confDNSBL0_NAME', `dnl', `dnl FEATURE(`dnsbl')dnl ') ifdef(`confCHECK_ESMTP_SIZE', `ifelse(confCHECK_ESMTP_SIZE, `NO', `dnl', `dnl ACL(`check_esmtp_size')dnl ')') ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `dnl', `dnl FEATURE(`verify_recipient')dnl ')') sinclude(confSITE_DIR`/configure.acl_smtp_rcpt.m4') ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `dnl', `dnl # OPTIONAL REJECT define(`_OPTIONAL_REJECT_', `UNKNOWN') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `dnl ifelse_strstr(confCONTENT_SCANNING_PERSONAL_QUARANTINE_REJECTED_MESSAGES, `YES', `dnl accept condition = ${if <{${extract{scores}{$acl_m_optional_reject}}}{confOPTIONAL_REJECT_SCORES}{no}{yes}} log_message = message will be quarantined and rejected by optional reject: reason:${extract{log_message}{$acl_m_optional_reject}} set acl_m_fakereject = \ message will be quarantined and rejected by optional reject: reason:${extract{log_message}{$acl_m_optional_reject}}\ |X-Quarantine-Optional-Reject: ${extract{log_message}{$acl_m_optional_reject}}\ |${if eq{$acl_m_dnsbl}{}{Access denied due to complex of criterions.}{$acl_m_dnsbl}}\nYou may contact postmaster@$qualify_domain set acl_m_add_x_orig_rcpt = yes set acl_m_quarantined = $acl_m_quarantined envelope define(`_OPTIONAL_REJECT_', `DONE') dnl ') dnl ifelse_strstr(confCONTENT_SCANNING_PERSONAL_QUARANTINE_REJECTED_MESSAGES, `YES', `') ') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') ifdef(`_OPTIONAL_REJECT_', `ifelse(_OPTIONAL_REJECT_, `DONE', `dnl', `dnl deny condition = ${if <{${extract{scores}{$acl_m_optional_reject}}}{confOPTIONAL_REJECT_SCORES}{no}{yes}} message = ${if eq{$acl_m_dnsbl}{}{Access denied due to complex of criterions.}{$acl_m_dnsbl}}\n\ You may contact postmaster@$qualify_domain log_message = message rejected by optional reject; reason:${extract{log_message}{$acl_m_optional_reject}} ')') dnl ifdef(`_OPTIONAL_REJECT_', `ifelse(_OPTIONAL_REJECT_, `DONE', `', `')') ')') dnl ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `', `')') ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl FEATURE(`greylist')dnl ')') define(`SECTION', `ACL_CHECK_RCPT_BOTTOM')dnl ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') FEATURE(`antivirus', ` warn domains = +local_domains') # Прием почты для получателей из локальных доменов accept domains = +local_domains set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain endpass ifdef(`confDOMAIN_LITERALS', `ifelse(confDOMAIN_LITERALS, `NO', `dnl', `dnl FEATURE(`domain_literals')dnl ')') ifdef(`confMAILERTABLE', `ifelse(confMAILERTABLE, `NO', `dnl', `dnl DELIVERY(`mailertable')dnl ')') ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `dnl', `dnl FEATURE(`verify_recipient')dnl ')') ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `NO', `dnl', `dnl FEATURE(`relay_based_on_MX')dnl ')') # Отказ в приеме остальной почты deny message = Relay not permitted. Proper authentication required acl_check_predata: define(`SECTION', `ACL_CHECK_PREDATA')dnl deny condition = ${if eq{$acl_m16}{}{no}{yes}} log_message = ${extract{1}{|}{$acl_m16}} message = ${extract{2}{|}{$acl_m16}} logwrite = original recipients: $recipients ifelse_strstr(confDKIM_CHECK, `DISABLE', ` require control = dkim_disable_verify ') accept ifelse_strstr(confDKIM_CHECK, `YES', ` acl_check_dkim: define(`SECTION', `ACL_CHECK_DKIM')dnl FEATURE(`dkim')dnl accept ') acl_check_mime: define(`SECTION', `ACL_CHECK_MIME')dnl accept condition = ${if or{\ {eq{${extract{submitted}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{authenticated}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{abuse_or_postmaster}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_compat}{$acl_m_wl_flag_msg}}}{1}}\ }{yes}{no}} ifdef(`confCHECK_MIME_ERRORS', `ifelse(confCHECK_MIME_ERRORS, `NO', `dnl', `dnl ifdef(`confCHECK_MIME_ERRORS_BACKEND', `ifelse(confCHECK_MIME_ERRORS_BACKEND, `MIME_ANOMALY', ` ACL(`check_mime_errors')dnl ')') ')') ifdef(`confCHECK_FILE_EXT', `ifelse(confCHECK_FILE_EXT, `NO', `dnl', `dnl ACL(`check_ext')dnl ')') ifdef(`confCHECK_MIME_FILENAME', `ifelse(confCHECK_MIME_FILENAME, `NO', `dnl', `dnl ACL(`check_mime_filename')dnl ')') ifdef(`confCHECK_BOUNDARY', `ifelse(confCHECK_BOUNDARY, `NO', `dnl', `dnl ACL(`check_boundary')dnl ')') ifdef(`confCHECK_CLSID', `ifelse(confCHECK_CLSID, `NO', `dnl', `dnl ACL(`check_clsid')dnl ')') ifdef(`confCHECK_DOUBLE_EXT', `ifelse(confCHECK_DOUBLE_EXT, `NO', `dnl', `dnl ACL(`check_double_ext')dnl ')') accept acl_check_data: ifdef(`confMAIL_BACKUP', `ifelse_strstr(confMAIL_BACKUP, `ROUTER', ` warn set acl_m_recipients = $recipients ')') define(`SECTION', `ACL_CHECK_DATA_TOP')dnl ifdef(`confRECIPIENTS_SPAM_HATERS', `ifelse(confRECIPIENTS_SPAM_HATERS, `NO', `', `dnl warn condition = ${if eq{${extract{spam_hater}{$acl_m_wl_flag_msg}}}{1}{yes}{no}} set acl_m_wl_flag_msg = ${sg{${sg{$acl_m_wl_flag_msg}{\Nabuse_or_postmaster=\d*\N}{}}}{\Nwhite_list_compat=\d*\N}{}} ')') dnl ifdef(`confRECIPIENTS_SPAM_HATERS', `ifelse(confRECIPIENTS_SPAM_HATERS, `NO', `')') ifelse(confFAKE_REJECT, `NO', `dnl', `dnl warn condition = ${if eq{$acl_m_fakereject}{}{yes}{no}} condition = ${if eq{$acl_m_fakereject_per_rcpt}{}{no}{yes}} condition = ${if eq{$acl_m_recipients_accepted}{}{yes}{no}} set acl_m_fakereject = $acl_m_fakereject_per_rcpt set acl_m_quarantined = $acl_m_quarantined envelope warn condition = ${if eq{$acl_m_fakereject}{}{yes}{no}} condition = ${if eq{$acl_m_fakereject_per_rcpt}{}{no}{yes}} condition = ${if eq{$acl_m_recipients_accepted}{}{no}{yes}} log_message = ${extract{1}{|}{$acl_m_fakereject_per_rcpt}} add_header = ${sg{${sg{${extract{2}{|}{$acl_m_fakereject_per_rcpt}}}{\N^(\S+:)\s+\N}{\$1 }}}{\N;\s*(.)\N}{;\n\t\$1}} warn condition = ${if eq{$acl_m_fakereject}{}{no}{yes}} control = fakereject/${extract{3}{|}{$acl_m_fakereject}} log_message = ${extract{1}{|}{$acl_m_fakereject}} add_header = ${sg{${sg{${extract{2}{|}{$acl_m_fakereject}}}{\N^(\S+:)\s+\N}{\$1 }}}{\N;\s*(.)\N}{;\n\t\$1}} set acl_m_add_x_orig_rcpt = yes ') ifelse_strstr(confAUTH_RESULTS_ADD, `NO', `', `dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `REMOVE', `dnl warn remove_header = Authentication-Results ') dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `REMOVE', `') ifelse(confAUTH_RESULTS_OLD_HEADERS, `RENAME', `dnl warn remove_header = Authentication-Results RENAME_HEADERS(Authentication-Results) ') dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `RENAME', `') warn condition = ${if def:acl_m_auth_results{no}{yes}} ! hosts = +relay_from_hosts ! authenticated = * set acl_m_auth_results = ; none warn condition = ${if def:acl_m_auth_results{yes}{no}} add_header = :at_start:Authentication-Results: $smtp_active_hostname${acl_m_auth_results} ') dnl ifelse_strstr(confAUTH_RESULTS_ADD, `NO', `', `') warn condition = ${if eq{$acl_m_add_x_orig_rcpt}{yes}{yes}{no}} logwrite = original recipients: $recipients add_header = X-Original-Recipients: $recipients ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `dnl accept condition = ${if or{\ {match{$h_X-Spam-Action:}{quarantined}}\ {!eq{$acl_m_quarantined}{}}\ }{yes}{no}} ') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') ifdef(`confCHECK_MIME_ERRORS', `ifelse(confCHECK_MIME_ERRORS, `NO', `dnl', `dnl ifdef(`confCHECK_MIME_ERRORS_BACKEND', `ifelse(confCHECK_MIME_ERRORS_BACKEND, `OLD_DEMIME', ` ACL(`check_mime_errors')dnl ')') ')') ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') ifelse_strstr(confCONTENT_SCANNING, `DSPAM', `dnl FEATURE(`dspam')dnl ') ifelse_strstr(confCONTENT_SCANNING, `KAS3', `dnl FEATURE(`kas3')dnl ') ifelse_strstr(confCONTENT_SCANNING, `SO2', `dnl FEATURE(`spamooborona2')dnl ') ifelse_strstr(confCONTENT_SCANNING, `DCC', `dnl FEATURE(`dcc')dnl ') ifelse_strstr(confCONTENT_SCANNING, `RSPAMD', `dnl FEATURE(`rspamd')dnl ') ifelse(confCONTENT_SCANNING, `NO', `', ` FEATURE(`content_scanner')dnl ') define(`SECTION', `ACL_CHECK_DATA')dnl ifdef(`confMESSAGE_SIZE_LIMIT_OUT', `ifelse(confMESSAGE_SIZE_LIMIT_OUT, `NO', `dnl', `dnl ACL(`check_max_out_msg_size')dnl ')') ifdef(`confMESSAGE_SIZE_LIMIT_IN', `ifelse(confMESSAGE_SIZE_LIMIT_IN, `NO', `dnl', `dnl ACL(`check_max_in_msg_size')dnl ')') ifdef(`confRELAY_COUNTRIES', `ifelse(confRELAY_COUNTRIES, `NO', `dnl', `dnl FEATURE(`relay_countries')dnl ')') ifdef(`confANTIVIRUS0_ACT', `dnl FEATURE(`antivirus') ') sinclude(confSITE_DIR`/configure.acl_smtp_data.m4') ifdef(`confCHECK_MESSAGE_ID', `ifelse(confCHECK_MESSAGE_ID, `NO', `dnl', `dnl ACL(`check_message_id')dnl ')') ifdef(`confMESSAGE_ID_HEADER_ADD', `ifelse(confMESSAGE_ID_HEADER_ADD, `NO', `dnl', `dnl FEATURE(`add_message_id')dnl ')') ifdef(`confDATE_HEADER_ADD', `ifelse(confDATE_HEADER_ADD, `NO', `dnl', `dnl FEATURE(`add_date')dnl ')') accept condition = ${if or{\ {eq{${extract{submitted}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{authenticated}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{abuse_or_postmaster}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_compat}{$acl_m_wl_flag_msg}}}{1}}\ }{yes}{no}} acl = acl_check_data_before_accept ifdef(`confCHECK_FILE_EXT', `ifelse(confCHECK_FILE_EXT, `NO', `dnl', `dnl ACL(`check_ext')dnl ')') ifelse_strstr(confCONTENT_SCANNING, `DSPAM', `dnl FEATURE(`dspam')dnl ') ifelse_strstr(confCONTENT_SCANNING, `KAS3', `dnl FEATURE(`kas3')dnl ') ifelse_strstr(confCONTENT_SCANNING, `SO2', `dnl FEATURE(`spamooborona2')dnl ') ifelse_strstr(confCONTENT_SCANNING, `DCC', `dnl FEATURE(`dcc')dnl ') ifelse_strstr(confCONTENT_SCANNING, `RSPAMD', `dnl FEATURE(`rspamd')dnl ') ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') ifelse_strstr(confSTAT, `MYSQL', `dnl ENTERPRISE(`stat', `mysql') ') dnl ifelse_strstr(confSTAT, `MYSQL', `') warn acl = acl_check_data_before_accept accept define(`SECTION', `ACL_SMTP_RCPT_BEFORE_ACCEPT')dnl acl_check_rcpt_before_accept: ifdef(`confRECIPIENTS_SPAM_HATERS', `ifelse(confRECIPIENTS_SPAM_HATERS, `NO', `', `dnl warn condition = ${if eq{${extract{spam_hater}{$acl_m9}}}{1}{yes}{no}} set acl_m_wl_flag_msg = spam_hater=1 $acl_m_wl_flag_msg ')') dnl ifdef(`confRECIPIENTS_SPAM_HATERS', `ifelse(confRECIPIENTS_SPAM_HATERS, `NO', `')') ifelse(confAWL, `NO', `', ` FEATURE(`awl')dnl ') dnl ifelse(confAWL, `NO', `', `') warn set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain accept define(`SECTION', `ACL_SMTP_DATA_BEFORE_ACCEPT')dnl acl_check_data_before_accept: ifelse_strstr(confSTAT, `MYSQL', `dnl ENTERPRISE(`stat', `mysql') ') dnl ifelse_strstr(confSTAT, `MYSQL', `') sinclude(confSITE_DIR`/configure.acl_smtp_data_before_accept.m4')dnl accept define(`SECTION', `ACLS_ADDITIONAL')dnl sinclude(confSITE_DIR`/configure.acl_smtp_data_before_accept.m4')dnl sinclude(confSITE_DIR`/configure.acl_additional.m4')dnl ifdef(`confRELAY_COUNTRIES', `ifelse(confRELAY_COUNTRIES, `NO', `dnl', `dnl FEATURE(`relay_countries')dnl ')') ifdef(`confIP2COUNTRY', `ifelse(confIP2COUNTRY, `NO', `dnl', `dnl FEATURE(`ip2country')dnl ')') ifdef(`confSPF2', `ifelse(confSPF2, `NO', `dnl', `dnl FEATURE(`spf2')dnl ')') ifelse_strstr(confSTAT, `MYSQL', `dnl ENTERPRISE(`stat', `mysql') ') dnl ifelse_strstr(confSTAT, `MYSQL', `') ifdef(`confVERIFY_SENDER', `ifelse(confVERIFY_SENDER, `NO', `dnl', `dnl FEATURE(`verify_sender')dnl ')') ifdef(`confACL_DNSDB', `ifelse(confACL_DNSDB, `1', ` acl_dnsdb: accept set acl_m_dnsdb_result = defer set acl_m_dnsdb_result = ${lookup dnsdb{$acl_arg1}} accept set acl_m_dnsdb_result = ')') dnl ifdef(`confACL_DNSDB', `ifelse(confACL_DNSDB, `1', `') acl_wildlsearch: # acl_arg1 - путь к файлу данных # acl_arg2 - список ключей # acl_m_wildlsearch_result - результат accept condition = ${if eq{$acl_arg2}{}{yes}{no}} warn set acl_m_key = ${extract{1}{\n}{$acl_arg2}} warn set acl_m_wildlsearch_result = ${lookup{$acl_m_key}wildlsearch{$acl_arg1}{${if eq{$value}{}{yes}{$value}}}{}} accept condition = ${if eq{$acl_m_wildlsearch_result}{}{no}{yes}} warn set acl_m_arg2 = ${sg{$acl_arg2}{\N^.*\n?\N}{}} warn acl = acl_wildlsearch $acl_arg1 "$acl_m_arg2" accept acl_iplsearch: # acl_arg1 - путь к файлу данных # acl_arg2 - список A записей, разделенных \n # acl_m_iplsearch_result - результат запроса accept condition = ${if eq{$acl_arg2}{}{yes}{no}} warn set acl_m_key = ${extract{1}{\n}{$acl_arg2}} warn set acl_m_iplsearch_result = ${lookup{$acl_m_key}iplsearch{$acl_arg1}{${if eq{$value}{}{yes}{$value}}}{}} accept condition = ${if eq{$acl_m_iplsearch_result}{}{no}{yes}} warn set acl_m_arg2 = ${sg{$acl_arg2}{\N^.*\n?\N}{}} warn acl = acl_iplsearch $acl_arg1 "$acl_m_arg2" accept acl_ptrlist_iplsearch: # acl_arg1 - путь к файлу со списком сетей и хостов # acl_arg2 - список PTR записей, разделенных \n # acl_m_ptrlist_iplsearch_result - результат accept condition = ${if eq{$acl_arg2}{}{yes}{no}} warn acl = acl_iplsearch $acl_arg1 "${lookup dnsdb{a=${extract{1}{\n}{$acl_arg2}}}}" accept condition = ${if eq{$acl_m_iplsearch_result}{}{no}{yes}} set acl_m_ptrlist_iplsearch_result = $acl_m_iplsearch_result warn set acl_m_arg2 = ${sg{$acl_arg2}{\N^.*\n?\N}{}} warn acl = acl_ptrlist_iplsearch $acl_arg1 "$acl_m_arg2" accept ifelse_strstr(confIPv6, `YES', `dnl acl_ptrlist_iplsearch_ipv6: # acl_arg1 - путь к файлу со списком сетей и хостов # acl_arg2 - список PTR записей, разделенных \n # acl_m_ptrlist_iplsearch_result - результат accept condition = ${if eq{$acl_arg2}{}{yes}{no}} warn acl = acl_iplsearch $acl_arg1 "${lookup dnsdb{aaaa=${extract{1}{\n}{$acl_arg2}}}}" accept condition = ${if eq{$acl_m_iplsearch_result}{}{no}{yes}} set acl_m_ptrlist_iplsearch_result = $acl_m_iplsearch_result warn set acl_m_arg2 = ${sg{$acl_arg2}{\N^.*\n?\N}{}} warn acl = acl_ptrlist_iplsearch_ipv6 $acl_arg1 "$acl_m_arg2" accept ') dnl ifelse_strstr(confIPv6, `YES', `') acl_update_fakereject: # acl_arg1 - message to log # acl_arg2 - header # acl_arg3 - message to smtp client accept condition = ${if eq{$acl_m_fakereject}{}{yes}{no}} set acl_m_fakereject = $acl_arg1|$acl_arg2|$acl_arg3 accept set acl_m_fakereject = ${extract{1}{|}{$acl_m_fakereject}}; $acl_arg1|${extract{2}{|}{$acl_m_fakereject}}\n$acl_arg2|${extract{3}{|}{$acl_m_fakereject}}; $acl_arg3 acl_update_fakereject_per_rcpt: # acl_arg1 - message to log # acl_arg2 - header # acl_arg3 - message to smtp client accept condition = ${if eq{$acl_m_fakereject_per_rcpt}{}{yes}{no}} set acl_m_fakereject_per_rcpt = $acl_arg1|$acl_arg2|$acl_arg3 accept set acl_m_fakereject_per_rcpt = ${extract{1}{|}{$acl_m_fakereject_per_rcpt}}; $acl_arg1|${extract{2}{|}{$acl_m_fakereject_per_rcpt}}\n$acl_arg2|${extract{3}{|}{$acl_m_fakereject_per_rcpt}}; $acl_arg3 acl_normalize_action: # acl_arg1 - ненормализованное действие фильтра # acl_m_normalize_action_result - результат warn set acl_m_normalize_action_result = ${sg{${sg{${sg{${sg{${sg{${sg{${sg{\ ${lc:$acl_arg1}\ }{\N^\s+\N}{}}\ }{\N\s+$\N}{}}\ }{:}{=}}\ }{warn}{warn=yes}}\ }{deny}{reject}}\ }{delay}{pause}}\ }{greylisting}{greylist}} ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `dnl ifelse_strstr(confCONTENT_SCANNING_PERSONAL_QUARANTINE_REJECTED_MESSAGES, `YES', `dnl warn ! hosts = +relay_from_hosts ! authenticated = * condition = ${if or{\ {eq{$domain}{}}\ {match_domain{$domain}{+local_domains`'ifdef(`confCONTENT_SCANNING_QUARANTINE_RELAYED_REJECTED_MESSAGES', `ifelse(confCONTENT_SCANNING_QUARANTINE_RELAYED_REJECTED_MESSAGES, `YES', `ifdef(`confSECONDARY_RELAY', `ifelse(confSECONDARY_RELAY, `NO', `', ` : +relay_to_domains')')', `')')}}\ }{yes}{no}} condition = ${if eq{${extract{reject}{${sg{$acl_m_normalize_action_result }{\N\b([^=\s\d]+)(\s)\N}{\$1=00\$2}}}}}{00}{yes}{no}} condition = ${if eq{${extract{noquarantine}{${sg{$acl_m_normalize_action_result }{\N\b([^=\s\d]+)(\s)\N}{\$1=00\$2}}}}}{00}{no}{yes}} set acl_m_normalize_action_result = $acl_m_normalize_action_result quarantine ') dnl ifelse_strstr(confCONTENT_SCANNING_PERSONAL_QUARANTINE_REJECTED_MESSAGES, `YES', `') ') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') accept ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl FEATURE(`greylist')dnl ')') ifdef(`confANTIVIRUS0_ACT', `dnl FEATURE(`antivirus') ') ifelse_strstr(confCONTENT_SCANNING, `SPAMASSASSIN', `dnl FEATURE(`spamassassin')dnl ') ifelse_strstr(` 'confCONTENT_SCANNING, ` SPAMD', `dnl FEATURE(`spamd')dnl ') ifelse_strstr(confCONTENT_SCANNING, `DSPAM', `dnl FEATURE(`dspam')dnl ') ifelse_strstr(confCONTENT_SCANNING, `KAS3', `dnl FEATURE(`kas3')dnl ') ifelse_strstr(confCONTENT_SCANNING, `SO2', `dnl FEATURE(`spamooborona2')dnl ') ifelse_strstr(confCONTENT_SCANNING, `DCC', `dnl FEATURE(`dcc')dnl ') ifelse_strstr(confCONTENT_SCANNING, `RSPAMD', `dnl FEATURE(`rspamd')dnl ') FEATURE(`mysql_safe_queries')dnl FEATURE(`memcached')dnl FEATURE(`redis')dnl ###################################################################### # ROUTERS CONFIGURATION # # Specifies how addresses are handled # ###################################################################### # THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! # # An address is passed to each router in turn until it is accepted. # ###################################################################### begin routers define(`SECTION', `ROUTERS')dnl ifdef(`confVIRTUSERTABLE', `ifelse(confVIRTUSERTABLE, `NO', `dnl', `dnl FEATURE(`virtusertable')dnl ')') ifdef(`confMAILERTABLE', `ifelse(confMAILERTABLE, `NO', `dnl', `dnl DELIVERY(`mailertable')dnl ifdef(`confUUCP', `ifelse(confUUCP, `NO', `dnl', `dnl DELIVERY(`uucp')dnl ')') ')') ifdef(`confSMART_HOST', `ifelse(confSMART_HOST, `NO', `dnl', `dnl FEATURE(`smarthost')dnl ')') ifdef(`confFALL_BACK_MX_DELAYED', `ifelse(confFALL_BACK_MX_DELAYED, `NO', `dnl', `dnl FEATURE(`fallback_mx')dnl ')') ifdef(`confDOMAIN_LITERALS', `ifelse(confDOMAIN_LITERALS, `NO', `dnl', `dnl FEATURE(`domain_literals')dnl ')') DELIVERY(`backup_outgoing')dnl ifdef(`confSRS', `ifelse(confSRS, `NO', `dnl', `dnl FEATURE(`srs')dnl ')') ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `NO', `dnl', `dnl FEATURE(`relay_based_on_MX')dnl ')') ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', ` dnslookup_skip_quarantined: driver = accept transport = fake_transport domains = DNSLOOKUP_DOMAINS # condition = ${if eq{$acl_m_quarantined}{}{no}{yes}} condition = ${if IS_NOT_QUARANTINED{no}{yes}} no_more ')dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') ifelse_strstr(confIPv6, `YES', `dnl dnl ifelse(confDNSLOOKUP6_ENABLE, `NO', `dnl', `dnl dnslookup6: driver = dnslookup transport = remote_smtp6 domains = DNSLOOKUP6_DOMAINS ignore_target_hosts = confDNSLOOKUP6_IGNORE_TARGET_HOSTS ifdef(`confFALL_BACK_MX_LOCALHOST_ENABLE', `ifelse(confFALL_BACK_MX_LOCALHOST_ENABLE, `NO', `dnl', `dnl self = send ')') dnl ifdef(`confFALL_BACK_MX_LOCALHOST_ENABLE', `ifelse(confFALL_BACK_MX_LOCALHOST_ENABLE, `NO', `', `')') ') dnl ifelse(confDNSLOOKUP6_ENABLE, `NO', `', `') dnl ') dnl ifelse_strstr(confIPv6, `YES', `') dnslookup: driver = dnslookup transport = remote_smtp domains = DNSLOOKUP_DOMAINS ignore_target_hosts = confDNSLOOKUP_IGNORE_TARGET_HOSTS ifdef(`confFALL_BACK_MX_LOCALHOST_ENABLE', `ifelse(confFALL_BACK_MX_LOCALHOST_ENABLE, `NO', `dnl', `dnl self = send ')') dnl no_more ifelse_strstr(confDELIVERY_TO, `MDIR_VIRTUAL', `dnl DELIVERY(`maildir_virtual')dnl ') ifelse_strstr(confDELIVERY_TO, `MDIR_USER', `dnl DELIVERY(`maildir_user')dnl ') ifelse_strstr(confDELIVERY_TO, `MBOX', `dnl DELIVERY(`mailbox')dnl ') ifdef(`confLUSER', `ifelse(confLUSER, `NO', `dnl', `dnl FEATURE(`luser')dnl ')') ifdef(`confMAILMAN', `ifelse(confMAILMAN, `NO', `dnl', `dnl FEATURE(`mailman')dnl ')') ###################################################################### # TRANSPORTS CONFIGURATION # ###################################################################### # ORDER DOES NOT MATTER # # Only one appropriate transport is called for each delivery. # ###################################################################### begin transports define(`SECTION', `TRANSPORTS')dnl fake_transport: driver = appendfile file = /dev/null ifelse_strstr(confIPv6, `YES', `dnl dnl ifelse(confDNSLOOKUP6_ENABLE, `NO', `dnl', `dnl remote_smtp6: driver = smtp ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl hosts_try_auth = +hosts_try_auth ')') dnl ifdef(`confFALL_BACK_MX', `ifelse(confFALL_BACK_MX, `NO', `dnl', `dnl define(`_I_',`eval(index(confFALL_BACK_MX,` ') >= 0)')`'ifelse(_I_,`1', ` fallback_hosts = ${sg{confFALL_BACK_MX}{ }{}}', ` fallback_hosts = confFALL_BACK_MX') ')') dnl ifdef(`confFALL_BACK_MX_LOCALHOST_ENABLE', `ifelse(confFALL_BACK_MX_LOCALHOST_ENABLE, `NO', `dnl', `dnl allow_localhost ')') dnl ifdef(`confSMTP_SERIALIZE_HOSTS', `ifelse(confSMTP_SERIALIZE_HOSTS, `NO', `dnl', `dnl serialize_hosts = +serialize_hosts ')') dnl ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `dnl', `dnl hosts_avoid_tls = +skip_tls_using ')') dnl sinclude(confSITE_DIR`/configure.smtp6_transport_options')dnl ifdef(`confMAIL_BACKUP', `ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', ` headers_remove = ${if eq{$local_part@$domain}{confMAIL_BACKUP_ADDR}{}{X-Recipients}} ')') dnl ') dnl ifelse(confDNSLOOKUP6_ENABLE, `NO', `', `') dnl ') dnl ifelse_strstr(confIPv6, `YES', `') remote_smtp: driver = smtp ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl hosts_try_auth = +hosts_try_auth ')') dnl ifdef(`confFALL_BACK_MX', `ifelse(confFALL_BACK_MX, `NO', `dnl', `dnl define(`_I_',`eval(index(confFALL_BACK_MX,` ') >= 0)')`'ifelse(_I_,`1', ` fallback_hosts = ${sg{confFALL_BACK_MX}{ }{}}', ` fallback_hosts = confFALL_BACK_MX') ')') dnl ifdef(`confFALL_BACK_MX_LOCALHOST_ENABLE', `ifelse(confFALL_BACK_MX_LOCALHOST_ENABLE, `NO', `dnl', `dnl allow_localhost ')') dnl ifdef(`confSMTP_SERIALIZE_HOSTS', `ifelse(confSMTP_SERIALIZE_HOSTS, `NO', `dnl', `dnl serialize_hosts = +serialize_hosts ')') dnl ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `dnl', `dnl hosts_avoid_tls = +skip_tls_using ')') dnl sinclude(confSITE_DIR`/configure.smtp_transport_options')dnl ifdef(`confMAIL_BACKUP', `ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', ` headers_remove = ${if eq{$local_part@$domain}{confMAIL_BACKUP_ADDR}{}{X-Recipients}} ')') dnl ifdef(`confMAILERTABLE', `ifelse(confMAILERTABLE, `NO', `dnl', `dnl DELIVERY(`mailertable')dnl ifdef(`confUUCP', `ifelse(confUUCP, `NO', `dnl', `dnl DELIVERY(`uucp')dnl ')') ')') ifelse_strstr(confDELIVERY_TO, `PROCMAIL', `dnl DELIVERY(`procmail')dnl ') ifelse_strstr(confDELIVERY_TO, `MDIR_VIRTUAL', `dnl DELIVERY(`maildir_virtual')dnl ') ifelse_strstr(confDELIVERY_TO, `MDIR_USER', `dnl DELIVERY(`maildir_user')dnl ') ifelse_strstr(confDELIVERY_TO, `MBOX', `dnl DELIVERY(`mailbox')dnl ') ifdef(`confMAILMAN', `ifelse(confMAILMAN, `NO', `dnl', `dnl FEATURE(`mailman')dnl ')') filter_pipe: driver = pipe # user = mailnull # group = mail return_fail_output address_pipe: driver = pipe # return_output message_prefix = return_fail_output address_file: driver = appendfile delivery_date_add envelope_to_add return_path_add address_directory: driver = appendfile delivery_date_add envelope_to_add return_path_add maildir_format = true # create_directory = true # directory_mode = 750 # mode = 0640 address_reply: driver = autoreply ###################################################################### # RETRY CONFIGURATION # ###################################################################### begin retry define(`SECTION', `RETRY')dnl include(confSITE_DIR`/configure.retry_rules')dnl ###################################################################### # REWRITE CONFIGURATION # ###################################################################### begin rewrite define(`SECTION', `REWRITE')dnl include(confSITE_DIR`/configure.rewrite_rules')dnl ###################################################################### # AUTHENTICATION CONFIGURATION # ###################################################################### begin authenticators define(`SECTION', `AUTHENTICATORS')dnl ifdef(`confSMTP_AUTH', `ifelse(confSMTP_AUTH, `NO', `dnl', `dnl FEATURE(`auth')dnl ')') ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl FEATURE(`auth_client')dnl ')')