Skip to content

Set up new dkim milter #582

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ansible/playbook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
- name: Deploy mailservers
hosts: mail
roles:
- opendkim
- dkim-milter
- opendmarc
- opendmarc-inbox
- sasl
Expand Down
14 changes: 14 additions & 0 deletions ansible/roles/dkim-milter/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
- name: Reload dkim-milter
ansible.builtin.service:
name: dkim-milter.service
state: restarted
tags:
- role::dkim-milter

- name: Restart dkim-milter
ansible.builtin.service:
name: dkim-milter.service
state: restarted
tags:
- role::dkim-milter
148 changes: 148 additions & 0 deletions ansible/roles/dkim-milter/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
---
- name: Install opendkim-tools
# Used currently to generate keys. Could theoretically replace this with dkimdo
# https://codeberg.org/glts/dkimdo
ansible.builtin.package:
name: opendkim-tools
state: present
tags:
- role::dkim-milter

- name: Pull dkim-milter AppImage from Uncle Christ
ansible.builtin.get_url:
checksum: sha256:{{ dkim_milter_package_root }}/sha256sums.txt
url: "{{ dkim_milter_package_root }}/dkim-milter"
dest: /usr/local/sbin/dkim-milter
owner: root
group: root
mode: 0o755
vars:
dkim_milter_version: 0.2.0-alpha.1
uncle_christ_package_root: https://git.jchri.st/api/packages/jc/generic
dkim_milter_package_root: "{{ uncle_christ_package_root }}/dkim-milter/{{ dkim_milter_version }}"
tags:
- role::dkim-milter
# https://codeberg.org/forgejo/forgejo/issues/6871
when:
- not ansible_check_mode

- name: Create dkim-milter user
ansible.builtin.user:
name: dkim-milter
home: /var/lib/dkim-milter
group: dkim-milter
create_home: false
system: true
shell: /usr/sbin/nologin
tags:
- role::dkim-milter

- name: Create dkim-milter directory
ansible.builtin.file:
path: /etc/dkim-milter
state: directory
owner: dkim-milter
group: dkim-milter
mode: 0o700
tags:
- role::dkim-milter

- name: Create dkim-milter keys directory
ansible.builtin.file:
path: /etc/dkim-milter/keys
state: directory
owner: dkim-milter
group: dkim-milter
mode: 0o700
tags:
- role::dkim-milter

- name: Template dkim-milter configuration file
ansible.builtin.template:
src: dkim-milter.conf.j2
dest: /etc/dkim-milter/dkim-milter.conf
owner: dkim-milter
group: dkim-milter
mode: 0o400
notify:
- Reload dkim-milter
tags:
- role::dkim-milter

- name: Template signing-keys file
ansible.builtin.copy:
content: |
{% for domain in dkim_milter_domains %}
{% set keyname = (domain | replace(".", "_")) %}
{{ keyname }} < /etc/dkim-milter/keys/{{ keyname }}.pem
{% endfor %}
{% for item in dkim_milter_extra_signings %}
{% set keyname = (item['domain'] | replace(".", "_")) %}
{{ keyname }} < /etc/dkim-milter/keys/{{ keyname }}.pem
{% endfor %}
dest: /etc/dkim-milter/signing-keys
owner: dkim-milter
group: dkim-milter
mode: 0o400
notify:
- Reload dkim-milter
tags:
- role::dkim-milter

- name: Template signing-senders file
ansible.builtin.copy:
content: |
# Sender expression Domain Selector Key name
{% for domain in dkim_milter_domains %}
{% set keyname = (domain | replace(".", "_")) %}
.{{ domain }} {{ domain }} {{ dkim_milter_selector }} {{ keyname }}
{% endfor %}
{% for item in dkim_milter_extra_signings %}
{% set keyname = (item['use_key'] | replace(".", "_")) %}
{% set domain = item['domain'] %}
.{{ domain }} {{ domain }} {{ dkim_milter_selector }} {{ keyname }}
{% endfor %}
dest: /etc/dkim-milter/signing-senders
owner: dkim-milter
group: dkim-milter
mode: 0o400
notify:
- Reload dkim-milter
tags:
- role::dkim-milter

- name: Generate dkim keys
become: true
become_user: dkim-milter
ansible.builtin.command: |
opendkim-genkey -D /etc/dkim-milter/keys/{{ item }} -d {{ item }} -s {{ dkim_milter_selector }}
with_items:
- "{{ dkim_milter_domains }}"
args:
creates: /etc/dkimkeys/{{ item }}/{{ dkim_milter_selector }}.pem
notify:
- Reload dkim-milter
tags:
- role::dkim-milter

- name: Template systemd service
ansible.builtin.template:
src: dkim-milter.service.j2
dest: /etc/systemd/system/dkim-milter.service
owner: root
group: root
mode: 0o444
register: dkim_milter_service
notify:
- Restart dkim-milter
tags:
- role::dkim-milter

- name: Start and enable dkim-milter
ansible.builtin.service:
name: dkim-milter.service
state: started
enabled: true
daemon_reload: "{{ dkim_milter_service is changed }}"
tags:
- role::dkim-milter
2 changes: 2 additions & 0 deletions ansible/roles/dkim-milter/templates/dkim-milter.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
signing_keys = </etc/dkim-milter/signing-keys
signing_senders = </etc/dkim-milter/signing-senders
21 changes: 21 additions & 0 deletions ansible/roles/dkim-milter/templates/dkim-milter.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# {{ ansible_managed }}

[Unit]
Description=DKIM Milter
# Documentation=man:dkim-milter(8) man:dkim-milter.conf(5)
After=network-online.target nss-lookup.target
Wants=network-online.target

[Service]
User=dkim-milter
ExecStart=/usr/local/sbin/dkim-milter
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

# schizophrenia
ProtectSystem=full

[Install]
WantedBy=multi-user.target

# vim: ft=dosini.jinja2:
10 changes: 10 additions & 0 deletions ansible/roles/dkim-milter/vars/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
dkim_milter_domains:
- pydis.wtf
- pydis.com
- pythondiscord.com
- owlcorp.uk
dkim_milter_extra_signings:
- domain: int.pydis.wtf
use_key: pydis.wtf
dkim_milter_selector: lovelace
Loading