diff --git a/mail/rspamd/src/opnsense/mvc/app/controllers/OPNsense/Rspamd/forms/settings.xml b/mail/rspamd/src/opnsense/mvc/app/controllers/OPNsense/Rspamd/forms/settings.xml
index 38f2c7e85..23ef414e7 100644
--- a/mail/rspamd/src/opnsense/mvc/app/controllers/OPNsense/Rspamd/forms/settings.xml
+++ b/mail/rspamd/src/opnsense/mvc/app/controllers/OPNsense/Rspamd/forms/settings.xml
@@ -20,9 +20,56 @@
select_multiple
+ trueIf an attached file has a suffix in this list, the mail will be rejected via a hard reject, which means that the server will be immeadiately informed about the policy violation.
+
+
+ rspamd.milter_headers.enabled
+
+ checkbox
+ When this checkbox is enabled, you can add additional headers to your mails, which contain information about the scan results.
+
+
+ rspamd.milter_headers.enable_authentication_results
+
+ checkbox
+ If this checkbox is enabled, a header about the authentication state will be added.
+
+
+ rspamd.milter_headers.enable_extended_spam_headers
+
+ checkbox
+ If this checkbox is enabled, a header containing the findings of the scan is added.
+
+
+ rspamd.milter_headers.enable_spamd_bar
+
+ checkbox
+ Add a header containing a visible indicator of the spam level.
+
+
+ rspamd.milter_headers.skip_local
+
+ checkbox
+ This will skip adding headers for local IPs. If this is unchecked, headers will also be added anyway but if it is checked, the headers will not be added for local IPs.
+
+
+ rspamd.milter_headers.skip_authenticated
+
+ checkbox
+ If the user is authenticated, the headers will not be added if this is enabled. If this is checked, your outgoing mails will very likely not leak information about the the scanner.
+
+
+ rspamd.milter_headers.extended_headers_rcpt
+
+ select_multiple
+
+ true
+ Enter a (partial) mail address, which should also receive extended headers. For example: user@example.com or @example.net.
+
+
diff --git a/mail/rspamd/src/opnsense/mvc/app/models/OPNsense/Rspamd/RSpamd.xml b/mail/rspamd/src/opnsense/mvc/app/models/OPNsense/Rspamd/RSpamd.xml
index f26b91dcd..5f3f6ec9a 100644
--- a/mail/rspamd/src/opnsense/mvc/app/models/OPNsense/Rspamd/RSpamd.xml
+++ b/mail/rspamd/src/opnsense/mvc/app/models/OPNsense/Rspamd/RSpamd.xml
@@ -13,6 +13,37 @@
+
+
+ 0
+ Y
+
+
+ 0
+ Y
+
+
+ 0
+ Y
+
+
+ 0
+ Y
+
+
+ 0
+ Y
+
+
+ 0
+ Y
+
+
+ /[a-z0-9\.\-_@,]+/i
+ N
+
+
+
N
diff --git a/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/+TARGETS b/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/+TARGETS
index a4038e206..20ea9843e 100644
--- a/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/+TARGETS
+++ b/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/+TARGETS
@@ -10,6 +10,7 @@ surbl-whitelist.inc.local:/var/db/rspamd/surbl-whitelist.inc.local
2tld.inc.local:/var/db/rspamd/2tld.inc.local
greylist.conf:/usr/local/etc/rspamd/local.d/greylist.conf
phishing.conf:/usr/local/etc/rspamd/local.d/phishing.conf
+milter_headers.conf:/usr/local/etc/rspamd/local.d/milter_headers.conf
multimap.conf:/usr/local/etc/rspamd/local.d/multimap.conf
mx_check.conf:/usr/local/etc/rspamd/local.d/mx_check.conf
ratelimit.conf:/usr/local/etc/rspamd/local.d/ratelimit.conf
diff --git a/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/milter_headers.conf b/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/milter_headers.conf
new file mode 100644
index 000000000..acddb39e5
--- /dev/null
+++ b/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/milter_headers.conf
@@ -0,0 +1,28 @@
+{% if helpers.exists('OPNsense.Rspamd.milter_headers.enabled') and OPNsense.Rspamd.milter_headers.enabled == '1' %}
+{% set usemodules = [] %}
+
+extended_spam_headers = {% if helpers.exists('OPNsense.Rspamd.milter_headers.enable_extended_spam_headers') and OPNsense.Rspamd.milter_headers.enable_extended_spam_headers == '1' %}true{% else %}false{% endif %};
+{% if helpers.exists('OPNsense.Rspamd.milter_headers.enable_authentication_results') and OPNsense.Rspamd.milter_headers.enable_authentication_results == '1' %}
+{% do usemodules.append('authentication-results') %}
+authenticated_headers = ["authentication-results"];
+{% endif %}
+
+{% if helpers.exists('OPNsense.Rspamd.milter_headers.enable_spamd_bar') and OPNsense.Rspamd.milter_headers.enable_spamd_bar == '1' %}
+{% do usemodules.append('x-spamd-bar') %}
+local_headers = ["x-spamd-bar"];
+{% endif %}
+
+
+skip_local = {% if helpers.exists('OPNsense.Rspamd.milter_headers.skip_local') and OPNsense.Rspamd.milter_headers.skip_local == '1' %}true{% else %}false{% endif %};
+
+skip_authenticated = {% if helpers.exists('OPNsense.Rspamd.milter_headers.skip_authenticated') and OPNsense.Rspamd.milter_headers.skip_authenticated == '1' %}true{% else %}false{% endif %};
+
+{% if helpers.exists('OPNsense.Rspamd.milter_headers.extended_headers_rcpt') and OPNsense.Rspamd.milter_headers.extended_headers_rcpt != '' %}
+extended_headers_rcpt = [{{ '"' + ( '", "'.join(OPNsense.Rspamd.milter_headers.extended_headers_rcpt.split(',') ) ) + '"' }}];
+{% endif %}
+
+{% if usemodules|length > 0 %}
+use = [{{ '"' + ( '", "'.join(usemodules) ) + '"' }}];
+{% endif %}
+{% endif %}
+