Browse Source

opendkim

tags/v1.0.0
Robin Thoni 7 years ago
parent
commit
0dce454866

+ 14
- 1
docker-compose.yml View File

@@ -48,7 +48,8 @@ services:
48 48
                 aliases:
49 49
                     - dovecot.internal.docker
50 50
         volumes:
51
-            - ./data/email:/var/email
51
+            - ./data/dovecot/email:/var/email
52
+            - ./data/dovecot/sieve:/etc/dovecot/sieve
52 53
         ports:
53 54
             - "0.0.0.0:110:110"
54 55
             - "0.0.0.0:143:143"
@@ -58,5 +59,17 @@ services:
58 59
         env_file:
59 60
             - env
60 61
 
62
+    opendkim:
63
+        build: ./opendkim
64
+        container_name: mx-opendkim
65
+        networks:
66
+            internal.docker:
67
+                aliases:
68
+                    - opendkim.internal.docker
69
+        volumes:
70
+            - ./data/opendkim/keys:/etc/opendkim/keys
71
+        env_file:
72
+            - env
73
+
61 74
 networks:
62 75
     internal.docker:

+ 1
- 1
dovecot/Dockerfile View File

@@ -17,7 +17,7 @@ COPY ./config/ /etc/dovecot/
17 17
 
18 18
 COPY ./certs/ /etc/ssl/private/
19 19
 
20
-VOLUME ["/var/email"]
20
+VOLUME ["/var/email", "/etc/dovecot/sieve"]
21 21
 
22 22
 EXPOSE 110 143 993 995 4190
23 23
 

+ 2
- 4
dovecot/config/dovecot.conf View File

@@ -44,8 +44,8 @@ plugin {
44 44
   # The path to the user's main active script. If ManageSieve is used, this the
45 45
   # location of the symbolic link controlled by ManageSieve.
46 46
   sieve = ~/.dovecot.sieve
47
-  sieve_before = ~/sieve/01_vacation.sieve
48
-  sieve_extensions = +vacation +vacation-seconds
47
+  #sieve_before = ~/sieve/01_vacation.sieve
48
+  #sieve_extensions = +vacation +vacation-seconds
49 49
 
50 50
   # The default Sieve script when the user has none. This is a path to a global
51 51
   # sieve script file, which gets executed ONLY if user's private Sieve script
@@ -75,9 +75,7 @@ log_path = /dev/stderr
75 75
 postmaster_address = postmaster@example.org
76 76
 
77 77
 service lmtp {
78
-  # Create inet listener only if you can't use the above UNIX socket
79 78
   inet_listener lmtp {
80
-    # Avoid making LMTP visible for the entire internet
81 79
     address = 0.0.0.0
82 80
     port = DOVECOT_LMTP_PORT
83 81
   }

+ 1
- 1
env View File

@@ -3,7 +3,7 @@ POSTGRES_USER=postfixadmin
3 3
 POSTGRES_PASSWORD=pg_password
4 4
 POSTGRES_DB=postfixadmin
5 5
 
6
-MAIL_DOMAIN=test-mx.rthoni.com
6
+MAIL_DOMAIN=rthoni.com
7 7
 MAIL_HOSTNAME=vm01.rthoni.com
8 8
 
9 9
 DOVECOT_HOST=dovecot.internal.docker

+ 20
- 0
opendkim/Dockerfile View File

@@ -0,0 +1,20 @@
1
+FROM debian:jessie
2
+
3
+MAINTAINER Robin Thoni <robin@rthoni.com>
4
+
5
+RUN apt-get update &&\
6
+    apt-get install -y opendkim libopendbx1-pgsql rsyslog &&\
7
+    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
8
+
9
+RUN rm /etc/opendkim.conf &&\
10
+    ln -s /etc/opendkim/opendkim.conf /etc/opendkim.conf
11
+
12
+COPY ./run.sh /run.sh
13
+
14
+COPY ./config /etc/opendkim/
15
+
16
+RUN chown -R opendkim:opendkim /etc/opendkim
17
+
18
+VOLUME ["/etc/opendkim/keys"]
19
+
20
+CMD ["/run.sh"]

+ 21
- 0
opendkim/config.sql/opendkim.conf View File

@@ -0,0 +1,21 @@
1
+AutoRestart             Yes
2
+AutoRestartRate         10/1h
3
+UMask                   002
4
+Syslog                  yes
5
+SyslogSuccess           yes
6
+LogWhy                  Yes
7
+
8
+Canonicalization        relaxed/simple
9
+
10
+ExternalIgnoreList      dsn:pgsql://POSTGRES_USER:POSTGRES_PASSWORD@POSTGRES_HOST/POSTGRES_DB/table=dkim_external_ignore_list?keycol=host?datacol=host
11
+InternalHosts           dsn:pgsql://POSTGRES_USER:POSTGRES_PASSWORD@POSTGRES_HOST/POSTGRES_DB/table=dkim_internal_hosts?keycol=host?datacol=host
12
+KeyTable                dsn:pgsql://POSTGRES_USER:POSTGRES_PASSWORD@POSTGRES_HOST/POSTGRES_DB/table=dkim_key_table?keycol=name?datacol=key_path
13
+SigningTable            dsn:pgsql://POSTGRES_USER:POSTGRES_PASSWORD@POSTGRES_HOST/POSTGRES_DB/table=dkim_signing_table?keycol=email?datacol=name
14
+
15
+Mode                    sv
16
+PidFile                 /var/run/opendkim/opendkim.pid
17
+SignatureAlgorithm      rsa-sha256
18
+
19
+UserID                  opendkim:opendkim
20
+
21
+Socket                  inet:OPENDKIM_PORT@0.0.0.0

+ 1
- 0
opendkim/config/KeyTable View File

@@ -0,0 +1 @@
1
+all                  MAIL_DOMAIN:dkim:/etc/opendkim/dkim.private

+ 1
- 0
opendkim/config/SigningTable View File

@@ -0,0 +1 @@
1
+*                        all

+ 3
- 0
opendkim/config/TrustedHosts View File

@@ -0,0 +1,3 @@
1
+127.0.0.1
2
+localhost
3
+postfix.internal.docker

+ 15
- 0
opendkim/config/dkim.private View File

@@ -0,0 +1,15 @@
1
+-----BEGIN RSA PRIVATE KEY-----
2
+MIICWwIBAAKBgQCw8ztGcYIdp/fCfIjH0n5A6sKXKct0OfgVLLd8+Zj2zqmyhXFB
3
+7HI2zjQ2RBC6zqDS6VD8VWYX6pcWQNFdretjAm5Owmyd5SyRXxDwlVpyWLVHqGI2
4
+qHJR6cicAtBDSMtWGBLMSC8jR+44Dfzof53x1BlAPMr+Znj5yOS8fYQxwQIDAQAB
5
+AoGALROZOwW5ZsKeO/4rffPiU7k6HvX3rUEDMKm2iHCxBdZ5pk+WHXwVUF7RMC3A
6
+sUXn9DKZfd5nZppNKM8URrACcUbLx3g6Yj4LiupzasWn3IXf1nhbObHEIDcr821x
7
+Cs8v5kZhOHS9Wf03T1qOGkSLf3NL0MO6cXS1nBWkz/DL9R0CQQDikuYnybGTTB8c
8
+OzKW3d+hUt6u1JD4i8EGqvN9O4QSJrKgDHYGsx/EaicZLh7CM1CA/e2iH0weaBvL
9
+wuC3aflXAkEAx+5zBANxaWrpjyWVIMdmY9bxUjgBpRPgxbvFyctkqb58BpOkQpdn
10
+f2LvqxsblR9fDfZCduySSubTHPeS6bmGpwJAMBNfhr3DUi/qwgDFoUF+/CorWgl8
11
+oWB2GsYXWFFSms9fQ5qhSJalfPXRSgSBPk/JGzXGQIpHioQosbmuGP0BjQJAcQui
12
+fOJ1feW1qfrWF3KnskwWpyaDx5M1xJgnfbJDeLb76bwRZJW3L5ABc/4f2nGijYJw
13
+kk2xaiiZtgdGSmFcgQJAbG5PMgTBtAgawHtt8pqdojTDR3pJ3/Zc5vtCY+7MoWBA
14
+rHVixMuqodwxwgx/+OecEIdjF0SFkvTvKV0V2SeqXw==
15
+-----END RSA PRIVATE KEY-----

+ 2
- 0
opendkim/config/dkim.txt View File

@@ -0,0 +1,2 @@
1
+dkim._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
2
+	  "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCw8ztGcYIdp/fCfIjH0n5A6sKXKct0OfgVLLd8+Zj2zqmyhXFB7HI2zjQ2RBC6zqDS6VD8VWYX6pcWQNFdretjAm5Owmyd5SyRXxDwlVpyWLVHqGI2qHJR6cicAtBDSMtWGBLMSC8jR+44Dfzof53x1BlAPMr+Znj5yOS8fYQxwQIDAQAB" )  ; ----- DKIM key dkim for rthoni.com

+ 21
- 0
opendkim/config/opendkim.conf View File

@@ -0,0 +1,21 @@
1
+AutoRestart             Yes
2
+AutoRestartRate         10/1h
3
+UMask                   002
4
+Syslog                  yes
5
+SyslogSuccess           Yes
6
+LogWhy                  Yes
7
+
8
+Canonicalization        relaxed/simple
9
+
10
+ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
11
+InternalHosts           refile:/etc/opendkim/TrustedHosts
12
+KeyTable                refile:/etc/opendkim/KeyTable
13
+SigningTable            refile:/etc/opendkim/SigningTable
14
+
15
+Mode                    sv
16
+PidFile                 /var/run/opendkim/opendkim.pid
17
+SignatureAlgorithm      rsa-sha256
18
+
19
+UserID                  opendkim:opendkim
20
+
21
+Socket                  inet:OPENDKIM_PORT@0.0.0.0

+ 18
- 0
opendkim/run.sh View File

@@ -0,0 +1,18 @@
1
+#! /usr/bin/env sh
2
+
3
+sed -e "s/POSTGRES_HOST/${POSTGRES_HOST}/" -i /etc/opendkim/opendkim.conf
4
+sed -e "s/POSTGRES_USER/${POSTGRES_USER}/" -i /etc/opendkim/opendkim.conf
5
+sed -e "s/POSTGRES_PASSWORD/${POSTGRES_PASSWORD}/" -i /etc/opendkim/opendkim.conf
6
+sed -e "s/POSTGRES_DB/${POSTGRES_DB}/" -i /etc/opendkim/opendkim.conf
7
+sed -e "s/OPENDKIM_PORT/${OPENDKIM_PORT}/" -i /etc/opendkim/opendkim.conf
8
+sed -e "s/MAIL_DOMAIN/${MAIL_DOMAIN}/" -i /etc/opendkim/KeyTable
9
+
10
+sleep 5
11
+
12
+rm -f /var/run/rsyslogd.pid
13
+rm -f /var/log/syslog
14
+service rsyslog start
15
+service opendkim start
16
+#/usr/sbin/opendkim -f -v -x /etc/opendkim.conf
17
+tail -f /var/log/syslog
18
+

+ 7
- 3
postfix/config/main.cf View File

@@ -83,6 +83,10 @@ message_size_limit = 0
83 83
 
84 84
 milter_default_action = accept
85 85
 milter_protocol = 6
86
-#smtpd_milters = inet:localhost:12345
87
-#non_smtpd_milters = inet:localhost:12345
88
-smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination
86
+smtpd_milters = opendkim_12345
87
+non_smtpd_milters = opendkim_12345
88
+smtpd_relay_restrictions = permit_mynetworks,
89
+        permit_sasl_authenticated,
90
+        reject_unknown_recipient_domain,
91
+        reject_unauth_pipelining,
92
+        reject_unauth_destination

+ 3
- 0
postfix/run.sh View File

@@ -9,7 +9,10 @@ postconf -e mydomain="${MAIL_DOMAIN}"
9 9
 postconf -e myhostname="${MAIL_HOSTNAME}"
10 10
 postconf -e smtpd_sasl_path="inet:${DOVECOT_HOST}:${DOVECOT_SASL_PORT}"
11 11
 postconf -e virtual_transport="lmtp:inet:${DOVECOT_HOST}:${DOVECOT_LMTP_PORT}"
12
+postconf -e smtpd_milters="inet:${OPENDKIM_HOST}:${OPENDKIM_PORT}"
13
+postconf -e non_smtpd_milters="inet:${OPENDKIM_HOST}:${OPENDKIM_PORT}"
12 14
 
15
+rm -f /var/run/rsyslogd.pid
13 16
 service rsyslog start &&
14 17
 service postfix start &&
15 18
 

+ 0
- 1
postfixadmin/Dockerfile View File

@@ -30,6 +30,5 @@ EXPOSE 80
30 30
 
31 31
 COPY ./postfixadmin-3.0/ /var/www/html/
32 32
 RUN chmod -R 777 /var/www/html/templates_c
33
-#VOLUME ["/var/www/html"]
34 33
 
35 34
 CMD ["/run.sh"]

+ 42
- 0
postgresql/docker-entrypoint-initdb.d/01_init.sql View File

@@ -816,6 +816,48 @@ ALTER TABLE ONLY recipient_bcc
816 816
 
817 817
 
818 818
 
819
+CREATE TABLE dkim_external_ignore_list (
820
+    host text NOT NULL
821
+);
822
+
823
+
824
+ALTER TABLE dkim_external_ignore_list OWNER TO dev;
825
+
826
+--
827
+-- Name: dkim_internal_hosts; Type: TABLE; Schema: public; Owner: dev; Tablespace: 
828
+--
829
+
830
+CREATE TABLE dkim_internal_hosts (
831
+    host text NOT NULL
832
+);
833
+
834
+
835
+ALTER TABLE dkim_internal_hosts OWNER TO dev;
836
+
837
+--
838
+-- Name: dkim_key_table; Type: TABLE; Schema: public; Owner: dev; Tablespace: 
839
+--
840
+
841
+CREATE TABLE dkim_key_table (
842
+    name text NOT NULL,
843
+    key_path text NOT NULL
844
+);
845
+
846
+
847
+ALTER TABLE dkim_key_table OWNER TO dev;
848
+
849
+--
850
+-- Name: dkim_signing_table; Type: TABLE; Schema: public; Owner: dev; Tablespace: 
851
+--
852
+
853
+CREATE TABLE dkim_signing_table (
854
+    email text NOT NULL,
855
+    name text NOT NULL
856
+);
857
+
858
+ALTER TABLE ONLY dkim_signing_table
859
+    ADD CONSTRAINT dkim_signing_table_name_fkey FOREIGN KEY (name) REFERENCES dkim_key_table(name) ON UPDATE CASCADE ON DELETE CASCADE;
860
+
819 861
 
820 862
 --
821 863
 -- PostgreSQL database dump complete

Loading…
Cancel
Save