Skip to content

Commit 015a175

Browse files
committed
use reject_unverified_recipient with lmtp
1 parent 1536e8b commit 015a175

File tree

9 files changed

+105
-25
lines changed

9 files changed

+105
-25
lines changed

install/dist/lib/fedora.lib.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ function configure_postfix($options = '')
105105
//* mysql-virtual_uids.cf
106106
$this->process_postfix_config('mysql-virtual_uids.cf');
107107

108+
//* mysql-virtual_alias_domains.cf
109+
$this->process_postfix_config('mysql-verify_recipients.cf');
110+
108111
//* postfix-dkim
109112
$filename='tag_as_originating.re';
110113
$full_file_name=$config_dir.'/'.$filename;

install/dist/lib/opensuse.lib.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ function configure_postfix($options = '')
102102
//* mysql-virtual_uids.cf
103103
$this->process_postfix_config('mysql-virtual_uids.cf');
104104

105+
//* mysql-virtual_alias_domains.cf
106+
$this->process_postfix_config('mysql-verify_recipients.cf');
107+
105108
//* postfix-dkim
106109
$filename='tag_as_originating.re';
107110
$full_file_name=$config_dir.'/'.$filename;

install/lib/installer_base.lib.php

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,6 +1002,9 @@ public function configure_postfix($options = '') {
10021002
//* mysql-virtual_uids.cf
10031003
$this->process_postfix_config('mysql-virtual_uids.cf');
10041004

1005+
//* mysql-virtual_alias_domains.cf
1006+
$this->process_postfix_config('mysql-verify_recipients.cf');
1007+
10051008
// test if lmtp if available
10061009
$configure_lmtp = $this->get_postfix_service('lmtp','unix');
10071010

@@ -1340,6 +1343,8 @@ public function configure_dovecot() {
13401343
}
13411344

13421345
$config_dir = $conf['postfix']['config_dir'];
1346+
$postfix_version = `postconf -d mail_version 2>/dev/null`;
1347+
$postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
13431348

13441349
//* Configure master.cf and add a line for deliver
13451350
if(!$this->get_postfix_service('dovecot', 'unix')) {
@@ -1351,7 +1356,7 @@ public function configure_dovecot() {
13511356
chmod($config_dir.'/master.cf~2', 0400);
13521357
}
13531358
//* Configure master.cf and add a line for deliver
1354-
$content = rf($conf["postfix"]["config_dir"].'/master.cf');
1359+
$content = rf($config_dir.'/master.cf');
13551360
$deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
13561361
af($config_dir.'/master.cf', $deliver_content);
13571362
unset($content);
@@ -1368,7 +1373,31 @@ public function configure_dovecot() {
13681373
);
13691374

13701375
// Make a backup copy of the main.cf file
1371-
copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~3');
1376+
copy($config_dir.'/main.cf', $config_dir.'/main.cf~3');
1377+
1378+
$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
1379+
$new_options = array();
1380+
foreach ($options as $value) {
1381+
if (($value = trim($value)) == '') continue;
1382+
if (preg_match("|check_recipient_access\s+proxy:mysql:${config_dir}/mysql-verify_recipients.cf|", $value)) {
1383+
continue;
1384+
}
1385+
$new_options[] = $value;
1386+
}
1387+
if ($configure_lmtp) {
1388+
for ($i = 0; isset($new_options[$i]); $i++) {
1389+
if ($new_options[$i] == 'reject_unlisted_recipient') {
1390+
array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
1391+
break;
1392+
}
1393+
}
1394+
# postfix < 3.3 needs this when using reject_unverified_recipient:
1395+
if(version_compare($postfix_version, 3.3, '<')) {
1396+
$postconf_commands[] = "enable_original_recipient = yes";
1397+
}
1398+
}
1399+
#exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
1400+
$postconf_commands[] = "smtpd_recipient_restrictions = ".implode(", ", $new_options);
13721401

13731402
// Executing the postconf commands
13741403
foreach($postconf_commands as $cmd) {
@@ -1608,12 +1637,15 @@ public function configure_rspamd() {
16081637

16091638
exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
16101639

1640+
1641+
$options = explode(",", exec("postconf -h smtpd_recipient_restrictions"));
16111642
$new_options = array();
1612-
$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
16131643
foreach ($options as $value) {
1614-
if (!preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
1615-
$new_options[] = $value;
1644+
if (($value = trim($value)) == '') continue;
1645+
if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
1646+
continue;
16161647
}
1648+
$new_options[] = $value;
16171649
}
16181650
exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
16191651

install/tpl/debian_postfix.conf.master

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ broken_sasl_auth_clients = yes
1515
smtpd_sasl_authenticated_header = yes
1616
smtpd_restriction_classes = greylisting
1717
greylisting = check_policy_service inet:127.0.0.1:10023
18-
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
18+
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
1919
smtpd_use_tls = yes
2020
smtpd_tls_security_level = may
2121
smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -24,7 +24,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
2424
relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
2525
relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
2626
smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
27-
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
27+
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
2828
smtpd_helo_required = yes
2929
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
3030
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -44,3 +44,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
4444
smtp_tls_protocols = !SSLv2,!SSLv3
4545
smtpd_tls_exclude_ciphers = RC4, aNULL
4646
smtp_tls_exclude_ciphers = RC4, aNULL
47+
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
48+
enable_original_recipient = yes

install/tpl/fedora_postfix.conf.master

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ broken_sasl_auth_clients = yes
1111
smtpd_sasl_authenticated_header = yes
1212
smtpd_restriction_classes = greylisting
1313
greylisting = check_policy_service inet:127.0.0.1:10023
14-
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
14+
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
1515
smtpd_use_tls = yes
1616
smtpd_tls_security_level = may
1717
smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -20,7 +20,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
2020
relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
2121
relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
2222
smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
23-
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
23+
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
2424
smtpd_helo_required = yes
2525
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
2626
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -40,3 +40,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
4040
smtp_tls_protocols = !SSLv2,!SSLv3
4141
smtpd_tls_exclude_ciphers = RC4, aNULL
4242
smtp_tls_exclude_ciphers = RC4, aNULL
43+
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
44+
enable_original_recipient = yes

install/tpl/gentoo_postfix.conf.master

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ broken_sasl_auth_clients = yes
1010
smtpd_sasl_authenticated_header = yes
1111
smtpd_restriction_classes = greylisting
1212
greylisting = check_policy_service inet:127.0.0.1:10023
13-
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
13+
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
1414
smtpd_use_tls = yes
1515
smtpd_tls_security_level = may
1616
smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -19,7 +19,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
1919
relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
2020
relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
2121
smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
22-
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
22+
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
2323
smtpd_helo_required = yes
2424
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
2525
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -39,3 +39,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
3939
smtp_tls_protocols = !SSLv2,!SSLv3
4040
smtpd_tls_exclude_ciphers = RC4, aNULL
4141
smtp_tls_exclude_ciphers = RC4, aNULL
42+
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
43+
enable_original_recipient = yes
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
user = {mysql_server_ispconfig_user}
2+
password = {mysql_server_ispconfig_password}
3+
dbname = {mysql_server_database}
4+
hosts = {mysql_server_ip}
5+
query = SELECT 'reject_unverified_recipient' FROM mail_domain WHERE domain = '%s' AND active = 'y' AND server_id = {server_id}

install/tpl/opensuse_postfix.conf.master

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ broken_sasl_auth_clients = yes
1313
smtpd_sasl_authenticated_header = yes
1414
smtpd_restriction_classes = greylisting
1515
greylisting = check_policy_service inet:127.0.0.1:10023
16-
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
16+
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, reject_unlisted_recipient, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
1717
smtpd_use_tls = yes
1818
smtpd_tls_security_level = may
1919
smtpd_tls_cert_file = {config_dir}/smtpd.cert
@@ -22,7 +22,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
2222
relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
2323
relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
2424
smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
25-
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
25+
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps $smtpd_recipient_restrictions
2626
smtpd_helo_required = yes
2727
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
2828
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -42,3 +42,5 @@ smtpd_tls_protocols = !SSLv2,!SSLv3
4242
smtp_tls_protocols = !SSLv2,!SSLv3
4343
smtpd_tls_exclude_ciphers = RC4, aNULL
4444
smtp_tls_exclude_ciphers = RC4, aNULL
45+
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
46+
enable_original_recipient = yes

0 commit comments

Comments
 (0)