Initial commit
This commit is contained in:
commit
11b84aa872
40 changed files with 995 additions and 0 deletions
9
README.md
Normal file
9
README.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
Postfix
|
||||
=======
|
||||
|
||||
Use this role to setup a Postfix mail server. It comes with the following additions:
|
||||
- [Mail-TLS-Helper](https://github.com/systemli/mail-tls-helper)
|
||||
- [MTA-STS-Resolver](https://github.com/Snawoot/postfix-mta-sts-resolver)
|
||||
- Fail2ban
|
||||
- optional: [OnionMX](https://github.com/ehloonion/onionmx)
|
||||
- optional: Unbound
|
12
defaults/main.yml
Normal file
12
defaults/main.yml
Normal file
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
mail_sasl_log: mail-sasl.log
|
||||
postfix_conf_dir: /etc/postfix/conf.d
|
||||
postfix_daemon_dir: /usr/lib/postfix/sbin
|
||||
postfix_default_db_type: cdb
|
||||
tls_helper_domains_file: tls_domains
|
||||
tls_helper_postfix_dir: /var/lib/postfix/tls-helper
|
||||
|
||||
postfix_dhparam_file: /etc/ssl/private/dhparam.pem
|
||||
|
||||
fail2ban_jail_dir: /etc/fail2ban/jail.d
|
||||
fail2ban_filter_dir: /etc/fail2ban/filter.d
|
7
files/fail2ban/postfix-sasl.conf
Normal file
7
files/fail2ban/postfix-sasl.conf
Normal file
|
@ -0,0 +1,7 @@
|
|||
[sasl]
|
||||
enabled = true
|
||||
findtime = 3600
|
||||
bantime = 3600
|
||||
port = submission
|
||||
filter = postfix-sasl
|
||||
logpath = /var/log/mail-sasl.log
|
21
files/fail2ban/postfix-sasl.local
Normal file
21
files/fail2ban/postfix-sasl.local
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Fail2Ban filter for postfix authentication failures
|
||||
#
|
||||
|
||||
[INCLUDES]
|
||||
|
||||
before = common.conf
|
||||
|
||||
[Definition]
|
||||
|
||||
_daemon = postfix(-\w+)?/(?:submission/|smtps/)?smtp[ds]
|
||||
|
||||
failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL ((?i)LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/:]*={0,2})?\s*$
|
||||
|
||||
ignoreregex = authentication failed: Connection lost to authentication server$
|
||||
|
||||
[Init]
|
||||
|
||||
journalmatch = _SYSTEMD_UNIT=postfix.service
|
||||
|
||||
|
||||
# Author: Yaroslav Halchenko
|
4
files/mail-tls-helper/readme.txt
Normal file
4
files/mail-tls-helper/readme.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
Logrotat runs with hardening features (/lib/systemd/system/logrotate.service)
|
||||
which prevents write access to /etc.
|
||||
|
||||
You will find the tls_domains file at /var/lib.
|
9
files/monit/mta-sts-daemon
Normal file
9
files/monit/mta-sts-daemon
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Managed by Ansible
|
||||
|
||||
check process mta-sts-daemon
|
||||
matching "/usr/bin/python3 /usr/bin/mta-sts-daemon"
|
||||
group mailserver
|
||||
start program = "/usr/sbin/service postfix-mta-sts-resolver start"
|
||||
stop program = "/usr/sbin/service postfix-mta-sts-resolver stop"
|
||||
if 2 restarts within 3 cycles then timeout
|
||||
if failed host 127.0.0.1 port 8461 for 3 cycles then restart
|
7
files/monit/postfix
Normal file
7
files/monit/postfix
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Managed by Ansible
|
||||
|
||||
check process postfix with pidfile /var/spool/postfix/pid/master.pid
|
||||
group mailserver
|
||||
start program = "/usr/sbin/service postfix@- start"
|
||||
stop program = "/usr/sbin/service postfix@- stop"
|
||||
if failed port 25 protocol smtp with timeout 15 seconds for 3 cycles then restart
|
10
files/postfix/conf.d/bogus_mx
Normal file
10
files/postfix/conf.d/bogus_mx
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Manages by Ansible
|
||||
|
||||
# bogus networks
|
||||
0.0.0.0/8 550 Mail server in broadcast network
|
||||
1.0.0.0/8 550 Mail server in IANA reserved network
|
||||
#10.0.0.0/8 550 No route to your RFC 1918 network
|
||||
127.0.0.0/8 550 Mail server in loopback network
|
||||
224.0.0.0/4 550 Mail server in class D multicast network
|
||||
#172.16.0.0/12 550 No route to your RFC 1918 network
|
||||
192.168.0.0/16 550 No route to your RFC 1918 network
|
10
files/postfix/conf.d/header_checks
Normal file
10
files/postfix/conf.d/header_checks
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Managed by Ansible
|
||||
|
||||
/^Content-(Disposition|Type).*name\s*=\s*"?([^;]*(\.|=2E)(
|
||||
ade|adp|asp|bas|bat|chm|cmd|com|cpl|dll|exe|
|
||||
hlp|ht[at]|
|
||||
inf|ins|isp|js|jse?|lnk|md[betw]|ms[cipt]|nws|
|
||||
\{[[:xdigit:]]{8}(?:-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}\}|
|
||||
ops|pcd|pif|prf|reg|sc[frt]|sh[bsm]|swf|
|
||||
vb[esx]?|vxd|ws[cfh]))(\?=)?"?\s*(;|$)/x
|
||||
REJECT Attachment name "$2" may not end with ".$4"
|
7
files/postfix/conf.d/header_checks_inbound
Normal file
7
files/postfix/conf.d/header_checks_inbound
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Managed by Ansible
|
||||
|
||||
# Remove external mail processing headers
|
||||
/^X-Spam-.*: .*$/ IGNORE
|
||||
/^X-Amavis-.*: .*$/ IGNORE
|
||||
/^X-Virus-.*: .*$/ IGNORE
|
||||
/^X-Rc-(Spam|Virus)+: .*$/ IGNORE
|
6
files/smtp_tor
Normal file
6
files/smtp_tor
Normal file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This script will be called by Postfix master.cf.
|
||||
# It runs a service for OnionMX.
|
||||
|
||||
exec /usr/bin/torsocks -i /usr/lib/postfix/sbin/smtp "$@"
|
25
handlers/main.yml
Normal file
25
handlers/main.yml
Normal file
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
- name: restart rsyslog
|
||||
ansible.builtin.service:
|
||||
name: rsyslog
|
||||
state: restarted
|
||||
|
||||
- name: reload fail2ban
|
||||
ansible.builtin.service:
|
||||
name: fail2ban
|
||||
state: reloaded
|
||||
|
||||
- name: reload postfix
|
||||
ansible.builtin.service:
|
||||
name: postfix
|
||||
state: reloaded
|
||||
|
||||
- name: restart postfix
|
||||
ansible.builtin.service:
|
||||
name: postfix
|
||||
state: restarted
|
||||
|
||||
- name: reload monit
|
||||
ansible.builtin.service:
|
||||
name: monit
|
||||
state: reloaded
|
10
meta/main.yml
Normal file
10
meta/main.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
galaxy_info:
|
||||
author: Sense.Lab e.V. administrators
|
||||
description: Role to setup Postfix
|
||||
company: Sense.Lab e.V.
|
||||
license: GPLv3
|
||||
min_ansible_version: "2.9"
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- "bullseye"
|
26
tasks/fail2ban.yml
Normal file
26
tasks/fail2ban.yml
Normal file
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
- name: "Fail2ban | Copy jaiil file"
|
||||
ansible.builtin.copy:
|
||||
src: files/fail2ban/postfix-sasl.conf
|
||||
dest: "{{ fail2ban_jail_dir }}/postfix-sasl.conf"
|
||||
mode: "0644"
|
||||
notify: reload fail2ban
|
||||
|
||||
- name: "fail2ban | Copy SASL filter"
|
||||
ansible.builtin.copy:
|
||||
src: files/fail2ban/postfix-sasl.local
|
||||
dest: "{{ fail2ban_filter_dir }}/postfix-sasl.local"
|
||||
mode: "0644"
|
||||
notify: reload fail2ban
|
||||
|
||||
- name: "Fail2ban | Setup SASL logging"
|
||||
ansible.builtin.lineinfile:
|
||||
dest: /etc/rsyslog.d/postfix.conf
|
||||
line: ':msg, contains, \"SASL\" /var/log/{{ mail_sasl_log }}'
|
||||
notify: restart rsyslog
|
||||
|
||||
- name: "Fail2ban | Setup logrotate"
|
||||
ansible.builtin.template:
|
||||
src: mail-sasl.j2
|
||||
dest: /etc/logrotate.d/mail-sasl
|
||||
mode: "0644"
|
10
tasks/hostname.yml
Normal file
10
tasks/hostname.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
- name: "Hostname | Set hostname"
|
||||
ansible.builtin.hostname:
|
||||
name: "{{ inventory_hostname }}"
|
||||
use: systemd
|
||||
|
||||
- name: "Hostname | Set hostname in /etc/hosts"
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/hosts
|
||||
line: '127.0.0.1 {{ ansible_hostname }}'
|
29
tasks/main.yml
Normal file
29
tasks/main.yml
Normal file
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
- name: Packages
|
||||
ansible.builtin.import_tasks: packages.yml
|
||||
tags: packages
|
||||
|
||||
- name: Postfix
|
||||
ansible.builtin.import_tasks: postfix.yml
|
||||
tags: postfix
|
||||
|
||||
- name: OnionMX
|
||||
ansible.builtin.import_tasks: onionmx.yml
|
||||
tags: onionmx
|
||||
when: postfix_onionmx is defined and postfix_onionmx
|
||||
|
||||
- name: Fail2ban
|
||||
ansible.builtin.import_tasks: fail2ban.yml
|
||||
tags: fail2ban
|
||||
|
||||
- name: TLS-helper
|
||||
ansible.builtin.import_tasks: tls-helper.yml
|
||||
tags: tls-helper
|
||||
|
||||
- name: Hostname
|
||||
ansible.builtin.import_tasks: hostname.yml
|
||||
tags: hostname
|
||||
|
||||
- name: Monitoring
|
||||
ansible.builtin.import_tasks: monitoring.yml
|
||||
tags: monitoring
|
16
tasks/monitoring.yml
Normal file
16
tasks/monitoring.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
- name: "Monitoring | Enable Monit monitoring for Postfix"
|
||||
ansible.builtin.copy:
|
||||
src: monit/postix
|
||||
dest: /etc/monit/conf-enabled/postfix
|
||||
mode: "0644"
|
||||
notify: reload monit
|
||||
when: "'monit' in ansible_facts.packages"
|
||||
|
||||
- name: "Monitoring | Enable Monit Monitoring for MTA-STS"
|
||||
ansible.builtin.copy:
|
||||
src: monit/mta-sts-daemon
|
||||
dest: /etc/monit/conf-enabled/mta-sts-daemon
|
||||
mode: "0644"
|
||||
notify: reload monit
|
||||
when: "'monit' in ansible_facts.packages"
|
22
tasks/onionmx.yml
Normal file
22
tasks/onionmx.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
- name: "OnionMX | Install torsocks"
|
||||
ansible.builtin.apt:
|
||||
pkg: torsocks
|
||||
cache_valid_time: 3600
|
||||
|
||||
- name: "OnionMX | Copy script"
|
||||
ansible.builtin.copy:
|
||||
src: smtp_tor
|
||||
dest: "{{ postfix_daemon_dir }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: "OnionMX | Copy transport table"
|
||||
ansible.builtin.template:
|
||||
src: postfix/conf.d/transport_tor.j2
|
||||
dest: "{{ postfix_conf_dir }}/transport_tor"
|
||||
mode: "0644"
|
||||
|
||||
- name: "OnionMX | Run postmap"
|
||||
ansible.builtin.command:
|
||||
cmd: "postmap {{ postfix_default_db_type }}:transport_tor"
|
||||
chdir: "{{ postfix_conf_dir }}"
|
23
tasks/packages.yml
Normal file
23
tasks/packages.yml
Normal file
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
- name: "Packages | Get installed packages"
|
||||
ansible.builtin.package_facts:
|
||||
manager: apt
|
||||
|
||||
- name: "Packages | Install packages"
|
||||
ansible.builtin.apt:
|
||||
pkg:
|
||||
- fail2ban
|
||||
- libsasl2-modules
|
||||
- pflogsumm
|
||||
- pfqueue
|
||||
- postfix
|
||||
- postfix-cdb
|
||||
- postfix-pcre
|
||||
- postfix-mta-sts-resolver
|
||||
cache_valid_time: 3600
|
||||
|
||||
- name: "Packages | Install Unbound"
|
||||
ansible.builtin.apt:
|
||||
pkg:
|
||||
- unbound
|
||||
when: unbound_install is defined and unbound_install
|
77
tasks/postfix.yml
Normal file
77
tasks/postfix.yml
Normal file
|
@ -0,0 +1,77 @@
|
|||
---
|
||||
- name: "Postfix | Copy main.cf"
|
||||
ansible.builtin.template:
|
||||
src: postfix/main.cf.j2
|
||||
dest: /etc/postfix/main.cf
|
||||
mode: "0644"
|
||||
notify: reload postfix
|
||||
|
||||
- name: "Postfix | Copy master.cf"
|
||||
ansible.builtin.template:
|
||||
src: postfix/master.cf
|
||||
dest: /etc/postfix/master.cf
|
||||
mode: "0644"
|
||||
notify: restart postfix
|
||||
|
||||
- name: "Postfix | Create configuration directory"
|
||||
ansible.builtin.file:
|
||||
path: "{{ postfix_conf_dir }}"
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: "Postfix | Copy lookup tables"
|
||||
ansible.builtin.copy:
|
||||
src: "postfix/conf.d/{{ item }}"
|
||||
dest: "{{ postfix_conf_dir }}/{{ item }}"
|
||||
mode: "0644"
|
||||
loop:
|
||||
- bogus_mx
|
||||
- header_checks
|
||||
- header_checks_inbound
|
||||
|
||||
- name: "Postfix | Copy lookup tables from templates"
|
||||
ansible.builtin.template:
|
||||
src: "postfix/conf.d/{{ item }}.j2"
|
||||
dest: "{{ postfix_conf_dir }}/{{ item }}"
|
||||
mode: "0644"
|
||||
loop:
|
||||
- bad_smtp_auth_users
|
||||
- client_checks
|
||||
- destination_limit
|
||||
- header_add
|
||||
- header_treatment
|
||||
- permit_sasl_login_mismatch
|
||||
- postscreen_access
|
||||
- relay_by_sender
|
||||
- relay_checks
|
||||
- sender_checks
|
||||
- transport_global_exceptions
|
||||
- transport_relay
|
||||
notify: reload postfix
|
||||
|
||||
- name: "Postfix | Run postmap"
|
||||
ansible.builtin.command: "postmap {{ item.table | default('cdb') }}:{{ item.file }}"
|
||||
args:
|
||||
chdir: "{{ postfix_conf_dir }}"
|
||||
changed_when: false
|
||||
notify: reload postfix
|
||||
loop:
|
||||
- file: bad_smtp_auth_users
|
||||
- file: client_checks
|
||||
- file: destination_limit
|
||||
- file: permit_sasl_login_mismatch
|
||||
- file: relay_checks
|
||||
- file: sender_checks
|
||||
- file: transport_relay
|
||||
|
||||
- name: "Postfix | Create dhparam file"
|
||||
community.crypto.openssl_dhparam:
|
||||
path: "{{ postfix_dhparam_file }}"
|
||||
size: 4096
|
||||
|
||||
- name: "Postfix | Setup cron job for pflogsum"
|
||||
ansible.builtin.cron:
|
||||
name: "Ansible: Daily pflogsum statistics"
|
||||
job: /usr/sbin/pflogsumm --detail 8 --problems-first --no-no-msg-size --reject-detail 12 /var/log/mail.log.1 | mail -s "{{ postfix_pflogsum_mail_subject }} ({{ inventory_hostname }})" {{ postfix_pflogsum_recipient }}
|
||||
hour: "06"
|
||||
minute: "24"
|
65
tasks/tls-helper.yml
Normal file
65
tasks/tls-helper.yml
Normal file
|
@ -0,0 +1,65 @@
|
|||
---
|
||||
- name: "TLS-helper | Clone repository"
|
||||
ansible.builtin.git:
|
||||
repo: "https://github.com/systemli/mail-tls-helper.git"
|
||||
dest: "/opt/mail-tls-helper"
|
||||
version: main
|
||||
|
||||
- name: "TLS-helper | Copy Readme"
|
||||
ansible.builtin.copy:
|
||||
src: mail-tls-helper/readme.txt
|
||||
dest: /opt/mail-tls-helper/
|
||||
mode: "0644"
|
||||
|
||||
- name: "TLS-help | Copy allowlist"
|
||||
ansible.builtin.template:
|
||||
src: postfix/allowlist.txt
|
||||
dest: /opt/mail-tls-helper/allowlist.txt
|
||||
mode: "0644"
|
||||
|
||||
- name: "TLS-helper | Create directory"
|
||||
ansible.builtin.file:
|
||||
path: "{{ tls_helper_postfix_dir }}"
|
||||
state: directory
|
||||
owner: postfix
|
||||
group: postfix
|
||||
mode: "0755"
|
||||
|
||||
- name: "TLS-helper | Create transport map"
|
||||
ansible.builtin.file:
|
||||
path: "{{ tls_helper_postfix_dir }}/{{ tls_helper_domains_file }}"
|
||||
state: touch
|
||||
owner: postfix
|
||||
group: postfix
|
||||
mode: "0644"
|
||||
|
||||
- name: "TLS-helper | Run postmap"
|
||||
ansible.builtin.command:
|
||||
cmd: "postmap {{ postfix_default_db_type }}:{{ tls_helper_domains_file }}"
|
||||
chdir: "{{ tls_helper_postfix_dir }}"
|
||||
|
||||
- name: "TLS-helper | Link files"
|
||||
ansible.builtin.file:
|
||||
path: "{{ postfix_conf_dir }}/{{ item }}"
|
||||
src: "{{ tls_helper_postfix_dir }}/{{ item }}"
|
||||
state: link
|
||||
loop:
|
||||
- "{{ tls_helper_domains_file }}"
|
||||
- "{{ tls_helper_domains_file }}.{{ postfix_default_db_type }}"
|
||||
|
||||
- name: "TLS-helper | Remove default logrotate configuration for mail logging"
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/logrotate.d/rsyslog
|
||||
line: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- /var/log/mail.info
|
||||
- /var/log/mail.warn
|
||||
- /var/log/mail.err
|
||||
- /var/log/mail.log
|
||||
|
||||
- name: "TLS-helper | Create new logrotate configuration"
|
||||
ansible.builtin.template:
|
||||
src: logrotate.conf
|
||||
dest: /etc/logrotate.d/maillog
|
||||
mode: "0644"
|
17
templates/logrotate.conf
Normal file
17
templates/logrotate.conf
Normal file
|
@ -0,0 +1,17 @@
|
|||
/var/log/mail.log
|
||||
/var/log/mail.info
|
||||
/var/log/mail.warn
|
||||
/var/log/mail.err
|
||||
{
|
||||
rotate 1
|
||||
daily
|
||||
missingok
|
||||
notifempty
|
||||
compress
|
||||
delaycompress
|
||||
sharedscripts
|
||||
postrotate
|
||||
/usr/lib/rsyslog/rsyslog-rotate
|
||||
python3 /opt/mail-tls-helper/mail-tls-helper.py -s /opt/mail-tls-helper/domains.sqlite -p /var/lib/postfix/tls-helper/tls_domains -t cdb --allowlist /opt/mail-tls-helper/allowlist.txt -d {{ postfix_tls_helper_domain }} -r {{ postfix_tls_helper_recipient }} -f {{ postfix_tls_helper_sender }}
|
||||
endscript
|
||||
}
|
10
templates/mail-sasl.j2
Normal file
10
templates/mail-sasl.j2
Normal file
|
@ -0,0 +1,10 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
/var/log/{{ mail_sasl_log }} {
|
||||
rotate 2
|
||||
daily
|
||||
missingok
|
||||
notifempty
|
||||
delaycompress
|
||||
compress
|
||||
}
|
5
templates/postfix/allowlist.txt
Normal file
5
templates/postfix/allowlist.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
# {{ ansible_managed }}
|
||||
|
||||
{% for domain in postfix_tls_helper_allowlist %}
|
||||
{{ domain }}
|
||||
{% endfor %}
|
11
templates/postfix/conf.d/bad_smtp_auth_users.j2
Normal file
11
templates/postfix/conf.d/bad_smtp_auth_users.j2
Normal file
|
@ -0,0 +1,11 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
# Use this file to block SMTP-Auth access for users.
|
||||
# Example:
|
||||
# username REJECT
|
||||
|
||||
{% if postfix_bad_smtp_auth_users is defined %}
|
||||
{% for user in postfix_bad_smtp_auth_users %}
|
||||
{{ "%-30s %s" | format(user, "REJECT") }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
10
templates/postfix/conf.d/client_checks.j2
Normal file
10
templates/postfix/conf.d/client_checks.j2
Normal file
|
@ -0,0 +1,10 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
### With this file you can allow or disallow clients to connect to the SMTP server.
|
||||
|
||||
{% if postfix_client_checks is defined %}
|
||||
{% for client in postfix_client_checks %}
|
||||
{{ client.comment }}
|
||||
{{ "%-30s %s" | format(client.name, client.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
7
templates/postfix/conf.d/destination_limit.j2
Normal file
7
templates/postfix/conf.d/destination_limit.j2
Normal file
|
@ -0,0 +1,7 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_dlimit_domains is defined %}
|
||||
{% for domain in postfix_dlimit_domains %}
|
||||
{{ "%-50s %s" | format(domain, "dlimit:") }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
7
templates/postfix/conf.d/header_add.j2
Normal file
7
templates/postfix/conf.d/header_add.j2
Normal file
|
@ -0,0 +1,7 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_header_add is defined %}
|
||||
{% for header in postfix_header_add %}
|
||||
{{ "%-50s %s" | format(header.destination, header.header) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
21
templates/postfix/conf.d/header_treatment.j2
Normal file
21
templates/postfix/conf.d/header_treatment.j2
Normal file
|
@ -0,0 +1,21 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
# Remove sensible headers
|
||||
/^Mail-System-Version:/ IGNORE
|
||||
/^Mailer:/ IGNORE
|
||||
/^Originating-Client:/ IGNORE
|
||||
/^User-Agent:/ IGNORE
|
||||
/^X-Enigmail-Version:/ IGNORE
|
||||
/^X-Mailer:/ IGNORE
|
||||
/^X-MimeOLE:/ IGNORE
|
||||
/^X-Newsreader:/ IGNORE
|
||||
/^X-Originating-IP:/ IGNORE
|
||||
/^X-Sender:/ IGNORE
|
||||
|
||||
/^\s*(Received: from)[^\n]*(.*)/ REPLACE $1 [127.0.0.1] (localhost [127.0.0.1])
|
||||
|
||||
{% if postfix_header_treatment is defined %}
|
||||
{% for header in postfix_header_treatment %}
|
||||
{{ header }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
13
templates/postfix/conf.d/helo_checks.j2
Normal file
13
templates/postfix/conf.d/helo_checks.j2
Normal file
|
@ -0,0 +1,13 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_default_helo_checks is defined %}
|
||||
{% for check in postfix_default_helo_checks %}
|
||||
{{ "%-30s %s" | format(check.client, check.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_helo_checks is defined %}
|
||||
{% for check in postfix_default_helo_checks %}
|
||||
{{ "%-30s %s" | format(check.client, check.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
8
templates/postfix/conf.d/permit_sasl_login_mismatch.j2
Normal file
8
templates/postfix/conf.d/permit_sasl_login_mismatch.j2
Normal file
|
@ -0,0 +1,8 @@
|
|||
### {{ ansible_managed }}
|
||||
### Enable sender spoofing for selected accounts
|
||||
|
||||
{% if postfix_permit_login_mismatch is defined %}
|
||||
{% for user in postfix_permit_login_mismatch %}
|
||||
{{ "%-50s %s" | format(user, "permit_login_mismatch") }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
19
templates/postfix/conf.d/postscreen_access.j2
Normal file
19
templates/postfix/conf.d/postscreen_access.j2
Normal file
|
@ -0,0 +1,19 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_default_postscreen_access is defined %}
|
||||
{% for source in postfix_default_postscreen_access %}
|
||||
{% if source.comment is defined %}
|
||||
# {{ source.comment }}
|
||||
{% endif %}
|
||||
{{ "%-40s %s" | format(source.source, source.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_postscreen_access is defined %}
|
||||
{% for source in postfix_postscreen_access %}
|
||||
{% if source.comment is defined %}
|
||||
# {{ source.comment }}
|
||||
{% endif %}
|
||||
{{ "%-40s %s" | format(source.source, source.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
9
templates/postfix/conf.d/relay_by_sender.j2
Normal file
9
templates/postfix/conf.d/relay_by_sender.j2
Normal file
|
@ -0,0 +1,9 @@
|
|||
# {{ ansible_managed }}
|
||||
|
||||
# http://www.postfix.org/postconf.5.html#sender_dependent_relayhost_maps
|
||||
|
||||
{% if postfix_relay_by_sender is defined %}
|
||||
{% for map in postfix_relay_by_sender %}
|
||||
{{ map }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
1
templates/postfix/conf.d/relay_checks.j2
Normal file
1
templates/postfix/conf.d/relay_checks.j2
Normal file
|
@ -0,0 +1 @@
|
|||
### {{ ansible_managed }}
|
20
templates/postfix/conf.d/sender_checks.j2
Normal file
20
templates/postfix/conf.d/sender_checks.j2
Normal file
|
@ -0,0 +1,20 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_sender_checks is defined %}
|
||||
{% for sender in postfix_sender_checks %}
|
||||
{% if sender.comment is defined %}
|
||||
# {{ sender.comment }}
|
||||
{% endif %}
|
||||
{{ "%-50s %s" | format(sender.client, sender.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
# Blocked Domains
|
||||
{% for domain in postfix_blocked_domains %}
|
||||
{{ "%-50s %s" | format(domain, "REJECT No spammers") }}
|
||||
{% endfor %}
|
||||
|
||||
# Blocked Sender
|
||||
{% for sender in postfix_blocked_senders %}
|
||||
{{ "%-50s %s" | format(sender, "REJECT No spammers") }}
|
||||
{% endfor %}
|
12
templates/postfix/conf.d/transport_global_exceptions.j2
Normal file
12
templates/postfix/conf.d/transport_global_exceptions.j2
Normal file
|
@ -0,0 +1,12 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
# Use this file for mail addresses that should be treated specially.
|
||||
|
||||
{% if postfix_transport_global_exceptions is defined %}
|
||||
{% for address in postfix_transport_global_exceptions %}
|
||||
{% if address.comment is defined %}
|
||||
# {{ address.comment }}
|
||||
{% endif %}
|
||||
{{ "%-50s %s" | format(address.adress, address.state) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
10
templates/postfix/conf.d/transport_relay.j2
Normal file
10
templates/postfix/conf.d/transport_relay.j2
Normal file
|
@ -0,0 +1,10 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_transport_relay is defined %}
|
||||
{% for transport in postfix_transport_relay %}
|
||||
{% if transport.comment is defined %}
|
||||
# {{ transport.comment }}
|
||||
{% endif %}
|
||||
{{ "%-50s %s" | format(transport.destination, transport.relay) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
13
templates/postfix/conf.d/transport_tor.j2
Normal file
13
templates/postfix/conf.d/transport_tor.j2
Normal file
|
@ -0,0 +1,13 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
{% if postfix_default_transport_tor_domains is defined %}
|
||||
{% for domain in postfix_default_transport_tor_domains %}
|
||||
{{ "%-50s %s" | format(domain.name, domain.relay) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_transport_tor_domains is defined %}
|
||||
{% for domain in postfix_transport_tor_domains %}
|
||||
{{ "%-50s %s" | format(domain.name, domain.relay) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
307
templates/postfix/main.cf.j2
Normal file
307
templates/postfix/main.cf.j2
Normal file
|
@ -0,0 +1,307 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
smtpd_banner = {{ postfix_smtpd_banner }}
|
||||
|
||||
### Debug Logging
|
||||
#debug_peer_list =
|
||||
|
||||
### Protocols and destinations
|
||||
inet_interfaces = all
|
||||
inet_protocols = ipv4
|
||||
|
||||
myhostname = $myorigin
|
||||
myorigin = {{ postfix_myorigin }}
|
||||
mydestination = {{ postfix_mydestination | join(', ') }}
|
||||
mynetworks = {{ postfix_mynetworks | join(', ') }}
|
||||
|
||||
### TLS settings
|
||||
tls_ssl_options = NO_COMPRESSION, NO_RENEGOTIATION
|
||||
tls_preempt_cipherlist = no
|
||||
tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA
|
||||
tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA
|
||||
|
||||
### TLS settings for SMTP server
|
||||
smtpd_tls_security_level = may
|
||||
smtpd_tls_auth_only = yes
|
||||
smtpd_tls_cert_file = {{ postfix_smtpd_tls_cert_file }}
|
||||
smtpd_tls_key_file = {{ postfix_smtpd_tls_key_file }}
|
||||
smtpd_tls_ciphers = medium
|
||||
smtpd_tls_mandatory_ciphers = medium
|
||||
smtpd_tls_exclude_ciphers = aNULL, eNULL, MD5, DES, 3DES, DES-CBC3-SHA, RC4-SHA, AES256-SHA, AES128-SHA, DHE-RSA-AES256-SHA
|
||||
#Einige berechtigte Mailserver nutzen nur TLSv1
|
||||
#smtpd_tls_mandatory_protocols = !TLSv1
|
||||
#smtpd_tls_protocols = !TLSv1
|
||||
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
||||
smtpd_tls_session_cache_timeout = 7200s
|
||||
smtpd_tls_loglevel = 1
|
||||
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
|
||||
smtpd_tls_dh1024_param_file = {{ postfix_dhparam_file }}
|
||||
smtpd_tls_eecdh_grade = strong
|
||||
|
||||
### TLS settings for SMTP client
|
||||
smtp_tls_security_level = dane
|
||||
smtp_dns_support_level = dnssec
|
||||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||
smtp_tls_session_cache_timeout = 7200s
|
||||
#Some mailserver use only TLSv1. Hence we can't disable it.
|
||||
#smtp_tls_protocols = !TLSv1
|
||||
{% if postfix_smtp_tls_policy_maps is defined %}
|
||||
smtp_tls_policy_maps =
|
||||
{% for map in postfix_smtp_tls_policy_maps %}
|
||||
{{ map.type }}:{{ map.path }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
smtp_tls_ciphers = medium
|
||||
smtp_tls_fingerprint_digest = sha1
|
||||
smtp_tls_loglevel = 1
|
||||
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
|
||||
smtp_pix_workarounds = disable_esmtp
|
||||
|
||||
### Domains and recipients
|
||||
{% if postfix_virtual_mailbox_domains is defined %}
|
||||
virtual_mailbox_domains =
|
||||
{% for map in postfix_virtual_mailbox_domains %}
|
||||
{{ map.type }}:{{ map.path }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if postfix_virtual_mailbox_maps is defined %}
|
||||
# Check for existing recipients
|
||||
virtual_mailbox_maps =
|
||||
{% for map in postfix_virtual_mailbox_maps %}
|
||||
{{ map.type }}:{{ map.path }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if postfix_virtual_alias_maps is defined %}
|
||||
virtual_alias_maps =
|
||||
{% for map in postfix_virtual_alias_maps %}
|
||||
{{ map.type }}:{{ map.path}}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if postfix_virtual_transport is defined %}
|
||||
virtual_transport =
|
||||
{% for map in postfix_virtual_transport %}
|
||||
{{ map.type }}:{{ map.address }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_relay_domains is defined %}
|
||||
# Relay mails without recipient check
|
||||
relay_domains =
|
||||
{% for map in postfix_relay_domains %}
|
||||
{{ map.type}}:{{ map.path }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if postfix_sender_dependent_relayhost_maps is defined %}
|
||||
sender_dependent_relayhost_maps =
|
||||
{% for map in postfix_sender_dependent_relayhost_maps %}
|
||||
{{ map.type }}:{{ map.path }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_transport_maps is defined %}
|
||||
transport_maps =
|
||||
{% for map in postfix_transport_maps %}
|
||||
{{ map.type }}:{{ map.path }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_smtpd_sasl_type is defined %}
|
||||
### SMTP Auth, server side
|
||||
broken_sasl_auth_clients = yes
|
||||
smtpd_sasl_type = {{ postfix_smtpd_sasl_type }}
|
||||
smtpd_sasl_path = {{ postfix_smtpd_sasl_path }}
|
||||
smtpd_sasl_auth_enable = no
|
||||
{% if postfix_smtpd_sasl_exceptions_networks is defined %}
|
||||
# Some clients demand SASL Auth if the server offers it
|
||||
smtpd_sasl_exceptions_networks = {{ postfix_smtpd_sasl_exceptions_networks | join(', ') }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if postfix_smtp_sasl_auth is defined and postfix_smtp_sasl_auth %}
|
||||
### SMTP Auth client side
|
||||
smtp_sasl_auth_enable = yes
|
||||
smtp_sasl_auth_soft_bounce = no
|
||||
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
|
||||
smtp_sasl_security_options = noanonymous
|
||||
{% endif %}
|
||||
|
||||
#### Postscreen
|
||||
postscreen_access_list =
|
||||
permit_mynetworks
|
||||
cidr:/etc/postfix/conf.d/postscreen_access.cidr
|
||||
postscreen_blacklist_action = drop
|
||||
|
||||
# Pregreeting
|
||||
postscreen_greet_action = drop
|
||||
|
||||
# DNS block lists
|
||||
postscreen_dnsbl_threshold = 2
|
||||
postscreen_dnsbl_sites =
|
||||
bl.spamcop.net*1
|
||||
ix.dnsbl.manitu.net*2
|
||||
zen.spamhaus.org*2
|
||||
postscreen_dnsbl_action = drop
|
||||
|
||||
# Postfix runs restrictions with the following order
|
||||
# - smtpd_client_restriction
|
||||
# - smtpd_helo_restriction
|
||||
# - smtpd_sender_restrition
|
||||
# - smtpd_relay_restrictions
|
||||
# - smtpd_recipient_restrictions
|
||||
# - smtpd_data_restriction
|
||||
# - smtpd_end_of_data_restriction
|
||||
# - smtpd_etrn_restriction
|
||||
|
||||
smtpd_restriction_classes = permit_login_mismatch
|
||||
|
||||
smtpd_client_restrictions =
|
||||
permit_mynetworks,
|
||||
permit_sasl_authenticated,
|
||||
check_client_access cdb:/etc/postfix/conf.d/client_checks,
|
||||
reject_unknown_client_hostname,
|
||||
permit
|
||||
|
||||
# Reject only after RCPT-TO
|
||||
smtpd_delay_reject = yes
|
||||
# Enforce helo to apply restrictions
|
||||
smtpd_helo_required = yes
|
||||
smtpd_helo_restrictions =
|
||||
permit_mynetworks,
|
||||
permit_sasl_authenticated,
|
||||
check_helo_access pcre:/etc/postfix/conf.d/helo_checks,
|
||||
reject_non_fqdn_helo_hostname,
|
||||
reject_invalid_helo_hostname,
|
||||
permit
|
||||
|
||||
smtpd_sender_restrictions =
|
||||
permit_mynetworks,
|
||||
check_sender_access cdb:/etc/postfix/conf.d/sender_checks,
|
||||
reject_non_fqdn_sender,
|
||||
reject_unknown_sender_domain,
|
||||
check_sender_mx_access cidr:/etc/postfix/conf.d/bogus_mx,
|
||||
#Uncomment the next two lines to block mails from other servers with our domain as MAIL FROM
|
||||
#permit_sasl_authenticated,
|
||||
#check_sender_access hash:/etc/postfix/conf.d/sender_checks_domain,
|
||||
permit
|
||||
|
||||
# Restrictions for submission port
|
||||
mua_sender_restrictions =
|
||||
check_sasl_access cdb:/etc/postfix/conf.d/permit_sasl_login_mismatch,
|
||||
permit_mynetworks,
|
||||
check_sender_access cdb:/etc/postfix/conf.d/sender_checks,
|
||||
reject_non_fqdn_sender,
|
||||
reject_unknown_sender_domain,
|
||||
reject_sender_login_mismatch,
|
||||
permit_sasl_authenticated
|
||||
|
||||
permit_login_mismatch =
|
||||
permit_mynetworks,
|
||||
reject_non_fqdn_sender,
|
||||
reject_unknown_sender_domain,
|
||||
permit_sasl_authenticated
|
||||
|
||||
submission_bad_smtp_user_check =
|
||||
check_sasl_access cdb:/etc/postfix/conf.d/bad_smtp_auth_users
|
||||
|
||||
smtpd_relay_restrictions =
|
||||
permit_mynetworks,
|
||||
permit_sasl_authenticated,
|
||||
check_client_access cdb:/etc/postfix/conf.d/relay_checks,
|
||||
reject_unauth_destination
|
||||
|
||||
smtpd_recipient_restrictions =
|
||||
reject_unauth_pipelining,
|
||||
reject_non_fqdn_recipient,
|
||||
reject_unknown_recipient_domain,
|
||||
permit_mynetworks,
|
||||
permit_sasl_authenticated,
|
||||
reject_unverified_recipient
|
||||
|
||||
# Configuration for reject_unverified_recipient
|
||||
unverified_recipient_reject_reason = User unknown / Nutzer unbekannt
|
||||
unverified_recipient_reject_code = 550
|
||||
|
||||
smtpd_data_restrictions =
|
||||
reject_multi_recipient_bounce,
|
||||
check_recipient_access pcre:/etc/postfix/conf.d/header_add,
|
||||
|
||||
### Connection limits
|
||||
smtpd_client_connection_rate_limit = 100
|
||||
smtpd_client_event_limit_exceptions = {{ postfix_smtpd_client_event_limit_exceptions | join(', ') }}
|
||||
smtpd_client_message_rate_limit = 25
|
||||
smtpd_client_new_tls_session_rate_limit = 100
|
||||
smtpd_client_auth_rate_limit = 100
|
||||
|
||||
default_destination_rate_delay = 60s
|
||||
default_destination_recipient_limit = 1
|
||||
default_destination_concurrency_failed_cohort_limit = 10
|
||||
|
||||
header_checks = pcre:/etc/postfix/conf.d/header_checks
|
||||
|
||||
### Spam and DKIM
|
||||
{% if postfix_smtpd_milters is defined %}
|
||||
smtpd_milters =
|
||||
{% for map in postfix_smtpd_milters %}
|
||||
{{ map.type }}:{{ map.address }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if postfix_non_smtpd_milters is defined %}
|
||||
non_smtpd_milters =
|
||||
{% for map in postfix_non_smtpd_milters %}
|
||||
{{ map.type }}:{{ map.address }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
milter_default_action = accept
|
||||
milter_connect_macros = i j {daemon_name} v {if_name} _
|
||||
milter_mail_macros = i {auth_type} {auth_authen} {auth_author} {mail_addr} {mail_host} {mail_mailer} {client_addr} {client_name}
|
||||
milter_rcpt_macros = i j _ {auth_type} {rcpt_addr} {rcpt_host} {rcpt_mailer}
|
||||
milter_connect_timeout = 20s
|
||||
|
||||
# Prevent DKIM signatures (don't allow spam header to change the signature)
|
||||
disable_mime_output_conversion = yes
|
||||
|
||||
### Misc
|
||||
|
||||
readme_directory = /usr/share/doc/postfix
|
||||
html_directory = /usr/share/doc/postfix/html
|
||||
|
||||
disable_vrfy_command = yes
|
||||
recipient_delimiter = +
|
||||
|
||||
# Postfix-default: alias_maps = hash:/etc/mail/aliases nis:mail.aliases
|
||||
# Prevents delays caused by NIS queries
|
||||
alias_maps =
|
||||
|
||||
# Error notifications
|
||||
# http://www.postfix.org/postconf.5.html#notify_classes
|
||||
notify_classes = data, delay, resource, software
|
||||
minimal_backoff_time = 1000s
|
||||
maximal_backoff_time = 4h
|
||||
|
||||
compatibility_level = 2
|
||||
biff = no
|
||||
append_dot_mydomain = no
|
||||
# Uncomment the next line to generate "delayed mail" warnings
|
||||
#delay_warning_time = 4h
|
||||
|
||||
# Add missing headers
|
||||
always_add_missing_headers = yes
|
||||
local_header_rewrite_clients = permit_mynetworks
|
||||
|
||||
mailbox_size_limit = 0
|
||||
message_size_limit = {{ postfix_message_size_limit }}
|
||||
|
||||
### Destination limits
|
||||
# Some mail server limit concurrent connections
|
||||
# Solves: Maximum parallel connections for your IP-Address
|
||||
dlimit_destination_concurrency_limit = 4
|
||||
dlimit_destination_recipient_limit = 3
|
||||
dlimit_destination_rate_delay = 5s
|
||||
|
||||
{% if postfix_proxy_read_maps is defined %}
|
||||
### Proxy maps
|
||||
proxy_read_maps =
|
||||
{% for map in postfix_proxy_read_maps %}
|
||||
{{ map }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
90
templates/postfix/master.cf
Normal file
90
templates/postfix/master.cf
Normal file
|
@ -0,0 +1,90 @@
|
|||
### {{ ansible_managed }}
|
||||
|
||||
# ==========================================================================
|
||||
# service type private unpriv chroot wakeup maxproc command + args
|
||||
# (yes) (yes) (no) (never) (100)
|
||||
# ==========================================================================
|
||||
smtp inet n - y - 1 postscreen
|
||||
smtpd pass - - y - 100 smtpd
|
||||
-o cleanup_service_name=smtpd-in
|
||||
dnsblog unix - - y - 0 dnsblog
|
||||
tlsproxy unix - - y - 0 tlsproxy
|
||||
{% if postfix_submission is defined and postfix_submission %}
|
||||
smtps inet n - y - 100 smtpd
|
||||
-o syslog_name=postfix/smtps
|
||||
-o smtpd_tls_wrappermode=yes
|
||||
-o smtpd_tls_cert_file={{ postfix_submission_smtpd_tls_cert_file }}
|
||||
-o smtpd_tls_key_file={{ postfix_submission_smtpd_tls_key_file }}
|
||||
-o smtpd_tls_dh1024_param_file={{ dhparam_file }}
|
||||
-o smtpd_tls_mandatory_protocols=!TLSv1,!TLSv1.1
|
||||
-o smtpd_tls_protocols=!TLSv1,!TLSv1.1
|
||||
-o smtpd_client_restrictions=$submission_bad_smtp_user_check,permit_sasl_authenticated,reject
|
||||
-o smtpd_sasl_auth_enable=yes
|
||||
{% if postfix_smtpd_sender_login_maps is defined %}
|
||||
-o smtpd_sender_login_maps={{ postfix_smtpd_sender_login_maps | join(', ') }}
|
||||
{% endif %}
|
||||
-o smtpd_sender_restrictions=$mua_sender_restrictions
|
||||
-o cleanup_service_name=subclean
|
||||
submission inet n - y - - smtpd
|
||||
-o syslog_name=postfix/submission
|
||||
-o smtpd_tls_security_level=encrypt
|
||||
-o smtpd_tls_cert_file={{ postfix_submission_smtpd_tls_cert_file }}
|
||||
-o smtpd_tls_key_file={{ postfix_submission_smtpd_tls_key_file }}
|
||||
-o smtpd_tls_dh1024_param_file={{ dhparam_file }}
|
||||
-o smtpd_client_restrictions=$submission_bad_smtp_user_check,permit_sasl_authenticated,reject
|
||||
-o smtpd_sasl_auth_enable=yes
|
||||
{% if postfix_smtpd_sender_login_maps is defined %}
|
||||
-o smtpd_sender_login_maps={{ postfix_smtpd_sender_login_maps | join(', ') }}
|
||||
{% endif %}
|
||||
-o smtpd_sender_restrictions=$mua_sender_restrictions
|
||||
-o cleanup_service_name=subclean
|
||||
{% if postfix_submission_alternative_port is defined %}
|
||||
{{ postfix_submission_alternative_port }} inet n - y - - smtpd
|
||||
-o syslog_name=postfix/submission-local
|
||||
-o smtpd_tls_security_level=none
|
||||
-o smtpd_client_restrictions=permit_mynetworks,reject
|
||||
-o smtpd_sasl_auth_enable=no
|
||||
-o cleanup_service_name=subclean
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
dlimit unix - - n - - smtp
|
||||
-o syslog_name=postfix-dlimit
|
||||
pickup unix n - y 60 1 pickup
|
||||
cleanup unix n - y - 0 cleanup
|
||||
qmgr unix n - n 300 1 qmgr
|
||||
tlsmgr unix - - y 1000? 1 tlsmgr
|
||||
rewrite unix - - y - - trivial-rewrite
|
||||
bounce unix - - y - 0 bounce
|
||||
defer unix - - y - 0 bounce
|
||||
trace unix - - y - 0 bounce
|
||||
verify unix - - y - 1 verify
|
||||
flush unix n - y 1000? 0 flush
|
||||
proxymap unix - - n - - proxymap
|
||||
proxywrite unix - - n - 1 proxymap
|
||||
smtp unix - - y - - smtp
|
||||
smtptor unix - - n - - smtp_tor
|
||||
-o smtp_dns_support_level=disabled
|
||||
-o smtp_tls_security_level=none
|
||||
-o smtp_tls_policy_maps=
|
||||
relay unix - - y - - smtp
|
||||
-o syslog_name=postfix/$service_name
|
||||
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
|
||||
showq unix n - y - - showq
|
||||
error unix - - y - - error
|
||||
retry unix - - y - - error
|
||||
discard unix - - y - - discard
|
||||
local unix - n n - - local
|
||||
virtual unix - n n - - virtual
|
||||
lmtp unix - - y - - lmtp
|
||||
anvil unix - - y - 1 anvil
|
||||
scache unix - - y - 1 scache
|
||||
postlog unix-dgram n - n - 1 postlogd
|
||||
|
||||
# Outbound: Remove sensible headers
|
||||
subclean unix n - y - 0 cleanup
|
||||
-o header_checks=regexp:/etc/postfix/conf.d/header_treatment
|
||||
|
||||
# Inbound: Remove some headers
|
||||
smtpd-in unix n - y - 0 cleanup
|
||||
-o syslog_name=postfix/smtpd-in
|
||||
-o header_checks=pcre:/etc/postfix/conf.d/header_checks_inbound
|
Loading…
Reference in a new issue