smtpd: Allow disabling local delivery to act only as a relay

This commit is contained in:
Ossi Salmi 2013-07-29 00:56:31 +03:00
parent 33bfafbdbe
commit 31f9fc449c
2 changed files with 33 additions and 13 deletions

View file

@ -57,17 +57,21 @@ class smtpd {
# Configure smtpd as mail server # Configure smtpd as mail server
# #
# === Parameters # === Parameters
# #
# $maildir: # $maildir:
# Directory in user home for INBOX. # Directory in user home for INBOX.
# #
# $local:
# Boolean for whether we accept mail for local recipients.
# Defaults to true.
#
# $domains: # $domains:
# Primary domains to accept mail for. # Array of primary domains to accept mail for.
# #
# $virtual: # $virtual:
# Virtual domains to accept mail for. # Array of virtual domains to accept mail for.
# #
# $ssl_key: # $ssl_key:
# Source path of private key. # Source path of private key.
@ -77,7 +81,8 @@ class smtpd {
# #
class smtpd::server( class smtpd::server(
$maildir, $maildir,
$domains, $local=true,
$domains=undef,
$virtual=undef, $virtual=undef,
$ssl_key="${puppet_ssldir}/private_keys/${homename}.pem", $ssl_key="${puppet_ssldir}/private_keys/${homename}.pem",
$ssl_cert="${puppet_ssldir}/certs/${homename}.pem" $ssl_cert="${puppet_ssldir}/certs/${homename}.pem"
@ -101,7 +106,7 @@ class smtpd::server(
owner => "root", owner => "root",
group => "wheel", group => "wheel",
} }
file { "/etc/mail/certs/smtpd.key": file { "/etc/mail/certs/server.key":
ensure => present, ensure => present,
mode => "0600", mode => "0600",
owner => "root", owner => "root",
@ -109,7 +114,7 @@ class smtpd::server(
source => $ssl_key, source => $ssl_key,
notify => Service["smtpd"], notify => Service["smtpd"],
} }
file { "/etc/mail/certs/smtpd.crt": file { "/etc/mail/certs/server.crt":
ensure => present, ensure => present,
mode => "0600", mode => "0600",
owner => "root", owner => "root",
@ -135,7 +140,9 @@ class smtpd::server(
notify => Service["smtpd"], notify => Service["smtpd"],
} }
smtpd::aliases { $domains: } if $domains {
smtpd::aliases { $domains: }
}
if $virtual { if $virtual {
smtpd::virtual { $virtual: } smtpd::virtual { $virtual: }

View file

@ -1,26 +1,39 @@
listen on egress port smtp tls certificate smtpd listen on egress port smtp tls certificate server
listen on egress port submission tls-require certificate smtpd listen on egress port submission tls-require certificate server
<% if @domains or @virtual -%>
# alias and virtual maps
<% end -%>
<% @domains.each do |domain| -%> <% @domains.each do |domain| -%>
table aliases.<%= domain %> db:/etc/mail/aliases.<%= domain %>.db table aliases.<%= domain %> db:/etc/mail/aliases.<%= domain %>.db
<% end -%> <% end if @domains -%>
<% @virtual.each do |domain| -%> <% @virtual.each do |domain| -%>
table virtual.<%= domain %> db:/etc/mail/virtual.<%= domain %>.db table virtual.<%= domain %> db:/etc/mail/virtual.<%= domain %>.db
<% end if @virtual -%> <% end if @virtual -%>
<% if @local == true -%>
# accept for localhost and our fqdn
accept from any for local alias <aliases> \ accept from any for local alias <aliases> \
deliver to mda "<%= @mda %>" deliver to mda "<%= @mda %>"
<% end -%>
<% if @domains -%>
<% @domains.each do |domain| -%> # accept for primary domains
<% @domains.each do |domain| -%>
accept from any for domain { "<%= domain %>", "*.<%= domain %>" } \ accept from any for domain { "<%= domain %>", "*.<%= domain %>" } \
alias <aliases.<%= domain%>> \ alias <aliases.<%= domain%>> \
deliver to mda "<%= @mda %>" deliver to mda "<%= @mda %>"
<% end -%>
<% end -%> <% end -%>
<% if @virtual -%>
# accept for virtual domains
<% @virtual.each do |domain| -%> <% @virtual.each do |domain| -%>
accept from any for domain { "<%= domain %>", "*.<%= domain %>" } \ accept from any for domain { "<%= domain %>", "*.<%= domain %>" } \
virtual <virtual.<%= domain%>> \ virtual <virtual.<%= domain%>> \
deliver to mda "<%= @mda %>" deliver to mda "<%= @mda %>"
<% end -%>
<% end -%>
<% end if @virtual -%> # relay for local and authenticated users
accept from local for any relay<% if @mail_domain %> as "@<%= @mail_domain %>"<% end %> accept from local for any relay<% if @mail_domain %> as "@<%= @mail_domain %>"<% end %>