Skip to content

Commit c0db019

Browse files
author
Marius Burkard
committed
Merge branch 'per_domain_relay' into 'develop'
implement per-domain mail relaying See merge request ispconfig/ispconfig3!1389
2 parents 791d625 + 31199e1 commit c0db019

40 files changed

+198
-178
lines changed

install/dist/lib/fedora.lib.php

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -57,58 +57,12 @@ function configure_postfix($options = '')
5757
$this->error("The postfix configuration directory '$config_dir' does not exist.");
5858
}
5959

60-
//* mysql-virtual_domains.cf
61-
$this->process_postfix_config('mysql-virtual_domains.cf');
62-
63-
//* mysql-virtual_forwardings.cf
64-
$this->process_postfix_config('mysql-virtual_forwardings.cf');
65-
66-
//* mysql-virtual_alias_domains.cf
67-
$this->process_postfix_config('mysql-virtual_alias_domains.cf');
68-
69-
//* mysql-virtual_alias_maps.cf
70-
$this->process_postfix_config('mysql-virtual_alias_maps.cf');
71-
72-
//* mysql-virtual_mailboxes.cf
73-
$this->process_postfix_config('mysql-virtual_mailboxes.cf');
74-
75-
//* mysql-virtual_email2email.cf
76-
$this->process_postfix_config('mysql-virtual_email2email.cf');
77-
78-
//* mysql-virtual_transports.cf
79-
$this->process_postfix_config('mysql-virtual_transports.cf');
80-
81-
//* mysql-virtual_recipient.cf
82-
$this->process_postfix_config('mysql-virtual_recipient.cf');
83-
84-
//* mysql-virtual_sender.cf
85-
$this->process_postfix_config('mysql-virtual_sender.cf');
86-
87-
//* mysql-virtual_sender_login_maps.cf
88-
$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
89-
90-
//* mysql-virtual_client.cf
91-
$this->process_postfix_config('mysql-virtual_client.cf');
92-
93-
//* mysql-virtual_relaydomains.cf
94-
$this->process_postfix_config('mysql-virtual_relaydomains.cf');
95-
96-
//* mysql-virtual_relayrecipientmaps.cf
97-
$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
98-
99-
//* mysql-virtual_outgoing_bcc.cf
100-
$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
101-
102-
//* mysql-virtual_policy_greylist.cf
103-
$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
104-
105-
//* mysql-virtual_gids.cf.master
106-
$this->process_postfix_config('mysql-virtual_gids.cf');
107-
108-
//* mysql-virtual_uids.cf
109-
$this->process_postfix_config('mysql-virtual_uids.cf');
60+
//* Install virtual mappings
61+
foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
62+
$this->process_postfix_config( basename($filename, '.master') );
63+
}
11064

111-
//* mysql-virtual_alias_domains.cf
65+
//* mysql-verify_recipients.cf
11266
$this->process_postfix_config('mysql-verify_recipients.cf');
11367

11468
//* postfix-dkim

install/dist/lib/gentoo.lib.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ public function configure_postfix($options = '')
6363
$this->process_postfix_config( basename($filename, '.master') );
6464
}
6565

66+
//* mysql-verify_recipients.cf
67+
$this->process_postfix_config('mysql-verify_recipients.cf');
68+
6669
//* Changing mode and group of the new created config files.
6770
caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
6871
__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');

install/dist/lib/opensuse.lib.php

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -57,55 +57,12 @@ function configure_postfix($options = '')
5757
$this->error("The postfix configuration directory '$config_dir' does not exist.");
5858
}
5959

60-
//* mysql-virtual_domains.cf
61-
$this->process_postfix_config('mysql-virtual_domains.cf');
62-
63-
//* mysql-virtual_forwardings.cf
64-
$this->process_postfix_config('mysql-virtual_forwardings.cf');
65-
66-
//* mysql-virtual_alias_domains.cf
67-
$this->process_postfix_config('mysql-virtual_alias_domains.cf');
68-
69-
//* mysql-virtual_alias_maps.cf
70-
$this->process_postfix_config('mysql-virtual_alias_maps.cf');
71-
72-
//* mysql-virtual_mailboxes.cf
73-
$this->process_postfix_config('mysql-virtual_mailboxes.cf');
74-
75-
//* mysql-virtual_email2email.cf
76-
$this->process_postfix_config('mysql-virtual_email2email.cf');
77-
78-
//* mysql-virtual_transports.cf
79-
$this->process_postfix_config('mysql-virtual_transports.cf');
80-
81-
//* mysql-virtual_recipient.cf
82-
$this->process_postfix_config('mysql-virtual_recipient.cf');
83-
84-
//* mysql-virtual_sender.cf
85-
$this->process_postfix_config('mysql-virtual_sender.cf');
86-
87-
//* mysql-virtual_sender_login_maps.cf
88-
$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
89-
90-
//* mysql-virtual_client.cf
91-
$this->process_postfix_config('mysql-virtual_client.cf');
92-
93-
//* mysql-virtual_relaydomains.cf
94-
$this->process_postfix_config('mysql-virtual_relaydomains.cf');
95-
96-
//* mysql-virtual_relayrecipientmaps.cf
97-
$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
98-
99-
//* mysql-virtual_policy_greylist.cf
100-
$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
101-
102-
//* mysql-virtual_gids.cf.master
103-
$this->process_postfix_config('mysql-virtual_gids.cf');
104-
105-
//* mysql-virtual_uids.cf
106-
$this->process_postfix_config('mysql-virtual_uids.cf');
60+
//* Install virtual mappings
61+
foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
62+
$this->process_postfix_config( basename($filename, '.master') );
63+
}
10764

108-
//* mysql-virtual_alias_domains.cf
65+
//* mysql-verify_recipients.cf
10966
$this->process_postfix_config('mysql-verify_recipients.cf');
11067

11168
//* postfix-dkim

install/lib/installer_base.lib.php

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,58 +1060,12 @@ public function configure_postfix($options = '') {
10601060
$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
10611061
unset($out);
10621062

1063-
//* mysql-virtual_domains.cf
1064-
$this->process_postfix_config('mysql-virtual_domains.cf');
1065-
1066-
//* mysql-virtual_forwardings.cf
1067-
$this->process_postfix_config('mysql-virtual_forwardings.cf');
1068-
1069-
//* mysql-virtual_alias_domains.cf
1070-
$this->process_postfix_config('mysql-virtual_alias_domains.cf');
1071-
1072-
//* mysql-virtual_alias_maps.cf
1073-
$this->process_postfix_config('mysql-virtual_alias_maps.cf');
1074-
1075-
//* mysql-virtual_mailboxes.cf
1076-
$this->process_postfix_config('mysql-virtual_mailboxes.cf');
1077-
1078-
//* mysql-virtual_email2email.cf
1079-
$this->process_postfix_config('mysql-virtual_email2email.cf');
1080-
1081-
//* mysql-virtual_transports.cf
1082-
$this->process_postfix_config('mysql-virtual_transports.cf');
1083-
1084-
//* mysql-virtual_recipient.cf
1085-
$this->process_postfix_config('mysql-virtual_recipient.cf');
1086-
1087-
//* mysql-virtual_sender.cf
1088-
$this->process_postfix_config('mysql-virtual_sender.cf');
1089-
1090-
//* mysql-virtual_sender_login_maps.cf
1091-
$this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
1092-
1093-
//* mysql-virtual_client.cf
1094-
$this->process_postfix_config('mysql-virtual_client.cf');
1095-
1096-
//* mysql-virtual_relaydomains.cf
1097-
$this->process_postfix_config('mysql-virtual_relaydomains.cf');
1098-
1099-
//* mysql-virtual_relayrecipientmaps.cf
1100-
$this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
1101-
1102-
//* mysql-virtual_outgoing_bcc.cf
1103-
$this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
1104-
1105-
//* mysql-virtual_policy_greylist.cf
1106-
$this->process_postfix_config('mysql-virtual_policy_greylist.cf');
1107-
1108-
//* mysql-virtual_gids.cf.master
1109-
$this->process_postfix_config('mysql-virtual_gids.cf');
1110-
1111-
//* mysql-virtual_uids.cf
1112-
$this->process_postfix_config('mysql-virtual_uids.cf');
1063+
//* Install virtual mappings
1064+
foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
1065+
$this->process_postfix_config( basename($filename, '.master') );
1066+
}
11131067

1114-
//* mysql-virtual_alias_domains.cf
1068+
//* mysql-verify_recipients.cf
11151069
$this->process_postfix_config('mysql-verify_recipients.cf');
11161070

11171071
// test if lmtp if available

install/sql/incremental/upd_dev_collection.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,7 @@ ALTER TABLE mail_access DROP CONSTRAINT `server_id`;
77
SET SESSION old_alter_table=1;
88
ALTER IGNORE TABLE mail_access ADD UNIQUE KEY `unique_source` (`server_id`,`source`,`type`);
99
SET SESSION old_alter_table=0;
10+
11+
ALTER TABLE mail_domain ADD COLUMN `relay_host` varchar(255) NOT NULL default '' AFTER `dkim_public`,
12+
ADD COLUMN `relay_user` varchar(255) NOT NULL default '' AFTER `relay_host`,
13+
ADD COLUMN `relay_pass` varchar(255) NOT NULL default '' AFTER `relay_user`;

install/sql/ispconfig3.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,9 @@ CREATE TABLE `mail_domain` (
884884
`dkim_selector` varchar(63) NOT NULL DEFAULT 'default',
885885
`dkim_private` mediumtext NULL,
886886
`dkim_public` mediumtext NULL,
887+
`relay_host` varchar(255) NOT NULL DEFAULT '',
888+
`relay_user` varchar(255) NOT NULL DEFAULT '',
889+
`relay_pass` varchar(255) NOT NULL DEFAULT '',
887890
`active` enum('n','y') NOT NULL DEFAULT 'n',
888891
PRIMARY KEY (`domain_id`),
889892
KEY `server_id` (`server_id`,`domain`),

install/tpl/debian_postfix.conf.master

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
2424
relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
2525
relay_recipient_maps = proxy: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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps
2828
smtpd_helo_required = yes
2929
smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
3030
smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -53,3 +53,9 @@ tls_preempt_cipherlist = yes
5353
address_verify_negative_refresh_time=60s
5454
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
5555
enable_original_recipient = yes
56+
sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf
57+
smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd
58+
smtp_sender_dependent_authentication = yes
59+
smtp_sasl_auth_enable = yes
60+
smtp_sasl_security_options = noanonymous, noplaintext
61+
smtp_sasl_tls_security_options = noanonymous

install/tpl/fedora_postfix.conf.master

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
2020
relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
2121
relay_recipient_maps = proxy: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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps
2424
smtpd_helo_required = yes
2525
smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
2626
smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -49,3 +49,9 @@ tls_preempt_cipherlist = yes
4949
address_verify_negative_refresh_time=60s
5050
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
5151
enable_original_recipient = yes
52+
sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf
53+
smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd
54+
smtp_sender_dependent_authentication = yes
55+
smtp_sasl_auth_enable = yes
56+
smtp_sasl_security_options = noanonymous, noplaintext
57+
smtp_sasl_tls_security_options = noanonymous

install/tpl/gentoo_postfix.conf.master

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{conf
1919
relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
2020
relay_recipient_maps = proxy: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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
22+
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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions $smtp_sasl_password_maps $sender_dependent_relayhost_maps
2323
smtpd_helo_required = yes
2424
smtpd_helo_restrictions = permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
2525
smtpd_sender_restrictions = check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf, {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unlisted_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re
@@ -48,3 +48,9 @@ tls_preempt_cipherlist = yes
4848
address_verify_negative_refresh_time=60s
4949
# needed for postfix < 3.3 when using reject_unverified_recipient (lmtp):
5050
enable_original_recipient = yes
51+
sender_dependent_relayhost_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayhost.cf
52+
smtp_sasl_password_maps = proxy:mysql:{config_dir}/mysql-virtual_sender-relayauth.cf, hash:{config_dir}/sasl_passwd
53+
smtp_sender_dependent_authentication = yes
54+
smtp_sasl_auth_enable = yes
55+
smtp_sasl_security_options = noanonymous, noplaintext
56+
smtp_sasl_tls_security_options = noanonymous
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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 CONCAT(relay_user,':',relay_pass) as credential
6+
FROM mail_domain
7+
WHERE domain = '%d'
8+
AND active = 'y'
9+
AND concat(relay_host,relay_user,relay_pass) != ''
10+
AND server_id = {server_id}

0 commit comments

Comments
 (0)