242 lines
6.1 KiB
Puppet
242 lines
6.1 KiB
Puppet
# Configure smtpd for local delivery.
|
|
#
|
|
# === Global variables
|
|
#
|
|
# $mail_domain:
|
|
# Domain to masquerade as (envelope only).
|
|
#
|
|
# $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",
|
|
owner => "root",
|
|
group => "wheel",
|
|
source => "puppet:///modules/smtpd/mailer.conf",
|
|
before => Service["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",
|
|
group => "wheel",
|
|
content => template("smtpd/client.conf.erb"),
|
|
notify => Service["smtpd"],
|
|
}
|
|
|
|
service { "sendmail":
|
|
ensure => stopped,
|
|
enable => false,
|
|
before => Service["smtpd"],
|
|
}
|
|
|
|
service { "smtpd":
|
|
ensure => running,
|
|
enable => true,
|
|
start => "/usr/sbin/smtpd",
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Configure smtpd as mail server
|
|
#
|
|
# === Parameters
|
|
#
|
|
# $maildir:
|
|
# Directory in user home for INBOX.
|
|
#
|
|
# $local:
|
|
# Boolean for whether we accept mail for local recipients.
|
|
# Defaults to true.
|
|
#
|
|
# $gecos:
|
|
# Boolean for whether to enable gecos aliases.
|
|
# Defaults to false.
|
|
#
|
|
# $domains:
|
|
# Array of primary domains to accept mail for.
|
|
#
|
|
# $virtual:
|
|
# Array of virtual domains to accept mail for.
|
|
#
|
|
# $ssl_key:
|
|
# Source path of private key.
|
|
#
|
|
# $ssl_cert:
|
|
# Source path of certificate.
|
|
#
|
|
class smtpd::server(
|
|
$maildir,
|
|
$local=true,
|
|
$gecos=false,
|
|
$domains=undef,
|
|
$virtual=undef,
|
|
$ssl_key="${puppet_ssldir}/private_keys/${homename}.pem",
|
|
$ssl_cert="${puppet_ssldir}/certs/${homename}.pem"
|
|
) inherits smtpd {
|
|
|
|
include procmail
|
|
|
|
procmail::rc { "00-default.rc":
|
|
content => "MAILDIR=\$HOME/${maildir}\nDEFAULT=\$MAILDIR/INBOX\n",
|
|
}
|
|
|
|
$mda = "/usr/local/bin/procmail -Y -t -f %{sender}"
|
|
|
|
File["/etc/mail/smtpd.conf.local"] {
|
|
content => template("smtpd/server.conf.erb"),
|
|
}
|
|
|
|
file { [ "/root/${maildir}", "/etc/skel/${maildir}" ]:
|
|
ensure => directory,
|
|
mode => "0700",
|
|
owner => "root",
|
|
group => "wheel",
|
|
before => Service["smtpd"],
|
|
}
|
|
|
|
file { "/etc/mail/certs":
|
|
ensure => directory,
|
|
mode => "0700",
|
|
owner => "root",
|
|
group => "wheel",
|
|
}
|
|
file { "/etc/mail/certs/server.key":
|
|
ensure => present,
|
|
mode => "0600",
|
|
owner => "root",
|
|
group => "wheel",
|
|
source => $ssl_key,
|
|
notify => Service["smtpd"],
|
|
}
|
|
file { "/etc/mail/certs/server.crt":
|
|
ensure => present,
|
|
mode => "0600",
|
|
owner => "root",
|
|
group => "wheel",
|
|
source => $ssl_cert,
|
|
notify => Service["smtpd"],
|
|
}
|
|
|
|
if $gecos == true {
|
|
file { "/usr/local/sbin/generate-smtpd-gecos.sh":
|
|
ensure => present,
|
|
mode => "0700",
|
|
owner => "root",
|
|
group => "wheel",
|
|
source => "puppet:///modules/smtpd/generate-smtpd-gecos.sh",
|
|
}
|
|
exec { "/usr/local/sbin/generate-smtpd-gecos.sh":
|
|
unless => "/bin/test /etc/mail/gecos -nt /etc/passwd",
|
|
require => File["/usr/local/sbin/generate-smtpd-gecos.sh"],
|
|
notify => Exec["makemap aliases"],
|
|
}
|
|
}
|
|
|
|
file { "/etc/mail/aliases":
|
|
ensure => present,
|
|
mode => "0644",
|
|
owner => "root",
|
|
group => "wheel",
|
|
source => [
|
|
"puppet:///files/mail/aliases.${::homename}",
|
|
"puppet:///files/mail/aliases",
|
|
],
|
|
}
|
|
exec { "makemap aliases":
|
|
command => $gecos ? {
|
|
false => "makemap aliases",
|
|
true => "cat aliases gecos > aliases.gecos && makemap -o aliases.db aliases.gecos",
|
|
},
|
|
refreshonly => true,
|
|
cwd => "/etc/mail",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
subscribe => File["/etc/mail/aliases"],
|
|
before => Service["smtpd"],
|
|
}
|
|
|
|
if $domains {
|
|
smtpd::aliases { $domains:
|
|
gecos => $gecos,
|
|
subscribe => $gecos ? {
|
|
false => undef,
|
|
true => Exec["/usr/local/sbin/generate-smtpd-gecos.sh"],
|
|
},
|
|
}
|
|
}
|
|
|
|
if $virtual {
|
|
smtpd::virtual { $virtual: }
|
|
}
|
|
|
|
}
|
|
|
|
|
|
define smtpd::aliases($gecos) {
|
|
|
|
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 aliases.${name}":
|
|
command => $gecos ? {
|
|
false => "makemap aliases.${name}",
|
|
true => "cat aliases.${name} gecos > aliases.${name}.gecos && makemap -o aliases.${name}.db aliases.${name}.gecos",
|
|
},
|
|
refreshonly => true,
|
|
cwd => "/etc/mail",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
subscribe => File["/etc/mail/aliases.${name}"],
|
|
before => 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 virtual.${name}":
|
|
refreshonly => true,
|
|
cwd => "/etc/mail",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
subscribe => File["/etc/mail/virtual.${name}"],
|
|
before => Service["smtpd"],
|
|
}
|
|
|
|
}
|