smtpd: Initial server support
Still missing are TLS and authentication support.
This commit is contained in:
parent
0b7dca59d3
commit
ce5dd6a96d
4 changed files with 142 additions and 8 deletions
5
smtpd/files/smtpd.conf
Normal file
5
smtpd/files/smtpd.conf
Normal file
|
@ -0,0 +1,5 @@
|
|||
listen on lo0
|
||||
|
||||
table aliases db:/etc/mail/aliases.db
|
||||
|
||||
include "/etc/mail/smtpd.conf.local"
|
|
@ -5,11 +5,15 @@
|
|||
# $mail_domain:
|
||||
# Domain to masquerade as (envelope only).
|
||||
#
|
||||
# $smtpd_relay:
|
||||
# URI of mail relay server.
|
||||
# $mail_server:
|
||||
# Hostname of mail relay server.
|
||||
#
|
||||
class smtpd {
|
||||
|
||||
if $mail_server {
|
||||
$relay = "smtp+tls://${mail_server}"
|
||||
}
|
||||
|
||||
file { "/etc/mailer.conf":
|
||||
ensure => present,
|
||||
mode => "0644",
|
||||
|
@ -20,6 +24,15 @@ class smtpd {
|
|||
}
|
||||
|
||||
file { "/etc/mail/smtpd.conf":
|
||||
ensure => present,
|
||||
mode => "0644",
|
||||
owner => "root",
|
||||
group => "wheel",
|
||||
source => "puppet:///modules/smtpd/smtpd.conf",
|
||||
notify => Service["smtpd"],
|
||||
}
|
||||
|
||||
file { "/etc/mail/smtpd.conf.local":
|
||||
ensure => present,
|
||||
mode => "0644",
|
||||
owner => "root",
|
||||
|
@ -41,3 +54,102 @@ class smtpd {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Configure smtpd as mail server
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# $maildir:
|
||||
# Directory in user home for INBOX.
|
||||
#
|
||||
# $domains:
|
||||
# Primary domains to accept mail for.
|
||||
#
|
||||
# $virtual:
|
||||
# Virtual domains to accept mail for.
|
||||
#
|
||||
class smtpd::server($maildir, $domains, $virtual=undef) inherits smtpd {
|
||||
|
||||
include procmail
|
||||
|
||||
procmail::rc { "00default.rc":
|
||||
content => "MAILDIR=\$HOME/${maildir}\nDEFAULT=\$MAILDIR/INBOX\n",
|
||||
}
|
||||
|
||||
$mda = "/usr/local/bin/procmail -Y -t -f %{sender} rcpt=%{rcpt}"
|
||||
|
||||
File["/etc/mail/smtpd.conf.local"] {
|
||||
content => template("smtpd/server.conf.erb"),
|
||||
}
|
||||
|
||||
file { "/etc/mail/aliases":
|
||||
ensure => present,
|
||||
mode => "0644",
|
||||
owner => "root",
|
||||
group => "wheel",
|
||||
source => [
|
||||
"puppet:///files/mail/aliases.${::homename}",
|
||||
"puppet:///files/mail/aliases",
|
||||
],
|
||||
}
|
||||
exec { "makemap -t aliases /etc/mail/aliases":
|
||||
refreshonly => true,
|
||||
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
subscribe => File["/etc/mail/aliases"],
|
||||
notify => Service["smtpd"],
|
||||
}
|
||||
|
||||
smtpd::aliases { $domains: }
|
||||
|
||||
if $virtual {
|
||||
smtpd::virtual { $virtual: }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
define smtpd::aliases() {
|
||||
|
||||
file { "/etc/mail/aliases.${name}":
|
||||
ensure => present,
|
||||
mode => "0644",
|
||||
owner => "root",
|
||||
group => "wheel",
|
||||
source => [
|
||||
"puppet:///files/mail/aliases.${name}",
|
||||
"puppet:///files/mail/aliases.${::homename}",
|
||||
"puppet:///files/mail/aliases",
|
||||
],
|
||||
}
|
||||
exec { "makemap -t aliases /etc/mail/aliases.${name}":
|
||||
refreshonly => true,
|
||||
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
subscribe => File["/etc/mail/aliases.${name}"],
|
||||
notify => Service["smtpd"],
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
define smtpd::virtual() {
|
||||
|
||||
file { "/etc/mail/virtual.${name}":
|
||||
ensure => present,
|
||||
mode => "0644",
|
||||
owner => "root",
|
||||
group => "wheel",
|
||||
source => [
|
||||
"puppet:///files/mail/virtual.${name}",
|
||||
"puppet:///files/mail/virtual.${::homename}",
|
||||
"puppet:///files/mail/virtual",
|
||||
],
|
||||
}
|
||||
exec { "makemap -t aliases /etc/mail/virtual.${name}":
|
||||
refreshonly => true,
|
||||
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
subscribe => File["/etc/mail/virtual.${name}"],
|
||||
notify => Service["smtpd"],
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
listen on lo0
|
||||
|
||||
<% if @smtpd_relay -%>
|
||||
accept from local for any relay via <%= @smtpd_relay %><% if @mail_domain %> as "@<%= @mail_domain %>"<% end %>
|
||||
<% if @relay -%>
|
||||
accept from local for any relay via <%= @relay %><% if @mail_domain %> as "@<%= @mail_domain %>"<% end %>
|
||||
<% else -%>
|
||||
table aliases db:/etc/mail/aliases.db
|
||||
|
||||
accept from local for local alias <aliases> deliver to mbox
|
||||
accept from local for any relay<% if @mail_domain %> as "@<%= @mail_domain %>"<% end %>
|
||||
<% end -%>
|
||||
|
|
21
smtpd/templates/server.conf.erb
Normal file
21
smtpd/templates/server.conf.erb
Normal file
|
@ -0,0 +1,21 @@
|
|||
listen on egress
|
||||
|
||||
<% @domains.each do |domain| -%>
|
||||
table aliases.<%= domain %> db:/etc/mail/aliases.<%= domain %>.db
|
||||
<% end -%>
|
||||
<% @virtual.each do |domain| -%>
|
||||
table virtual.<%= domain %> db:/etc/mail/virtual.<%= domain %>.db
|
||||
<% end if @virtual -%>
|
||||
|
||||
<% @domains.each do |domain| -%>
|
||||
accept from any for domain <%= domain %> alias <aliases.<%= domain%>> \
|
||||
deliver to mda "<%= @mda %>"
|
||||
<% end -%>
|
||||
<% @virtual.each do |domain| -%>
|
||||
accept from any for domain <%= domain %> virtual <virtual.<%= domain%>> \
|
||||
deliver to mda "<%= @mda %>"
|
||||
<% end if @virtual -%>
|
||||
|
||||
accept from local for local alias <aliases> \
|
||||
deliver to mda "<%= @mda %>"
|
||||
accept from local for any relay<% if @mail_domain %> as "@<%= @mail_domain %>"<% end %>
|
Loading…
Add table
Reference in a new issue