<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>MailmanConfiguration</title><revhistory><revision><revnumber>14</revnumber><date>2025-02-12 22:39:43</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>13</revnumber><date>2025-02-12 22:29:07</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>12</revnumber><date>2025-02-12 22:23:20</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>11</revnumber><date>2025-02-12 22:21:55</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>10</revnumber><date>2025-02-12 22:20:01</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>9</revnumber><date>2025-02-12 22:19:25</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>8</revnumber><date>2025-02-12 22:12:26</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>7</revnumber><date>2025-02-12 21:57:44</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>6</revnumber><date>2025-02-12 21:51:30</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>5</revnumber><date>2025-02-12 21:08:34</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>4</revnumber><date>2025-02-12 21:03:57</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>3</revnumber><date>2025-02-12 21:02:38</date><authorinitials>ClauzClauz</authorinitials></revision><revision><revnumber>2</revnumber><date>2025-02-12 21:02:29</date><authorinitials>ClauzClauz</authorinitials><revremark>delete</revremark></revision><revision><revnumber>1</revnumber><date>2025-02-12 21:01:20</date><authorinitials>151.36.187.51</authorinitials></revision></revhistory></articleinfo><section><title>Mailman Configuration</title><section><title>Mailman</title><para>Download the mailman-2.1.39 tarball, uncompress it, then compile it and install it: </para><screen><![CDATA[./configure --prefix=/usr/local/mailman --with-python=/usr/bin/python2.7  --with-mail-gid=nogroup
make
make install]]></screen><para>Fix permissions with: </para><screen><![CDATA[usr/local/mailman/bin/check_perms -f]]></screen><screen><![CDATA[/usr/local/mailman/bin/mailmanctl restart]]></screen></section><section><title>Apache</title><para>Configure apache, use HTTPS through letsencrypt. </para><para>In bind, create A record for ml.ninux.org </para><screen><![CDATA[$ORIGIN ninux.org.
ml                      A       176.111.173.140]]></screen><para>Use certbot to obtain a letsencrypt certificate: </para><screen><![CDATA[certbot --apache -d ml.ninux.org run ]]></screen></section><section><title>Postfix</title><para>In main.cf </para><screen><![CDATA[#DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8892
non_smtpd_milters = inet:localhost:8892]]></screen><para>Use apache letsencrypt certificates also for postfix </para><screen><![CDATA[smtpd_tls_cert_file=/etc/letsencrypt/live/ml.ninux.org/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/ml.ninux.org/privkey.pem
smtpd_use_tls=yes]]></screen><para>In master.cf </para><screen><![CDATA[mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/local/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
policyd-spf  unix  -       n       n       -       0       spawn
  user=policyd-spf argv=/usr/sbin/postfix-policyd-spf-perl]]></screen></section><section><title>DKIM</title><para>We use OpenDKIM </para><para>Generate a 2048 bits key </para><screen><![CDATA[opendkim-genkey -b 2048 -d ml.ninux.org -D /etc/mail/dkim-keys/ml.ninux.org -s mail -v]]></screen><para>/etc/opendkim.conf </para><screen><![CDATA[Syslog                  yes
UMask                   002
Domain                  ml.ninux.org
KeyFile                 /etc/mail/dkim-keys/ml.ninux.org/mail.private
Selector                mail
Socket                  inet:8892@localhost
OversignHeaders         From]]></screen><para>The DNS entry to be added to bind is in /etc/mail/dkim-keys/ml.ninux.org/mail.txt </para></section><section><title>DNS entries in bind for SPF, DMARC and DKIM</title><screen><![CDATA[$ORIGIN ninux.org.
_dmarc                  TXT     "v=DMARC1\; p=none\; sp=none\; adkim=r\; aspf=r\; rua=mailto:nino@ninux.org\; ruf=mailto:nino@ninux.org\; fo=1\;"
mail._domainkey         TXT     "v=DKIM1\; h=sha256\; k=rsa\; " "p=MIIBI...NeyP" "a...B"
ml                      A       176.111.173.140
                        MX      10 ml
                        TXT     "v=spf1 ip4:176.111.173.140 -all"
                        SPF     "v=spf1 ip4:176.111.173.140 -all"
]]><![CDATA[
$ORIGIN ml.ninux.org.
_dmarc                  TXT     "v=DMARC1\; p=none\; sp=none\; adkim=r\; aspf=r\; rua=mailto:nino@ninux.org\; ruf=mailto:nino@ninux.org\; fo=1\;"
mail._domainkey         TXT     "v=DKIM1\; h=sha256\; k=rsa\; " "p=MIIBI...NeyP" "a...B"]]></screen><para>Verify with dig, e.g. </para><screen><![CDATA[$ dig +short @1.1.1.1 mail._domainkey.ml.ninux.org TXT
"v=DKIM1; h=sha256; k=rsa; " "p=MIIBI...NeyP" "a...B"
]]><![CDATA[
$ dig +short @1.1.1.1 mail._domainkey.ninux.org TXT
"v=DKIM1; h=sha256; k=rsa; " "p=MIIBI...NeyP" "a...B"]]></screen></section></section></article>