WIP Add initial cookbook and roles for email service
This commit is contained in:
		
							parent
							
								
									158a9c2fbe
								
							
						
					
					
						commit
						fbcf1ed5e7
					
				
							
								
								
									
										5
									
								
								roles/email_proxy.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								roles/email_proxy.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| name "email_proxy" | ||||
| 
 | ||||
| run_list %w( | ||||
|   kosmos_email::firewall | ||||
| ) | ||||
							
								
								
									
										6
									
								
								roles/email_server.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/email_server.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| name "email_server" | ||||
| 
 | ||||
| run_list %w( | ||||
|   role[ldap_client] | ||||
|   kosmos_email::default | ||||
| ) | ||||
							
								
								
									
										25
									
								
								site-cookbooks/kosmos_email/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								site-cookbooks/kosmos_email/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| .vagrant | ||||
| *~ | ||||
| *# | ||||
| .#* | ||||
| \#*# | ||||
| .*.sw[a-z] | ||||
| *.un~ | ||||
| 
 | ||||
| # Bundler | ||||
| Gemfile.lock | ||||
| gems.locked | ||||
| bin/* | ||||
| .bundle/* | ||||
| 
 | ||||
| # test kitchen | ||||
| .kitchen/ | ||||
| kitchen.local.yml | ||||
| 
 | ||||
| # Chef Infra | ||||
| Berksfile.lock | ||||
| .zero-knife.rb | ||||
| Policyfile.lock.json | ||||
| 
 | ||||
| .idea/ | ||||
| 
 | ||||
							
								
								
									
										7
									
								
								site-cookbooks/kosmos_email/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								site-cookbooks/kosmos_email/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| # kosmos_email CHANGELOG | ||||
| 
 | ||||
| This file is used to list changes made in each version of the kosmos_email cookbook. | ||||
| 
 | ||||
| ## 0.1.0 | ||||
| 
 | ||||
| Initial release. | ||||
							
								
								
									
										20
									
								
								site-cookbooks/kosmos_email/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								site-cookbooks/kosmos_email/LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| Copyright (c) Kosmos Developers | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining | ||||
| a copy of this software and associated documentation files (the | ||||
| "Software"), to deal in the Software without restriction, including | ||||
| without limitation the rights to use, copy, modify, merge, publish, | ||||
| distribute, sublicense, and/or sell copies of the Software, and to | ||||
| permit persons to whom the Software is furnished to do so, subject to | ||||
| the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be | ||||
| included in all copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||||
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||||
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
							
								
								
									
										4
									
								
								site-cookbooks/kosmos_email/attributes/default.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								site-cookbooks/kosmos_email/attributes/default.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| node.default["email"]["domain"] = "example.com" | ||||
| node.default["email"]["hostname"] = "mail.example.com" | ||||
| # node.default["email"]["user"] = "ray" | ||||
| # node.default["email"]["group"] = "email" | ||||
							
								
								
									
										115
									
								
								site-cookbooks/kosmos_email/chefignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								site-cookbooks/kosmos_email/chefignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| # Put files/directories that should be ignored in this file when uploading | ||||
| # to a Chef Infra Server or Supermarket. | ||||
| # Lines that start with '# ' are comments. | ||||
| 
 | ||||
| # OS generated files # | ||||
| ###################### | ||||
| .DS_Store | ||||
| ehthumbs.db | ||||
| Icon? | ||||
| nohup.out | ||||
| Thumbs.db | ||||
| .envrc | ||||
| 
 | ||||
| # EDITORS # | ||||
| ########### | ||||
| .#* | ||||
| .project | ||||
| .settings | ||||
| *_flymake | ||||
| *_flymake.* | ||||
| *.bak | ||||
| *.sw[a-z] | ||||
| *.tmproj | ||||
| *~ | ||||
| \#* | ||||
| REVISION | ||||
| TAGS* | ||||
| tmtags | ||||
| .vscode | ||||
| .editorconfig | ||||
| 
 | ||||
| ## COMPILED ## | ||||
| ############## | ||||
| *.class | ||||
| *.com | ||||
| *.dll | ||||
| *.exe | ||||
| *.o | ||||
| *.pyc | ||||
| *.so | ||||
| */rdoc/ | ||||
| a.out | ||||
| mkmf.log | ||||
| 
 | ||||
| # Testing # | ||||
| ########### | ||||
| .circleci/* | ||||
| .codeclimate.yml | ||||
| .delivery/* | ||||
| .foodcritic | ||||
| .kitchen* | ||||
| .mdlrc | ||||
| .overcommit.yml | ||||
| .rspec | ||||
| .rubocop.yml | ||||
| .travis.yml | ||||
| .watchr | ||||
| .yamllint | ||||
| azure-pipelines.yml | ||||
| Dangerfile | ||||
| examples/* | ||||
| features/* | ||||
| Guardfile | ||||
| kitchen.yml* | ||||
| mlc_config.json | ||||
| Procfile | ||||
| Rakefile | ||||
| spec/* | ||||
| test/* | ||||
| 
 | ||||
| # SCM # | ||||
| ####### | ||||
| .git | ||||
| .gitattributes | ||||
| .gitconfig | ||||
| .github/* | ||||
| .gitignore | ||||
| .gitkeep | ||||
| .gitmodules | ||||
| .svn | ||||
| */.bzr/* | ||||
| */.git | ||||
| */.hg/* | ||||
| */.svn/* | ||||
| 
 | ||||
| # Berkshelf # | ||||
| ############# | ||||
| Berksfile | ||||
| Berksfile.lock | ||||
| cookbooks/* | ||||
| tmp | ||||
| 
 | ||||
| # Bundler # | ||||
| ########### | ||||
| vendor/* | ||||
| Gemfile | ||||
| Gemfile.lock | ||||
| 
 | ||||
| # Policyfile # | ||||
| ############## | ||||
| Policyfile.rb | ||||
| Policyfile.lock.json | ||||
| 
 | ||||
| # Documentation # | ||||
| ############# | ||||
| CODE_OF_CONDUCT* | ||||
| CONTRIBUTING* | ||||
| documentation/* | ||||
| TESTING* | ||||
| UPGRADING* | ||||
| 
 | ||||
| # Vagrant # | ||||
| ########### | ||||
| .vagrant | ||||
| Vagrantfile | ||||
							
								
								
									
										25
									
								
								site-cookbooks/kosmos_email/compliance/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								site-cookbooks/kosmos_email/compliance/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| # compliance | ||||
| 
 | ||||
| This directory contains Chef InSpec profile, waiver and input objects which are used with the Chef Infra Compliance Phase. | ||||
| 
 | ||||
| Detailed information on the Chef Infra Compliance Phase can be found in the [Chef Documentation](https://docs.chef.io/chef_compliance_phase/). | ||||
| 
 | ||||
| ```plain | ||||
| ./compliance | ||||
| ├── inputs | ||||
| ├── profiles | ||||
| └── waivers | ||||
| ``` | ||||
| 
 | ||||
| Use the `chef generate` command from Chef Workstation to create content for these directories: | ||||
| 
 | ||||
| ```sh | ||||
| # Generate a Chef InSpec profile | ||||
| chef generate profile PROFILE_NAME | ||||
| 
 | ||||
| # Generate a Chef InSpec waiver file | ||||
| chef generate waiver WAIVER_NAME | ||||
| 
 | ||||
| # Generate a Chef InSpec input file | ||||
| chef generate input INPUT_NAME | ||||
| ``` | ||||
							
								
								
									
										53
									
								
								site-cookbooks/kosmos_email/kitchen.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								site-cookbooks/kosmos_email/kitchen.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| --- | ||||
| driver: | ||||
|   name: dokken | ||||
|   chef_version: 18.2.7 | ||||
|   pull_platform_image: false | ||||
|   pull_chef_image: false | ||||
|   memory_limit: 2147483648 # 2GB | ||||
|   volumes: | ||||
|     # saves the apt archieves outside of the container | ||||
|     - /var/cache/apt/archives/:/var/cache/apt/archives/ | ||||
|   ## The forwarded_port port feature lets you connect to ports on the VM guest via | ||||
|   ## localhost on the host. | ||||
|   ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports | ||||
|   # network: | ||||
|   #  - ["forwarded_port", { guest: 4444, host: 4444 }] | ||||
| 
 | ||||
| transport: | ||||
|   name: dokken | ||||
| 
 | ||||
| provisioner: | ||||
|   name: dokken | ||||
|   # clean_dokken_sandbox: false | ||||
|   # You may wish to disable always updating cookbooks in CI or other testing environments. | ||||
|   # For example: | ||||
|   #   always_update_cookbooks: <%= !ENV['CI'] %> | ||||
|   # always_update_cookbooks: false | ||||
| 
 | ||||
|   ## product_name and product_version specifies a specific Chef product and version to install. | ||||
|   ## see the Chef documentation for more details: https://docs.chef.io/workstation/config_yml_kitchen/ | ||||
|   #  product_name: chef | ||||
|   #  product_version: 16 | ||||
| 
 | ||||
| verifier: | ||||
|   name: inspec | ||||
| 
 | ||||
| platforms: | ||||
|   - name: ubuntu-22.04 | ||||
|     driver: | ||||
|       image: dokken/ubuntu-22.04 | ||||
|       privileged: true | ||||
|       pid_one_command: /usr/lib/systemd/systemd | ||||
|       intermediate_instructions: | ||||
|         # prevent APT from deleting the APT folder | ||||
|         - RUN rm /etc/apt/apt.conf.d/docker-clean | ||||
| 
 | ||||
| suites: | ||||
|   - name: default | ||||
|     run_list: | ||||
|       - recipe[kosmos_email::default] | ||||
|     verifier: | ||||
|       inspec_tests: | ||||
|         - test/integration/default | ||||
|     attributes: | ||||
							
								
								
									
										10
									
								
								site-cookbooks/kosmos_email/metadata.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								site-cookbooks/kosmos_email/metadata.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| name 'kosmos_email' | ||||
| maintainer 'Kosmos Developers' | ||||
| maintainer_email 'ops@kosmos.org' | ||||
| license 'MIT' | ||||
| description 'Installs/configures an email service' | ||||
| version '0.1.0' | ||||
| chef_version '>= 18.0' | ||||
| 
 | ||||
| depends "hostname" | ||||
| depends "postfix" | ||||
							
								
								
									
										25
									
								
								site-cookbooks/kosmos_email/recipes/default.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								site-cookbooks/kosmos_email/recipes/default.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| # | ||||
| # Cookbook:: kosmos_email | ||||
| # Recipe:: default | ||||
| # | ||||
| 
 | ||||
| domain   = node["email"]["domain"] | ||||
| hostname = node["email"]["hostname"] | ||||
| ip_addr  = node["knife_zero"]["host"] | ||||
| 
 | ||||
| node.override["set_fqdn"] = hostname | ||||
| include_recipe "hostname" | ||||
| 
 | ||||
| tls_cert_for hostname do | ||||
|   auth "gandi_dns" | ||||
|   action :create | ||||
| end | ||||
| 
 | ||||
| firewall_rule "private network access" do | ||||
|   command  :allow | ||||
|   protocol :tcp | ||||
|   source   "10.1.1.0/24" | ||||
| end | ||||
| 
 | ||||
| include_recipe 'kosmos_email::postfix' | ||||
| include_recipe 'kosmos_email::dovecot' | ||||
							
								
								
									
										84
									
								
								site-cookbooks/kosmos_email/recipes/dovecot.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								site-cookbooks/kosmos_email/recipes/dovecot.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,84 @@ | ||||
| # | ||||
| # Cookbook:: kosmos_email | ||||
| # Recipe:: dovecot | ||||
| # | ||||
| 
 | ||||
| %w[ | ||||
|   dovecot-core | ||||
|   dovecot-imapd | ||||
|   dovecot-ldap | ||||
|   dovecot-lmtpd | ||||
|   dovecot-pop3d | ||||
| ].each do |pkg| | ||||
|   apt_package pkg | ||||
| end | ||||
| 
 | ||||
| domain   = node["email"]["domain"] | ||||
| hostname = node["email"]["hostname"] | ||||
| ip_addr  = node["knife_zero"]["host"] | ||||
| 
 | ||||
| credentials = Chef::EncryptedDataBagItem.load('credentials', 'email') | ||||
| 
 | ||||
| user "vmail" do | ||||
|   gid "mail" | ||||
|   system true | ||||
|   manage_home false | ||||
| end | ||||
| 
 | ||||
| template "/etc/dovecot/dovecot.conf" do | ||||
|   source    "dovecot.conf.erb" | ||||
|   mode      0644 | ||||
|   # TODO variables protocols: "imap pop3 lmtp" | ||||
|   variables protocols: "imap lmtp", | ||||
|             # TODO find by email_proxy role | ||||
|             haproxy_trusted_networks: "10.1.1.167/32" | ||||
|   notifies :restart, "service[dovecot]", :delayed | ||||
| end | ||||
| 
 | ||||
| template "/etc/dovecot/dovecot-ldap.conf.ext" do | ||||
|   source    "dovecot-ldap.conf.ext.erb" | ||||
|   mode      0600 | ||||
|   variables uris: "ldap://ldap.kosmos.local", # TODO add list of all IPs instead? | ||||
|             dn: credentials['ldap_dn'], | ||||
|             dnpass: credentials['ldap_dnpass'], | ||||
|             base: "ou=kosmos.org,cn=users,dc=kosmos,dc=org", | ||||
|             user_attrs: "mailhome=home", | ||||
|             user_filter: "(&(objectClass=person)(cn=%u))", | ||||
|             pass_attrs: "cn=user,mailpassword=password", | ||||
|             pass_filter: "(&(objectClass=person)(cn=%u))", | ||||
|             default_pass_scheme: "BLF-CRYPT" | ||||
|   notifies :restart, "service[dovecot]", :delayed | ||||
| end | ||||
| 
 | ||||
| template "/etc/dovecot/conf.d/10-auth.conf" do | ||||
|   source    "dovecot_10-auth.conf.erb" | ||||
|   mode      0644 | ||||
|   notifies :restart, "service[dovecot]", :delayed | ||||
| end | ||||
| 
 | ||||
| template "/etc/dovecot/conf.d/10-mail.conf" do | ||||
|   source    "dovecot_10-mail.conf.erb" | ||||
|   mode      0644 | ||||
|   variables mail_uid: "vmail", | ||||
|             mail_gid: "mail" | ||||
|   notifies :restart, "service[dovecot]", :delayed | ||||
| end | ||||
| 
 | ||||
| template "/etc/dovecot/conf.d/10-master.conf" do | ||||
|   source    "dovecot_10-master.conf.erb" | ||||
|   mode      0644 | ||||
|   notifies :restart, "service[dovecot]", :delayed | ||||
| end | ||||
| 
 | ||||
| template "/etc/dovecot/conf.d/10-ssl.conf" do | ||||
|   source    "dovecot_10-ssl.conf.erb" | ||||
|   mode      0644 | ||||
|   variables ssl: "required", | ||||
|             ssl_cert: node['postfix']['main']['smtpd_tls_cert_file'], | ||||
|             ssl_key: node['postfix']['main']['smtpd_tls_key_file'] | ||||
|   notifies :restart, "service[dovecot]", :delayed | ||||
| end | ||||
| 
 | ||||
| service "dovecot" do | ||||
|   action [:enable, :start] | ||||
| end | ||||
							
								
								
									
										34
									
								
								site-cookbooks/kosmos_email/recipes/firewall.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								site-cookbooks/kosmos_email/recipes/firewall.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| # | ||||
| # Cookbook:: kosmos_email | ||||
| # Recipe:: firewall | ||||
| # | ||||
| 
 | ||||
| firewall_rule "SMTP" do | ||||
|   command  :allow | ||||
|   port     25 | ||||
|   protocol :tcp | ||||
| end | ||||
| 
 | ||||
| firewall_rule "SMTPS" do | ||||
|   command  :allow | ||||
|   port     465 | ||||
|   protocol :tcp | ||||
| end | ||||
| 
 | ||||
| firewall_rule "SMTPS" do | ||||
|   command  :allow | ||||
|   port     587 | ||||
|   protocol :tcp | ||||
| end | ||||
| 
 | ||||
| firewall_rule "IMAP" do | ||||
|   command  :allow | ||||
|   port     143 | ||||
|   protocol :tcp | ||||
| end | ||||
| 
 | ||||
| firewall_rule "IMAPS" do | ||||
|   command  :allow | ||||
|   port     993 | ||||
|   protocol :tcp | ||||
| end | ||||
							
								
								
									
										144
									
								
								site-cookbooks/kosmos_email/recipes/postfix.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								site-cookbooks/kosmos_email/recipes/postfix.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,144 @@ | ||||
| # | ||||
| # Cookbook:: kosmos_email | ||||
| # Recipe:: postfix | ||||
| # | ||||
| 
 | ||||
| %w[ | ||||
|   postfix | ||||
|   postfix-ldap | ||||
| ].each do |pkg| | ||||
|   apt_package pkg | ||||
| end | ||||
| 
 | ||||
| domain   = node["email"]["domain"] | ||||
| hostname = node["email"]["hostname"] | ||||
| ip_addr  = node["knife_zero"]["host"] | ||||
| 
 | ||||
| credentials = Chef::EncryptedDataBagItem.load('credentials', 'email') | ||||
| 
 | ||||
| node.normal["postfix"]["mail_type"] = "master" | ||||
| node.normal["postfix"]["use_relay_restrictions_maps"] = true | ||||
| node.normal["postfix"]["relay_restrictions"] = { domain => "OK", hostname => "OK" } | ||||
| 
 | ||||
| node.normal['postfix']['main']['mydomain'] = domain | ||||
| node.normal['postfix']['main']['myorigin'] = domain | ||||
| node.normal['postfix']['main']['myhostname'] = hostname | ||||
| node.normal['postfix']['main']['mynetworks'] = ["10.1.1.0/24", "127.0.0.0/8"] | ||||
| node.normal['postfix']['main']['smtpd_use_tls'] = "yes" | ||||
| node.normal['postfix']['main']['smtpd_tls_cert_file'] = "/etc/letsencrypt/live/#{hostname}/fullchain.pem" | ||||
| node.normal['postfix']['main']['smtpd_tls_key_file'] = "/etc/letsencrypt/live/#{hostname}/privkey.pem" | ||||
| node.normal['postfix']['main']['mailbox_transport'] = "lmtp:unix:private/dovecot-lmtp" | ||||
| node.normal['postfix']['main']['virtual_transport'] = "lmtp:unix:private/dovecot-lmtp" | ||||
| node.normal['postfix']['main']['smtputf8_enable'] = "no" | ||||
| node.normal['postfix']['main']['recipient_delimiter'] = "+" | ||||
| node.normal['postfix']['main']['alias_maps'] = "hash:/etc/aliases, ldap:/etc/postfix/ldap-aliases.cf" | ||||
| # node.normal['postfix']['main']['virtual_mailbox_maps'] = "ldap:/etc/postfix/ldap-virtual-mailboxes.cf" | ||||
| 
 | ||||
| node.normal['postfix']['master'] = { | ||||
|   "#{ip_addr}:2525": { | ||||
|     "active": true, | ||||
|     "order": 1, | ||||
|     "type": "inet", | ||||
|     "private": false, | ||||
|     "maxproc": "1", | ||||
|     "command": "postscreen", | ||||
|     "args": [ | ||||
|       "-o postscreen_upstream_proxy_protocol=haproxy", | ||||
|       "-o postscreen_cache_map=btree:$data_directory/postscreen_2525_cache", | ||||
|       "-o syslog_name=postfix/2525" | ||||
|     ] | ||||
|   }, | ||||
|   "#{ip_addr}:10587": { | ||||
|     "active": true, | ||||
|     "order": 2, | ||||
|     "type": "inet", | ||||
|     "private": false, | ||||
|     "chroot": true, | ||||
|     "command": "smtpd", | ||||
|     "args": [ | ||||
|       "-o syslog_name=postfix/10587", | ||||
|       "-o smtpd_tls_security_level=encrypt", | ||||
|       "-o smtpd_tls_wrappermode=no", | ||||
|       "-o smtpd_sasl_auth_enable=yes", | ||||
|       "-o smtpd_relay_restrictions=permit_sasl_authenticated,reject", | ||||
|       "-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject", | ||||
|       "-o smtpd_sasl_type=dovecot", | ||||
|       "-o smtpd_sasl_path=private/auth", | ||||
|       "-o smtpd_upstream_proxy_protocol=haproxy", | ||||
|     ] | ||||
|   }, | ||||
|   "#{ip_addr}:10465": { | ||||
|     "active": true, | ||||
|     "order": 3, | ||||
|     "type": "inet", | ||||
|     "private": false, | ||||
|     "chroot": true, | ||||
|     "command": "smtpd", | ||||
|     "args": [ | ||||
|       "-o syslog_name=postfix/10465", | ||||
|       "-o smtpd_tls_wrappermode=yes", | ||||
|       "-o smtpd_sasl_auth_enable=yes", | ||||
|       "-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject", | ||||
|       "-o smtpd_sasl_type=dovecot", | ||||
|       "-o smtpd_sasl_path=private/auth", | ||||
|       "-o smtpd_upstream_proxy_protocol=haproxy", | ||||
|     ] | ||||
|   }, | ||||
|   "smtpd": { | ||||
|     "active": true, | ||||
|     "order": 100, | ||||
|     "type": "pass", | ||||
|     "chroot": true, | ||||
|     "command": "smtpd", | ||||
|     "args": [] | ||||
|   }, | ||||
|   "dnsblog": { | ||||
|     "active": true, | ||||
|     "order": 101, | ||||
|     "type": "unix", | ||||
|     "chroot": true, | ||||
|     "maxproc": "0", | ||||
|     "command": "dnsblog", | ||||
|     "args": [] | ||||
|   }, | ||||
|   "tlsproxy": { | ||||
|     "active": true, | ||||
|     "order": 102, | ||||
|     "type": "unix", | ||||
|     "chroot": true, | ||||
|     "maxproc": "0", | ||||
|     "command": "tlsproxy", | ||||
|     "args": [] | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| template "/etc/postfix/ldap-aliases.cf" do | ||||
|   source    "ldap-aliases.cf.erb" | ||||
|   mode      0600 | ||||
|   variables server_host: "ldap.kosmos.local", | ||||
|             bind_dn: credentials['ldap_dn'], | ||||
|             bind_pw: credentials['ldap_dnpass'], | ||||
|             search_base: "ou=kosmos.org,cn=users,dc=kosmos,dc=org", | ||||
|             query_filter: "(&(objectClass=person)(cn=%u))", | ||||
|             result_attribute: "maildrop" | ||||
|   notifies :restart, "service[postfix]", :delayed | ||||
| end | ||||
| 
 | ||||
| # template "/etc/postfix/ldap-virtual-mailboxes.cf" do | ||||
| #   source    "ldap-virtual-mailboxes.cf.erb" | ||||
| #   mode      0600 | ||||
| #   variables server_host: "ldap.kosmos.local", | ||||
| #             bind_dn: credentials['ldap_dn'], | ||||
| #             bind_pw: credentials['ldap_dnpass'], | ||||
| #             search_base: "ou=kosmos.org,cn=users,dc=kosmos,dc=org", | ||||
| #             query_filter: "maildrop=%s", | ||||
| #             result_attribute: "mailhome", | ||||
| #             result_format: "%s/mail/" | ||||
| #   notifies :restart, "service[postfix]", :delayed | ||||
| # end | ||||
| 
 | ||||
| include_recipe 'postfix::server' | ||||
| 
 | ||||
| service "postfix" do | ||||
|   action [:enable, :start] | ||||
| end | ||||
							
								
								
									
										151
									
								
								site-cookbooks/kosmos_email/templates/dovecot-ldap.conf.ext.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								site-cookbooks/kosmos_email/templates/dovecot-ldap.conf.ext.erb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,151 @@ | ||||
| # This file is commonly accessed via passdb {} or userdb {} section in | ||||
| # conf.d/auth-ldap.conf.ext | ||||
| 
 | ||||
| # This file is opened as root, so it should be owned by root and mode 0600. | ||||
| # | ||||
| # http://wiki2.dovecot.org/AuthDatabase/LDAP | ||||
| # | ||||
| # NOTE: If you're not using authentication binds, you'll need to give | ||||
| # dovecot-auth read access to userPassword field in the LDAP server. | ||||
| # With OpenLDAP this is done by modifying /etc/ldap/slapd.conf. There should | ||||
| # already be something like this: | ||||
| 
 | ||||
| # access to attribute=userPassword | ||||
| #        by dn="<dovecot's dn>" read # add this | ||||
| #        by anonymous auth | ||||
| #        by self write | ||||
| #        by * none | ||||
| 
 | ||||
| # Space separated list of LDAP hosts to use. host:port is allowed too. | ||||
| #hosts = | ||||
| 
 | ||||
| # LDAP URIs to use. You can use this instead of hosts list. Note that this | ||||
| # setting isn't supported by all LDAP libraries. | ||||
| uris = <%= @uris %> | ||||
| 
 | ||||
| # Distinguished Name - the username used to login to the LDAP server. | ||||
| # Leave it commented out to bind anonymously (useful with auth_bind=yes). | ||||
| dn = <%= @dn %> | ||||
| 
 | ||||
| # Password for LDAP server, if dn is specified. | ||||
| dnpass = <%= @dnpass %> | ||||
| 
 | ||||
| # Use SASL binding instead of the simple binding. Note that this changes | ||||
| # ldap_version automatically to be 3 if it's lower. | ||||
| #sasl_bind = no | ||||
| # SASL mechanism name to use. | ||||
| #sasl_mech = | ||||
| # SASL realm to use. | ||||
| #sasl_realm = | ||||
| # SASL authorization ID, ie. the dnpass is for this "master user", but the | ||||
| # dn is still the logged in user. Normally you want to keep this empty. | ||||
| #sasl_authz_id = | ||||
| 
 | ||||
| # Use TLS to connect to the LDAP server. | ||||
| #tls = no | ||||
| # TLS options, currently supported only with OpenLDAP: | ||||
| #tls_ca_cert_file = | ||||
| #tls_ca_cert_dir = | ||||
| #tls_cipher_suite = | ||||
| # TLS cert/key is used only if LDAP server requires a client certificate. | ||||
| #tls_cert_file = | ||||
| #tls_key_file = | ||||
| # Valid values: never, hard, demand, allow, try | ||||
| #tls_require_cert = | ||||
| 
 | ||||
| # Use the given ldaprc path. | ||||
| #ldaprc_path = | ||||
| 
 | ||||
| # LDAP library debug level as specified by LDAP_DEBUG_* in ldap_log.h. | ||||
| # -1 = everything. You may need to recompile OpenLDAP with debugging enabled | ||||
| # to get enough output. | ||||
| #debug_level = 1 | ||||
| 
 | ||||
| # Use authentication binding for verifying password's validity. This works by | ||||
| # logging into LDAP server using the username and password given by client. | ||||
| # The pass_filter is used to find the DN for the user. Note that the pass_attrs | ||||
| # is still used, only the password field is ignored in it. Before doing any | ||||
| # search, the binding is switched back to the default DN. | ||||
| #auth_bind = no | ||||
| 
 | ||||
| # If authentication binding is used, you can save one LDAP request per login | ||||
| # if users' DN can be specified with a common template. The template can use | ||||
| # the standard %variables (see user_filter). Note that you can't | ||||
| # use any pass_attrs if you use this setting. | ||||
| # | ||||
| # If you use this setting, it's a good idea to use a different | ||||
| # dovecot-ldap.conf.ext for userdb (it can even be a symlink, just as long as | ||||
| # the filename is different in userdb's args). That way one connection is used | ||||
| # only for LDAP binds and another connection is used for user lookups. | ||||
| # Otherwise the binding is changed to the default DN before each user lookup. | ||||
| # | ||||
| # For example: | ||||
| #   auth_bind_userdn = cn=%u,ou=people,o=org | ||||
| # | ||||
| #auth_bind_userdn = | ||||
| 
 | ||||
| # LDAP protocol version to use. Likely 2 or 3. | ||||
| #ldap_version = 3 | ||||
| 
 | ||||
| # LDAP base. %variables can be used here. | ||||
| # For example: dc=mail, dc=example, dc=org | ||||
| base = <%= @base %> | ||||
| 
 | ||||
| # Dereference: never, searching, finding, always | ||||
| #deref = never | ||||
| 
 | ||||
| # Search scope: base, onelevel, subtree | ||||
| #scope = subtree | ||||
| 
 | ||||
| # User attributes are given in LDAP-name=dovecot-internal-name list. The | ||||
| # internal names are: | ||||
| #   uid - System UID | ||||
| #   gid - System GID | ||||
| #   home - Home directory | ||||
| #   mail - Mail location | ||||
| # | ||||
| # There are also other special fields which can be returned, see | ||||
| # http://wiki2.dovecot.org/UserDatabase/ExtraFields | ||||
| user_attrs = <%= @user_attrs %> | ||||
| 
 | ||||
| # Filter for user lookup. Some variables can be used (see | ||||
| # http://wiki2.dovecot.org/Variables for full list): | ||||
| #   %u - username | ||||
| #   %n - user part in user@domain, same as %u if there's no domain | ||||
| #   %d - domain part in user@domain, empty if user there's no domain | ||||
| user_filter = <%= @user_filter %> | ||||
| 
 | ||||
| # Password checking attributes: | ||||
| #  user: Virtual user name (user@domain), if you wish to change the | ||||
| #        user-given username to something else | ||||
| #  password: Password, may optionally start with {type}, eg. {crypt} | ||||
| # There are also other special fields which can be returned, see | ||||
| # http://wiki2.dovecot.org/PasswordDatabase/ExtraFields | ||||
| pass_attrs = <%= @pass_attrs %> | ||||
| 
 | ||||
| # If you wish to avoid two LDAP lookups (passdb + userdb), you can use | ||||
| # userdb prefetch instead of userdb ldap in dovecot.conf. In that case you'll | ||||
| # also have to include user_attrs in pass_attrs field prefixed with "userdb_" | ||||
| # string. For example: | ||||
| #pass_attrs = uid=user,userPassword=password,\ | ||||
| #  homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid | ||||
| 
 | ||||
| # Filter for password lookups | ||||
| pass_filter = <%= @pass_filter %> | ||||
| 
 | ||||
| # Attributes and filter to get a list of all users | ||||
| #iterate_attrs = uid=user | ||||
| #iterate_filter = (objectClass=posixAccount) | ||||
| 
 | ||||
| # Default password scheme. "{scheme}" before password overrides this. | ||||
| # List of supported schemes is in: http://wiki2.dovecot.org/Authentication | ||||
| default_pass_scheme = <%= @default_pass_scheme %> | ||||
| 
 | ||||
| # By default all LDAP lookups are performed by the auth master process. | ||||
| # If blocking=yes, auth worker processes are used to perform the lookups. | ||||
| # Each auth worker process creates its own LDAP connection so this can | ||||
| # increase parallelism. With blocking=no the auth master process can | ||||
| # keep 8 requests pipelined for the LDAP connection, while with blocking=yes | ||||
| # each connection has a maximum of 1 request running. For small systems the | ||||
| # blocking=no is sufficient and uses less resources. | ||||
| #blocking = no | ||||
							
								
								
									
										105
									
								
								site-cookbooks/kosmos_email/templates/dovecot.conf.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								site-cookbooks/kosmos_email/templates/dovecot.conf.erb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | ||||
| ## Dovecot configuration file | ||||
| 
 | ||||
| # If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration | ||||
| 
 | ||||
| # "doveconf -n" command gives a clean output of the changed settings. Use it | ||||
| # instead of copy&pasting files when posting to the Dovecot mailing list. | ||||
| 
 | ||||
| # '#' character and everything after it is treated as comments. Extra spaces | ||||
| # and tabs are ignored. If you want to use either of these explicitly, put the | ||||
| # value inside quotes, eg.: key = "# char and trailing whitespace  " | ||||
| 
 | ||||
| # Most (but not all) settings can be overridden by different protocols and/or | ||||
| # source/destination IPs by placing the settings inside sections, for example: | ||||
| # protocol imap { }, local 127.0.0.1 { }, remote 10.0.0.0/8 { } | ||||
| 
 | ||||
| # Default values are shown for each setting, it's not required to uncomment | ||||
| # those. These are exceptions to this though: No sections (e.g. namespace {}) | ||||
| # or plugin settings are added by default, they're listed only as examples. | ||||
| # Paths are also just examples with the real defaults being based on configure | ||||
| # options. The paths listed here are for configure --prefix=/usr | ||||
| # --sysconfdir=/etc --localstatedir=/var | ||||
| 
 | ||||
| # Enable installed protocols | ||||
| protocols = <%= @protocols %> | ||||
| #!include_try /usr/share/dovecot/protocols.d/*.protocol | ||||
| 
 | ||||
| # A comma separated list of IPs or hosts where to listen in for connections.  | ||||
| # "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces. | ||||
| # If you want to specify non-default ports or anything more complex, | ||||
| # edit conf.d/master.conf. | ||||
| #listen = *, :: | ||||
| 
 | ||||
| # Base directory where to store runtime data. | ||||
| #base_dir = /var/run/dovecot/ | ||||
| 
 | ||||
| # Name of this instance. In multi-instance setup doveadm and other commands | ||||
| # can use -i <instance_name> to select which instance is used (an alternative | ||||
| # to -c <config_path>). The instance name is also added to Dovecot processes | ||||
| # in ps output. | ||||
| #instance_name = dovecot | ||||
| 
 | ||||
| # Greeting message for clients. | ||||
| #login_greeting = Dovecot ready. | ||||
| 
 | ||||
| # Space separated list of trusted network ranges. Connections from these | ||||
| # IPs are allowed to override their IP addresses and ports (for logging and | ||||
| # for authentication checks). disable_plaintext_auth is also ignored for | ||||
| # these networks. Typically you'd specify your IMAP proxy servers here. | ||||
| #login_trusted_networks = | ||||
| 
 | ||||
| # Space separated list of login access check sockets (e.g. tcpwrap) | ||||
| #login_access_sockets = | ||||
| 
 | ||||
| # With proxy_maybe=yes if proxy destination matches any of these IPs, don't do | ||||
| # proxying. This isn't necessary normally, but may be useful if the destination | ||||
| # IP is e.g. a load balancer's IP. | ||||
| #auth_proxy_self = | ||||
| 
 | ||||
| # Show more verbose process titles (in ps). Currently shows user name and | ||||
| # IP address. Useful for seeing who are actually using the IMAP processes | ||||
| # (eg. shared mailboxes or if same uid is used for multiple accounts). | ||||
| #verbose_proctitle = no | ||||
| 
 | ||||
| # Should all processes be killed when Dovecot master process shuts down. | ||||
| # Setting this to "no" means that Dovecot can be upgraded without | ||||
| # forcing existing client connections to close (although that could also be | ||||
| # a problem if the upgrade is e.g. because of a security fix). | ||||
| #shutdown_clients = yes | ||||
| 
 | ||||
| # If non-zero, run mail commands via this many connections to doveadm server, | ||||
| # instead of running them directly in the same process. | ||||
| #doveadm_worker_count = 0 | ||||
| # UNIX socket or host:port used for connecting to doveadm server | ||||
| #doveadm_socket_path = doveadm-server | ||||
| 
 | ||||
| # Space separated list of environment variables that are preserved on Dovecot | ||||
| # startup and passed down to all of its child processes. You can also give | ||||
| # key=value pairs to always set specific settings. | ||||
| #import_environment = TZ | ||||
| 
 | ||||
| ## | ||||
| ## Dictionary server settings | ||||
| ## | ||||
| 
 | ||||
| # Dictionary can be used to store key=value lists. This is used by several | ||||
| # plugins. The dictionary can be accessed either directly or though a | ||||
| # dictionary server. The following dict block maps dictionary names to URIs | ||||
| # when the server is used. These can then be referenced using URIs in format | ||||
| # "proxy::<name>". | ||||
| 
 | ||||
| dict { | ||||
|   #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext | ||||
| } | ||||
| 
 | ||||
| # Most of the actual configuration gets included below. The filenames are | ||||
| # first sorted by their ASCII value and parsed in that order. The 00-prefixes | ||||
| # in filenames are intended to make it easier to understand the ordering. | ||||
| !include conf.d/*.conf | ||||
| 
 | ||||
| # A config file can also tried to be included without giving an error if | ||||
| # it's not found: | ||||
| !include_try local.conf | ||||
| 
 | ||||
| haproxy_trusted_networks = <%= @haproxy_trusted_networks %> | ||||
| haproxy_timeout = 3s | ||||
							
								
								
									
										127
									
								
								site-cookbooks/kosmos_email/templates/dovecot_10-auth.conf.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								site-cookbooks/kosmos_email/templates/dovecot_10-auth.conf.erb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,127 @@ | ||||
| ## | ||||
| ## Authentication processes | ||||
| ## | ||||
| 
 | ||||
| # Disable LOGIN command and all other plaintext authentications unless | ||||
| # SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP | ||||
| # matches the local IP (ie. you're connecting from the same computer), the | ||||
| # connection is considered secure and plaintext authentication is allowed. | ||||
| # See also ssl=required setting. | ||||
| disable_plaintext_auth = yes | ||||
| 
 | ||||
| # Authentication cache size (e.g. 10M). 0 means it's disabled. Note that | ||||
| # bsdauth and PAM require cache_key to be set for caching to be used. | ||||
| #auth_cache_size = 0 | ||||
| # Time to live for cached data. After TTL expires the cached record is no | ||||
| # longer used, *except* if the main database lookup returns internal failure. | ||||
| # We also try to handle password changes automatically: If user's previous | ||||
| # authentication was successful, but this one wasn't, the cache isn't used. | ||||
| # For now this works only with plaintext authentication. | ||||
| #auth_cache_ttl = 1 hour | ||||
| # TTL for negative hits (user not found, password mismatch). | ||||
| # 0 disables caching them completely. | ||||
| #auth_cache_negative_ttl = 1 hour | ||||
| 
 | ||||
| # Space separated list of realms for SASL authentication mechanisms that need | ||||
| # them. You can leave it empty if you don't want to support multiple realms. | ||||
| # Many clients simply use the first one listed here, so keep the default realm | ||||
| # first. | ||||
| #auth_realms = | ||||
| 
 | ||||
| # Default realm/domain to use if none was specified. This is used for both | ||||
| # SASL realms and appending @domain to username in plaintext logins. | ||||
| #auth_default_realm =  | ||||
| 
 | ||||
| # List of allowed characters in username. If the user-given username contains | ||||
| # a character not listed in here, the login automatically fails. This is just | ||||
| # an extra check to make sure user can't exploit any potential quote escaping | ||||
| # vulnerabilities with SQL/LDAP databases. If you want to allow all characters, | ||||
| # set this value to empty. | ||||
| #auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ | ||||
| 
 | ||||
| # Username character translations before it's looked up from databases. The | ||||
| # value contains series of from -> to characters. For example "#@/@" means | ||||
| # that '#' and '/' characters are translated to '@'. | ||||
| #auth_username_translation = | ||||
| 
 | ||||
| # Username formatting before it's looked up from databases. You can use | ||||
| # the standard variables here, eg. %Lu would lowercase the username, %n would | ||||
| # drop away the domain if it was given, or "%n-AT-%d" would change the '@' into | ||||
| # "-AT-". This translation is done after auth_username_translation changes. | ||||
| auth_username_format = %n | ||||
| 
 | ||||
| # If you want to allow master users to log in by specifying the master | ||||
| # username within the normal username string (ie. not using SASL mechanism's | ||||
| # support for it), you can specify the separator character here. The format | ||||
| # is then <username><separator><master username>. UW-IMAP uses "*" as the | ||||
| # separator, so that could be a good choice. | ||||
| #auth_master_user_separator = | ||||
| 
 | ||||
| # Username to use for users logging in with ANONYMOUS SASL mechanism | ||||
| #auth_anonymous_username = anonymous | ||||
| 
 | ||||
| # Maximum number of dovecot-auth worker processes. They're used to execute | ||||
| # blocking passdb and userdb queries (eg. MySQL and PAM). They're | ||||
| # automatically created and destroyed as needed. | ||||
| #auth_worker_max_count = 30 | ||||
| 
 | ||||
| # Host name to use in GSSAPI principal names. The default is to use the | ||||
| # name returned by gethostname(). Use "$ALL" (with quotes) to allow all keytab | ||||
| # entries. | ||||
| #auth_gssapi_hostname = | ||||
| 
 | ||||
| # Kerberos keytab to use for the GSSAPI mechanism. Will use the system | ||||
| # default (usually /etc/krb5.keytab) if not specified. You may need to change | ||||
| # the auth service to run as root to be able to read this file. | ||||
| #auth_krb5_keytab =  | ||||
| 
 | ||||
| # Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon and | ||||
| # ntlm_auth helper. <doc/wiki/Authentication/Mechanisms/Winbind.txt> | ||||
| #auth_use_winbind = no | ||||
| 
 | ||||
| # Path for Samba's ntlm_auth helper binary. | ||||
| #auth_winbind_helper_path = /usr/bin/ntlm_auth | ||||
| 
 | ||||
| # Time to delay before replying to failed authentications. | ||||
| #auth_failure_delay = 2 secs | ||||
| 
 | ||||
| # Require a valid SSL client certificate or the authentication fails. | ||||
| #auth_ssl_require_client_cert = no | ||||
| 
 | ||||
| # Take the username from client's SSL certificate, using  | ||||
| # X509_NAME_get_text_by_NID() which returns the subject's DN's | ||||
| # CommonName.  | ||||
| #auth_ssl_username_from_cert = no | ||||
| 
 | ||||
| # Space separated list of wanted authentication mechanisms: | ||||
| #   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp | ||||
| #   gss-spnego | ||||
| # NOTE: See also disable_plaintext_auth setting. | ||||
| auth_mechanisms = plain login | ||||
| 
 | ||||
| ## | ||||
| ## Password and user databases | ||||
| ## | ||||
| 
 | ||||
| # | ||||
| # Password database is used to verify user's password (and nothing more). | ||||
| # You can have multiple passdbs and userdbs. This is useful if you want to | ||||
| # allow both system users (/etc/passwd) and virtual users to login without | ||||
| # duplicating the system users into virtual database. | ||||
| # | ||||
| # <doc/wiki/PasswordDatabase.txt> | ||||
| # | ||||
| # User database specifies where mails are located and what user/group IDs | ||||
| # own them. For single-UID configuration use "static" userdb. | ||||
| # | ||||
| # <doc/wiki/UserDatabase.txt> | ||||
| 
 | ||||
| #!include auth-deny.conf.ext | ||||
| #!include auth-master.conf.ext | ||||
| 
 | ||||
| #!include auth-system.conf.ext | ||||
| #!include auth-sql.conf.ext | ||||
| !include auth-ldap.conf.ext | ||||
| #!include auth-passwdfile.conf.ext | ||||
| #!include auth-checkpassword.conf.ext | ||||
| #!include auth-static.conf.ext | ||||
							
								
								
									
										421
									
								
								site-cookbooks/kosmos_email/templates/dovecot_10-mail.conf.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										421
									
								
								site-cookbooks/kosmos_email/templates/dovecot_10-mail.conf.erb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,421 @@ | ||||
| ## | ||||
| ## Mailbox locations and namespaces | ||||
| ## | ||||
| 
 | ||||
| # Location for users' mailboxes. The default is empty, which means that Dovecot | ||||
| # tries to find the mailboxes automatically. This won't work if the user | ||||
| # doesn't yet have any mail, so you should explicitly tell Dovecot the full | ||||
| # location. | ||||
| # | ||||
| # If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u) | ||||
| # isn't enough. You'll also need to tell Dovecot where the other mailboxes are | ||||
| # kept. This is called the "root mail directory", and it must be the first | ||||
| # path given in the mail_location setting. | ||||
| # | ||||
| # There are a few special variables you can use, eg.: | ||||
| # | ||||
| #   %u - username | ||||
| #   %n - user part in user@domain, same as %u if there's no domain | ||||
| #   %d - domain part in user@domain, empty if there's no domain | ||||
| #   %h - home directory | ||||
| # | ||||
| # See doc/wiki/Variables.txt for full list. Some examples: | ||||
| # | ||||
| #   mail_location = maildir:~/Maildir | ||||
| #   mail_location = mbox:~/mail:INBOX=/var/mail/%u | ||||
| #   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n | ||||
| # | ||||
| # <doc/wiki/MailLocation.txt> | ||||
| # | ||||
| mail_location = mbox:~/mail:INBOX=/var/mail/%d/%u | ||||
| 
 | ||||
| # If you need to set multiple mailbox locations or want to change default | ||||
| # namespace settings, you can do it by defining namespace sections. | ||||
| # | ||||
| # You can have private, shared and public namespaces. Private namespaces | ||||
| # are for user's personal mails. Shared namespaces are for accessing other | ||||
| # users' mailboxes that have been shared. Public namespaces are for shared | ||||
| # mailboxes that are managed by sysadmin. If you create any shared or public | ||||
| # namespaces you'll typically want to enable ACL plugin also, otherwise all | ||||
| # users can access all the shared mailboxes, assuming they have permissions | ||||
| # on filesystem level to do so. | ||||
| namespace inbox { | ||||
|   # Namespace type: private, shared or public | ||||
|   #type = private | ||||
| 
 | ||||
|   # Hierarchy separator to use. You should use the same separator for all | ||||
|   # namespaces or some clients get confused. '/' is usually a good one. | ||||
|   # The default however depends on the underlying mail storage format. | ||||
|   #separator =  | ||||
| 
 | ||||
|   # Prefix required to access this namespace. This needs to be different for | ||||
|   # all namespaces. For example "Public/". | ||||
|   #prefix =  | ||||
| 
 | ||||
|   # Physical location of the mailbox. This is in same format as | ||||
|   # mail_location, which is also the default for it. | ||||
|   #location = | ||||
| 
 | ||||
|   # There can be only one INBOX, and this setting defines which namespace | ||||
|   # has it. | ||||
|   inbox = yes | ||||
| 
 | ||||
|   # If namespace is hidden, it's not advertised to clients via NAMESPACE | ||||
|   # extension. You'll most likely also want to set list=no. This is mostly | ||||
|   # useful when converting from another server with different namespaces which | ||||
|   # you want to deprecate but still keep working. For example you can create | ||||
|   # hidden namespaces with prefixes "~/mail/", "~%u/mail/" and "mail/". | ||||
|   #hidden = no | ||||
| 
 | ||||
|   # Show the mailboxes under this namespace with LIST command. This makes the | ||||
|   # namespace visible for clients that don't support NAMESPACE extension. | ||||
|   # "children" value lists child mailboxes, but hides the namespace prefix. | ||||
|   #list = yes | ||||
| 
 | ||||
|   # Namespace handles its own subscriptions. If set to "no", the parent | ||||
|   # namespace handles them (empty prefix should always have this as "yes") | ||||
|   #subscriptions = yes | ||||
| 
 | ||||
|   # See 15-mailboxes.conf for definitions of special mailboxes. | ||||
| } | ||||
| 
 | ||||
| # Example shared namespace configuration | ||||
| #namespace { | ||||
|   #type = shared | ||||
|   #separator = / | ||||
| 
 | ||||
|   # Mailboxes are visible under "shared/user@domain/" | ||||
|   # %%n, %%d and %%u are expanded to the destination user. | ||||
|   #prefix = shared/%%u/ | ||||
| 
 | ||||
|   # Mail location for other users' mailboxes. Note that %variables and ~/ | ||||
|   # expands to the logged in user's data. %%n, %%d, %%u and %%h expand to the | ||||
|   # destination user's data. | ||||
|   #location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u | ||||
| 
 | ||||
|   # Use the default namespace for saving subscriptions. | ||||
|   #subscriptions = no | ||||
| 
 | ||||
|   # List the shared/ namespace only if there are visible shared mailboxes. | ||||
|   #list = children | ||||
| #} | ||||
| # Should shared INBOX be visible as "shared/user" or "shared/user/INBOX"? | ||||
| #mail_shared_explicit_inbox = no | ||||
| 
 | ||||
| # System user and group used to access mails. If you use multiple, userdb | ||||
| # can override these by returning uid or gid fields. You can use either numbers | ||||
| # or names. <doc/wiki/UserIds.txt> | ||||
| mail_uid = <%= @mail_uid %> | ||||
| mail_gid = <%= @mail_gid %> | ||||
| 
 | ||||
| # Group to enable temporarily for privileged operations. Currently this is | ||||
| # used only with INBOX when either its initial creation or dotlocking fails. | ||||
| # Typically this is set to "mail" to give access to /var/mail. | ||||
| mail_privileged_group = mail | ||||
| 
 | ||||
| # Grant access to these supplementary groups for mail processes. Typically | ||||
| # these are used to set up access to shared mailboxes. Note that it may be | ||||
| # dangerous to set these if users can create symlinks (e.g. if "mail" group is | ||||
| # set here, ln -s /var/mail ~/mail/var could allow a user to delete others' | ||||
| # mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading it). | ||||
| #mail_access_groups = | ||||
| 
 | ||||
| # Allow full filesystem access to clients. There's no access checks other than | ||||
| # what the operating system does for the active UID/GID. It works with both | ||||
| # maildir and mboxes, allowing you to prefix mailboxes names with eg. /path/ | ||||
| # or ~user/. | ||||
| #mail_full_filesystem_access = no | ||||
| 
 | ||||
| # Dictionary for key=value mailbox attributes. This is used for example by | ||||
| # URLAUTH and METADATA extensions. | ||||
| #mail_attribute_dict = | ||||
| 
 | ||||
| # A comment or note that is associated with the server. This value is | ||||
| # accessible for authenticated users through the IMAP METADATA server | ||||
| # entry "/shared/comment".  | ||||
| #mail_server_comment = "" | ||||
| 
 | ||||
| # Indicates a method for contacting the server administrator. According to | ||||
| # RFC 5464, this value MUST be a URI (e.g., a mailto: or tel: URL), but that | ||||
| # is currently not enforced. Use for example mailto:admin@example.com. This | ||||
| # value is accessible for authenticated users through the IMAP METADATA server | ||||
| # entry "/shared/admin". | ||||
| #mail_server_admin =  | ||||
| 
 | ||||
| ## | ||||
| ## Mail processes | ||||
| ## | ||||
| 
 | ||||
| # Don't use mmap() at all. This is required if you store indexes to shared | ||||
| # filesystems (NFS or clustered filesystem). | ||||
| #mmap_disable = no | ||||
| 
 | ||||
| # Rely on O_EXCL to work when creating dotlock files. NFS supports O_EXCL | ||||
| # since version 3, so this should be safe to use nowadays by default. | ||||
| #dotlock_use_excl = yes | ||||
| 
 | ||||
| # When to use fsync() or fdatasync() calls: | ||||
| #   optimized (default): Whenever necessary to avoid losing important data | ||||
| #   always: Useful with e.g. NFS when write()s are delayed | ||||
| #   never: Never use it (best performance, but crashes can lose data) | ||||
| #mail_fsync = optimized | ||||
| 
 | ||||
| # Locking method for index files. Alternatives are fcntl, flock and dotlock. | ||||
| # Dotlocking uses some tricks which may create more disk I/O than other locking | ||||
| # methods. NFS users: flock doesn't work, remember to change mmap_disable. | ||||
| #lock_method = fcntl | ||||
| 
 | ||||
| # Directory where mails can be temporarily stored. Usually it's used only for | ||||
| # mails larger than >= 128 kB. It's used by various parts of Dovecot, for | ||||
| # example LDA/LMTP while delivering large mails or zlib plugin for keeping | ||||
| # uncompressed mails. | ||||
| #mail_temp_dir = /tmp | ||||
| 
 | ||||
| # Valid UID range for users, defaults to 500 and above. This is mostly | ||||
| # to make sure that users can't log in as daemons or other system users. | ||||
| # Note that denying root logins is hardcoded to dovecot binary and can't | ||||
| # be done even if first_valid_uid is set to 0. | ||||
| #first_valid_uid = 500 | ||||
| #last_valid_uid = 0 | ||||
| 
 | ||||
| # Valid GID range for users, defaults to non-root/wheel. Users having | ||||
| # non-valid GID as primary group ID aren't allowed to log in. If user | ||||
| # belongs to supplementary groups with non-valid GIDs, those groups are | ||||
| # not set. | ||||
| #first_valid_gid = 1 | ||||
| #last_valid_gid = 0 | ||||
| 
 | ||||
| # Maximum allowed length for mail keyword name. It's only forced when trying | ||||
| # to create new keywords. | ||||
| #mail_max_keyword_length = 50 | ||||
| 
 | ||||
| # ':' separated list of directories under which chrooting is allowed for mail | ||||
| # processes (ie. /var/mail will allow chrooting to /var/mail/foo/bar too). | ||||
| # This setting doesn't affect login_chroot, mail_chroot or auth chroot | ||||
| # settings. If this setting is empty, "/./" in home dirs are ignored. | ||||
| # WARNING: Never add directories here which local users can modify, that | ||||
| # may lead to root exploit. Usually this should be done only if you don't | ||||
| # allow shell access for users. <doc/wiki/Chrooting.txt> | ||||
| #valid_chroot_dirs =  | ||||
| 
 | ||||
| # Default chroot directory for mail processes. This can be overridden for | ||||
| # specific users in user database by giving /./ in user's home directory | ||||
| # (eg. /home/./user chroots into /home). Note that usually there is no real | ||||
| # need to do chrooting, Dovecot doesn't allow users to access files outside | ||||
| # their mail directory anyway. If your home directories are prefixed with | ||||
| # the chroot directory, append "/." to mail_chroot. <doc/wiki/Chrooting.txt> | ||||
| #mail_chroot =  | ||||
| 
 | ||||
| # UNIX socket path to master authentication server to find users. | ||||
| # This is used by imap (for shared users) and lda. | ||||
| #auth_socket_path = /var/run/dovecot/auth-userdb | ||||
| 
 | ||||
| # Directory where to look up mail plugins. | ||||
| #mail_plugin_dir = /usr/lib/dovecot/modules | ||||
| 
 | ||||
| # Space separated list of plugins to load for all services. Plugins specific to | ||||
| # IMAP, LDA, etc. are added to this list in their own .conf files. | ||||
| #mail_plugins =  | ||||
| 
 | ||||
| ## | ||||
| ## Mailbox handling optimizations | ||||
| ## | ||||
| 
 | ||||
| # Mailbox list indexes can be used to optimize IMAP STATUS commands. They are | ||||
| # also required for IMAP NOTIFY extension to be enabled. | ||||
| #mailbox_list_index = yes | ||||
| 
 | ||||
| # Trust mailbox list index to be up-to-date. This reduces disk I/O at the cost | ||||
| # of potentially returning out-of-date results after e.g. server crashes. | ||||
| # The results will be automatically fixed once the folders are opened. | ||||
| #mailbox_list_index_very_dirty_syncs = yes | ||||
| 
 | ||||
| # Should INBOX be kept up-to-date in the mailbox list index? By default it's | ||||
| # not, because most of the mailbox accesses will open INBOX anyway. | ||||
| #mailbox_list_index_include_inbox = no | ||||
| 
 | ||||
| # The minimum number of mails in a mailbox before updates are done to cache | ||||
| # file. This allows optimizing Dovecot's behavior to do less disk writes at | ||||
| # the cost of more disk reads. | ||||
| #mail_cache_min_mail_count = 0 | ||||
| 
 | ||||
| # When IDLE command is running, mailbox is checked once in a while to see if | ||||
| # there are any new mails or other changes. This setting defines the minimum | ||||
| # time to wait between those checks. Dovecot can also use inotify and | ||||
| # kqueue to find out immediately when changes occur. | ||||
| #mailbox_idle_check_interval = 30 secs | ||||
| 
 | ||||
| # Save mails with CR+LF instead of plain LF. This makes sending those mails | ||||
| # take less CPU, especially with sendfile() syscall with Linux and FreeBSD. | ||||
| # But it also creates a bit more disk I/O which may just make it slower. | ||||
| # Also note that if other software reads the mboxes/maildirs, they may handle | ||||
| # the extra CRs wrong and cause problems. | ||||
| #mail_save_crlf = no | ||||
| 
 | ||||
| # Max number of mails to keep open and prefetch to memory. This only works with | ||||
| # some mailbox formats and/or operating systems. | ||||
| #mail_prefetch_count = 0 | ||||
| 
 | ||||
| # How often to scan for stale temporary files and delete them (0 = never). | ||||
| # These should exist only after Dovecot dies in the middle of saving mails. | ||||
| #mail_temp_scan_interval = 1w | ||||
| 
 | ||||
| # How many slow mail accesses sorting can perform before it returns failure. | ||||
| # With IMAP the reply is: NO [LIMIT] Requested sort would have taken too long. | ||||
| # The untagged SORT reply is still returned, but it's likely not correct. | ||||
| #mail_sort_max_read_count = 0 | ||||
| 
 | ||||
| protocol !indexer-worker { | ||||
|   # If folder vsize calculation requires opening more than this many mails from | ||||
|   # disk (i.e. mail sizes aren't in cache already), return failure and finish | ||||
|   # the calculation via indexer process. Disabled by default. This setting must | ||||
|   # be 0 for indexer-worker processes. | ||||
|   #mail_vsize_bg_after_count = 0 | ||||
| } | ||||
| 
 | ||||
| ## | ||||
| ## Maildir-specific settings | ||||
| ## | ||||
| 
 | ||||
| # By default LIST command returns all entries in maildir beginning with a dot. | ||||
| # Enabling this option makes Dovecot return only entries which are directories. | ||||
| # This is done by stat()ing each entry, so it causes more disk I/O. | ||||
| # (For systems setting struct dirent->d_type, this check is free and it's | ||||
| # done always regardless of this setting) | ||||
| #maildir_stat_dirs = no | ||||
| 
 | ||||
| # When copying a message, do it with hard links whenever possible. This makes | ||||
| # the performance much better, and it's unlikely to have any side effects. | ||||
| #maildir_copy_with_hardlinks = yes | ||||
| 
 | ||||
| # Assume Dovecot is the only MUA accessing Maildir: Scan cur/ directory only | ||||
| # when its mtime changes unexpectedly or when we can't find the mail otherwise. | ||||
| #maildir_very_dirty_syncs = no | ||||
| 
 | ||||
| # If enabled, Dovecot doesn't use the S=<size> in the Maildir filenames for | ||||
| # getting the mail's physical size, except when recalculating Maildir++ quota. | ||||
| # This can be useful in systems where a lot of the Maildir filenames have a | ||||
| # broken size. The performance hit for enabling this is very small. | ||||
| #maildir_broken_filename_sizes = no | ||||
| 
 | ||||
| # Always move mails from new/ directory to cur/, even when the \Recent flags | ||||
| # aren't being reset. | ||||
| #maildir_empty_new = no | ||||
| 
 | ||||
| ## | ||||
| ## mbox-specific settings | ||||
| ## | ||||
| 
 | ||||
| # Which locking methods to use for locking mbox. There are four available: | ||||
| #  dotlock: Create <mailbox>.lock file. This is the oldest and most NFS-safe | ||||
| #           solution. If you want to use /var/mail/ like directory, the users | ||||
| #           will need write access to that directory. | ||||
| #  dotlock_try: Same as dotlock, but if it fails because of permissions or | ||||
| #               because there isn't enough disk space, just skip it. | ||||
| #  fcntl  : Use this if possible. Works with NFS too if lockd is used. | ||||
| #  flock  : May not exist in all systems. Doesn't work with NFS. | ||||
| #  lockf  : May not exist in all systems. Doesn't work with NFS. | ||||
| # | ||||
| # You can use multiple locking methods; if you do the order they're declared | ||||
| # in is important to avoid deadlocks if other MTAs/MUAs are using multiple | ||||
| # locking methods as well. Some operating systems don't allow using some of | ||||
| # them simultaneously. | ||||
| # | ||||
| # The Debian value for mbox_write_locks differs from upstream Dovecot. It is | ||||
| # changed to be compliant with Debian Policy (section 11.6) for NFS safety. | ||||
| #       Dovecot: mbox_write_locks = dotlock fcntl | ||||
| #       Debian:  mbox_write_locks = fcntl dotlock | ||||
| # | ||||
| #mbox_read_locks = fcntl | ||||
| #mbox_write_locks = fcntl dotlock | ||||
| 
 | ||||
| # Maximum time to wait for lock (all of them) before aborting. | ||||
| #mbox_lock_timeout = 5 mins | ||||
| 
 | ||||
| # If dotlock exists but the mailbox isn't modified in any way, override the | ||||
| # lock file after this much time. | ||||
| #mbox_dotlock_change_timeout = 2 mins | ||||
| 
 | ||||
| # When mbox changes unexpectedly we have to fully read it to find out what | ||||
| # changed. If the mbox is large this can take a long time. Since the change | ||||
| # is usually just a newly appended mail, it'd be faster to simply read the | ||||
| # new mails. If this setting is enabled, Dovecot does this but still safely | ||||
| # fallbacks to re-reading the whole mbox file whenever something in mbox isn't | ||||
| # how it's expected to be. The only real downside to this setting is that if | ||||
| # some other MUA changes message flags, Dovecot doesn't notice it immediately. | ||||
| # Note that a full sync is done with SELECT, EXAMINE, EXPUNGE and CHECK  | ||||
| # commands. | ||||
| #mbox_dirty_syncs = yes | ||||
| 
 | ||||
| # Like mbox_dirty_syncs, but don't do full syncs even with SELECT, EXAMINE, | ||||
| # EXPUNGE or CHECK commands. If this is set, mbox_dirty_syncs is ignored. | ||||
| #mbox_very_dirty_syncs = no | ||||
| 
 | ||||
| # Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK | ||||
| # commands and when closing the mailbox). This is especially useful for POP3 | ||||
| # where clients often delete all mails. The downside is that our changes | ||||
| # aren't immediately visible to other MUAs. | ||||
| #mbox_lazy_writes = yes | ||||
| 
 | ||||
| # If mbox size is smaller than this (e.g. 100k), don't write index files. | ||||
| # If an index file already exists it's still read, just not updated. | ||||
| #mbox_min_index_size = 0 | ||||
| 
 | ||||
| # Mail header selection algorithm to use for MD5 POP3 UIDLs when | ||||
| # pop3_uidl_format=%m. For backwards compatibility we use apop3d inspired | ||||
| # algorithm, but it fails if the first Received: header isn't unique in all | ||||
| # mails. An alternative algorithm is "all" that selects all headers. | ||||
| #mbox_md5 = apop3d | ||||
| 
 | ||||
| ## | ||||
| ## mdbox-specific settings | ||||
| ## | ||||
| 
 | ||||
| # Maximum dbox file size until it's rotated. | ||||
| #mdbox_rotate_size = 10M | ||||
| 
 | ||||
| # Maximum dbox file age until it's rotated. Typically in days. Day begins | ||||
| # from midnight, so 1d = today, 2d = yesterday, etc. 0 = check disabled. | ||||
| #mdbox_rotate_interval = 0 | ||||
| 
 | ||||
| # When creating new mdbox files, immediately preallocate their size to | ||||
| # mdbox_rotate_size. This setting currently works only in Linux with some | ||||
| # filesystems (ext4, xfs). | ||||
| #mdbox_preallocate_space = no | ||||
| 
 | ||||
| ## | ||||
| ## Mail attachments | ||||
| ## | ||||
| 
 | ||||
| # sdbox and mdbox support saving mail attachments to external files, which | ||||
| # also allows single instance storage for them. Other backends don't support | ||||
| # this for now. | ||||
| 
 | ||||
| # Directory root where to store mail attachments. Disabled, if empty. | ||||
| #mail_attachment_dir = | ||||
| 
 | ||||
| # Attachments smaller than this aren't saved externally. It's also possible to | ||||
| # write a plugin to disable saving specific attachments externally. | ||||
| #mail_attachment_min_size = 128k | ||||
| 
 | ||||
| # Filesystem backend to use for saving attachments: | ||||
| #  posix : No SiS done by Dovecot (but this might help FS's own deduplication) | ||||
| #  sis posix : SiS with immediate byte-by-byte comparison during saving | ||||
| #  sis-queue posix : SiS with delayed comparison and deduplication | ||||
| #mail_attachment_fs = sis posix | ||||
| 
 | ||||
| # Hash format to use in attachment filenames. You can add any text and | ||||
| # variables: %{md4}, %{md5}, %{sha1}, %{sha256}, %{sha512}, %{size}. | ||||
| # Variables can be truncated, e.g. %{sha256:80} returns only first 80 bits | ||||
| #mail_attachment_hash = %{sha1} | ||||
| 
 | ||||
| # Settings to control adding $HasAttachment or $HasNoAttachment keywords. | ||||
| # By default, all MIME parts with Content-Disposition=attachment, or inlines | ||||
| # with filename parameter are consired attachments. | ||||
| #   add-flags - Add the keywords when saving new mails or when fetching can | ||||
| #      do it efficiently. | ||||
| #   content-type=type or !type - Include/exclude content type. Excluding will | ||||
| #     never consider the matched MIME part as attachment. Including will only | ||||
| #     negate an exclusion (e.g. content-type=!foo/* content-type=foo/bar). | ||||
| #   exclude-inlined - Exclude any Content-Disposition=inline MIME part. | ||||
| #mail_attachment_detection_options = | ||||
							
								
								
									
										113
									
								
								site-cookbooks/kosmos_email/templates/dovecot_10-master.conf.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								site-cookbooks/kosmos_email/templates/dovecot_10-master.conf.erb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | ||||
| #default_process_limit = 100 | ||||
| #default_client_limit = 1000 | ||||
| 
 | ||||
| # Default VSZ (virtual memory size) limit for service processes. This is mainly | ||||
| # intended to catch and kill processes that leak memory before they eat up | ||||
| # everything. | ||||
| #default_vsz_limit = 256M | ||||
| 
 | ||||
| # Login user is internally used by login processes. This is the most untrusted | ||||
| # user in Dovecot system. It shouldn't have access to anything at all. | ||||
| #default_login_user = dovenull | ||||
| 
 | ||||
| # Internal user is used by unprivileged processes. It should be separate from | ||||
| # login user, so that login processes can't disturb other processes. | ||||
| #default_internal_user = dovecot | ||||
| 
 | ||||
| service imap-login { | ||||
|   inet_listener imap { | ||||
|     port = 143 | ||||
|   } | ||||
|   inet_listener imaps { | ||||
|     port = 993 | ||||
|     ssl = yes | ||||
|   } | ||||
|   inet_listener imap_haproxy { | ||||
|     port = 10143 | ||||
|     haproxy = yes | ||||
|   } | ||||
|   inet_listener imaps_haproxy { | ||||
|     port = 10993 | ||||
|     ssl = yes | ||||
|     haproxy = yes | ||||
|   } | ||||
| 
 | ||||
|   # 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 = 0 | ||||
| 
 | ||||
|   # If you set service_count=0, you probably need to grow this. | ||||
|   #vsz_limit = $default_vsz_limit | ||||
| } | ||||
| 
 | ||||
| service pop3-login { | ||||
|   inet_listener pop3 { | ||||
|     #port = 110 | ||||
|   } | ||||
|   inet_listener pop3s { | ||||
|     #port = 995 | ||||
|     #ssl = yes | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| service submission-login { | ||||
|   inet_listener submission { | ||||
|     #port = 587 | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| service lmtp { | ||||
|   unix_listener /var/spool/postfix/private/dovecot-lmtp { | ||||
|     mode = 0600 | ||||
|     user = postfix | ||||
|     group = postfix | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| service imap { | ||||
|   # Most of the memory goes to mmap()ing files. You may need to increase this | ||||
|   # limit if you have huge mailboxes. | ||||
|   #vsz_limit = $default_vsz_limit | ||||
| 
 | ||||
|   # Max. number of IMAP processes (connections) | ||||
|   #process_limit = 1024 | ||||
| } | ||||
| 
 | ||||
| service pop3 { | ||||
|   # Max. number of POP3 processes (connections) | ||||
|   #process_limit = 1024 | ||||
| } | ||||
| 
 | ||||
| service submission { | ||||
|   # Max. number of SMTP Submission processes (connections) | ||||
|   #process_limit = 1024 | ||||
| } | ||||
| 
 | ||||
| service auth { | ||||
|   unix_listener /var/spool/postfix/private/auth { | ||||
|     mode = 0660 | ||||
|     user = postfix | ||||
|     group = postfix | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| service auth-worker { | ||||
|   # Auth worker process is run as root by default, so that it can access | ||||
|   # /etc/shadow. If this isn't necessary, the user should be changed to | ||||
|   # $default_internal_user. | ||||
|   #user = root | ||||
| } | ||||
| 
 | ||||
| service dict { | ||||
|   # If dict proxy is used, mail processes should have access to its socket. | ||||
|   # For example: mode=0660, group=vmail and global mail_access_groups=vmail | ||||
|   unix_listener dict { | ||||
|     #mode = 0600 | ||||
|     #user =  | ||||
|     #group =  | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,83 @@ | ||||
| ## | ||||
| ## SSL settings | ||||
| ## | ||||
| 
 | ||||
| # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt> | ||||
| ssl = <%= @ssl %> | ||||
| 
 | ||||
| # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before | ||||
| # dropping root privileges, so keep the key file unreadable by anyone but | ||||
| # root. Included doc/mkcert.sh can be used to easily generate self-signed | ||||
| # certificate, just make sure to update the domains in dovecot-openssl.cnf | ||||
| ssl_cert = <<%= @ssl_cert %> | ||||
| ssl_key = <<%= @ssl_key %> | ||||
| 
 | ||||
| # If key file is password protected, give the password here. Alternatively | ||||
| # give it when starting dovecot with -p parameter. Since this file is often | ||||
| # world-readable, you may want to place this setting instead to a different | ||||
| # root owned 0600 file by using ssl_key_password = <path. | ||||
| #ssl_key_password = | ||||
| 
 | ||||
| # PEM encoded trusted certificate authority. Set this only if you intend to use | ||||
| # ssl_verify_client_cert=yes. The file should contain the CA certificate(s) | ||||
| # followed by the matching CRL(s). (e.g. ssl_ca = </etc/ssl/certs/ca.pem) | ||||
| #ssl_ca =  | ||||
| 
 | ||||
| # Require that CRL check succeeds for client certificates. | ||||
| #ssl_require_crl = yes | ||||
| 
 | ||||
| # Directory and/or file for trusted SSL CA certificates. These are used only | ||||
| # when Dovecot needs to act as an SSL client (e.g. imapc backend or | ||||
| # submission service). The directory is usually /etc/ssl/certs in | ||||
| # Debian-based systems and the file is /etc/pki/tls/cert.pem in | ||||
| # RedHat-based systems. Note that ssl_client_ca_file isn't recommended with | ||||
| # large CA bundles, because it leads to excessive memory usage. | ||||
| #ssl_client_ca_dir = | ||||
| ssl_client_ca_dir = /etc/ssl/certs | ||||
| #ssl_client_ca_file = | ||||
| 
 | ||||
| # Require valid cert when connecting to a remote server | ||||
| ssl_client_require_valid_cert = yes | ||||
| 
 | ||||
| # Request client to send a certificate. If you also want to require it, set | ||||
| # auth_ssl_require_client_cert=yes in auth section. | ||||
| #ssl_verify_client_cert = no | ||||
| 
 | ||||
| # Which field from certificate to use for username. commonName and | ||||
| # x500UniqueIdentifier are the usual choices. You'll also need to set | ||||
| # auth_ssl_username_from_cert=yes. | ||||
| #ssl_cert_username_field = commonName | ||||
| 
 | ||||
| # SSL DH parameters | ||||
| # Generate new params with `openssl dhparam -out /etc/dovecot/dh.pem 4096` | ||||
| # Or migrate from old ssl-parameters.dat file with the command dovecot | ||||
| # gives on startup when ssl_dh is unset. | ||||
| ssl_dh = </usr/share/dovecot/dh.pem | ||||
| 
 | ||||
| # Minimum SSL protocol version to use. Potentially recognized values are SSLv3, | ||||
| # TLSv1, TLSv1.1, TLSv1.2 and TLSv1.3, depending on the OpenSSL version used. | ||||
| # | ||||
| # Dovecot also recognizes values ANY and LATEST. ANY matches with any protocol | ||||
| # version, and LATEST matches with the latest version supported by library. | ||||
| #ssl_min_protocol = TLSv1.2 | ||||
| 
 | ||||
| # SSL ciphers to use, the default is: | ||||
| #ssl_cipher_list = ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH | ||||
| # To disable non-EC DH, use: | ||||
| #ssl_cipher_list = ALL:!DH:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH | ||||
| 
 | ||||
| # Colon separated list of elliptic curves to use. Empty value (the default) | ||||
| # means use the defaults from the SSL library. P-521:P-384:P-256 would be an | ||||
| # example of a valid value. | ||||
| #ssl_curve_list = | ||||
| 
 | ||||
| # Prefer the server's order of ciphers over client's. | ||||
| #ssl_prefer_server_ciphers = yes | ||||
| 
 | ||||
| # SSL crypto device to use, for valid values run "openssl engine" | ||||
| #ssl_crypto_device = | ||||
| 
 | ||||
| # SSL extra options. Currently supported options are: | ||||
| #   compression - Enable compression. | ||||
| #   no_ticket - Disable SSL session tickets. | ||||
| #ssl_options = | ||||
| @ -0,0 +1,7 @@ | ||||
| server_host = <%= @server_host %> | ||||
| bind_dn = <%= @bind_dn %> | ||||
| bind_pw = <%= @bind_pw %> | ||||
| 
 | ||||
| search_base = <%= @search_base %> | ||||
| query_filter = <%= @query_filter %> | ||||
| result_attribute = <%= @result_attribute %> | ||||
| @ -0,0 +1,7 @@ | ||||
| server_host = <%= @server_host %> | ||||
| bind_dn = <%= @bind_dn %> | ||||
| bind_pw = <%= @bind_pw %> | ||||
| 
 | ||||
| query_filter = <%= @query_filter %> | ||||
| result_attribute = <%= @result_attribute %> | ||||
| result_format = <%= @result_format %> | ||||
| @ -0,0 +1,16 @@ | ||||
| # Chef InSpec test for recipe kosmos_email::default | ||||
| 
 | ||||
| # The Chef InSpec reference, with examples and extensive documentation, can be | ||||
| # found at https://docs.chef.io/inspec/resources/ | ||||
| 
 | ||||
| describe package('postfix') do | ||||
|   it { should be_installed } | ||||
| end | ||||
| 
 | ||||
| # describe package('dovecot-core') do | ||||
| #   it { should be_installed } | ||||
| # end | ||||
| 
 | ||||
| describe port(25) do | ||||
|   it { should be_listening } | ||||
| end | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user