243 Commits

Author SHA1 Message Date
0a6d74c168 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!68
2025-02-26 13:10:24 +00:00
9edc9a8484 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "6f8dfcba0b25313b59bc17b4c99d674fcedd207a)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "224ef831571458ad433a0143eec00df0f7e8b409)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 224ef831571458ad433a0143eec00df0f7e8b409

MR !68
2025-02-26 13:09:16 +00:00
b776eff79d Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!66
2024-08-19 07:26:11 +00:00
80f22a54a3 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "58ffcabbfb503af3e57d9cb3ab43931b23dc4cd8)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "6f8dfcba0b25313b59bc17b4c99d674fcedd207a)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 6f8dfcba0b25313b59bc17b4c99d674fcedd207a

MR !66
2024-08-19 07:25:05 +00:00
Jon
7567975978 fix: update amivis and dkim versions
!1
2024-08-01 16:48:14 +09:30
Jon
dc5d886071 fix: use current postfix version
!1
2024-08-01 16:36:15 +09:30
Jon
3ed883cd61 chore: update image labels
!1
2024-08-01 16:18:33 +09:30
6752d9d50c Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!65
2024-08-01 06:09:48 +00:00
944a4440f7 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "673441f83a7d943434252ee23899e3572cdfb141)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "58ffcabbfb503af3e57d9cb3ab43931b23dc4cd8)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 58ffcabbfb503af3e57d9cb3ab43931b23dc4cd8

MR !65
2024-08-01 06:08:42 +00:00
8b2ee6a36c Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!64
2024-06-30 18:05:02 +00:00
2f915170de chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "92c4b16a14524e7b5b18171d4e21b72676c36fbf)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "8735f623dc5e1d9c9e46e50db03b4c41cb3d1efd)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 8735f623dc5e1d9c9e46e50db03b4c41cb3d1efd

MR !64
2024-06-30 18:03:53 +00:00
fc9b809c8c Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!63
2024-06-30 17:49:36 +00:00
628c69d038 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "f5a82d3604faca56756eec91acee28ff89defd1d)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "92c4b16a14524e7b5b18171d4e21b72676c36fbf)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 92c4b16a14524e7b5b18171d4e21b72676c36fbf

MR !63
2024-06-30 17:48:28 +00:00
98e3eaebaa Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!62
2024-06-30 17:47:28 +00:00
c230500308 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "a24f352ca3d82b8d0f02f5db20173fe2c3f71a4a)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "673441f83a7d943434252ee23899e3572cdfb141)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 673441f83a7d943434252ee23899e3572cdfb141

MR !62
2024-06-30 17:46:23 +00:00
bfe18ba5b1 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!61
2024-03-16 11:36:06 +00:00
f3ad9e1fd5 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "9afa68d1f3849e491fa8ca034749388808531b74)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "a24f352ca3d82b8d0f02f5db20173fe2c3f71a4a)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out a24f352ca3d82b8d0f02f5db20173fe2c3f71a4a

MR !61
2024-03-16 11:35:08 +00:00
ffd904fefb Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!60
2024-03-14 12:47:45 +00:00
581fd0ad94 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "41eeb7badd582175b371cd4a5b2192decbcb0210)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "9afa68d1f3849e491fa8ca034749388808531b74)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 9afa68d1f3849e491fa8ca034749388808531b74

MR !60
2024-03-14 12:46:40 +00:00
cb39d3d9e5 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!59
2024-02-25 09:33:06 +00:00
baf78170a3 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "6f80ea3af7fdc64e9998820a8800c288d7facbc6)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "41eeb7badd582175b371cd4a5b2192decbcb0210)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 41eeb7badd582175b371cd4a5b2192decbcb0210

MR !59
2024-02-25 09:32:09 +00:00
d7ddb6c9a3 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!58
2024-02-24 06:31:42 +00:00
a41700657b chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "4f65bc1367585146490637dfc7c57c987216e652)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "6f80ea3af7fdc64e9998820a8800c288d7facbc6)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 6f80ea3af7fdc64e9998820a8800c288d7facbc6

MR !58
2024-02-24 06:30:45 +00:00
5bfe149a8e Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!57
2024-02-23 09:08:19 +00:00
22f20cfb2f chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "8094694d43449f1d17b763e215485b2950e6b6b4)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "4f65bc1367585146490637dfc7c57c987216e652)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 4f65bc1367585146490637dfc7c57c987216e652

MR !57
2024-02-23 09:07:18 +00:00
f370e8d228 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!56
2024-02-23 02:52:47 +00:00
cceae85cf5 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "34c81c98494b5ce448f4da4e645952439c897906)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "8094694d43449f1d17b763e215485b2950e6b6b4)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 8094694d43449f1d17b763e215485b2950e6b6b4

MR !56
2024-02-23 02:51:42 +00:00
213b93b90f Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!55
2024-02-22 09:54:54 +00:00
7da46191a2 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "c7c966bbee4fefc044d4c58e60dd5f10ec63862b)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "34c81c98494b5ce448f4da4e645952439c897906)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 34c81c98494b5ce448f4da4e645952439c897906

MR !55
2024-02-22 09:53:39 +00:00
ea2363fdfe chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "74ac15925c75ba0178ae21932b02b6a90a9169c3)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "c7c966bbee4fefc044d4c58e60dd5f10ec63862b)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out c7c966bbee4fefc044d4c58e60dd5f10ec63862b

MR !55
2024-02-22 08:34:55 +00:00
ee82136675 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!54
2024-02-22 08:05:47 +00:00
00ab03db9e chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "e046f9ea49a617ce91ff2eda53b897f798dfb810)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "74ac15925c75ba0178ae21932b02b6a90a9169c3)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 74ac15925c75ba0178ae21932b02b6a90a9169c3

MR !54
2024-02-22 08:04:40 +00:00
5bfab98805 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!53
2024-02-22 06:31:57 +00:00
b5428274cd chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "d29064f1490073599518b629c7bf6585b48c8736)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "e046f9ea49a617ce91ff2eda53b897f798dfb810)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out e046f9ea49a617ce91ff2eda53b897f798dfb810

MR !53
2024-02-22 06:30:56 +00:00
f221e59ec6 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!52
2024-02-17 04:50:58 +00:00
532104c39b chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "02252db664a428e83fb9ae24662b56b53e615989)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "d29064f1490073599518b629c7bf6585b48c8736)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out d29064f1490073599518b629c7bf6585b48c8736

MR !52
2024-02-17 04:49:58 +00:00
623de8f394 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!51
2024-02-15 13:49:43 +00:00
a86dc97f38 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "bea398200f838736c6111a399478667df37435cb)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "02252db664a428e83fb9ae24662b56b53e615989)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 02252db664a428e83fb9ae24662b56b53e615989

MR !51
2024-02-15 13:48:40 +00:00
b28e751888 Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!50
2024-02-08 05:33:26 +00:00
e224ea1389 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "2bcc17652babd4027e7245c6367841e2580ec317)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "f5a82d3604faca56756eec91acee28ff89defd1d)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out f5a82d3604faca56756eec91acee28ff89defd1d

MR !50
2024-02-08 05:32:26 +00:00
8f887e0d51 Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!49
2024-02-02 13:12:56 +00:00
d844bc463f chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "e1a7f60401847a60a3302cd7770b03a72d0439c2)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "bea398200f838736c6111a399478667df37435cb)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out bea398200f838736c6111a399478667df37435cb

MR !49
2024-02-02 13:11:56 +00:00
851be7b2c5 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "f5cbde1f1de7cac9094df8898e3d09eb01d9cd4c)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "2bcc17652babd4027e7245c6367841e2580ec317)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 2bcc17652babd4027e7245c6367841e2580ec317

MR !49
2024-02-02 13:11:44 +00:00
ecf0c6f713 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!48
2024-02-02 12:34:57 +00:00
f52a33588c chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "9b5737135809465566876123da2f36683f3a6f57)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "e1a7f60401847a60a3302cd7770b03a72d0439c2)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out e1a7f60401847a60a3302cd7770b03a72d0439c2

MR !48
2024-02-02 12:33:56 +00:00
cd8331491f Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!47
2024-02-02 12:25:56 +00:00
8b21355cc9 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "db172f4594391a18883b24768aae531c8245fce0)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "f5cbde1f1de7cac9094df8898e3d09eb01d9cd4c)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out f5cbde1f1de7cac9094df8898e3d09eb01d9cd4c

MR !47
2024-02-02 12:24:56 +00:00
336f379caf Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!46
2024-02-02 08:27:17 +00:00
f9a76f4750 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "fc9f37617cd26b3e44326161ba10183eb13444dd)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "9b5737135809465566876123da2f36683f3a6f57)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 9b5737135809465566876123da2f36683f3a6f57

MR !46
2024-02-02 08:26:19 +00:00
ed44b3f8d8 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!45
2024-02-02 08:21:25 +00:00
f90b169edb chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "bd22ff566c20e4b80b210d4598978fcd11920cfa)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "fc9f37617cd26b3e44326161ba10183eb13444dd)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out fc9f37617cd26b3e44326161ba10183eb13444dd

MR !45
2024-02-02 08:20:23 +00:00
030eaf66e5 Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!44
2024-02-02 08:11:19 +00:00
255a172669 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "e7af7b52366c78a8b1a61d0c613bf73b83d31551)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "db172f4594391a18883b24768aae531c8245fce0)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out db172f4594391a18883b24768aae531c8245fce0

MR !44
2024-02-02 08:10:21 +00:00
d1a8221525 Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!43
2024-02-02 07:42:42 +00:00
51a6c3da27 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "1c1d75d04fbda95badb9996889a64f4b0638640a)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "e7af7b52366c78a8b1a61d0c613bf73b83d31551)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out e7af7b52366c78a8b1a61d0c613bf73b83d31551

MR !43
2024-02-02 07:41:44 +00:00
6a0c8bf909 Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!42
2024-02-02 07:33:22 +00:00
bc7efc671f chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "59b16501a6b6af046492174c24e1acbe7d971783)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "1c1d75d04fbda95badb9996889a64f4b0638640a)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 1c1d75d04fbda95badb9996889a64f4b0638640a

MR !42
2024-02-02 07:32:27 +00:00
761a55b5cd Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!41
2023-11-19 14:14:06 +00:00
4e7236c22d chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "563b68153ef18c7fc43a8171f89f6ef95fcd047c)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "59b16501a6b6af046492174c24e1acbe7d971783)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 59b16501a6b6af046492174c24e1acbe7d971783

MR !41
2023-11-19 14:13:07 +00:00
5a59db1baa Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!40
2023-11-18 06:46:16 +00:00
b192a78d72 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "67199ccc55698a9782aa2e30481715b75bfac7f5)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "bd22ff566c20e4b80b210d4598978fcd11920cfa)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out bd22ff566c20e4b80b210d4598978fcd11920cfa

MR !40
2023-11-18 06:45:20 +00:00
15f1a9d785 Merge branch 'automated-tasks' into 'development'
chore(website-template): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!39
2023-11-16 07:34:48 +00:00
6d63ad46c7 chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "992b54805b8b6c78a3d2a5ea7de71c7be2b070c8)",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "563b68153ef18c7fc43a8171f89f6ef95fcd047c)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 563b68153ef18c7fc43a8171f89f6ef95fcd047c

MR !39
2023-11-16 07:28:50 +00:00
9da1a997a8 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!38
2023-11-12 05:07:18 +00:00
5386e2c89a chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "265bafde54d0fb5a59cc803b7780e790f585e2af)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "67199ccc55698a9782aa2e30481715b75bfac7f5)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 67199ccc55698a9782aa2e30481715b75bfac7f5

MR !38
2023-11-12 05:06:23 +00:00
d9340483e1 build(version): bump version 0.1.0rc3 → 0.1.0 2023-11-06 08:34:14 +00:00
7ac72772aa Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!37
2023-11-06 08:18:43 +00:00
e65722e443 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "5036fc1cccb790d1498d3ca16d0996fcb13ded11)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "265bafde54d0fb5a59cc803b7780e790f585e2af)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 265bafde54d0fb5a59cc803b7780e790f585e2af

MR !37
2023-11-06 08:17:40 +00:00
b0933d6977 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "52f4ebda54f5932e66cf37ac8783b0b49fcf01fa)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "5036fc1cccb790d1498d3ca16d0996fcb13ded11)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 5036fc1cccb790d1498d3ca16d0996fcb13ded11

MR !37
2023-11-06 08:14:28 +00:00
6c1ca76b54 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!36
2023-10-28 05:14:07 +00:00
cc7869305c chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "a5a9fa44374107657b2587ce52607d96a825be56)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "52f4ebda54f5932e66cf37ac8783b0b49fcf01fa)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 52f4ebda54f5932e66cf37ac8783b0b49fcf01fa

MR !36
2023-10-28 05:13:14 +00:00
766a5287b8 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!35
2023-09-02 06:06:01 +00:00
9301c5213d chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "975de7aca210667d1e93d02a4036ca4ae70808ff)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "a5a9fa44374107657b2587ce52607d96a825be56)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out a5a9fa44374107657b2587ce52607d96a825be56

MR !35
2023-09-02 06:05:06 +00:00
1a827e2e64 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!34
2023-07-04 02:06:39 +00:00
627940ce21 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "ebc3d93304b2cec409dab06205bb5eee372ed597)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "975de7aca210667d1e93d02a4036ca4ae70808ff)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 975de7aca210667d1e93d02a4036ca4ae70808ff

MR !34
2023-07-04 02:05:43 +00:00
c267836c2e Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!33
2023-06-28 04:34:40 +00:00
c848780231 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "6a3ef23c6191883e5692e5e123e4bac05b49b7c5)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "ebc3d93304b2cec409dab06205bb5eee372ed597)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out ebc3d93304b2cec409dab06205bb5eee372ed597

MR !33
2023-06-28 04:33:46 +00:00
f7b9e5a331 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!32
2023-06-28 03:54:45 +00:00
d9a926e2e4 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "fd570fa3df559899fb3706c1ee46f29c33fd6520)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "6a3ef23c6191883e5692e5e123e4bac05b49b7c5)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 6a3ef23c6191883e5692e5e123e4bac05b49b7c5

MR !32
2023-06-28 03:53:50 +00:00
d870d23613 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!31
2023-06-28 03:17:13 +00:00
88c6d6c9bc chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "2492fdb17f3f1cc7db8e8c690f10fed4194aa6c4)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "fd570fa3df559899fb3706c1ee46f29c33fd6520)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out fd570fa3df559899fb3706c1ee46f29c33fd6520

MR !31
2023-06-28 03:16:12 +00:00
66f1043d68 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!30
2023-06-28 02:11:00 +00:00
aba5245cc1 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "cf33e1faf185e45bc5f432a9b6768f2f7f89b945)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "de2ec6a7366e1f5ccacf665a38773b11ebb6d969)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 2492fdb17f3f1cc7db8e8c690f10fed4194aa6c4

MR !30
2023-06-28 02:10:04 +00:00
05945af63e Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!29
2023-06-28 01:52:22 +00:00
fab6d84cd9 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "d91605e3771781ad1d6ea88ec799d9261e1641af)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "cf33e1faf185e45bc5f432a9b6768f2f7f89b945)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out cf33e1faf185e45bc5f432a9b6768f2f7f89b945

MR !29
2023-06-28 01:51:28 +00:00
340109de1b Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!28
2023-06-15 04:26:58 +00:00
0b46390688 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "1a03324ecc9c7099a3f398170683e1a4cc1d882b)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "d91605e3771781ad1d6ea88ec799d9261e1641af)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out d91605e3771781ad1d6ea88ec799d9261e1641af

MR !28
2023-06-15 04:26:05 +00:00
08406c33ab Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!26
2023-06-08 05:44:13 +00:00
5d1fd43839 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "869faedf5712227a77ca3ed537e689ab12382323)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "1a03324ecc9c7099a3f398170683e1a4cc1d882b)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 1a03324ecc9c7099a3f398170683e1a4cc1d882b

MR !26
2023-06-08 05:43:18 +00:00
5729d5a48d Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!25
2023-06-08 05:42:13 +00:00
582f361e2d chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "606b19151ecc53b8841f638a30750a36ff655f47)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "869faedf5712227a77ca3ed537e689ab12382323)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 869faedf5712227a77ca3ed537e689ab12382323

MR !25
2023-06-08 05:41:17 +00:00
1266420d02 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!24
2023-06-08 05:08:17 +00:00
0275e7e001 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "ae8b936c5d6df2d2bda22d89b0a01ee6a77bef16)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "606b19151ecc53b8841f638a30750a36ff655f47)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 606b19151ecc53b8841f638a30750a36ff655f47

MR !24
2023-06-08 05:07:18 +00:00
7e7fb7e4c2 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "755fcac06e9f265789b02a88eb90df35ab1dbf07)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "ae8b936c5d6df2d2bda22d89b0a01ee6a77bef16)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out ae8b936c5d6df2d2bda22d89b0a01ee6a77bef16

MR !24
2023-06-08 03:48:36 +00:00
67ce4e3b4d Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!23
2023-06-07 04:14:18 +00:00
6aa3fbfaeb chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "928d625469425c23a1ef15e0e9c06bd00c12f8fe)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "755fcac06e9f265789b02a88eb90df35ab1dbf07)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 755fcac06e9f265789b02a88eb90df35ab1dbf07

MR !23
2023-06-07 04:13:24 +00:00
1166cd3baa Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!22
2023-06-05 19:12:24 +00:00
df3d8d782a chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "e57f7f09085121373ce5ca6a4eb356cb89e53709)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "928d625469425c23a1ef15e0e9c06bd00c12f8fe)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 928d625469425c23a1ef15e0e9c06bd00c12f8fe

MR !22
2023-06-05 19:11:29 +00:00
732bd5b472 Merge branch 'automated-tasks' into 'development'
chore(gitlab-ci): Automated update of git sub-module

See merge request nofusscomputing/projects/docker-mail!21
2023-06-05 19:02:25 +00:00
11c96c793f chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "1e21ff27098444206cbb9309ef95fc64d730f26d)",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "e57f7f09085121373ce5ca6a4eb356cb89e53709)",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out e57f7f09085121373ce5ca6a4eb356cb89e53709

MR !21
2023-06-05 19:01:21 +00:00
f7a54b8904 Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!20
2023-06-05 02:37:13 +00:00
ad6f039626 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "6201afaf7e82411af1d0d173d54dffe1d404544a",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "1e21ff27098444206cbb9309ef95fc64d730f26d",
    "remote_name": "",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 1e21ff27098444206cbb9309ef95fc64d730f26d

MR !20
2023-06-05 02:36:19 +00:00
b0b4b8c420 Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!19
2023-06-04 01:07:48 +00:00
6e7e64a0ba chore(git): updated submodule website-template
Automation Data:
{
    "branch": "development",
    "current_commit": "4ea7ab29bed3053eaa7ecb1928babb9f123b0d3a",
    "name": "website-template",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/website-template",
    "remote_head": "992b54805b8b6c78a3d2a5ea7de71c7be2b070c8",
    "remote_name": "",
    "url": "https://gitlab.com/nofusscomputing/infrastructure/website-template.git"
}

Changes: Submodule path website-template: checked out 992b54805b8b6c78a3d2a5ea7de71c7be2b070c8

MR !19
2023-06-04 01:06:56 +00:00
2adfd1540a Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!18
2023-06-03 06:19:43 +00:00
ae5f551031 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "6a2266177bd6393384fb233933c898e3fbe5d86b",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "6201afaf7e82411af1d0d173d54dffe1d404544a",
    "remote_name": "",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 6201afaf7e82411af1d0d173d54dffe1d404544a

MR !18
2023-06-03 06:18:52 +00:00
49ec4656d4 Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!17
2023-06-01 05:29:25 +00:00
1449576420 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "b3c84836771453744fa4bac9d739199fe0ec1160",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "6a2266177bd6393384fb233933c898e3fbe5d86b",
    "remote_name": "",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out 6a2266177bd6393384fb233933c898e3fbe5d86b

MR !17
2023-06-01 05:21:45 +00:00
5d74c8bfab Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!16
2023-06-01 03:10:23 +00:00
482636229f chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "e9713b31c8e5b30c27331eea23a690194f63394f",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "b3c84836771453744fa4bac9d739199fe0ec1160",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out b3c84836771453744fa4bac9d739199fe0ec1160

MR !16
2023-06-01 03:02:35 +00:00
6a77453eb5 Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!15
2023-05-31 05:26:45 +00:00
3b40054683 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "f375a1298ff9d7eeb84eb415b7091ecc67385f6e",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/_automation_/gitlab-ci",
    "remote_head": "e9713b31c8e5b30c27331eea23a690194f63394f",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out e9713b31c8e5b30c27331eea23a690194f63394f

MR !15
2023-05-31 05:19:07 +00:00
a7f7db46c6 Merge branch 'automated-tasks' into 'development'
chore(git): Automated update of git sub-modules

See merge request nofusscomputing/projects/docker-mail!14
2023-05-29 06:06:01 +00:00
3ee846b3b6 chore(git): updated submodule gitlab-ci
Automation Data:
{
    "branch": "development",
    "current_commit": "3383d5a086915a8865b4f177bf44dc2c9a2917de",
    "name": "gitlab-ci",
    "path": "/builds/nofusscomputing/projects/docker-mail/gitlab-ci",
    "remote_head": "f375a1298ff9d7eeb84eb415b7091ecc67385f6e",
    "remote_name": "origin",
    "url": "https://gitlab.com/nofusscomputing/projects/gitlab-ci.git"
}

Changes: Submodule path gitlab-ci: checked out f375a1298ff9d7eeb84eb415b7091ecc67385f6e

MR !14
2023-05-29 05:54:55 +00:00
Jon
6d453e5c94 Merge branch 'release-fixes' into 'development'
fix(ci): added automation config

See merge request nofusscomputing/projects/docker-mail!13
2023-05-29 05:54:03 +00:00
Jon
cab22cebfa fix(ci): added automation config
!13
2023-05-29 15:16:06 +09:30
Jon
00ffad5939 Merge branch 'release-fixes' into 'development'
chore(git): updated submodules

Closes #5

See merge request nofusscomputing/projects/docker-mail!12
2023-05-29 05:28:52 +00:00
Jon
b1b5fc2060 ci(automagic): use template automagic for jobs
!12 fixes #5
2023-05-29 14:50:31 +09:30
Jon
779fcbddf4 chore(gitlab-ci): update to to test auto-update
!12
2023-05-29 14:45:02 +09:30
Jon
9ee42f14fb chore(git): updated submodules
[gitlab-ci, website-template]

MR !12
2023-05-29 14:45:02 +09:30
995ce07c8c build(version): bump version 0.1.0rc2 → 0.1.0rc3 2023-05-24 07:01:14 +00:00
Jon
9324acbe24 Merge branch 'release-fixes' into 'development'
revert: "build(version): bump version 0.1.0rc2 → 0.1.0rc3"

See merge request nofusscomputing/projects/docker-mail!11
2023-05-24 05:03:30 +00:00
Jon
6fb1c106b2 revert: "build(version): bump version 0.1.0rc2 → 0.1.0rc3"
This reverts commit dae6bd4649.
git tag will also be deleted. this revert is due to a failed
release job which has already been fixed

!11
2023-05-24 14:22:57 +09:30
dae6bd4649 build(version): bump version 0.1.0rc2 → 0.1.0rc3 2023-05-23 04:00:52 +00:00
Jon
c8b47d69a0 Merge branch 'arm64' into 'development'
feat(build): support arm64

See merge request nofusscomputing/projects/docker-mail!10
2023-05-23 03:32:27 +00:00
Jon
80ccaaa6e7 feat(ci): trigger downstream website to build
!10 nofusscomputing/projects/gitlab-ci!27
2023-05-23 12:50:56 +09:30
Jon
e872534aec fix(docs): use docs path instead of pages
!10 nofusscomputing/projects/gitlab-ci!26
2023-05-23 12:24:38 +09:30
Jon
c2dfe0ba29 chore(website_template): update to current HEAD
!10 nofusscomputing/infrastructure/website-template!7
2023-05-23 12:20:57 +09:30
Jon
6d4fb11c43 chore(gitlab-ci): update to current HEAD
!10 nofusscomputing/projects/gitlab-ci!26
2023-05-23 12:20:05 +09:30
Jon
9acc37ec4f fix(mkdocs): use correct edit path
!10
2023-05-23 12:17:06 +09:30
Jon
c290206392 fix(website): correct repo name
!10
2023-05-22 18:00:05 +09:30
Jon
bfcb346924 fix(docs): add base files for navigation
!10
2023-05-22 17:55:26 +09:30
Jon
f22931e6f0 docs(build): added navigation for project
!10
2023-05-22 16:55:35 +09:30
Jon
235aa8d7cc fix(ci): must have index.md file for linting to start
!10
2023-05-22 16:50:17 +09:30
Jon
6fc3897205 chore(gitlab-ci): updated to current HEAD
!10
2023-05-22 16:45:05 +09:30
Jon
6409627dae feat(docs): add website static page building
!10 nofusscomputing/projects/gitlab-ci!25
2023-05-22 16:42:43 +09:30
Jon
88689c87ac fix(build): ensure dovecot downloaded and installed
!10
2023-05-21 13:40:46 +09:30
Jon
9a0df52cd9 fix(build): fix build logic
!10
2023-05-21 13:20:46 +09:30
Jon
4c106025d5 refactor(image): reduce the number of layers
!10
2023-05-21 12:46:11 +09:30
Jon
aa461590a8 ci(gitlab): update to latest HEAD
!10
2023-05-21 12:22:13 +09:30
Jon
808ca861ed ci(compile): add dovecot compile job
!10
2023-05-21 12:21:30 +09:30
Jon
7261769a95 feat(build): dockerfile for compiling dovecot
!10
2023-05-21 12:06:39 +09:30
Jon
1c6b3a3617 refactor(dockerfile): use global var
!10
2023-05-21 11:59:46 +09:30
Jon
88bfc64940 refactor(dockerfile): use args for apt software versions
!10
2023-05-21 11:58:18 +09:30
Jon
a866bd82b8 feat(arm64): build arm64 image using compiled bins
both dovecot and pigeonhole is compiled in ci pipeline

!10
2023-05-21 11:49:50 +09:30
Jon
676546f71c feat(amd64): use dovecot apt repo to install
this change is in preperation for supporting arm64, which will
use bins that are compiled as part of CI/CD

!10
2023-05-21 11:47:06 +09:30
Jon
2b497fd2cf feat(build): specify architecture
!10
2023-05-21 11:38:15 +09:30
Jon
de72f0e74d chore(ci): clean commented code
!10
2023-05-21 11:33:42 +09:30
Jon
300961aaff refactor(ci): update template path
!10
2023-05-21 11:33:12 +09:30
Jon
c30efc8bd6 fix(publish): must specify docker publish details
!3
2023-05-16 15:09:21 +09:30
Jon
29c6d6f730 fix: lock debian base image
!3
2023-05-16 14:58:47 +09:30
Jon
840e2ad5ae fix(versions): update postfix
!3
2023-05-16 14:58:38 +09:30
Jon
d6b2b5b40e fix(repo): lock dovecot repo to specified version
!3
2023-05-16 14:42:06 +09:30
Jon
64093a6aad build: 'v' no longer a suffix on version/tag
!3
2023-05-16 14:34:45 +09:30
Jon
e2e704c545 ci(gitlab-ci): use dev branch and type docker container
!3
2023-05-16 14:31:43 +09:30
42cf518c80 build(version): bump version 0.1.0rc1 → 0.1.0rc2 2022-02-19 05:35:03 +00:00
Jon
2fdd4a8411 Merge branch '1-tracing-features' into 'development'
feat: ensure tracing is possible and lock down ssl ciphers

See merge request nofusscomputing/projects/docker-mail!9
2022-02-19 05:25:24 +00:00
e8eb6f906f fix(backup.sh): exclude unix sockets from backup
MR !9
2022-02-19 12:52:23 +09:30
acccf24774 fix(backup): ssl dir renamed to certs
MR !9
2022-02-19 12:51:51 +09:30
22a987a513 feat(docker_container): Ensure amavis data is a volume
The amavis data is required to be kept between containers.
set '/var/lib/amavis' as a docker volume.

MR !9
2022-02-19 12:32:50 +09:30
9f7ccabfa5 feat(amavis): don't allow user to send banned email
This configuration blocks the user from sending an email that w
would otherwise be blocked. in this instance the user is notified.

MR !9
2022-02-19 12:23:20 +09:30
c3739c4f19 feat(amavis): Don't allow user to send spam/virus
With this configuration if the user attempts to send spam or a
virus, the message will be quarantined and the user will be
notified of the issue.

MR !9
2022-02-19 12:16:20 +09:30
f6b7bae3eb feat(amavis): move policy bank to own config file
MR !9
2022-02-19 12:14:58 +09:30
7ec9750216 feat(amavis): Add received header to message
For tracing purposes, added the amavis received header to the message.

MR !9
2022-02-19 11:47:04 +09:30
93378dee86 fix(backup): /var/spool/postfix needs to be backed up
As this folder contains the mta folders and queue. It must be
backed up as mail could be lost that is awaiting delivery.

MR !9
2022-02-19 11:29:44 +09:30
43f6a356bd fix(sa-learn): amavis can't do bayes check if not mask 777
Service amavis even though part of group vmail who has mark 770
on '/var/spool/spamassassin', can't write lockfile to do a bayes
check.

Set '/var/spool/spamassassin' mask to be `777` with owner
`debian-spamd:vmail` recursive. so that amavis bayes check works.

MR !9
2022-02-19 11:21:04 +09:30
e9fb4123e9 fix(dovecot): sieve extensions debug error.
Sieve extensions set to:
    -vacation
        Remove vaction extension as this has the potential to leak to
        external users. this could be re-enabled if it could be blocked
        from leaving the server and only being available within the
        same domain
    -enotify
        Remove enotify extension as this has the potential to leak to
        external users. this could be re-enabled if it could be blocked
        from leaving the server and only being available within the
        same domain
    -editheader
        editheader disabled, as the user should not be able to edit
        message headers as this could remove message validity.
    imap4flags
        Enable imap4flags so that the user can flag messages as they
        desire.

MR !9
2022-02-19 11:02:36 +09:30
2a222df778 feat(ssl_tls): updated dovecot and postfix accepted ciphers
used https://ssl-config.mozilla.org/ to generate recommended
ciphers config for dovecot and postfix.

postfix set to use medium ciphers due to possibility of smtp
servers not being updated to latest.

MR !9
2022-02-19 10:41:53 +09:30
3741b92606 ci(docker_hub): fix rc release must be tagged 'dev'
A release candidate is not a stable release and therefore not
suitable for the 'latest' tag.
Tag a release candidate as 'dev'.

MR !9
2022-02-19 10:26:52 +09:30
396cb15add feat(dovecot): Disable SSL/TLS protocol logging
Disabled due to no actual output being useful. if required by an
end user, they can enable.

MR !9
2022-02-19 10:16:40 +09:30
e9718c97a6 fix(cron): sa-learn must run as spamd user
MR !9
2022-02-19 10:12:26 +09:30
967fd04fe7 fix(bayes_learn): ensure journal is synced after scan
MR !9
2022-02-19 10:11:31 +09:30
fbdf6efab7 fix(file_permission): set spamd to own spamassassin folder
Folder belongs to spamd user. this was required so that amavis spam bayes learning could read the files.

MR !9
2022-02-19 10:10:46 +09:30
7f7a259a82 fix(local_group): amavis and opendkim added to vmail
users require access to vmail group data.

MR !9
2022-02-19 10:07:41 +09:30
24f10af6d6 feat(postfix): prevent anonymous users on submission
Users are required to login to send an E-Mail. Prevented
anonymous user access

MR !9
2022-02-19 09:00:10 +09:30
274ade2d84 feat(dovecot): log SSL/TLS porotocol errors
Visibility is required to view and fault find SSL/TLS errors.

MR !9
2022-02-19 08:50:01 +09:30
478336ca68 feat(dovecot): log failed authentication attempts
Visibility is required for failed authentication attempts. Provides
an ability to use fail2ban and to fault find an end user auth issue.

MR !9
2022-02-19 08:49:06 +09:30
Jon
1581d45d89 Merge branch 'fix-dockerfile-syntax-error' into 'development'
fix(build): corrected syntax error in dockerfile

See merge request nofusscomputing/projects/docker-mail!8
2022-02-18 05:30:21 +00:00
Jon
db03fc2efa fix(build): corrected syntax error in dockerfile
MR !8
2022-02-18 05:25:59 +00:00
Jon
08d9a9efc1 Merge branch '1-lock-down' into 'development'
fix: lock down access to mail server

See merge request nofusscomputing/projects/docker-mail!7
2022-02-18 05:03:03 +00:00
3bca896c29 ci: Add dockerhub url to environment
MR !7
2022-02-18 14:25:56 +09:30
4554e9e66d feat(postfix): specify my_networks as localhost ONLY
mynetworks set to only be localhost as accepted/trusted.

MR !7
2022-02-18 14:16:28 +09:30
5f7095f274 fix(postfix): only use the servers order of tls ciphers
Don't allow a client to specify which TLS ciphers to use. They may
pick a less secure one.
MR !7
2022-02-18 14:08:38 +09:30
41e03936cc feat(postfix): no compression or renegotiation
Client should not attempt to rengotiation of TLS.
MAN states that compression during tls not nessacarly benificial.

MR !7
2022-02-18 13:49:39 +09:30
3120ecf2f5 fix(logrotate): ensure log rotate runs
Deleted the standard logrotate job from cron.daily and created
a new cron job to force run logrotate at `00:01`

MR !7
2022-02-18 13:46:27 +09:30
6625d72a48 fix(logrotate): don't specify log extension
MR !7
2022-02-18 13:42:00 +09:30
edadc4779e fix(dovecot): ensure quota syntax is correct
removed extra brace left from previous quota fix commit.

MR !7
2022-02-18 13:15:35 +09:30
f636c45681 test: add netstat to docker container for debugging
MR !7
2022-02-18 13:11:20 +09:30
b3d80b41ca fix(mailbox_quota): ensure user quota visible.
Mail quota was not visible in Thunderbird. bug was havinf two
`quota =` rules. adjusted to `quota2=` for shared quota to diplay,
however, had no effect in display shared quota.

Disabled shared in the meantime.

MR !7
2022-02-18 13:11:20 +09:30
4c37932bf7 feat(submission): check user quota recipient restriction
Check the users quota before accepting the mail for delivery.
If the user belongs to the server, the user wont send the message,
nor save it for it only to be rejected at a later stage.

Current rules and order as follows:
    1. reject_non_fqdn_recipient
        Require recipient to be in FQDN format so the message can
        be routed.
    2. reject_unknown_recipient_domain
        Prevent mail from being sent to a random location that can't
        be found.
    3. check_policy_service,unix:private/quota
        If the mail is for a local user and their mailbox is full, reject
        the mail.
        This allows the sender not to recieve a bounce message for
        a message that wasn't actually sent.
    4. permit_sasl_authenticated
        A user of the mail server can send E-Mail to anyone as long as
        it passes the filters above.
    5. reject
        Reject any further mail, as they clearly are not a user of the
        mail server.

MR !7
2022-02-18 13:11:20 +09:30
f90daea454 feat(postfix): enforce only reaying mail for auth destination
Mail server should only relay mail for domains and users it hosts. default is to reject.

Rules and order as follows:
    1. reject_non_fqdn_recipient
        Require the recipient to be in FQDN format for relaying
        and routing reasons including locating user.
    2. permit_auth_destination
        Only accept mail to be routed if authorized.
    3. reject
        Don't accept any further mail for relaying.

MR !7
2022-02-18 13:11:20 +09:30
1b168f07d5 feat(postfix): enforce SMTPD recipient restrictions
Filter mail based on recipient restrictions. default is to filter then
reject the remaining.

This is a default rule and submission requires it's own rule specified.

rules and order as follows:
    1. permit_mynetworks
        Allow local mail host to send to whomever.
    2. reject_non_fqdn_recipient
        must use a FQDN so that the recipient can be identified.
    3. reject_unknown_recipient_domain
        Only accept mail for the domains we host.
    4. reject_unauth_destination
        reject mail for domains we don't host and before any policy
        checks are done. This prevents additional processes from
        spawning that would otherwise be unused.
    5. check_policy_service,unix:private/policyd-spf
        bounce the mail that fails spf check. likely to be a non-smtp
        server.
    6. check_policy_service unix:private/quota
        Check the recipients quota before delivery. if fails, bounce
        the mail.
    7. permit_auth_destination
        Only accept mail for domains we host. This rule placed after
        the bounces, so that filtering can be done first.
    8. reject
        Hard reject as the recipient doesn't belong to this host.

MR !7
2022-02-18 12:09:20 +09:30
58f42a7913 feat(postfix): Enforce SMTPD sender restrictions
Default is to accept all mail from sender after filtering.

smtpd_sender_restrictions rules and order are as follows:
    1. permit_mynetworks
        permit my network (localhost). Placed first as sometimes the
        sender will not be a FQDN sender. (i.e. cron)
    2. reject_non_fqdn_sender
        bounce mail where sender not in format of FQDN.
    3. reject
        Reject all remaining senders

MR !7
2022-02-18 11:58:59 +09:30
8c68163e9d feat(postfix): introduce smtpd helo restrictions
Default is permit.
Rule order as follows:
    1. permit_mynetworks
        My network (localhost) is exempt from restriction
    2. reject_invalid_helo_hostname
        Don't allow a connection from an invalid host.
    3. permit
        Allow the remaining hosts not booted.

MR !7
2022-02-18 11:45:43 +09:30
64258f2cd8 feat(postfix): enforce smtpd client restrictions
Default is reject.
order of rules as follows:
    1. reject_unauth_destination
        if postfix doesn't own the destination, bounce
    2. reject_unauth_pipelining
        not punch through commands.
    3. permit_mynetworks,
        set as rule 3 after the above rejects, so that if a rouge
        process on the server attempts to send, it is blocked.
    4. permit_auth_destination,
        Only accept a connection if the mailserver is the destination.
    5. reject
        Reject all remaining mail as it's clearly not for this host.

MR !7
2022-02-18 11:42:32 +09:30
8f938bd3ce feat(quota_status): use a unix socket for postfix
There is no requirement to open an additional port so that postfix can
can check the dovecot quota.

The socket is created in postfix's service directory with dovecot as the
owner and vmail as the group. setting it this way enables ls command to
display who the owner is for debugging purposes.
Postfix is a member of group vmail.

MR !7
2022-02-18 11:35:06 +09:30
18944ab54d build(version): bump version 0.1.0rc0 → 0.1.0rc1 2022-02-17 04:05:00 +00:00
Jon
91d65302cb Merge branch '1-message-authenticity' into 'development'
feat: add dkim, spf and dmarc validation

See merge request nofusscomputing/projects/docker-mail!6
2022-02-17 03:57:25 +00:00
Jon
bde6c054bb refactor: conf config values updated
To fail a message for spf policy, `fail` is the value not false.

MR !6
2022-02-17 03:52:02 +00:00
a71e7691a2 docs(spf): added basic spf guide
MR !6
2022-02-17 13:16:52 +09:30
ac706ed28b test: mail hostname set to non-existent domain
Don't use a legigimate domain. as this is for testing only, set to null

MR !6
2022-02-17 12:38:04 +09:30
92e4e4b2d5 feat(amavis): added DKIM verification
DKIM varification added to amavis milter.

MR !6
2022-02-17 12:37:12 +09:30
245aa724d2 feat(spf): conduct spf check for inbound smtp
NOTE: currently a failed SPF check does not block the message.
currently set to add header for testing purposes.

MR !6
2022-02-17 12:13:41 +09:30
Jon
fb909c009a Merge branch '1-docker-hub-dev-push' into 'development'
ci(docker_hub): fix dev push

See merge request nofusscomputing/projects/docker-mail!5
2022-02-16 06:07:32 +00:00
27ad07ead3 ci(docker_hub): fix dev push
Wasn't using the right cariable to check for dev push and the
commands were in the wrong order.

MR !5
2022-02-16 15:34:18 +09:30
Jon
e4e5078ba5 Merge branch '1-docker-hub-dev-push' into 'development'
fix: merge request to dev to create dev dockerhub tag

See merge request nofusscomputing/projects/docker-mail!4
2022-02-16 05:53:38 +00:00
be42d0ad3b docs: Addied initial documentation for dkim
Explains how to configure, generate keys and how to change keys.

MR !4
2022-02-16 15:14:54 +09:30
53e0cdd171 refactor(amavis): move dkim key config to own file
using a seperate file for the DKIM key configuration enables the user
to easily configure with their settings.

MR !4
2022-02-16 14:17:26 +09:30
f6cf41eaed test: adjust dkim key length
RFC6376  https://datatracker.ietf.org/doc/html/rfc6376#section-3.3.3
Specifies a key must be between 512 bits to 2048 bits.
However RSA Keys must be minimum of 1024 bits.

MR !4
2022-02-16 13:09:22 +09:30
aafd9acca9 ci(docker_hub): ensure build and DH push works on merge
fix the merge request dockerhub build.

var CI_COMMIT_BRANCH is not available in a merge request pipleine.
adjusted the pipline to run if development branch with a commit message
starting with Merge branch.
this enables usage of variable CI_COMMIT_BRANCH.

MR !4
2022-02-16 12:13:31 +09:30
Jon
bb44b67682 Merge branch '1-dkim-signing' into 'development'
feat: add dkim signing

See merge request nofusscomputing/projects/docker-mail!2
2022-02-16 02:23:29 +00:00
3e30b2780e refactor: ci code review suggestions
ensured the MR to dev would run for building the docker container.

MR !2
2022-02-16 11:46:54 +09:30
7f6de5ee2a build(dockerignore): added docker ignore file
Ignore all files and directories not applicable to the build.

MR !2
2022-02-16 11:34:29 +09:30
36808960ce ci(docker_hub): push a dev and latest tag to docker hub
When a git tag occurs, the image will also be tagged 'latest' and be
pushed to docker hub.

When a merge request occurs on the development branch, the image
will also be tagged 'dev' and be pushed to dockerhub.

MR !2
2022-02-16 11:20:57 +09:30
76c899e285 ci(docker_hub): removed duplicate rules section
There were two rules sections, combined both into a single section.

MR !2
2022-02-16 11:07:30 +09:30
b795fe5b67 feat(posfix): configure submission to dkim sign
All E-Mail submission (tcp/587) will be dkim signed if the domain is
matched in the amavis config '90-dkim'

MR !2
2022-02-16 10:42:31 +09:30
88ea42996d test(docker_compose): adjust ssl to be certs DIR
The directory was renamed from '/ssl' to '/certs'

MR !2
2022-02-16 10:37:41 +09:30
b9b2527a42 feat(amavis): Configured dkim
Default config is for domain example.org, which
is the testing domain.

User will be required to customise '90-dkim' with thier
own domain configuration, including generating dkim signing certificates.

MR !2
2022-02-16 10:36:47 +09:30
d8e51085a1 refactor(amavis): seperate config for socket
added the socket config to it's own file for clarity and to distinguish
a custom change from default.

MR !2
2022-02-16 10:34:23 +09:30
09aabeb68a refactor(ssl): Moved /ssl to /certs
As this directory not only contains the SSL Certs,
the dkim certs as well, renamed to make more sense.

MR !2
2022-02-16 10:29:21 +09:30
72ee475be7 feat(dkim): Added OpenDKIM to image
OpenDKIM is required to sign the emails.

MR !2
2022-02-16 10:26:50 +09:30
Jon
23830c8551 ci(docker_container): set to allow failure
The docker container does not need to be built as part
of the CI/CD process, as it's not used.

MR !2
2022-02-14 07:06:55 +00:00
5f8dea24d9 build(version): bump version 0.0.2 → 0.1.0rc0 2022-02-14 06:15:23 +00:00
Jon
7fc7c1ea13 Merge branch '1-initial-container' into 'development'
build: Initial mail server docker image

See merge request nofusscomputing/projects/docker-mail!1
2022-02-14 06:10:14 +00:00
Jon
99e61d0f11 ci(detached_pipeline): stop MR jobs
MR !1
2022-02-14 06:01:52 +00:00
6a61efe229 docs(README): updated readme
MR !1
2022-02-14 15:01:46 +09:30
f80c02ba15 ci(build): Added docker container build job
Builds the container and pushes to local gitlab registry

MR !1
2022-02-14 14:30:54 +09:30
b01bab033f refactor: readme linting errors
MR !1
2022-02-14 11:48:47 +09:30
b536a5e4b4 ci(gitlab-ci): updated to current dev commit
required that md lint works and that the correct nfc_bot details display.

MR !1
2022-02-14 11:41:01 +09:30
3a3f2098c7 feat(spam-learn): add duration to email
MR !1
2022-02-14 11:35:26 +09:30
1fe3598a54 fix(fetchmail): fix cron job so it runs
the command was set to echo instead of run.

MR !1
2022-02-14 10:15:08 +09:30
eb43442bb7 refactor: cron out to /dev/null
MR !1
2022-02-14 10:14:32 +09:30
38a252727d ci(markdown_lint): added linting rule file
MR !1
2022-02-14 10:03:41 +09:30
1d73c6eb8c feat(vscode): recommended extensions added
MR !1
2022-02-14 10:03:14 +09:30
3601d90aef fix(script): group-mailbox script must be executable
MR !1
2022-02-14 10:02:38 +09:30
90a21cf866 test(docker_compose): add compose file for testing
MR !1
2022-02-14 10:01:04 +09:30
d8ad253f98 feat(shared_mailbox): added helper script to share mailbox.
Shares all of the default folders.

MR !1
2022-02-14 09:56:42 +09:30
5ec218dad9 feat(sa-learn): Added cron script to learn spam/ham
Script checks user inbox and spam to learn what is/isn't spam.

MR !1
2022-02-14 09:55:19 +09:30
ace2493f66 feat(fetchmail): added fetchmail
cron job to run fetchmail script to get fetchmail config from roundcube
mysql database.

MR !1
2022-02-14 09:53:57 +09:30
a7c1ae052c feat(backup): Added backup cron and helper script.
Backs up all of the data to the /backup dir.

MR !1
2022-02-14 09:51:20 +09:30
4db1b34d38 feat(amavis): added amavis and configured spam
Spamassassin added as spam filter.

MR !1
2022-02-14 09:49:31 +09:30
df8997f07d feat: Added Dovecot and Postfix to container
Initial config also added.

MR !1
2022-02-14 09:45:18 +09:30
ec9e329956 build(docker): base image added
Setup dockerfile with base components.

MR !1
2022-02-14 09:26:19 +09:30
83 changed files with 3379 additions and 45 deletions

View File

@ -2,6 +2,6 @@ commitizen:
bump_message: "build(version): bump version $current_version \u2192 $new_version"
changelog_incremental: false
name: cz_conventional_commits
tag_format: v$major.$minor.$patch$prerelease
tag_format: $major.$minor.$patch$prerelease
update_changelog_on_bump: true
version: 0.0.2
version: 0.1.0

14
.dockerignore Normal file
View File

@ -0,0 +1,14 @@
# Directories
.git/
.gitlab/
gitlab-ci/
test/
.vscode/
# Files
.cz.yaml
.gitignore
.gitlab-ci.yml
.gitmodules
.markdownlint.json
*.md

View File

@ -1,42 +1,38 @@
stages:
- validation
- build
- prepare
- test
- release
- sync
- publish
---
variables:
GIT_SUBMODULE_STRATEGY: recursive
MY_PROJECT_ID: "33611657"
include:
- project: nofusscomputing/projects/gitlab-ci
ref: ce1cc017e26ff7f6cee586cc7d98e4d292275672
ref: development
file:
- conventional_commits/.gitlab-ci.yml
- validation/.gitlab-ci.yml
- gitlab_release/.gitlab-ci.yml
- git_push_mirror/.gitlab-ci.yml
- .gitlab-ci_common.yaml
- template/automagic.gitlab-ci.yaml
variables:
DOCKER_IMAGE_BUILD_TARGET_PLATFORMS: "linux/amd64,linux/arm64"
DOCKER_IMAGE_PUBLISH_NAME: 'docker-mail'
DOCKER_IMAGE_PUBLISH_REGISTRY: docker.io/nofusscomputing
DOCKER_IMAGE_PUBLISH_URL: https://hub.docker.com/r/nofusscomputing/$DOCKER_IMAGE_PUBLISH_NAME
GIT_SUBMODULE_STRATEGY: recursive
GIT_SYNC_URL: "https://$GITHUB_USERNAME_ROBOT:$GITHUB_TOKEN_ROBOT@github.com/NoFussComputing/docker-mail.git"
MY_PROJECT_ID: "33611657"
PAGES_ENVIRONMENT_PATH: projects/docker-mail/
Markdown Linting:
extends:
- .Lint_Markdown
Gitlab Release:
extends:
- .gitlab_release
Github (Push --mirror):
variables:
GIT_SYNC_URL: "https://$GITHUB_USERNAME_ROBOT:$GITHUB_TOKEN_ROBOT@github.com/NoFussComputing/docker-mail.git"
extends:
- .git_push_mirror
Compile Dovecot:
extends: .build_docker_container
variables:
DOCKER_DOCKERFILE: dockerfile-compile
DOCKER_IMAGE_BUILD_TARGET_PLATFORMS: "linux/arm64"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_TAG
when: never
- if: '$CI_COMMIT_BRANCH != "master" && $CI_PIPELINE_SOURCE == "push"'
when: manual
allow_failure: true
- when: never

6
.gitmodules vendored
View File

@ -1,4 +1,8 @@
[submodule "gitlab-ci"]
path = gitlab-ci
url = https://gitlab.com/nofusscomputing/projects/gitlab-ci.git
branch = master
branch = development
[submodule "website-template"]
path = website-template
url = https://gitlab.com/nofusscomputing/infrastructure/website-template.git
branch = development

19
.markdownlint.json Normal file
View File

@ -0,0 +1,19 @@
{
"line-length": false,
"MD007": {
"indent": 4
},
"MD033": {
"allowed_elements": [ "div", "s", "span", "u", "p", "br" ]
},
"blanks-around-headings":{
"lines_above": 2,
"lines_below": 1
},
"MD012": {
"maximum": 2
},
"comment": {
"MD012": "MD012 max=2 added so that headings can have two lines above for clarity."
}
}

8
.nfc_automation.yaml Normal file
View File

@ -0,0 +1,8 @@
---
role_git_conf:
gitlab:
submodule_branch: "development"
default_branch: development
mr_labels: ~"type::automation" ~"impact::0" ~"priority::0"
auto_merge: true

7
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"recommendations": [
"davidanson.vscode-markdownlint",
"gitlab.gitlab-workflow",
"ms-azuretools.vscode-docker"
]
}

View File

@ -1,3 +1,167 @@
## 0.1.0 (2023-11-06)
### Bug Fixes
- **ci**: [cab22ceb](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/cab22cebfa98d50774b4b433fed5f1727f596a26) - added automation config [ [!13](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/13) ]
### Continious Integration
- **automagic**: [b1b5fc20](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/b1b5fc20606dc0d87d860ae5ee64559307c6f3ea) - use template automagic for jobs [ [!12](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/12) [#5](https://gitlab.com/nofusscomputing/projects/docker-mail/-/issues/5) ]
## 0.1.0rc3 (2023-05-24)
### Bug Fixes
- **docs**: [e872534a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/e872534aec12c0905a7713532f36f6fde63b4730) - use docs path instead of pages [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) [!26](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/26) ]
- **mkdocs**: [9acc37ec](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/9acc37ec4f2286c06debbbfda0acb8a3bf04c998) - use correct edit path [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **website**: [c2902063](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/c290206392836642af5a3b6ca1dad67abe799b42) - correct repo name [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **docs**: [bfcb3469](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/bfcb346924b12411102fc58bec13aa7e0820a0ce) - add base files for navigation [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **ci**: [235aa8d7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/235aa8d7ccd19dcee44f56a27367113f2e4f5354) - must have index.md file for linting to start [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **build**: [88689c87](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/88689c87ac84ba493652cbf22da934d5873c55b3) - ensure dovecot downloaded and installed [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **build**: [9a0df52c](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/9a0df52cd9d2d0f8574801ca73e6b0a525531b30) - fix build logic [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **publish**: [c30efc8b](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/c30efc8bd64f7d7702b71e3fed2acab915821f2c) - must specify docker publish details [ [!3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/3) ]
- [29c6d6f7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/29c6d6f7304c6bca751d3904e37d2561ac9f01a1) - lock debian base image [ [!3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/3) ]
- **versions**: [840e2ad5](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/840e2ad5aead5effdb925dd640ce483782a11ca5) - update postfix [ [!3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/3) ]
- **repo**: [d6b2b5b4](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/d6b2b5b40ef2643005078807da7ca7dcce82505a) - lock dovecot repo to specified version [ [!3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/3) ]
### Code Refactor
- **image**: [4c106025](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/4c106025d545d89cadef0bf019a86cbaf7dca00a) - reduce the number of layers [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **dockerfile**: [1c6b3a36](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/1c6b3a3617cfcd0a781391c96d0265c2fb7eef3b) - use global var [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **dockerfile**: [88bfc649](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/88bfc64940e7a2b7073c8ebe644afd06a4e2149c) - use args for apt software versions [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **ci**: [300961aa](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/300961aaff303b1b4a6ea2f70b9c13fbf1831260) - update template path [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
### Continious Integration
- **gitlab**: [aa461590](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/aa461590a83065e81b3743e791975ebcad916874) - update to latest HEAD [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **compile**: [808ca861](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/808ca861edc1080844cbfd61bd962020146cdcf0) - add dovecot compile job [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **gitlab-ci**: [e2e704c5](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/e2e704c54588c6bddccfcd38c18f21a5bc863c78) - use dev branch and type docker container [ [!3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/3) ]
### Documentaton / Guides
- **build**: [f22931e6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/f22931e6f079657acc94f21e7e2d5c61410a150b) - added navigation for project [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
### Features
- **ci**: [80ccaaa6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/80ccaaa6e7d875283770baff1b090b8807a65947) - trigger downstream website to build [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) [!27](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/27) ]
- **docs**: [6409627d](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/6409627daeb7ce6a131bd7205409c3f8c07f9986) - add website static page building [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) [!25](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/25) ]
- **build**: [7261769a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/7261769a95a985b95a5f16142c0e461d0984174e) - dockerfile for compiling dovecot [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **arm64**: [a866bd82](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/a866bd82b82ae6ec45a1121bed1a6dfd9f59f114) - build arm64 image using compiled bins [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **amd64**: [676546f7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/676546f71c13dcc8ddf7db7128b003b8f2416721) - use dovecot apt repo to install [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
- **build**: [2b497fd2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/2b497fd2cf7678e17f544ad38187486cc4efeaf3) - specify architecture [ [!10](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/10) ]
## v0.1.0rc2 (2022-02-19)
### Bug Fixes
- **backup.sh**: [e8eb6f90](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/e8eb6f906f07b5044ec873327117dbf87e357797) - exclude unix sockets from backup [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **backup**: [acccf247](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/acccf24774e100f0cda38941549099adc52b7b58) - ssl dir renamed to certs [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **backup**: [93378dee](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/93378dee86abe5f1ee86e824f2543656e1826e64) - /var/spool/postfix needs to be backed up [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **sa-learn**: [43f6a356](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/43f6a356bd7f458ee33955151ff5609c2b599a70) - amavis can't do bayes check if not mask 777 [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **dovecot**: [e9fb4123](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/e9fb4123e9c6aad6d0793f4de0d21da46ba332fd) - sieve extensions debug error. [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **cron**: [e9718c97](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/e9718c97a678223257c2450cede863757e376b90) - sa-learn must run as spamd user [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **bayes_learn**: [967fd04f](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/967fd04fe7af6c3d5330357e18c1a76583163ede) - ensure journal is synced after scan [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **file_permission**: [fbdf6efa](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/fbdf6efab73324aceebfc49ab37190adb9bc0af5) - set spamd to own spamassassin folder [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **local_group**: [7f7a259a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/7f7a259a820bdbb6025dfee93cfb8df5ad8dba0a) - amavis and opendkim added to vmail [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **build**: [db03fc2e](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/db03fc2efaa418b28267fe532a0cc9c09d2e09ab) - corrected syntax error in dockerfile
- **postfix**: [5f7095f2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/5f7095f274e6fe3cf61d8b55e14eaa47f1d2ae4d) - only use the servers order of tls ciphers [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **logrotate**: [3120ecf2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/3120ecf2f5cb61011c321f6e41936e6a77c0686c) - ensure log rotate runs [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **logrotate**: [6625d72a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/6625d72a48bad7a6a50bc7e93d14470fbc6eacc6) - don't specify log extension [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **dovecot**: [edadc477](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/edadc4779e445ff7036de05fc55607a035a53eb0) - ensure quota syntax is correct [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **mailbox_quota**: [b3d80b41](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/b3d80b41ca7bd6a9b6c15f9d6ea09bbc206f4664) - ensure user quota visible. [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
### Continious Integration
- **docker_hub**: [3741b926](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/3741b92606281ddabfa9df50186818d54c0602e1) - fix rc release must be tagged 'dev' [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- [3bca896c](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/3bca896c29fdbe3d79cc12ef56785ef7c02394ca) - Add dockerhub url to environment [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
### Features
- **docker_container**: [22a987a5](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/22a987a5133e8e878f8c79e016e218ea5a8b76d1) - Ensure amavis data is a volume [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **amavis**: [9f7ccabf](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/9f7ccabfa52dc71f14fa690ef9e7f0e3184f14c9) - don't allow user to send banned email [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **amavis**: [c3739c4f](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/c3739c4f1964e4e315cd9eaa2a67e787aa121688) - Don't allow user to send spam/virus [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **amavis**: [f6b7bae3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/f6b7bae3eba7398ad6de11b9cb2b36594df6f891) - move policy bank to own config file [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **amavis**: [7ec97502](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/7ec975021659fee5ebaa78332fef0d9533ee769d) - Add received header to message [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **ssl_tls**: [2a222df7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/2a222df7784e85f13a477c3859ca10709734c199) - updated dovecot and postfix accepted ciphers [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **dovecot**: [396cb15a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/396cb15addc8fd6de038da3a66d16891226b0363) - Disable SSL/TLS protocol logging [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **postfix**: [24f10af6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/24f10af6d6e16b75fc77cf4538033839058748ec) - prevent anonymous users on submission [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **dovecot**: [274ade2d](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/274ade2d8407ff91e448bff4c838a67f53074dde) - log SSL/TLS porotocol errors [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **dovecot**: [478336ca](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/478336ca686c7d6fdbd040d012126f3ad906f44b) - log failed authentication attempts [ [!9](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/9) ]
- **postfix**: [4554e9e6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/4554e9e66d688c417a06f1a808403f985e4a2a22) - specify my_networks as localhost ONLY [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **postfix**: [41e03936](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/41e03936cc6e36473d0c962361d822d95ae69e86) - no compression or renegotiation [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **submission**: [4c37932b](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/4c37932bf78fbc0af2e4c354fec0a1af037e5e77) - check user quota recipient restriction [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **postfix**: [f90daea4](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/f90daea454fac0ccec781129128bbf40e43378a3) - enforce only reaying mail for auth destination [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **postfix**: [1b168f07](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/1b168f07d56c89cf8e5635aa3d00429342914f15) - enforce SMTPD recipient restrictions [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **postfix**: [58f42a79](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/58f42a7913625afda9550ce99328af9e8ede2df7) - Enforce SMTPD sender restrictions [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **postfix**: [8c68163e](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/8c68163e9d6dd2edf94bba6159156dde115cc8f8) - introduce smtpd helo restrictions [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **postfix**: [64258f2c](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/64258f2cd8b0a8febd63d585e9b3aa1fe5d88bd4) - enforce smtpd client restrictions [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
- **quota_status**: [8f938bd3](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/8f938bd3ce1a5f432a97a2aae75592f39e82d28e) - use a unix socket for postfix [ [!7](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/7) ]
## v0.1.0rc1 (2022-02-17)
### Code Refactor
- [bde6c054](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/bde6c054bbe4bea0a14509070fed9328138dbb1d) - conf config values updated [ [!6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/6) ]
- **amavis**: [53e0cdd1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/53e0cdd17139bdd3e6df079edec3c88ef12a5c1a) - move dkim key config to own file [ [!4](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/4) ]
- [3e30b278](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/3e30b2780ef53ef12d036d0e009bff19b96dd8e2) - ci code review suggestions [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
- **amavis**: [d8e51085](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/d8e51085a1e0598e564030790b1d0fcf5dd8fb17) - seperate config for socket [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
- **ssl**: [09aabeb6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/09aabeb68aae478bd125e48b4bfaecaa7a97b1ae) - Moved /ssl to /certs [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
### Continious Integration
- **docker_hub**: [27ad07ea](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/27ad07ead345bbf7b0c929adbfd24947ef977e40) - fix dev push [ [!5](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/5) ]
- **docker_hub**: [aafd9acc](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/aafd9acca9fe98bad1710a4af2f1b0eabadd6944) - ensure build and DH push works on merge [ [!4](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/4) ]
- **docker_hub**: [36808960](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/36808960ce9a1369eebcaf0fe878d85bdbd37ced) - push a dev and latest tag to docker hub [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
- **docker_hub**: [76c899e2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/76c899e285f7ea816d6fc4c7e78644302b5921b3) - removed duplicate rules section [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
- **docker_container**: [23830c85](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/23830c85510c5cff6da80fa6ab617b8580e29739) - set to allow failure [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
### Documentaton / Guides
- **spf**: [a71e7691](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/a71e7691a2188fb9372c2e7c9b32cb39adb4e8ce) - added basic spf guide [ [!6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/6) ]
- [be42d0ad](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/be42d0ad3ba83717a9c4e907a48fd087539e720f) - Addied initial documentation for dkim [ [!4](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/4) ]
### Features
- **amavis**: [92e4e4b2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/92e4e4b2d55ab538eda937bc698d7a11961c47b6) - added DKIM verification [ [!6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/6) ]
- **spf**: [245aa724](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/245aa724d2d8121c7a758da6e086fe0a59c751d8) - conduct spf check for inbound smtp [ [!6](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/6) ]
- **posfix**: [b795fe5b](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/b795fe5b67ecdfaa9390d2028478fd0b6570cfcc) - configure submission to dkim sign [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
- **amavis**: [b9b2527a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/b9b2527a42586843faea3ad074c1d34392b5d1d8) - Configured dkim [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
- **dkim**: [72ee475b](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/72ee475be7c459531762d489dd649d696a6f47be) - Added OpenDKIM to image [ [!2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/2) ]
## v0.1.0rc0 (2022-02-14)
### Bug Fixes
- **fetchmail**: [1fe3598a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/1fe3598a545044327026f44038be53eeb5f06182) - fix cron job so it runs [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **script**: [3601d90a](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/3601d90aefd42219c32fe5792d39839f52c5c2af) - group-mailbox script must be executable [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
### Code Refactor
- [b01bab03](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/b01bab033fc73866084ea583f416bea57f18d880) - readme linting errors [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- [eb43442b](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/eb43442bb7a61bf1dc84f4a6e547375825db7e62) - cron out to /dev/null [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
### Continious Integration
- **detached_pipeline**: [99e61d0f](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/99e61d0f11736b8f8078fedc5569182a8e93a6a3) - stop MR jobs
- **build**: [f80c02ba](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/f80c02ba1530c51e34e2f41b59f91edf7a5d00a9) - Added docker container build job [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **gitlab-ci**: [b536a5e4](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/b536a5e4b4d0522377e093eec2a0dffb771e6a01) - updated to current dev commit [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **markdown_lint**: [38a25272](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/38a252727d103bdd2ccc18f09f74ba4337e8422c) - added linting rule file [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
### Documentaton / Guides
- **README**: [6a61efe2](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/6a61efe229a2a31703f5539e03cc8910e0feba3e) - updated readme [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
### Features
- **spam-learn**: [3a3f2098](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/3a3f2098c7d81ae85ee42751fa8aef4bbec6a624) - add duration to email [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **vscode**: [1d73c6eb](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/1d73c6eb8c1f67accaa9c310ad0dc76458c3d2bd) - recommended extensions added [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **shared_mailbox**: [d8ad253f](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/d8ad253f98b81b747dea101748cf2687d148bdd0) - added helper script to share mailbox. [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **sa-learn**: [5ec218da](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/5ec218dad9865a38f5846c90fd6ccc5c30721d81) - Added cron script to learn spam/ham [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **fetchmail**: [ace2493f](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/ace2493f66a6cc39ea406180ab7d7f8aa21ade88) - added fetchmail [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **backup**: [a7c1ae05](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/a7c1ae052cb441d7445610b2ac5a7caf8e66d9d1) - Added backup cron and helper script. [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- **amavis**: [4db1b34d](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/4db1b34d386456fcc3c2ac562cfe5330b61af847) - added amavis and configured spam [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
- [df8997f0](https://gitlab.com/nofusscomputing/projects/docker-mail/-/commit/df8997f07de834dc8ffd3c3e58ff82b0da87c806) - Added Dovecot and Postfix to container [ [!1](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests/1) ]
## v0.0.2 (2022-02-11)
### Documentaton / Guides

View File

@ -1,13 +1,11 @@
# README.md
<div align="center" width="100%">
# No Fuss Computing - Docker Mail Server
<br>
![Project Status - Active](https://img.shields.io/badge/Project%20Status-Active-green?logo=gitlab&style=plastic)
![Project Status - Active](https://img.shields.io/badge/Project%20Status-Active-green?logo=gitlab&style=plastic)
<br>
@ -22,13 +20,13 @@ This project is hosted on [Gitlab](https://gitlab.com/nofusscomputing/projects/d
----
**Stable Branch**
.**Stable Branch**
![Gitlab build status - stable](https://img.shields.io/badge/dynamic/json?color=ff782e&label=Build&query=0.status&url=https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%2Fprojects%2F33611657%2Fpipelines%3Fref%3Dmaster&logo=gitlab&style=plastic) ![branch release version](https://img.shields.io/badge/dynamic/yaml?color=ff782e&logo=gitlab&style=plastic&label=Release&query=%24.commitizen.version&url=https%3A%2F%2Fgitlab.com%2Fnofusscomputing%2Fprojects%2Fdocker-mail%2F-%2Fraw%2Fmaster%2F.cz.yaml)
![Gitlab build status - stable](https://img.shields.io/badge/dynamic/json?color=ff782e&label=Build&query=0.status&url=https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%2Fprojects%2F33611657%2Fpipelines%3Fref%3Dmaster&logo=gitlab&style=plastic) ![branch release version](https://img.shields.io/badge/dynamic/yaml?color=ff782e&logo=gitlab&style=plastic&label=Release&query=%24.commitizen.version&url=https%3A%2F%2Fgitlab.com%2Fnofusscomputing%2Fprojects%2Fdocker-mail%2F-%2Fraw%2Fmaster%2F.cz.yaml)
----
**Development Branch**
.**Development Branch**
![Gitlab build status - development](https://img.shields.io/badge/dynamic/json?color=ff782e&label=Build&query=0.status&url=https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%2Fprojects%2F33611657%2Fpipelines%3Fref%3Ddevelopment&logo=gitlab&style=plastic) ![branch release version](https://img.shields.io/badge/dynamic/yaml?color=ff782e&logo=gitlab&style=plastic&label=Release&query=%24.commitizen.version&url=https%3A%2F%2Fgitlab.com%2Fnofusscomputing%2Fprojects%2Fdocker-mail%2F-%2Fraw%2Fdevelopment%2F.cz.yaml)
@ -45,3 +43,68 @@ links:
- [Merge Requests (Pull Requests)](https://gitlab.com/nofusscomputing/projects/docker-mail/-/merge_requests)
## Features
This docker container is intended to be a fully fledged E-Mail Server. Dovecot acts as the IMAP Server and Local Delivery agent. Postfix is intended to be the MTA utilising Dovecot's LMTP service for local delivery. User management is via LDAP and a working directory server is required to use this image.
- Mail Server - _Dovecot_
- IMAP Server on tcp/993
- Acts as Local Delivery Agent (LDA) via LMTP
- Group E-Mail Boxes
- Mail Aliasing. _(User can have multiple E-Mail Addresses)_
- Ability to Share Mailboxes
- redirection of spam to Spam folder
- manage sieve server
- New user welcome email
- SMTP Server _Postfix_
- Acts as Mail Transfer Agent (MTA)
- filters file extensions
- [Remove/cleans headers](https://gitlab.com/nofusscomputing/projects/docker-mail/-/blob/master/include/etc/postfix/header_checks_privacy) that contain potentially sensitive information
- Spam filtering
- [DKIM key signing](pages/dkim.md) _Note: [Key length requirements](https://datatracker.ietf.org/doc/html/rfc6376#section-3.3.3)_
- General Features:
- Automatic Backups of container data
- rotation of old logs
- All Data exposed as separate docker volumes so you don't loose data
## Using this container
Currently this container is **not ready for production.**
### Useful Commands
Share a Mailbox
``` bash
doveadm acl add -u {user_name_sharing} INBOX user={user to share with} lookup read write write-seen write-deleted insert post expunge create delete admin
```
or you can use the provided helper script `group-mailbox.sh {user_name_sharing} {user to share with}`. This command will share the all of the default folders _Archives, Drafts, Inbox, Sent, Spam and Trash_.
| :alert: NOTE!! |
|:----|
| `{user_name_sharing}` must be specified as a full E-Mail address. <br> `{user to share with}` must be specified as the user name only (without the `@domainname.tld`)|

290
dockerfile Normal file
View File

@ -0,0 +1,290 @@
ARG CI_JOB_TOKEN
ARG CI_API_V4_URL
ARG CI_PROJECT_ID
ARG DOVECOT_BUILD_VERSION=2.3.18
ARG PIGEONHOLE_BUILD_VERSION=0.5.20
ARG DEBIAN_FRONTEND=noninteractive
ARG VERSION_APT_AMAVISD=1:2.11.1-5+deb11u1
ARG VERSION_APT_CLAMAV=0.103.5+dfsg-0+deb11u1
# 2:2.3.18-4+debian11
ARG VERSION_APT_DOVECOT=2:$DOVECOT_BUILD_VERSION-4+debian11
ARG VERSION_APT_FETCHMAIL=6.4.16-4+deb11u1
ARG VERSION_APT_FAM=2.7.0-17.3
ARG VERSION_APT_LIBNET_DNS_PERL=1.29-1
ARG VERSION_APT_LIBMAIL_TOOLS_PERL=2.21-1
ARG VERSION_APT_OPENDKIM=2.11.0~beta2-4+deb11u1
ARG VERSION_APT_POSTFIX=3.5.25-0+deb11u1
ARG VERSION_APT_POSTFIX_POLICYD_SPF_PYTHON=2.9.2-1+deb11u1
ARG VERSION_APT_SPAMASSASSIN=3.4.6-1
FROM --platform=$TARGETPLATFORM debian:11.7-slim as build
ARG CI_JOB_TOKEN
ARG CI_API_V4_URL
ARG CI_PROJECT_ID
ARG DOVECOT_BUILD_VERSION
ARG PIGEONHOLE_BUILD_VERSION
ARG DEBIAN_FRONTEND
ARG VERSION_APT_AMAVISD
ARG VERSION_APT_CLAMAV
ARG VERSION_APT_DOVECOT
ARG VERSION_APT_FETCHMAIL
ARG VERSION_APT_FAM
ARG VERSION_APT_LIBNET_DNS_PERL
ARG VERSION_APT_LIBMAIL_TOOLS_PERL
ARG VERSION_APT_OPENDKIM
ARG VERSION_APT_POSTFIX
ARG VERSION_APT_POSTFIX_POLICYD_SPF_PYTHON
ARG VERSION_APT_SPAMASSASSIN
#COPY apt_proxy.conf /etc/apt/apt.conf.d/apt_proxy.conf
LABEL \
#org.opencontainers.image.created="" \ # set during build with $(date --rfc-3339=seconds) \
org.opencontainers.image.authors="No Fuss Computing" \
#org.opencontainers.image.url="" # $CI_PROJECT_URL/-/releases/$CI_COMMIT_TAG set during build from url\
#org.opencontainers.image.documentation="" # $CI_PROJECT_URL/pages Set URL during build \
#org.opencontainers.image.source="" # $CI_PROJECT_URL Set URL during build \
#org.opencontainers.image.version="" \ # $(cz -n cz_nfc version --project) ) Set during build from .cz.yml
#org.opencontainers.image.revision="" # $CI_COMMIT_SHA set during build from git commit \
org.opencontainers.image.vendor="No Fuss Computing" \
#License(s) under which contained software is distributed as an SPDX License Expression.
org.opencontainers.image.licenses="" \
org.opencontainers.image.title="Docker Mail Server" \
org.opencontainers.image.description="A Complete mailserver in a container" \
io.artifacthub.package.license="MIT"
# Install dependencies
RUN apt update && apt -y --no-install-recommends install \
curl \
gpg \
gpg-agent \
apt-transport-https \
ca-certificates \
supervisor \
&& apt -y --no-install-recommends install \
# System Apps
cron \
rsyslog \
logrotate \
# Postfix
postfix=$VERSION_APT_POSTFIX \
postfix-ldap=$VERSION_APT_POSTFIX \
libsasl2-modules \
sasl2-bin \
# Amavis
amavisd-new=$VERSION_APT_AMAVISD \
spamassassin=$VERSION_APT_SPAMASSASSIN \
spamc=$VERSION_APT_SPAMASSASSIN \
# Amavis decoders
arj bzip2 cabextract cpio file gzip nomarch pax unzip zip xzdec lrzip lzop rpm2cpio unrar-free p7zip-full lz4 \
# clamav=$VERSION_APT_CLAMAV \
# clamav-daemon=$VERSION_APT_CLAMAV \
libmailtools-perl=$VERSION_APT_LIBMAIL_TOOLS_PERL \
fam=$VERSION_APT_FAM \
libnet-dns-perl=$VERSION_APT_LIBNET_DNS_PERL \
# Fetchmail
fetchmail=$VERSION_APT_FETCHMAIL \
# Perl Modules for fetchmail.pl
# DBI
libdbix-easy-perl \
# LockFile::Simple
liblockfile-simple-perl \
# DBD::mysql
libclass-dbi-mysql-perl \
# Sys::Syslog
liblogger-syslog-perl \
# LockFile::Simple
libio-lockedfile-perl \
# DKIM
opendkim=$VERSION_APT_OPENDKIM \
opendkim-tools=$VERSION_APT_OPENDKIM \
# SPF
postfix-policyd-spf-python=$VERSION_APT_POSTFIX_POLICYD_SPF_PYTHON; \
# Dovecot
if [ "0$(echo `dpkg --print-architecture`)" = "0amd64" ]; then \
echo "[DEBUG] installing dovecot via APT"; \
curl https://repo.dovecot.org/DOVECOT-REPO-GPG | gpg --import && \
gpg --export ED409DA1 > /etc/apt/trusted.gpg.d/dovecot.gpg; \
echo "deb https://repo.dovecot.org/ce-$DOVECOT_BUILD_VERSION/debian/bullseye bullseye main" > /etc/apt/sources.list.d/dovecot.list; \
apt update; \
apt -y --no-install-recommends install \
dovecot-core=$VERSION_APT_DOVECOT \
dovecot-imapd=$VERSION_APT_DOVECOT \
dovecot-lmtpd=$VERSION_APT_DOVECOT \
dovecot-ldap=$VERSION_APT_DOVECOT \
dovecot-sieve=$VERSION_APT_DOVECOT \
dovecot-managesieved=$VERSION_APT_DOVECOT; \
else \
echo "[DEBUG] installing dovecot via compiled binaries"; \
# as this architecture doesn't exist in the apt repo, use compiled versions
adduser --system --group dovecot --no-create-home; \
cd tmp; \
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
"https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/generic/dovecot/${DOVECOT_BUILD_VERSION}/dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb" -o "dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb"; \
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" \
"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/generic/dovecot/${DOVECOT_BUILD_VERSION}/dovecot-pigeonhole_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb" -o "dovecot-pigeonhole_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb"; \
dpkg -i dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb; \
cp /usr/local/share/doc/dovecot/example-config/dovecot.conf /etc/dovecot/; \
dpkg -i dovecot-pigeonhole_$DOVECOT_BUILD_VERSION-1_$(echo `dpkg --print-architecture`).deb; \
fi \
&& rm -f /etc/cron.d/e2scrub_all \
&& rm -f /etc/cron.daily/apt-compat \
&& rm -f /etc/cron.daily/dpkg \
&& rm -f /etc/cron.daily/logrotate
COPY include/ /
RUN chmod +x /docker-entrypoint.sh \
# Create vmail user for system
&& groupadd -g 5000 vmail \
&& useradd -g vmail -u 5000 vmail -d /var/vmail \
# Ensure Backup directory is created
&& mkdir /backup \
&& chown root:root /backup \
&& chmod 700 /backup \
# create SSL directory for ssl certificates
&& mkdir -p /certs \
# Ensure scripts are executable
&& chmod +x /bin/backup.sh \
# Dovecot related commands
&& mkdir -p /srv/mail \
&& chown vmail:vmail /srv/mail \
&& chmod 765 -R /srv/mail \
&& mkdir -p /certs/dovecot \
&& chown dovecot:dovecot -R /etc/dovecot/ \
&& chgrp postfix -R /etc/dovecot/sieve/ \
&& chmod 0755 -R /etc/dovecot/sieve/ \
# ensure dovecot related scripts are executable
&& chmod +x /bin/quota-warning.sh \
&& chmod +x /bin/welcome-email.sh \
&& chmod +x /bin/group-mailbox.sh \
&& chmod 744 /etc/dovecot/dovecot-acl \
# Postfix related commands
&& usermod -a -G vmail postfix \
&& mkdir -p /certs/postfix \
&& ln -s /etc/dovecot/dovecot-ldap.conf.ext /etc/dovecot/dovecot-ldap-userdb.conf.ext \
# ensure postfix related scripts are executable
&& chmod +x /bin/postfix.sh \
# check if needed
&& mkdir -p /var/spool/postfix/private/dovecot /var/lib/dovecot \
&& chown postfix:postfix /var/spool/postfix/private/dovecot \
&& chown vmail:vmail /var/lib/dovecot \
# Spammassassin related Commands
&& mkdir -p /var/spool/spamassassin \
&& chmod 777 /var/spool/spamassassin \
&& usermod -a -G vmail debian-spamd \
&& chown debian-spamd:vmail -R /var/spool/spamassassin \
# Ensure spamassassin related scripts are executable
&& chmod +x /bin/spam-learn.sh \
# fetchmail.pl setup
&& curl -o /bin/fetchmail.pl https://raw.githubusercontent.com/postfixadmin/postfixadmin/8f20c96278a694a7e0bb570f1d56c208105e5a14/ADDITIONS/fetchmail.pl \
&& chmod +x /bin/fetchmail.pl \
&& mkdir -p /var/run/fetchmail \
&& mkdir -p /var/lock/fetchmail \
# Amavis DKIM related commands
&& mkdir -p /certs/amavis/dkim/ \
&& chown root:amavis /certs/amavis/dkim/ \
&& chmod 750 /certs/amavis/dkim/ \
&& usermod -a -G vmail amavis \
&& usermod -a -G vmail opendkim
# Setup data volumes
VOLUME /srv/mail /certs /var/spool/postfix /var/spool/spamassassin /var/lib/amavis /backup /var/log
# Configure postfix
RUN postconf -e "maillog_file=/var/log/postfix.log" \
# Postfix to use dovecot LMTP
&& postconf -e "virtual_transport=lmtp:unix:private/lda" \
# # Only allow a user to send from email address' they own
# && postconf -e "smtpd_sender_login_maps=ldap:/etc/postfix/ldap/smtpd_sender_login_maps" \
# Only allow specified domains for usage
&& postconf -e "virtual_mailbox_domains=ldap:/etc/postfix/ldap/virtual_email_domains" \
# postfix user mapping
&& postconf -e "virtual_alias_maps=ldap:/etc/postfix/ldap/virtual_alias_maps" \
# Only trust localhost
&& postconf -e "mynetworks_style = host" \
# by default encryption is optional
&& postconf -e "smtpd_tls_security_level=may" \
# log outbound tls connection information
&& postconf -e "smtpd_tls_loglevel=1" \
# try tls connection outbound
&& postconf -e "smtp_tls_security_level=may" \
# log inbound tls connection information
&& postconf -e "smtp_tls_loglevel=1" \
# Only authenticate over tls
&& postconf -e "smtpd_tls_auth_only=yes" \
# all smtpd actions need to be filtered
&& postconf -e "content_filter=amavis:[127.0.0.1]:10024" \
# not give away os, set clean banner
&& postconf -e "smtpd_banner=$myhostname ESMTP " \
# Dont give away that postfix is used
&& postconf -e "mail_name=server" \
# create privacy header check db
&& postmap /etc/postfix/header_checks_privacy \
# create clean header check db
&& postmap /etc/postfix/header_checks_outbound \
# Clean outbound headers
&& postconf -e "smtp_header_checks=regexp:/etc/postfix/header_checks_outbound" \
# Add To, From, Date and Message-id headers if missing
&& postconf -e "always_add_missing_headers=yes" \
# Only add missing headers for authenticated users (mail users) and my networks and mail orginating from localhost
&& postconf -e "local_header_rewrite_clients=permit_sasl_authenticated,permit_mynetworks,permit_inet_interfaces" \
# set tls settings
&& postconf -e "tls_preempt_cipherlist = yes" \
&& postconf -e "tls_ssl_options = NO_COMPRESSION, NO_RENEGOTIATION" \
&& postconf -e "smtpd_tls_cert_file=/certs/postfix/cert.pem" \
&& postconf -e "smtpd_tls_key_file=/certs/postfix/key.pem" \
&& postconf -e "smtpd_helo_required = yes" \
&& postconf -e "smtpd_delay_reject = yes" \
&& postconf -e "disable_vrfy_command = yes" \
# use secure protocols and cyphers
# Generated by https://ssl-config.mozilla.org/
#&& postconf -e "smtpd_tls_mandatory_ciphers=high" \
&& postconf -e "smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1" \
&& postconf -e "smtp_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1" \
&& postconf -e "smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1" \
&& postconf -e "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" \
# SPF postfix Settings
&& postconf -e "policyd-spf_time_limit=3600" \
# Connection defaults to reject where possible/advised
# Client command restrictions
&& postconf -e "smtpd_client_restrictions=reject_unauth_destination,reject_unauth_pipelining,permit_mynetworks,permit_auth_destination,reject" \
# HELO/EHLO restrictions
&& postconf -e "smtpd_helo_restrictions=permit_mynetworks,reject_invalid_helo_hostname,permit" \
# MAIL FROM restrictions
&& postconf -e "smtpd_sender_restrictions=permit_mynetworks,reject_non_fqdn_sender,permit" \
# RCPT TO restrictions
&& postconf -e "smtpd_recipient_restrictions=permit_mynetworks,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_destination,check_policy_service,unix:private/policyd-spf,check_policy_service unix:private/quota,permit_auth_destination,reject" \
# RCPT TO restrictions
&& postconf -e "smtpd_relay_restrictions=reject_non_fqdn_recipient,permit_auth_destination,reject" \
&& postconf -e "smtpd_sasl_security_options = noanonymous"
EXPOSE 25 587 993 4190
ENTRYPOINT ["/docker-entrypoint.sh"]
# testing software
RUN apt update && apt -y --no-install-recommends install \
procps \
vim \
iputils-ping \
python3-ldap \
net-tools
# && freshclam

135
dockerfile-compile Normal file
View File

@ -0,0 +1,135 @@
ARG CI_JOB_TOKEN
ARG CI_API_V4_URL
ARG CI_PROJECT_ID
ARG DOVECOT_BUILD_VERSION=2.3.18
ARG PIGEONHOLE_BUILD_VERSION=0.5.20
ARG DEBIAN_FRONTEND=noninteractive
FROM --platform=$TARGETPLATFORM debian:11.7-slim as compile-dovecot
# ref: https://doc.dovecot.org/installation_guide/dovecot_community_repositories/compiling_source/
ARG CI_JOB_TOKEN
ARG CI_API_V4_URL
ARG CI_PROJECT_ID
ARG DOVECOT_BUILD_VERSION
ARG PIGEONHOLE_BUILD_VERSION
ARG DEBIAN_FRONTEND
RUN export && apt update \
&& apt -y install --reinstall --fix-missing \
wget \
autoconf \
automake \
libtool \
pkg-config \
gettext \
pandoc \
make \
git \
ca-certificates \
libssl-dev \
bison \
flex \
curl \
checkinstall \
zlib1g-dev
RUN mkdir -p /tmp/build \
&& cd /tmp/build \
&& git clone --depth=1 -b release-${DOVECOT_BUILD_VERSION} https://github.com/dovecot/core.git dovecot
RUN cd /tmp/build/dovecot \
&& ./autogen.sh \
&& ./configure --enable-maintainer-mode --sysconfdir=/etc \
# && make \
&& ls -la
RUN /bin/mkdir -p '/usr/local/lib/dovecot' \
'/usr/local/share/dovecot/stopwords' \
'/usr/local/libexec/dovecot' \
'/usr/local/lib/dovecot/auth' \
'/usr/local/lib/dovecot/old-stats' \
'/usr/local/lib/dovecot/doveadm' \
'/usr/local/share/doc/dovecot/wiki' \
'/usr/local/share/doc/dovecot/example-config/conf.d'
RUN cd /tmp/build/dovecot && checkinstall --pkgname=dovecot-core --pkgversion=${DOVECOT_BUILD_VERSION} --pkgarch=$(echo `dpkg --print-architecture`) -D -y \
&& ls -la
RUN cd /tmp/build/dovecot && curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --verbose \
--upload-file dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb \
"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/generic/dovecot/${DOVECOT_BUILD_VERSION}/dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb"
FROM --platform=$TARGETPLATFORM debian:11.7-slim as compile-pigeonhole
# ref: https://doc.dovecot.org/installation_guide/dovecot_community_repositories/compiling_source/
ARG CI_JOB_TOKEN
ARG CI_API_V4_URL
ARG CI_PROJECT_ID
ARG DOVECOT_BUILD_VERSION
ARG PIGEONHOLE_BUILD_VERSION
ARG DEBIAN_FRONTEND
RUN export && apt update \
&& apt -y install --reinstall --fix-missing \
wget \
autoconf \
automake \
libtool \
pkg-config \
gettext \
pandoc \
make \
git \
ca-certificates \
libssl-dev \
bison \
flex \
curl \
checkinstall \
zlib1g-dev
RUN cd tmp && curl --header "JOB-TOKEN: $CI_JOB_TOKEN" \
"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/generic/dovecot/${DOVECOT_BUILD_VERSION}/dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb" -o "dovecot-core_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb" \
&& dpkg -i dovecot-core_$DOVECOT_BUILD_VERSION-1_$(echo `dpkg --print-architecture`).deb
RUN mkdir -p /tmp/build \
&& cd /tmp/build/ && git clone -b $PIGEONHOLE_BUILD_VERSION --depth=1 https://github.com/dovecot/pigeonhole.git pigeonhole \
&& cd pigeonhole \
&& ./autogen.sh \
&& ./configure --sysconfdir=/etc --with-dovecot-install-dirs \
# && make \
&& mkdir -p '/usr/local/lib/dovecot/sieve' \
'/usr/local/lib/dovecot/settings' \
'/usr/local/share/doc/dovecot/example-config' \
'/usr/local/share/doc/dovecot/sieve/extensions'
RUN cd /tmp/build/pigeonhole && checkinstall --pkgname=dovecot-pigeonhole --pkgversion=${DOVECOT_BUILD_VERSION} --pkgarch=$(echo `dpkg --print-architecture`) -D -y
RUN cd /tmp/build/pigeonhole && curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --verbose \
--upload-file dovecot-pigeonhole_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb \
"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/packages/generic/dovecot/${DOVECOT_BUILD_VERSION}/dovecot-pigeonhole_${DOVECOT_BUILD_VERSION}-1_$(echo `dpkg --print-architecture`).deb"

0
docs/articles/index.md Normal file
View File

0
docs/contact.md Normal file
View File

0
docs/index.md Normal file
View File

0
docs/operations/index.md Normal file
View File

View File

@ -0,0 +1,181 @@
---
title: Amavis DKIM Signing configuration
Description: How to configure DKIM for No Fuss Computings mail server.
date: 2022-02-16
template: project.html
about: https://gitlab.com/nofusscomputing/projects/docker-mail
---
To utilise DKIM message signing for outbound mail (leaving the server), you will need to configure dkim to use your certificates.
This document assumes that your are familar with amavis and DKIM E-Mail signing. Without this assumed knowledge, there may be uninteded consequences.
## DKIM Key creation
You will be required to generate your DKIM signing certificates for the E-Mail domains that you utilise. The recommended location for DKIM keys is `/certs/amavis/dkim`, this ensures they are included in the backups.
``` bash title="bash"
$ amavisd-new genrsa /certs/amavis/dkim/example.org.dkim.pem 2048 # (1)!
$ chmod g+r /certs/amavis/dkim/example.org.dkim.pem # (2)!
$ chgrp amavis /certs/amavis/dkim/example.org.dkim.pem # (2)!
```
1. create your DKIM Key
is an RSA Key
has a key of length 2048 bits _[See RFC6376 - Key Sizes](https://datatracker.ietf.org/doc/html/rfc6376#section-3.3.3)_
saved to location `/certs/amavis/dkim/` with a name of `example.org.dkim.pem`
The filename is crucial and has some requirements:
- `example.org` set to your E-Mail domain name.
- `dkim` is the key selector that will be utilised during the amavis configuration
- `.pem` is the file extension
For example: if you have a E-Mail domain called `myemail.com` and wanted to use a key selector of `q2` for second quarter of teh year, you would use command `amavisd-new genrsa /certs/amavis/dkim/myemail.com.q2.pem 2048` to create your dkim signing key. _not forgetting that `q2` needs to be added to your amavis config, see below_
2. Set the permissions for your dkim signing key to only be accessable to amavis
## Configuring Amavis
To configure amavis, you will be required to create a confiuguration file with your E-Mail domain settings. you can name this file anything you wish, as long as the filename is oredered after `90-dkim`. The configuration file needs to be located in `/etc/amavis/conf.d/` and amavis will need to be restarted `supervisorctl restart amavis` for the configuration to take effect.
!!! tip Note
Ensure you adjust all occurances of `example.org` to match your E-Mail domain
``` conf title="/etc/amavis/conf.d/99-dkim-keys"
dkim_key(
'example.org', # (1)!
'dkim', # (2)!
'/certs/amavis/dkim/example.org.dkim.pem' # (3)!
);
@dkim_signature_options_bysender_maps = (
{
"example.org" => { # (1)!
s => 'dkim', # (2)! # (4)!
d => 'example.org', # (1)!
a => 'rsa-sha256', # (5)!
ttl => 30*24*3600 # (6)!
}
}
);
```
1. Adjust to suit your domain name
2. This is the key selector _located in the filename, `{E-Mail domain}.{key_selector}.pem`_.
3. This is the location of the DKIM Signing key. This must match the name given during key generation.
4. This is the key selector. Only this key will be used to sign the E-Mails if it matches the E-Mail domain name.
5. This is the key signing algorithm
6. This is the signed E-Mail validity duration `30*24*3600` = `30 days * 24 hours * seconds in one hour`. This value is used to set the E-Mails signature validation period.
!!! Tip
you can add as many `dkim_key` sections to your config as required.
!!! note
if you don't place a domain entry in `@dkim_signature_options_bysender_maps` that matches your E-Mail domain, any email sent from that domain will not be dkim signed. You can specify `'.'` for the domain entry to capture all domains.
Once configuration is complete issue command `supervisorctl restart amavis` to load the config changes
## Configuring DNS
Once you have configured Amavis and created your DKIM keys, you will need to configure DNS. For this you will require the DKIM Key information. Since we are using Amavis, issue command `amavisd-new showkeys` to display your keys and the required dns config.
``` bash title="DNS Configuration"
$ amavisd-new showkeys
; key#1 4096 bits, i=dkim, d=example.org, /certs/amavis/dkim/example.org.dkim.pem
dkim._domainkey.example.org. 3600 TXT (
"v=DKIM1; p="
"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArP2MsM5q9IbgVTxwj0nA"
"2Iqa8NsL5L72TGEnBib8nusfoFWw5G8yGpAkterD7w9hIhCiRbpXakzQ8a9vrsnF"
"HsQph79d02mAndE9VS3b+dxABzGKNWdRszrKHDb4q8OeX+g6fsPlPlIOb1ngg4qo"
"oVJTlswV3KacE7OwGq1ZRy8X6CIAjzeiC3x7qiBH5Yxi895i7GLeTwMKQY8mIv1Z"
"iLVoNcH5lpB3FOJFWtXiztpkQaLLVY/YQAGzwRnWQHcqRd6ybtf9q34ADYhq1gZb"
"NC6GOnkets6mv2o7daTQ78Sr+GO2/4DpciXGIDB8QbbX4Qh0kaazEqx9HlGG7MC2"
"TdyIjmMF0pzI9qjVDdkXvwFJLLyIDP4Y4DgGuVHi/+Zdi9YtxcWrKpb8Zv+32xgU"
"Qvz8EQt03upcpxB0aVRkK1I6GYKYr3I0uhYhfBZdUonUkxaklcnrQZVsooo+xont"
"MMyPbPM6HYf0KJZCxGa6AYrIiYlnj7giudVTJdvA1J3IOQEGjq0tRmH0id/Qv2F5"
"Po5zMEPMtx/pcWcqEJEC7/phgboQ3vkZYf/lCqZ8T2JXAIE9ujQFTFE86v+pXhVf"
"98/oY4n5PN9LYfaflkTOmWyfig/qQ7mCjxdaYnOko9hlUnaRGrG5d6Dfy16qFt64"
"PYEseCN67yeWZz8r1NaZHckCAwEAAQ==")
$
```
1. Using the example output from the above command, displays the required DNS txt entry.
Create a DNS `TXT` entry named `dkim._domainkey.example.org` The breakdown of this name is as follows `{key selector}._domainkey.{domain name}`
!!! note
if you have configured amavis correctly, the selector and domain name will match your E-Mail domain.
Give it a TTL of at least `3600`. Any value can be set here. However understand that if the duration is too long, if you need to change your key, the ttl period will need to pass before any cached look ups will expire.
enter the value of (obviously, use the output of your command run):
``` text
"v=DKIM1; p="
"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArP2MsM5q9IbgVTxwj0nA"
"2Iqa8NsL5L72TGEnBib8nusfoFWw5G8yGpAkterD7w9hIhCiRbpXakzQ8a9vrsnF"
"HsQph79d02mAndE9VS3b+dxABzGKNWdRszrKHDb4q8OeX+g6fsPlPlIOb1ngg4qo"
"oVJTlswV3KacE7OwGq1ZRy8X6CIAjzeiC3x7qiBH5Yxi895i7GLeTwMKQY8mIv1Z"
"iLVoNcH5lpB3FOJFWtXiztpkQaLLVY/YQAGzwRnWQHcqRd6ybtf9q34ADYhq1gZb"
"NC6GOnkets6mv2o7daTQ78Sr+GO2/4DpciXGIDB8QbbX4Qh0kaazEqx9HlGG7MC2"
"TdyIjmMF0pzI9qjVDdkXvwFJLLyIDP4Y4DgGuVHi/+Zdi9YtxcWrKpb8Zv+32xgU"
"Qvz8EQt03upcpxB0aVRkK1I6GYKYr3I0uhYhfBZdUonUkxaklcnrQZVsooo+xont"
"MMyPbPM6HYf0KJZCxGa6AYrIiYlnj7giudVTJdvA1J3IOQEGjq0tRmH0id/Qv2F5"
"Po5zMEPMtx/pcWcqEJEC7/phgboQ3vkZYf/lCqZ8T2JXAIE9ujQFTFE86v+pXhVf"
"98/oY4n5PN9LYfaflkTOmWyfig/qQ7mCjxdaYnOko9hlUnaRGrG5d6Dfy16qFt64"
"PYEseCN67yeWZz8r1NaZHckCAwEAAQ=="
```
!!! tip Note
If you have multiple keys, the above command will output all of the keys and selectors that was configured within amavis.
2. once dns is configured, you can test the DNS entries and amavis config with the following command `amavisd testkeys` if the tests pass, you have configured it properly.
## Changing DKIM Keys
To change your DKIM keys, generate new ones, ensuring you utilise a differently named selector and update `99-dkim-keys` with your new key details. You will also be required to update the DNS entries.
!!! alert Danger
If you reconfigure amavis to sign your E-Mails with a new key before the DNS changes take effect (before cache expires), you run the risk of having your E-Mails fail the receiving servers DKIM checks.
It is recommended that you do the following:
1. generate the new key, add it to a new `dkim_key` section in file `99-dkim-keys`
2. run `amavisd-new showkeys` to get your dns config. Reconfigure DNS with the new key
3. wait 24 hours
5. Prevent users from sending emails (or do after hours when the mail server would normally be quite)
3. edit the `s` to match the new key selector and `d` value to match the domain name in the new key file in section `@dkim_signature_options_bysender_maps` in file `99-dkim-keys`
6. restart amavis with `supervisorctl restart amavis`
7. test the config with `amavisd testkeys`. if the tests pass, thumbs up.
8. you are good to go.

View File

@ -0,0 +1,7 @@
---
title: No Fuss Computings Dockr Mail Server
description: How to use No Fuss Computings Dcokerized E-Mail Server
date: 2023-05-22
template: project.html
about: https://gitlab.com/nofusscomputing/projects/docker-mail
---

View File

@ -0,0 +1,41 @@
---
title: SPF configuration
Description: How to configure SPF for No Fuss Computings docker mail server.
date: 2022-02-17
template: project.html
about: https://gitlab.com/nofusscomputing/projects/docker-mail
---
Sender Policy Framework (SPF) is defined in [RFC7208, Sender Policy Framework (SPF) for Authorizing Use of Domains in Email](https://datatracker.ietf.org/doc/html/rfc7208).
DNS SPF text record example:
``` text
IN TXT "v=spf1 mx a ip4:192.168.0.100 ip6:2001:ef3:2911::/64"
" a:mail.example.org a:mail2.example.org -all"
```
1. `v=spf1` Version attribute. only v1 available.
2. `mx` `a` DNS record type. This indicated that `mx` and `a` records within the domain are authorized senders.
3. `ip4:192.168.0.100` indicates that an ipv4 address as specified is authorized as a sender.
4. `ip6:2001:ef3:2911::/64` Sepcifies that an ipv6 subnet is authorized as a sender
5. `-all` specifies a fail if the sender doesn't match what is specified in the record. other valid qualifiers are "+" pass, "-" fail, "~" softfail, "?" neutral
!!! tip
To allow only specified MX DNS records to be the only specified senders, create a record as follows:
``` text
IN TXT "v=spf1 mx -all"
```
If your MX servers only receive mail, then this option is not suitable. you'll have to use the hostname of the receiving server.
``` text
IN TXT "v=spf1 a:mail.example.org -all"
```

0
docs/projects/index.md Normal file
View File

0
docs/tags.md Normal file
View File

56
include/bin/backup.sh Normal file
View File

@ -0,0 +1,56 @@
#!/bin/bash
set -e
backup_version=1.0
back_file_name="mail_server-$backup_version-$(date +%Y-%m-%d-%H%M-%Z).tar.gz"
start=$(date '+%s')
includes=(/srv/mail)
includes+=(/certs)
includes+=(/var/spool/postfix)
includes+=(/var/spool/spamassassin)
includes+=(/var/log)
includes+=(/var/lib/amavis)
excludes=(--exclude=*.sock)
backup_command="tar -czpvf $back_file_name ${excludes[@]} ${includes[@]}"
cd /tmp
echo "$backup_command"
if ! $backup_command; then
status="tar failed"
elif ! mv "/tmp/$back_file_name" /backup/ ; then
status="mv failed"
else
status="success: version=$backup_version size=$(stat -c%s /backup/$back_file_name) duration=$((`date '+%s'` - $start)) command='$backup_command'"
fi
logger -t backup "$status"
if [ "0$POST_MASTER_EMAIL" != "0" ]; then
cat << EOF | /usr/lib/dovecot/dovecot-lda -d "${POST_MASTER_EMAIL}" -o "plugin/quota=maildir:User quota:noenforcing"
Auto-Submitted: auto-generated
Date: $(date +'%a, %-d %b %Y %H:%M:%S %z')
To: ${POST_MASTER_EMAIL}
From: Mail Server <NO-REPLY@$(hostname -f)>
Subject: Backup $(date +%Y-%m-%d-%H:%M-%Z)
Server backups have occured on $(hostname -f)
Summary:
$status
EOF
fi

View File

@ -0,0 +1,47 @@
#!/bin/sh
set -e
MAILBOX_USER=$1
USER_LOGIN_NAME=$2
if [ "0$MAILBOX_USER" = "0" ]; then
echo " You must specify a mailbox to share";
elif [ "0$USER_LOGIN_NAME" = "0" ]; then
echo " You must specify a user the mailbox is to be shared with";
else
doveadm acl add -u $MAILBOX_USER Inbox user=$USER_LOGIN_NAME lookup read write write-seen write-deleted insert post expunge create delete
doveadm acl add -u $MAILBOX_USER Archive user=$USER_LOGIN_NAME lookup read write write-seen write-deleted insert post expunge create delete
doveadm acl add -u $MAILBOX_USER Drafts user=$USER_LOGIN_NAME lookup read write write-seen write-deleted insert post expunge create delete
doveadm acl add -u $MAILBOX_USER Sent user=$USER_LOGIN_NAME lookup read write write-seen write-deleted insert post expunge create delete
doveadm acl add -u $MAILBOX_USER Spam user=$USER_LOGIN_NAME lookup read write write-seen write-deleted insert post expunge create delete
cat << EOF | /usr/lib/dovecot/dovecot-lda -d ${$USER_LOGIN_NAME} -o "plugin/quota=maildir:User quota:noenforcing"
Auto-Submitted: auto-generated
Date: $(date +'%a, %-d %b %Y %H:%M:%S %z')
From: Postmaster <NO-REPLY@$(hostname -f)>
Subject: New Shared Mailbox ($MAILBOX_USER)
Hi,
Just letting you known that mailbox $MAILBOX_USER, has been shared with you.
You have visibility of the following folders
- Inbox
- Archive
- Drafts
- Sent
- Spam
EOF
fi

14
include/bin/postfix.sh Normal file
View File

@ -0,0 +1,14 @@
#! /bin/bash
trap "service postfix stop" SIGINT
trap "service postfix stop" SIGTERM
trap "service postfix reload" SIGHUP
service postfix start
# wait until postfix is dead (triggered by trap)
while kill -0 "$(< /var/spool/postfix/pid/master.pid)"
do
sleep 5
done

View File

@ -0,0 +1,20 @@
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
Auto-Submitted: auto-generated
Date: $(date +'%a, %-d %b %Y %H:%M:%S %z')
From: Postmaster <NO-REPLY@$(hostname -f)>
Subject: Mailbox Quota Warning
Hi,
Just wanted to let you know that Your mailbox is now $PERCENT% full.
Note: This is an automated message. Please do not respond to it.
TIP:
EOF

52
include/bin/spam-learn.sh Normal file
View File

@ -0,0 +1,52 @@
#!/bin/bash
set -e
start=$(date '+%s')
POSTMASTER="${1}"
# for testing script
#POSTMASTER=postmaster@example.org
HAM_REPORT=''
SPAM_REPORT=''
for i in /srv/mail/* ; do
if [ -d "$i" ]; then
HAM_REPORT=$(printf "$HAM_REPORT\n\nMailbox: $i\n $(sa-learn --ham --showdots --sync $i/mail/cur)\n")
SPAM_REPORT=$(printf "$SPAM_REPORT\n\nMailbox: $i\n $(sa-learn --spam --showdots --sync $i/mail/Spam/cur)\n")
fi
done
if [ "0$POST_MASTER_EMAIL" != "0" ]; then
cat << EOF | /usr/lib/dovecot/dovecot-lda -d "${POST_MASTER_EMAIL}" -o "plugin/quota=maildir:User quota:noenforcing"
Auto-Submitted: auto-generated
Date: $(date +'%a, %-d %b %Y %H:%M:%S %z')
To: ${POST_MASTER_EMAIL}
From: Mail Server <NO-REPLY@$(hostname -f)>
Subject: Spam Learning Report $(date +%Y-%m-%d-%H:%M-%Z)
Command: /bin/spam-learn.sh
Scan duration: $((`date '+%s'` - $start))
****************** Ham Scan ******************
$HAM_REPORT
****************** Spam Scan ******************
$SPAM_REPORT
EOF
fi

View File

@ -0,0 +1,36 @@
#!/bin/sh
set -e
USER=$1
cat << EOF | /usr/lib/dovecot/dovecot-lda -d ${USER} -o "plugin/quota=maildir:User quota:noenforcing"
Auto-Submitted: auto-generated
Date: $(date +'%a, %-d %b %Y %H:%M:%S %z')
From: Postmaster <NO-REPLY@$(hostname -f)>
Subject: New User Welcome
Hi,
This E-Mail has been sent to inform you of some of the ins and outs of this E-Mail server.
Features available to you:
- IMAP Sieve
- Spam automatically sent to your spam folder
- Ability to share your E-mail folders with other users
Quota
=====
Your mailbox has a set quota that should be visible in your E-Mail client. A quota is the storage space that your E-Mails use. It is your responsability to keep you storage below your allocated quota, or you won't be able to send or receive E-Mails.
Spam
====
Spam is defined as unwanted messages, which sometimes contains malicious software. It's advised if you receive a message you think is spam, don't open it. Move it to your spam folder. Any spam that we detect, will automatically delivered to your spam folder. If we miss a spam messages, as stated earlier, please move it to your spam folder.
We have a learning bot that automagically uses your spam folder to learn why it is spam. After our AI learns, it will be better next time at catching the spam messages so you don't have to.
$(if [ "0$POST_MASTER_EMAIL" != "0" ]; then echo "If you have any concerns, please email the postmaster ($POST_MASTER_EMAIL)."; fi )
EOF

View File

@ -0,0 +1,123 @@
#!/bin/bash
set -e
if [ "0$POST_MASTER_EMAIL" != "0" ]; then export MAILTO="$POST_MASTER_EMAIL"; fi
# Populate this file so cron has access to env vars. thanks to https://stackoverflow.com/a/41938139
printenv | grep -v "no_proxy" > /etc/environment
if [ -f "/var/run/amavis/amavisd.pid" ]; then rm /var/run/amavis/amavisd.pid; fi
if [ "$1" == "" ]; then
echo "Setup server type ($SERVERTYPE)"
echo "[Information] starting supervisor daemon"
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
bash
fi
# compile sieve scripts
for file in /etc/dovecot/sieve/*.sieve ;
do
sievec $file;
done
mkdir -p /var/lock/fetchmail
chown debian-spamd:vmail -R /var/spool/spamassassin
chmod 777 /var/spool/spamassassin
if [ "$1" == "setup" ]; then
if [ ! -f /certs/amavis/dkim/example.org.dkim.pem ]; then
echo "[WARNING] Creating DKIM Cert, example.org. Consider Creating your own";
amavisd-new genrsa /certs/amavis/dkim/example.org.dkim.pem 4096;
chmod g+r /certs/amavis/dkim/example.org.dkim.pem;
chgrp amavis /certs/amavis/dkim/example.org.dkim.pem;
amavisd-new showkeys example.org;
fi
supervisorctl start amavis;
postconf -e "myhostname = $(`echo hostname -f`)"
if [ ! -f /certs/dovecot/key.pem ]; then
echo "[WARNING] Creating Self-signed TLS Cert. Consider using letsencrypt or another trusted CA"
openssl req -nodes -new -x509 -keyout /certs/dovecot/key.pem -out /certs/dovecot/cert.pem -subj '/CN=localhost'
fi
if [ ! -f /certs/dovecot/dh.pem ]; then
echo "[Information] Creating DHPEM Key"
openssl dhparam -out /certs/dovecot/dh.pem 2048
fi
echo "[Information] Start dovecot"
supervisorctl start dovecot
sed -i -r -e 's/^manpage_directory/#manpage_directory/' /etc/postfix/main.cf.proto
sed -i -r -e 's/^\$manpage_directory/#$manpage_directory/' /etc/postfix/postfix-files
sed -i -r -e 's/^\$manpage_directory/#$manpage_directory/' /etc/postfix/postfix-files.d/*
if [ ! -f /certs/postfix/key.pem ]; then
echo "[WARNING] Creating Self-signed TLS Cert. Consider using letsencrypt or another trusted CA"
openssl req -nodes -new -x509 -keyout /certs/postfix/key.pem -out /certs/postfix/cert.pem -subj '/CN=localhost'
fi
echo "[Information] set postfix permissions"
postfix set-permissions create-missing
postmap /etc/postfix/header_checks_outbound
postmap /etc/postfix/header_checks_privacy
echo "[Information] start postfix"
# supervisorctl start amavis
supervisorctl start postfix
else
exec "$@"
fi

View File

@ -0,0 +1,27 @@
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:
#@bypass_virus_checks_maps = (
# \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1; # ensure a defined return

View File

@ -0,0 +1,10 @@
#
# Socket config
#
# Listening socket
# 10023 - Submission, Outbound mail
# 10024 - SMTP, Inbound mail
$inet_socket_port = [10023, 10024]

View File

@ -0,0 +1,39 @@
use strict;
#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
# Higher log level to get expected messages at startup
$log_level = 2;
$X_HEADER_LINE = "Virus Scanning product";
$virus_admin = "postmaster";
$banned_admin = "postmaster";
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_DISCARD;
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;
$sa_spam_subject_tag = '';
$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$spam_quarantine_to = undef;
# disable the "Received" headers to be added to the mail header
#$allowed_added_header_fields{lc('Received')} = 0;
#------------ Do not modify anything below this line -------------
1; # ensure a defined return

View File

@ -0,0 +1,11 @@
$interface_policy{'10023'} = 'SUBMISSION';
$policy_bank{'SUBMISSION'} = {
originating => 1,
smtpd_discard_ehlo_keywords => ['8BITMIME'],
final_banned_destiny => D_BOUNCE, # Bounce so user is notified
final_spam_destiny => D_BOUNCE, # Bounce so user is notified
final_virus_destiny => D_BOUNCE, # Bounce so user is notified
};

View File

@ -0,0 +1,4 @@
$enable_dkim_signing = 1;
$enable_dkim_verification = 1;

View File

@ -0,0 +1,18 @@
dkim_key(
'example.org',
'dkim',
'/certs/amavis/dkim/example.org.dkim.pem'
);
@dkim_signature_options_bysender_maps = (
{
"example.org" => {
s => 'dkim',
d => 'example.org',
a => 'rsa-sha256',
ttl => 10*24*3600
}
}
);

View File

@ -0,0 +1,6 @@
#
# Backup the docker container
#
# m h dom mon dow user command
01 0,3,6,9,12,15,18,21 * * * root /bin/backup.sh >/dev/null 2>&1

View File

@ -0,0 +1,6 @@
#
# SpamAssassin Bayes learning from mailboxes
#
# m h dom mon dow user command
#20,50 * * * * root if [ "0$USE_FETCHMAIL_PL" != "0" ]; then /bin/fetchmail.pl 2>&1; fi

View File

@ -0,0 +1,6 @@
#
# Run Log rotate
#
# m h dom mon dow user command
1 0 * * * root /usr/sbin/logrotate -f /etc/logrotate.conf >/dev/null

View File

@ -0,0 +1,6 @@
#
# SpamAssassin Bayes learning from mailboxes
#
# m h dom mon dow user command
30 0,3,6,9,12,15,18,21 * * * debian-spamd /bin/spam-learn.sh >/dev/null 2>&1

View File

@ -0,0 +1,2 @@
OPTIONS="--create-prefs --max-children 5 --username debian-spamd --helper-home-dir /home/spamd/ -s /var/log/spamd.log"
CRON=1

View File

@ -0,0 +1,31 @@
##
## Authentication processes
##
#auth_verbose = yes
#auth_debug=yes
#disable_plaintext_auth = yes
#auth_mechanisms = plain login
auth_mechanisms = plain
mail_access_groups=vmail
mail_uid=vmail
mail_gid=vmail
auth_username_format = %Lu
userdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap-userdb.conf.ext
}
passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap.conf.ext
}

View File

@ -0,0 +1,95 @@
##
## Log destination.
##
log_path=/var/log/dovecot.log
##
## Logging verbosity and debugging.
##
# Log filter is a space-separated list conditions. If any of the conditions
# match, the log filter matches (i.e. they're ORed together). Parenthesis
# are supported if multiple conditions need to be matched together.
#
# See https://doc.dovecot.org/configuration_manual/event_filter/ for details.
#
# For example: event=http_request_* AND category=error AND category=storage
#
# Filter to specify what debug logging to enable. This will eventually replace
# mail_debug and auth_debug settings.
#log_debug =
# Crash after logging a matching event. For example category=error will crash
# any time an error is logged, which can be useful for debugging.
#log_core_filter =
# Log unsuccessful authentication attempts and the reasons why they failed.
auth_verbose = yes
# In case of password mismatches, log the attempted password. Valid values are
# no, plain and sha1. sha1 can be useful for detecting brute force password
# attempts vs. user simply trying the same password over and over again.
# You can also truncate the value to n chars by appending ":n" (e.g. sha1:6).
#auth_verbose_passwords = no
# Even more verbose logging for debugging purposes. Shows for example SQL
# queries.
#auth_debug = no
# In case of password mismatches, log the passwords and used scheme so the
# problem can be debugged. Enabling this also enables auth_debug.
#auth_debug_passwords = no
# Enable mail process debugging. This can help you figure out why Dovecot
# isn't finding your mails.
#mail_debug = no
# Show protocol level SSL errors.
#verbose_ssl = yes
# mail_log plugin provides more event logging for mail processes.
plugin {
# Events to log. Also available: flag_change append
#mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
# Available fields: uid, box, msgid, from, subject, size, vsize, flags
# size and vsize are available only for expunge and copy events.
#mail_log_fields = uid box msgid size
}
##
## Log formatting.
##
# Prefix for each line written to log file. % codes are in strftime(3)
# format.
#log_timestamp = "%b %d %H:%M:%S "
# Space-separated list of elements we want to log. The elements which have
# a non-empty variable value are joined together to form a comma-separated
# string.
#login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
# Login log format. %s contains login_log_format_elements string, %$ contains
# the data we want to log.
#login_log_format = %$: %s
# Log prefix for mail processes. See doc/wiki/Variables.txt for list of
# possible variables you can use.
#mail_log_prefix = "%s(%u)<%{pid}><%{session}>: "
# Format to use for logging mail deliveries:
# %$ - Delivery status message (e.g. "saved to INBOX")
# %m / %{msgid} - Message-ID
# %s / %{subject} - Subject
# %f / %{from} - From address
# %p / %{size} - Physical size
# %w / %{vsize} - Virtual size
# %e / %{from_envelope} - MAIL FROM envelope
# %{to_envelope} - RCPT TO envelope
# %{delivery_time} - How many milliseconds it took to deliver the mail
# %{session_time} - How long LMTP session took, not including delivery_time
# %{storage_id} - Backend-specific ID for mail, e.g. Maildir filename
#deliver_log_format = msgid=%m: %$

View File

@ -0,0 +1,13 @@
##
## Mailbox locations and namespaces
##
mail_home = /srv/mail/%u
mail_location = maildir:~/mail:LAYOUT=fs
mailbox_list_index = yes
mail_shared_explicit_inbox = yes

View File

@ -0,0 +1,79 @@
##
## Services
##
mail_plugins = $mail_plugins acl quota welcome
service auth {
unix_listener /var/spool/postfix/private/dovecot/auth {
#mode = 0660
mode=0777
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode=0777
}
}
service imap {
}
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
service_count = 1
process_min_avail = 1
}
#service imap-postlogin {
# all post-login scripts are executed via script-login binary
# executable = script-login -d /etc/dovecot/acl_groups.py
# the script process runs as the user specified here (v2.0.14+):
# user = $default_internal_user
# this UNIX socket listener must use the same name as given to imap executable
# unix_listener imap-postlogin {
# }
#}
service lmtp {
unix_listener /var/spool/postfix/private/lda {
group = postfix
mode = 0600
user = postfix
}
}
service pop3-login {
inet_listener pop3 {
#port = 110
}
inet_listener pop3s {
#port = 995
#ssl = yes
}
}
service submission-login {
inet_listener submission {
#port = 587
}
}

View File

@ -0,0 +1,20 @@
##
## SSL settings
##
#verbose_ssl = yes
ssl = required
ssl_prefer_server_ciphers = yes
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = </certs/dovecot/dh.pem
ssl_cert = </certs/dovecot/cert.pem
ssl_key = </certs/dovecot/key.pem
# Generated by https://ssl-config.mozilla.org/
ssl_min_protocol = TLSv1.2
ssl_cipher_list = 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

View File

@ -0,0 +1,49 @@
##
## LDA specific settings (also used by LMTP)
##
# Address to use when sending rejection mails.
# Default is postmaster@%d. %d expands to recipient domain.
#postmaster_address =
# Hostname to use in various parts of sent mails (e.g. in Message-Id) and
# in LMTP replies. Default is the system's real hostname@domain.
#hostname =
# If user is over quota, return with temporary failure instead of
# bouncing the mail.
#quota_full_tempfail = no
# Binary to use for sending mails.
#sendmail_path = /usr/sbin/sendmail
# If non-empty, send mails via this SMTP host[:port] instead of sendmail.
#submission_host =
# Subject: header to use for rejection mails. You can use the same variables
# as for rejection_reason below.
#rejection_subject = Rejected: %s
# Human readable error message for rejection mails. You can use variables:
# %n = CRLF, %r = reason, %s = original subject, %t = recipient
#rejection_reason = Your message to <%t> was automatically rejected:%n%r
# Delimiter character between local-part and detail in email address.
#recipient_delimiter = +
# Header where the original recipient address (SMTP's RCPT TO: address) is taken
# from if not available elsewhere. With dovecot-lda -a parameter overrides this.
# A commonly used header for this is X-Original-To.
#lda_original_recipient_header =
# Should saving a mail to a nonexistent mailbox automatically create it?
lda_mailbox_autocreate = yes
# Should automatically created mailboxes be also automatically subscribed?
lda_mailbox_autosubscribe = yes
protocol lda {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins sieve
}

View File

@ -0,0 +1,75 @@
##
## Mailbox definitions
##
namespace inbox {
prefix =
type = private
separator = /
inbox = yes
list = yes
mailbox Archive {
auto = subscribe
special_use = \Archive
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Sent {
auto = subscribe # autocreate and autosubscribe the Sent mailbox
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Spam {
auto = subscribe
special_use = \Junk
autoexpunge = 60d
}
mailbox Trash {
auto = subscribe
autoexpunge = 120d
special_use = \Trash
}
mailbox virtual/All { # if you have a virtual "All messages" mailbox
auto = no
special_use = \All
}
# If you have a virtual "Flagged" mailbox:
#mailbox virtual/Flagged {
# special_use = \Flagged
# comment = All my flagged messages
#}
# If you have a virtual "Important" mailbox:
#mailbox virtual/Important {
# special_use = \Important
# comment = All my important messages
#}
}
# Shared mailbox
namespace {
type = shared
separator = /
prefix = shared/%%n@%%d/
location = maildir:%%h/mail:LAYOUT=fs:INDEXPVT=%h/mail/shared/%%n@%%d
subscriptions = no
list = children
}

View File

@ -0,0 +1,22 @@
##
## IMAP specific settings
##
# If nothing happens for this long while client is IDLEing, move the connection
# to imap-hibernate process and close the old imap process. This saves memory,
# because connections use very little memory in imap-hibernate process. The
# downside is that recreating the imap process back uses some resources.
imap_hibernate_timeout = 5M
# Maximum IMAP command line length. Some clients generate very long command
# lines with huge mailboxes, so you may need to raise this if you get
# "Too long argument" or "IMAP command line too large" errors often.
#imap_max_line_length = 64k
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep tb-lsub-flags
mail_plugins = $mail_plugins imap_acl imap_quota
}

View File

@ -0,0 +1,18 @@
##
## LMTP specific settings
##
# Verify quota before replying to RCPT TO. This adds a small overhead.
lmtp_rcpt_check_quota = yes
# Add "Received:" header to mails delivered.
#lmtp_add_received_header = no
protocol lmtp {
info_log_path = /var/log/dovecot-lmtp.log
# postmaster_address = postmaster@example.org
mail_plugins = $mail_plugins sieve
}

View File

@ -0,0 +1,85 @@
##
## ManageSieve specific settings
##
# Uncomment to enable managesieve protocol:
#protocols = $protocols sieve
# Service definitions
service managesieve-login {
inet_listener sieve {
port = 4190
}
#inet_listener sieve_deprecated {
# port = 2000
#}
# Number of connections to handle before starting a new process. Typically
# the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
# is faster. <doc/wiki/LoginProcess.txt>
service_count = 1
# Number of processes to always keep waiting for more connections.
process_min_avail = 1
# If you set service_count=0, you probably need to grow this.
#vsz_limit = 64M
}
service managesieve {
# Max. number of ManageSieve processes (connections)
process_limit = 100
}
# Service configuration
protocol sieve {
# Maximum ManageSieve command line length in bytes. ManageSieve usually does
# not involve overly long command lines, so this setting will not normally
# need adjustment
managesieve_max_line_length = 65536
# Maximum number of ManageSieve connections allowed for a user from each IP
# address.
# NOTE: The username is compared case-sensitively.
mail_max_userip_connections = 5
# Space separated list of plugins to load (none known to be useful so far).
# Do NOT try to load IMAP plugins here.
#mail_plugins =
# MANAGESIEVE logout format string:
# %i - total number of bytes read from client
# %o - total number of bytes sent to client
# %{put_bytes} - Number of bytes saved using PUTSCRIPT command
# %{put_count} - Number of scripts saved using PUTSCRIPT command
# %{get_bytes} - Number of bytes read using GETCRIPT command
# %{get_count} - Number of scripts read using GETSCRIPT command
# %{get_bytes} - Number of bytes processed using CHECKSCRIPT command
# %{get_count} - Number of scripts checked using CHECKSCRIPT command
# %{deleted_count} - Number of scripts deleted using DELETESCRIPT command
# %{renamed_count} - Number of scripts renamed using RENAMESCRIPT command
managesieve_logout_format = bytes=%i/%o
# To fool ManageSieve clients that are focused on CMU's timesieved you can
# specify the IMPLEMENTATION capability that Dovecot reports to clients.
# For example: 'Cyrus timsieved v2.2.13'
#managesieve_implementation_string = Dovecot Pigeonhole
# Explicitly specify the SIEVE and NOTIFY capability reported by the server
# before login. If left unassigned these will be reported dynamically
# according to what the Sieve interpreter supports by default (after login
# this may differ depending on the user).
#managesieve_sieve_capability =
#managesieve_notify_capability =
# The maximum number of compile errors that are returned to the client upon
# script upload or script verification.
#managesieve_max_compile_errors = 5
# Refer to 90-sieve.conf for script quota configuration and configuration of
# Sieve execution limits.
}

View File

@ -0,0 +1,28 @@
##
## Mailbox access control lists.
##
# vfile backend reads ACLs from "dovecot-acl" file from mail directory.
# You can also optionally give a global ACL directory path where ACLs are
# applied to all users' mailboxes. The global ACL directory contains
# one file for each mailbox, eg. INBOX or sub.mailbox. cache_secs parameter
# specifies how many seconds to wait between stat()ing dovecot-acl file
# to see if it changed.
plugin {
# Per-user ACL:
acl = vfile
# (if yes) Creates an issue where shared folders inbox folder is
# shown but clicking on the root folder, also displays the contents
# of the inbox.
#acl_defaults_from_inbox = yes
acl = vfile:/etc/dovecot/dovecot-acl:cache_secs=60
}
plugin {
acl_shared_dict = file:/srv/mail/shared-mailboxes
}

View File

@ -0,0 +1,21 @@
##
## Plugin settings
##
plugin {
welcome_script = welcome %u
welcome_wait = no
}
service welcome {
executable = script /bin/welcome-email.sh
user = dovecot
unix_listener welcome {
user = dovecot
group = postfix
mode = 0766
}
}

View File

@ -0,0 +1,90 @@
##
## Quota configuration.
##
# Note that you also have to enable quota plugin in mail_plugins setting.
# <doc/wiki/Quota.txt>
##
## Quota limits
##
plugin {
quota = maildir:User quota
# quota2 = maildir:Shared quota:ns=shared/
quota_rule = *:storage=200M
quota_rule2 = Trash:storage=+50M
quota_grace = 10%%
quota_max_mail_size = 25M
quota_status_success = DUNNO
quota_status_nouser = DUNNO
quota_status_overquota = "552 5.2.2 Mailbox is full"
}
#plugin {
# quota2 = maildir:Shared quota:ns=shared/
# quota_rule = *:storage=200M
# quota_max_mail_size = 25M
# quota_status_success = DUNNO
# quota_status_nouser = DUNNO
# quota_status_overquota = "552 5.2.2 Mailbox is full"
#}
##
## Quota warnings
##
# You can execute a given command when user exceeds a specified quota limit.
# Each quota root has separate limits. Only the command for the first
# exceeded limit is executed, so put the highest limit first.
# The commands are executed via script service by connecting to the named
# UNIX socket (quota-warning below).
# Note that % needs to be escaped as %%, otherwise "% " expands to empty.
plugin {
quota_warning = storage=50%% quota-warning 50 %u
quota_warning2 = storage=80%% quota-warning 80 %u
quota_warning3 = storage=90%% quota-warning 90 %u
quota_warning4 = storage=95%% quota-warning 95 %u
}
# Example quota-warning service. The unix listener's permissions should be
# set in a way that mail processes can connect to it. Below example assumes
# that mail processes run as vmail user. If you use mode=0666, all system users
# can generate quota warnings to anyone.
service quota-warning {
executable = script /bin/quota-warning.sh
# user = vmail
unix_listener quota-warning {
user = dovecot
group = vmail
mode = 0766
}
}
service quota-status {
executable = quota-status -p postfix
unix_listener /var/spool/postfix/private/quota {
user = dovecot
group = vmail
mode = 0660
}
client_limit = 1
}

View File

@ -0,0 +1,45 @@
# Sieve Extprograms plugin configuration
# Don't forget to add the sieve_extprograms plugin to the sieve_plugins setting.
# Also enable the extensions you need (one or more of vnd.dovecot.pipe,
# vnd.dovecot.filter and vnd.dovecot.execute) by adding these to the
# sieve_extensions or sieve_global_extensions settings. Restricting these
# extensions to a global context using sieve_global_extensions is recommended.
plugin {
# The directory where the program sockets are located for the
# vnd.dovecot.pipe, vnd.dovecot.filter and vnd.dovecot.execute extension
# respectively. The name of each unix socket contained in that directory
# directly maps to a program-name referenced from the Sieve script.
#sieve_pipe_socket_dir = sieve-pipe
#sieve_filter_socket_dir = sieve-filter
#sieve_execute_socket_dir = sieve-execute
# The directory where the scripts are located for direct execution by the
# vnd.dovecot.pipe, vnd.dovecot.filter and vnd.dovecot.execute extension
# respectively. The name of each script contained in that directory
# directly maps to a program-name referenced from the Sieve script.
#sieve_pipe_bin_dir = /usr/lib/dovecot/sieve-pipe
#sieve_filter_bin_dir = /usr/lib/dovecot/sieve-filter
#sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
}
# An example program service called 'do-something' to pipe messages to
#service do-something {
# Define the executed script as parameter to the sieve service
#executable = script /usr/lib/dovecot/sieve-pipe/do-something.sh
# Use some unprivileged user for executing the program
#user = dovenull
# The unix socket located in the sieve_pipe_socket_dir (as defined in the
# plugin {} section above)
#unix_listener sieve-pipe/do-something {
# LDA/LMTP must have access
# user = vmail
# mode = 0600
#}
#}

View File

@ -0,0 +1,210 @@
##
## Settings for the Sieve interpreter
##
# Do not forget to enable the Sieve plugin in 15-lda.conf and 20-lmtp.conf
# by adding it to the respective mail_plugins= settings.
# The Sieve interpreter can retrieve Sieve scripts from several types of
# locations. The default `file' location type is a local filesystem path
# pointing to a Sieve script file or a directory containing multiple Sieve
# script files. More complex setups can use other location types such as
# `ldap' or `dict' to fetch Sieve scripts from remote databases.
#
# All settings that specify the location of one ore more Sieve scripts accept
# the following syntax:
#
# location = [<type>:]path[;<option>[=<value>][;...]]
#
# If the type prefix is omitted, the script location type is 'file' and the
# location is interpreted as a local filesystem path pointing to a Sieve script
# file or directory. Refer to Pigeonhole wiki or INSTALL file for more
# information.
plugin {
# The location of the user's main Sieve script or script storage. The LDA
# Sieve plugin uses this to find the active script for Sieve filtering at
# delivery. The "include" extension uses this location for retrieving
# :personal" scripts. This is also where the ManageSieve service will store
# the user's scripts, if supported.
#
# Currently only the 'file:' location type supports ManageSieve operation.
# Other location types like 'dict:' and 'ldap:' can currently only
# be used as a read-only script source ().
#
# For the 'file:' type: use the ';active=' parameter to specify where the
# active script symlink is located.
# For other types: use the ';name=' parameter to specify the name of the
# default/active script.
sieve = file:~/sieve;active=~/.dovecot.sieve
# The default Sieve script when the user has none. This is the location of a
# global sieve script file, which gets executed ONLY if user's personal Sieve
# script doesn't exist. Be sure to pre-compile this script manually using the
# sievec command line tool if the binary is not stored in a global location.
# --> See sieve_before for executing scripts before the user's personal
# script.
#sieve_default = /var/lib/dovecot/sieve/default.sieve
# The name by which the default Sieve script (as configured by the
# sieve_default setting) is visible to the user through ManageSieve.
#sieve_default_name =
# Location for ":global" include scripts as used by the "include" extension.
#sieve_global_path =
# The location of a Sieve script that is run for any message that is about to
# be discarded; i.e., it is not delivered anywhere by the normal Sieve
# execution. This only happens when the "implicit keep" is canceled, by e.g.
# the "discard" action, and no actions that deliver the message are executed.
# This "discard script" can prevent discarding the message, by executing
# alternative actions. If the discard script does nothing, the message is
# still discarded as it would be when no discard script is configured.
#sieve_discard =
# Location Sieve of scripts that need to be executed before the user's
# personal script. If a 'file' location path points to a directory, all the
# Sieve scripts contained therein (with the proper `.sieve' extension) are
# executed. The order of execution within that directory is determined by the
# file names, using a normal 8bit per-character comparison.
#
# Multiple script locations can be specified by appending an increasing number
# to the setting name. The Sieve scripts found from these locations are added
# to the script execution sequence in the specified order. Reading the
# numbered sieve_before settings stops at the first missing setting, so no
# numbers may be skipped.
#sieve_before = /var/lib/dovecot/sieve.d/
#sieve_before2 = ldap:/etc/sieve-ldap.conf;name=ldap-domain
#sieve_before3 = (etc...)
sieve_before = /etc/dovecot/sieve
# Identical to sieve_before, only the specified scripts are executed after the
# user's script (only when keep is still in effect!). Multiple script
# locations can be specified by appending an increasing number.
#sieve_after =
#sieve_after2 =
#sieve_after2 = (etc...)
# Which Sieve language extensions are available to users. By default, all
# supported extensions are available, except for deprecated extensions or
# those that are still under development. Some system administrators may want
# to disable certain Sieve extensions or enable those that are not available
# by default. This setting can use '+' and '-' to specify differences relative
# to the default. For example `sieve_extensions = +imapflags' will enable the
# deprecated imapflags extension in addition to all extensions were already
# enabled by default.
#sieve_extensions = +notify +imapflags
sieve_extensions=-vacation -enotify -editheader imap4flags
# Which Sieve language extensions are ONLY available in global scripts. This
# can be used to restrict the use of certain Sieve extensions to administrator
# control, for instance when these extensions can cause security concerns.
# This setting has higher precedence than the `sieve_extensions' setting
# (above), meaning that the extensions enabled with this setting are never
# available to the user's personal script no matter what is specified for the
# `sieve_extensions' setting. The syntax of this setting is similar to the
# `sieve_extensions' setting, with the difference that extensions are
# enabled or disabled for exclusive use in global scripts. Currently, no
# extensions are marked as such by default.
#sieve_global_extensions =
# The Pigeonhole Sieve interpreter can have plugins of its own. Using this
# setting, the used plugins can be specified. Check the Dovecot wiki
# (wiki2.dovecot.org) or the pigeonhole website
# (http://pigeonhole.dovecot.org) for available plugins.
# The sieve_extprograms plugin is included in this release.
#sieve_plugins =
sieve_plugins = sieve_extprograms
# The maximum size of a Sieve script. The compiler will refuse to compile any
# script larger than this limit. If set to 0, no limit on the script size is
# enforced.
#sieve_max_script_size = 1M
# The maximum number of actions that can be performed during a single script
# execution. If set to 0, no limit on the total number of actions is enforced.
#sieve_max_actions = 32
# The maximum number of redirect actions that can be performed during a single
# script execution. If set to 0, no redirect actions are allowed.
#sieve_max_redirects = 4
# The maximum number of personal Sieve scripts a single user can have. If set
# to 0, no limit on the number of scripts is enforced.
# (Currently only relevant for ManageSieve)
#sieve_quota_max_scripts = 0
# The maximum amount of disk storage a single user's scripts may occupy. If
# set to 0, no limit on the used amount of disk storage is enforced.
# (Currently only relevant for ManageSieve)
#sieve_quota_max_storage = 0
# The primary e-mail address for the user. This is used as a default when no
# other appropriate address is available for sending messages. If this setting
# is not configured, either the postmaster or null "<>" address is used as a
# sender, depending on the action involved. This setting is important when
# there is no message envelope to extract addresses from, such as when the
# script is executed in IMAP.
#sieve_user_email =
# The path to the file where the user log is written. If not configured, a
# default location is used. If the main user's personal Sieve (as configured
# with sieve=) is a file, the logfile is set to <filename>.log by default. If
# it is not a file, the default user log file is ~/.dovecot.sieve.log.
#sieve_user_log =
# Specifies what envelope sender address is used for redirected messages.
# The following values are supported for this setting:
#
# "sender" - The sender address is used (default).
# "recipient" - The final recipient address is used.
# "orig_recipient" - The original recipient is used.
# "user_email" - The user's primary address is used. This is
# configured with the "sieve_user_email" setting. If
# that setting is unconfigured, "user_mail" is equal to
# "recipient".
# "postmaster" - The postmaster_address configured for the LDA.
# "<user@domain>" - Redirected messages are always sent from user@domain.
# The angle brackets are mandatory. The null "<>" address
# is also supported.
#
# This setting is ignored when the envelope sender is "<>". In that case the
# sender of the redirected message is also always "<>".
#sieve_redirect_envelope_from = sender
## TRACE DEBUGGING
# Trace debugging provides detailed insight in the operations performed by
# the Sieve script. These settings apply to both the LDA Sieve plugin and the
# IMAPSIEVE plugin.
#
# WARNING: On a busy server, this functionality can quickly fill up the trace
# directory with a lot of trace files. Enable this only temporarily and as
# selective as possible.
# The directory where trace files are written. Trace debugging is disabled if
# this setting is not configured or if the directory does not exist. If the
# path is relative or it starts with "~/" it is interpreted relative to the
# current user's home directory.
#sieve_trace_dir =
# The verbosity level of the trace messages. Trace debugging is disabled if
# this setting is not configured. Possible values are:
#
# "actions" - Only print executed action commands, like keep,
# fileinto, reject and redirect.
# "commands" - Print any executed command, excluding test commands.
# "tests" - Print all executed commands and performed tests.
# "matching" - Print all executed commands, performed tests and the
# values matched in those tests.
#sieve_trace_level =
# Enables highly verbose debugging messages that are usually only useful for
# developers.
#sieve_trace_debug = no
# Enables showing byte code addresses in the trace output, rather than only
# the source line numbers.
#sieve_trace_addresses = no
}

View File

@ -0,0 +1,7 @@
INBOX.Archive owner lrwstipek
INBOX.Drafts owner lrwstipek
INBOX.Spam owner lrwstipek
INBOX.Sent owner lrwstipek
INBOX.Trash owner lrwstipek
#* owner akxeilprwts

View File

@ -0,0 +1,24 @@
uris = ldap://openldap
dn = cn=admin,dc=example,dc=org
dnpass = admin
debug_level = 0
auth_bind = no
ldap_version = 3
base = dc=example,dc=org
scope = subtree
user_attrs = uid=user=%{ldap:uid}, memberUid=user=%{ldap:mail}, mail=home=/srv/mail/%{ldap:mail}, mail=mailHomeDirectory=maildir:~/mail:LAYOUT=fs, mailQuota=quota_rule=*:bytes=%$
user_filter = (&(objectClass=PostfixBookMailAccount)(|(uid=%u)(mail=%u)(cn=%u)))
pass_filter = (&(objectClass=PostfixBookMailAccount)(|(uid=%u)(mail=%u)))
iterate_attrs = mail=user
iterate_filter = (objectClass=PostfixBookMailAccount)

View File

@ -0,0 +1,2 @@
protocols = $protocols imap

View File

@ -0,0 +1,2 @@
protocols = $protocols lmtp

View File

@ -0,0 +1,2 @@
protocols = $protocols sieve

View File

@ -0,0 +1,11 @@
require ["fileinto", "mailbox"];
if exists "X-Spam-Flag" {
if header :contains "X-Spam-Flag" "NO" {
} else {
fileinto :create "Spam";
stop;
}
}

View File

@ -0,0 +1,13 @@
/var/log/dovecot.log
{
rotate 30
daily
missingok
notifempty
compress
delaycompress
create 0644 dovecot dovecot
postrotate
supervisorctl restart dovecot
endscript
}

View File

@ -0,0 +1,13 @@
/var/log/postfix.log
{
rotate 30
daily
missingok
notifempty
compress
delaycompress
create 0644 postfix postfix
postrotate
supervisorctl restart postfix
endscript
}

View File

@ -0,0 +1,28 @@
/var/log/syslog
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
/var/log/lastlog
/var/log/faillog
{
rotate 30
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
supervisorctl restart rsyslog
supervisorctl restart amavis
endscript
}

View File

@ -0,0 +1,24 @@
# database settings
# database backend - uncomment one of these
our $db_type = 'mysql';
#my $db_type = 'mysql';
# host name
our $db_host="mysql";
# database name
our $db_name="roundcube";
# database username
our $db_username="roundcube";
# database password
our $db_password="roundcube";
# Where to create a lockfile; please ensure path exists.
our $run_dir="/var/lock/fetchmail";
# in case you want to use dovecot deliver to put the mail directly into the users mailbox,
# set "mda" in the fetchmail table to the keyword "dovecot".
# Where the delivery binary is located
$dovecot_deliver = "/usr/lib/dovecot/dovecot-lda";

View File

@ -0,0 +1,16 @@
# For a fully commented sample config file see policyd-spf.conf.commented
# or https://manpages.debian.org/testing/postfix-policyd-spf-python/policyd-spf.conf.5.en.html
debugLevel = 1
TestOnly = 1
# Don't bounce mail (False). to bounce mail set to Fail
HELO_reject = False
Mail_From_reject = False
PermError_reject = False
TempError_Defer = False
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1

View File

@ -0,0 +1,14 @@
#
# Header Checks for outbound E-Mail
#
# Checks for outbound mail
#
#
# Remove spam headers as they are applicable for local users only.
#
/^X-Spam-Flag:/ IGNORE
/^X-Spam-Score:/ IGNORE
/^X-Spam-Level:/ IGNORE
/^X-Spam-Status:/ IGNORE

View File

@ -0,0 +1,32 @@
#
# Privacy Header Checks
#
#
# Hide the software the sender is using
#
/^User-Agent:/ IGNORE
#
# Remove Date from header.
#
# The date that the client users is often in their own timezone.
# this is not desirable, so removing and having the server re-add
# the date header, enables hiding the users timezone.
#
# NOTE: postfix requires the following settings:
# - always_add_missing_headers=yes
# - local_header_rewrite_clients=permit_sasl_authenticated,permit_mynetworks,permit_inet_interfaces
#
# These settings will add the date back to the E-Mail header using the servers timezone.
#
/^Date:/ IGNORE
#
# Remove the sender IP Address and Any hostname and replace with localhost
#
/^Received:\sfrom [^ ]+ \([^ ]+ \[[IPv0-9a-f:.]+\]\)(\s+.* \(server\) with .+)$/ REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1])$1

View File

@ -0,0 +1,16 @@
server_host = ldap://openldap
start_tls = no
version = 3
#tls_ca_cert_file = /etc/ldap/tls/CA.pem
#tls_require_cert = yes
bind = yes
bind_dn = cn=admin,dc=example,dc=org
bind_pw = admin
search_base = ou=Users,dc=example,dc=org
query_filter = (&(objectClass=PostfixBookMailAccount)(|(mail=%s)(mailAlias=%s)))
result_attribute = uid

View File

@ -0,0 +1,17 @@
server_host = ldap://openldap
start_tls = no
version = 3
#tls_ca_cert_file = /etc/ldap/tls/CA.pem
#tls_require_cert = yes
bind = yes
bind_dn = cn=admin,dc=example,dc=org
bind_pw = admin
search_base = ou=Groups,dc=example,dc=org
query_filter = (&(objectClass=PostfixBookMailAccount)(objectClass=posixGroup)(|(mail=%s)(mailAlias=%s)))
result_attribute = memberUid

View File

@ -0,0 +1,17 @@
server_host = ldap://172.20.0.4
start_tls = no
version = 3
#tls_ca_cert_file = /etc/ldap/tls/CA.pem
#tls_require_cert = yes
bind = yes
bind_dn = cn=admin,dc=example,dc=org
bind_pw = admin
search_base = ou=mail,dc=example,dc=org
query_filter = (&(ObjectClass=dNSDomain)(dc=%s))
result_attribute = dc

View File

@ -0,0 +1,18 @@
server_host = ldap://openldap
start_tls = no
version = 3
#tls_ca_cert_file = /etc/ldap/tls/CA.pem
#tls_require_cert = yes
bind = yes
bind_dn = cn=admin,dc=example,dc=org
bind_pw = admin
search_base = dc=example,dc=org
#scope = sub
query_filter = (&(objectClass=PostfixBookMailAccount)(|(mail=%s)(mailAlias=%s)))
result_attribute = mail

View File

@ -0,0 +1,18 @@
server_host = ldap://openldap
start_tls = no
version = 3
#tls_ca_cert_file = /etc/ldap/tls/CA.pem
#tls_require_cert = yes
bind = yes
bind_dn = cn=admin,dc=example,dc=org
bind_pw = admin
search_base = ou=mail,dc=example,dc=org
scope = sub
query_filter = (&(ObjectClass=dNSDomain)(dc=%s))
result_attribute = dc

View File

@ -0,0 +1,177 @@
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
#smtp inet n - y - - smtpd
smtp inet n - y - 1 postscreen
smtpd pass - - y - - smtpd
-o syslog_name=postfix/inbound
-o smtpd_tls_security_level=may
#dnsblog unix - - y - 0 dnsblog
#tlsproxy unix - - y - 0 tlsproxy
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/dovecot/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=ldap:/etc/postfix/ldap/smtpd_sender_login_maps,ldap:/etc/postfix/ldap/smtpd_sender_login_maps_groups
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,check_policy_service,unix:private/quota,permit_sasl_authenticated,reject
-o cleanup_service_name=privacy
-o content_filter=amavis:[127.0.0.1]:10023
amavis unix - - n - 2 smtp
-o syslog_name=postfix/$service_name
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
-o content_filter=
127.0.0.1:10025 inet n - n - - smtpd
-o syslog_name=amavis
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
-o content_filter=
policyd-spf unix - n n - 2 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
#spamassassin unix - n n - - pipe
# user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
#smtps inet n - y - - smtpd
# -o syslog_name=postfix/smtps
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#628 inet n - y - - qmqpd
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
privacy unix n - n - 0 cleanup
-o syslog_name=postfix/$service_name
-o header_checks=regexp:/etc/postfix/header_checks_privacy
qmgr unix n - n 300 1 qmgr
#qmgr unix n - n 300 1 oqmgr
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
-o syslog_name=postfix/$service_name
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
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - pipe
flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
# mailbox_transport = lmtp:inet:localhost
# virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix - n n - - pipe
# flags=DRX user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix - n n - - pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}

View File

@ -0,0 +1,119 @@
# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# Only a small subset of options are listed below
#
###########################################################################
# A 'contact address' users should contact for more info. (replaces
# _CONTACTADDRESS_ in the report template)
# report_contact youremailaddress@domain.tld
# Add *****SPAM***** to the Subject header of spam e-mails
#
# rewrite_header Subject *****SPAM*****
# Save spam messages as a message/rfc822 MIME attachment instead of
# modifying the original message (0: off, 2: use text/plain instead)
#
report_safe 2
# Set which networks or hosts are considered 'trusted' by your mail
# server (i.e. not spammers)
#
# trusted_networks 212.17.35.
# Set file-locking method (flock is not safe over NFS, but is faster)
#
# lock_method flock
# Set the threshold at which a message is considered spam (default: 5.0)
#
required_score 5.0
# Use Bayesian classifier (default: 1)
#
use_bayes 1
# Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1
bayes_path /var/spool/spamassassin/bayes
bayes_file_mode 775
# Set headers which may provide inappropriate cues to the Bayesian
# classifier
#
# bayes_ignore_header X-Bogosity
# bayes_ignore_header X-Spam-Flag
# bayes_ignore_header X-Spam-Status
# Whether to decode non- UTF-8 and non-ASCII textual parts and recode
# them to UTF-8 before the text is given over to rules processing.
#
# normalize_charset 1
# Textual body scan limit (default: 50000)
#
# Amount of data per email text/* mimepart, that will be run through body
# rules. This enables safer and faster scanning of large messages,
# perhaps having very large textual attachments. There should be no need
# to change this well tested default.
#
# body_part_scan_size 50000
# Textual rawbody data scan limit (default: 500000)
#
# Amount of data per email text/* mimepart, that will be run through
# rawbody rules.
#
# rawbody_part_scan_size 500000
# Some shortcircuiting, if the plugin is enabled
#
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
#
# default: strongly-whitelisted mails are *really* whitelisted now, if the
# shortcircuiting plugin is active, causing early exit to save CPU load.
# Uncomment to turn this on
#
# SpamAssassin tries hard not to launch DNS queries before priority -100.
# If you want to shortcircuit without launching unneeded queries, make
# sure such rule priority is below -100. These examples are already:
#
# shortcircuit USER_IN_WHITELIST on
# shortcircuit USER_IN_DEF_WHITELIST on
# shortcircuit USER_IN_ALL_SPAM_TO on
# shortcircuit SUBJECT_IN_WHITELIST on
# the opposite; blacklisted mails can also save CPU
#
# shortcircuit USER_IN_BLACKLIST on
# shortcircuit USER_IN_BLACKLIST_TO on
# shortcircuit SUBJECT_IN_BLACKLIST on
# if you have taken the time to correctly specify your "trusted_networks",
# this is another good way to save CPU
#
# shortcircuit ALL_TRUSTED on
# and a well-trained bayes DB can save running rules, too
#
# shortcircuit BAYES_99 spam
# shortcircuit BAYES_00 ham
endif # Mail::SpamAssassin::Plugin::Shortcircuit

View File

@ -0,0 +1,77 @@
[supervisord]
#daemon=false
nodaemon = true
pidfile=/var/run/supervisord.pid
[program:init]
startsecs=0
stopwaitsecs=55
command=/docker-entrypoint.sh setup
autorestart=false
autostart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
[program:rsyslog]
startsecs=0
stopwaitsecs=55
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
command=/usr/sbin/rsyslogd -n
[program:cron]
startsecs=0
stopwaitsecs=55
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
command=/usr/sbin/cron -f
[program:amavis]
startsecs=0
stopwaitsecs=55
autostart=false
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
command=/usr/sbin/amavisd-new foreground
[program:dovecot]
startsecs=0
stopwaitsecs=55
command=/usr/sbin/dovecot -F -c /etc/dovecot/dovecot.conf
autorestart=true
autostart=false
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
[program:postfix]
startsecs=0
stopwaitsecs=55
#command=/usr/lib/postfix/sbin/master -vv -c /etc/postfix -d
#command=postfix -vv -c /etc/postfix start-fg
command=/bin/postfix.sh
autorestart=true
autostart=false
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
[program:spamassassin]
#directory=/etc/dovecot
command=spamd --username debian-spamd --nouser-config --syslog stderr --pidfile /var/run/spamd.pid --helper-home-dir /var/lib/spamassassin --ip-address --allowed-ips 0.0.0.0/0
autorestart=false
autostart=false
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log

33
mkdocs.yml Normal file
View File

@ -0,0 +1,33 @@
INHERIT: website-template/mkdocs.yml
docs_dir: 'docs'
repo_name: Docker-Mail
repo_url: https://gitlab.com/nofusscomputing/projects/docker-mail
edit_uri: '/-/ide/project/nofusscomputing/projects/docker-mail/edit/development/-/docs/'
nav:
- Home: index.md
- Articles:
- articles/index.md
- Projects:
- projects/index.md
- Docker-Mail:
- projects/docker-mail/index.md
- projects/docker-mail/dkim.md
- projects/docker-mail/spf.md
- Operations:
- operations/index.md
- Contact Us: contact.md

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
pymdown-extensions==9.5
Pygments==2.13.0

1
test/.env Executable file
View File

@ -0,0 +1 @@
COMPOSE_PROJECT_NAME=mail

36
test/config.inc.php Normal file
View File

@ -0,0 +1,36 @@
<?php
$config['plugins'] = array(
'fetchmail',
'contextmenu'
);
$config['log_driver'] = 'stdout';
$config['zipdownload_selection'] = true;
$config['des_key'] = '2A9UVzfF6nsNucrunVIQ+AL/';
include(__DIR__ . '/config.docker.inc.php');
$config['imap_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'allow_self_signed' => true,
'peer_name' => 'localhost',
)
);
$config['smtp_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'allow_self_signed' => true,
'peer_name' => 'localhost',
),
);
$config['layout'] = 'list';
$config['managesieve_host'] = 'tls://mail';
$config['managesieve_conn_options'] = array(
'ssl' => array(
'verify_peer' => true,
'allow_self_signed' => true,
'peer_name' => 'localhost',
),
);

192
test/docker-compose.yml Executable file
View File

@ -0,0 +1,192 @@
#
# upgrade: docker-compose run --rm sentry upgrade
#
version: '2.2'
services:
openldap:
image: osixia/openldap:1.5.0
container_name: openldap
domainname: "example.org" # important: same as hostname
hostname: "example.org"
restart: unless-stopped
cpus: 2
mem_limit: 100MB
environment:
LDAP_LOG_LEVEL: "256"
LDAP_ORGANISATION: "Example"
LDAP_DOMAIN: "example.org"
LDAP_BASE_DN: ""
LDAP_ADMIN_PASSWORD: "admin"
LDAP_CONFIG_PASSWORD: "config"
LDAP_READONLY_USER: "false"
LDAP_READONLY_USER_USERNAME: "readonly"
LDAP_READONLY_USER_PASSWORD: "readonly"
LDAP_RFC2307BIS_SCHEMA: "false"
LDAP_BACKEND: "mdb"
LDAP_TLS: "true"
LDAP_TLS_CRT_FILENAME: "ldap.crt"
LDAP_TLS_KEY_FILENAME: "ldap.key"
LDAP_TLS_CA_CRT_FILENAME: "ca.crt"
LDAP_TLS_ENFORCE: "false"
LDAP_TLS_CIPHER_SUITE: "SECURE256:-VERS-SSL3.0"
LDAP_TLS_PROTOCOL_MIN: "3.1"
LDAP_TLS_VERIFY_CLIENT: "demand"
LDAP_REPLICATION: "false"
#LDAP_REPLICATION_CONFIG_SYNCPROV: "binddn="cn=admin,cn=config" bindmethod=simple credentials=$LDAP_CONFIG_PASSWORD searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical"
#LDAP_REPLICATION_DB_SYNCPROV: "binddn="cn=admin,$LDAP_BASE_DN" bindmethod=simple credentials=$LDAP_ADMIN_PASSWORD searchbase="$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical"
#docker-compose.ymlLDAP_REPLICATION_HOSTS: "#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"
KEEP_EXISTING_CONFIG: "false"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "false"
LDAP_SSL_HELPER_PREFIX: "ldap"
tty: true
stdin_open: true
volumes:
- ldap_data:/var/lib/ldap
- ldap_config:/etc/ldap/slapd.d
- ldap_certs:/container/service/slapd/assets/certs/
- ./ldif:/container/service/slapd/assets/config/bootstrap/ldif/custom/
expose:
- 389
- 636
networks:
- default
phpldapadmin:
image: osixia/phpldapadmin:latest
container_name: phpldapadmin
depends_on:
- openldap
restart: unless-stopped
cpus: 2
mem_limit: 100MB
environment:
PHPLDAPADMIN_LDAP_HOSTS: openldap
PHPLDAPADMIN_HTTPS: "false"
ports:
- "127.0.0.1:8080:80"
networks:
- default
mail:
image: test/mail:latest
container_name: mail
depends_on:
- openldap
links:
- mysql
build:
context: .
dockerfile: dockerfile
restart: unless-stopped
cpus: 2
mem_limit: 512MB
hostname: test.nodomain.org
volumes:
- mail_store:/srv/mail:rw
- mail_ssl:/certs
- sa_learn:/var/spool/spamassassin
- mail_backup:/backup
- mail_log:/var/log
ports:
# SMTP
- '25:25'
# IMAP
- "993:993"
# Submission
- "587:587"
# ManageSieve
- "4190:4190"
environment:
POST_MASTER_EMAIL: postmaster@example.org
USE_FETCHMAIL_PL: "true"
networks:
- default
mysql:
image: mysql:5.7
container_name: mysql
restart: unless-stopped
cpus: 2
mem_limit: 350MB
volumes:
- mysql_data:/var/lib/mysql
expose:
- 5432
- 3306
environment:
- MYSQL_ROOT_PASSWORD=admin
- MYSQL_DATABASE=roundcube
- MYSQL_USER=roundcube
- MYSQL_PASSWORD=roundcube
roundcube:
image: roundcube/roundcubemail:1.5.x-fpm-alpine
container_name: roundcube
restart: unless-stopped
cpus: 2
mem_limit: 100MB
depends_on:
- mysql
- mail
links:
- mysql
expose:
- 9000
volumes:
- roundcube_www:/var/www/html
- ./config.inc.php:/var/www/html/config/config.inc.php:ro
environment:
- ROUNDCUBEMAIL_DB_TYPE=mysql
- ROUNDCUBEMAIL_DB_HOST=mysql
- ROUNDCUBEMAIL_DB_NAME=roundcube
- ROUNDCUBEMAIL_DB_USER=roundcube
- ROUNDCUBEMAIL_DB_PASSWORD=roundcube
- ROUNDCUBEMAIL_SKIN=larry
- ROUNDCUBEMAIL_DEFAULT_HOST=ssl://mail
- ROUNDCUBEMAIL_SMTP_SERVER=tls://mail
- ROUNDCUBEMAIL_PLUGINS=acl,additional_message_headers,managesieve,show_additional_headers
nginx:
image: nginx:1.21-alpine
container_name: nginx
restart: unless-stopped
cpus: 2
mem_limit: 100MB
ports:
- 80:80
# If you need SSL connection
# - '443:443'
depends_on:
- roundcube
links:
- roundcube
volumes:
- roundcube_www:/var/www/html
- ./nginx/templates:/etc/nginx/templates
- ngnix_log:/var/log
# Provide a custom nginx conf
# - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
# If you need SSL connection, you can provide your own certificates
# - ./certs:/etc/letsencrypt
# - ./certs-data:/data/letsencrypt
environment:
- NGINX_HOST=localhost # set your local domain or your live domain
- NGINX_PHP_CGI=roundcube:9000 # same as roundcubemail container name
volumes:
ldap_data:
ldap_config:
ldap_certs:
mail_store:
mail_ssl:
clamav_db:
sa_learn:
mail_backup:
mail_log:
mysql_data:
roundcube_www:
nginx_www:
ngnix_log:

111
test/ldif/example.org.ldif Executable file
View File

@ -0,0 +1,111 @@
# LDIF Export for dc=example,dc=org
# Server: openldap (openldap)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 8
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on August 2, 2021 1:20 am
# Version: 1.2.5
version: 1
# Entry 2: ou=Groups,dc=example,dc=org
dn: ou=Groups,dc=example,dc=org
objectclass: organizationalUnit
objectclass: top
ou: Groups
# Entry 3: cn=posix group 1,ou=Groups,dc=example,dc=org
dn: cn=posix group 1,ou=Groups,dc=example,dc=org
cn: posix group 1
gidnumber: 500
memberuid: posix.user1
memberuid: posix.user2
objectclass: posixGroup
objectclass: top
# Entry 4: cn=posix group 2,ou=Groups,dc=example,dc=org
dn: cn=posix group 2,ou=Groups,dc=example,dc=org
cn: posix group 2
gidnumber: 501
memberuid: posix.user1
objectclass: posixGroup
objectclass: top
# Entry 5: cn=posix group 3,ou=Groups,dc=example,dc=org
dn: cn=posix group 3,ou=Groups,dc=example,dc=org
cn: posix group 3
gidnumber: 502
memberuid: posix.user2
objectclass: posixGroup
objectclass: top
# Entry 6: ou=Users,dc=example,dc=org
dn: ou=Users,dc=example,dc=org
objectclass: organizationalUnit
objectclass: top
ou: Users
# Entry 7: cn=posix user1,ou=Users,dc=example,dc=org
dn: cn=posix user1,ou=Users,dc=example,dc=org
cn: posix user1
gidnumber: 500
givenname: posix
homedirectory: /home/users/posix.user1
mail: test@example.org
mailalias: test1@example.org
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
objectclass: PostfixBookMailAccount
sn: user1
uid: posix.user1
uidnumber: 1000
userpassword: {MD5}fGoYCzaJagqMAnh+6vsOTA==
# Entry 8: cn=posix user2,ou=Users,dc=example,dc=org
dn: cn=posix user2,ou=Users,dc=example,dc=org
cn: posix user2
gidnumber: 500
givenname: posix
homedirectory: /home/users/posix.user2
mail: posix.user2@example.org
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: user2
uid: posix.user2
uidnumber: 1001
userpassword: {MD5}bLdfZSqbUnmOts8iAQV8cw==
# Entry 1: ou=mail,dc=example,dc=org
dn: ou=mail,dc=example,dc=org
objectclass: organizationalUnit
objectclass: top
ou: mail
# Entry 2: dc=example.org,ou=mail,dc=example,dc=org
dn: dc=example.org,ou=mail,dc=example,dc=org
dc: example.org
objectclass: dNSDomain
objectclass: top
# Entry 1: cn=support,ou=Groups,dc=example,dc=org
dn: cn=support,ou=Groups,dc=example,dc=org
cn: support
gidnumber: 503
mail: support@example.org
memberuid: posix.user1
objectclass: posixGroup
objectclass: top
objectclass: PostfixBookMailAccount

View File

@ -0,0 +1,18 @@
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access-roundcube.log;
root /var/www/html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass ${NGINX_PHP_CGI};
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

1
website-template Submodule

Submodule website-template added at 8735f623dc