@@ -0,0 +1,4 @@ | |||
dovecot_postfixadmin_mysql_host: localhost | |||
dovecot_postfixadmin_mysql_database: postfixadmin | |||
dovecot_postfixadmin_mysql_username: dovecot | |||
dovecot_postfixadmin_mysql_password: koof5DeNgi5aeR2ewoh9iz1u |
@@ -7,31 +7,35 @@ | |||
- dovecot-imapd | |||
- dovecot-lmtpd | |||
- name: dovecot main configuration file | |||
template: | |||
src: dovecot.conf.j2 | |||
dest: /etc/dovecot/dovecot.conf | |||
notify: | |||
- reload dovecot | |||
- name: dovecot configuration files | |||
template: | |||
src: conf.d/{{ item }}.j2 | |||
dest: /etc/dovecot/conf.d/{{ item }} | |||
src: "{{ item }}.j2" | |||
dest: /etc/dovecot/{{ item }} | |||
with_items: | |||
- 10-mail.conf | |||
- dovecot.conf | |||
- conf.d/10-mail.conf | |||
- conf.d/10-auth.conf | |||
- conf.d/auth-sql.conf.ext | |||
- dovecot-sql.conf.ext | |||
notify: | |||
- reload dovecot | |||
- name: postfixadmin mysql user | |||
mysql_user: | |||
name: "{{dovecot_postfixadmin_mysql_username}}" | |||
password: "{{dovecot_postfixadmin_mysql_password}}" | |||
priv: "{{dovecot_postfixadmin_mysql_database}}.*:SELECT" | |||
state: present | |||
- name: configuration pull directory | |||
local_action: file | |||
args: | |||
path: host_files/{{inventory_hostname}}/etc | |||
path: ~/host_files/{{inventory_hostname}}/etc | |||
state: directory | |||
- name: pull configuration | |||
synchronize: | |||
src: /etc/dovecot | |||
dest: host_files/{{inventory_hostname}}/etc/ | |||
dest: ~/host_files/{{inventory_hostname}}/etc/ | |||
mode: pull | |||
recursive: true |
@@ -0,0 +1,128 @@ | |||
## | |||
## 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, PAM and vpopmail 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 = %Lu | |||
# 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 skey | |||
# gss-spnego | |||
# NOTE: See also disable_plaintext_auth setting. | |||
auth_mechanisms = plain | |||
## | |||
## 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-vpopmail.conf.ext | |||
#!include auth-static.conf.ext |
@@ -28,7 +28,7 @@ | |||
# <doc/wiki/MailLocation.txt> | |||
# | |||
mail_home = /var/vmail/%d/%n | |||
mail_location = sdbox:~/mail.sdbox | |||
mail_location = mdbox:~/mail.mdbox | |||
# If you need to set multiple mailbox locations or want to change default | |||
# namespace settings, you can do it by defining namespace sections. | |||
@@ -0,0 +1,119 @@ | |||
#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 | |||
} | |||
# 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 lmtp { | |||
unix_listener lmtp { | |||
#mode = 0666 | |||
} | |||
# Create inet listener only if you can't use the above UNIX socket | |||
#inet_listener lmtp { | |||
# Avoid making LMTP visible for the entire internet | |||
#address = | |||
#port = | |||
#} | |||
} | |||
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 auth { | |||
# auth_socket_path points to this userdb socket by default. It's typically | |||
# used by dovecot-lda, doveadm, possibly imap process, etc. Users that have | |||
# full permissions to this socket are able to get a list of all usernames and | |||
# get the results of everyone's userdb lookups. | |||
# | |||
# The default 0666 mode allows anyone to connect to the socket, but the | |||
# userdb lookups will succeed only if the userdb returns an "uid" field that | |||
# matches the caller process's UID. Also if caller's uid or gid matches the | |||
# socket's uid or gid the lookup succeeds. Anything else causes a failure. | |||
# | |||
# To give the caller full permissions to lookup all users, set the mode to | |||
# something else than 0666 and Dovecot lets the kernel enforce the | |||
# permissions (e.g. 0777 allows everyone full permissions). | |||
unix_listener auth-userdb { | |||
#mode = 0666 | |||
#user = | |||
#group = | |||
} | |||
# Postfix smtp-auth | |||
#unix_listener /var/spool/postfix/private/auth { | |||
# mode = 0666 | |||
#} | |||
# Auth process is run as this user. | |||
#user = $default_internal_user | |||
} | |||
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,30 @@ | |||
# Authentication for SQL users. Included from 10-auth.conf. | |||
# | |||
# <doc/wiki/AuthDatabase.SQL.txt> | |||
passdb { | |||
driver = sql | |||
# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext | |||
args = /etc/dovecot/dovecot-sql.conf.ext | |||
} | |||
# "prefetch" user database means that the passdb already provided the | |||
# needed information and there's no need to do a separate userdb lookup. | |||
# <doc/wiki/UserDatabase.Prefetch.txt> | |||
#userdb { | |||
# driver = prefetch | |||
#} | |||
userdb { | |||
driver = sql | |||
args = /etc/dovecot/dovecot-sql.conf.ext | |||
} | |||
# If you don't have any user-specific settings, you can avoid the user_query | |||
# by using userdb static instead of userdb sql, for example: | |||
# <doc/wiki/UserDatabase.Static.txt> | |||
#userdb { | |||
#driver = static | |||
#args = uid=vmail gid=vmail home=/var/vmail/%u | |||
#} |
@@ -0,0 +1,30 @@ | |||
# Authentication for SQL users. Included from 10-auth.conf. | |||
# | |||
# <doc/wiki/AuthDatabase.SQL.txt> | |||
passdb { | |||
driver = sql | |||
# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext | |||
args = /etc/dovecot/dovecot-sql.conf.ext | |||
} | |||
# "prefetch" user database means that the passdb already provided the | |||
# needed information and there's no need to do a separate userdb lookup. | |||
# <doc/wiki/UserDatabase.Prefetch.txt> | |||
#userdb { | |||
# driver = prefetch | |||
#} | |||
userdb { | |||
driver = sql | |||
args = /etc/dovecot/dovecot-sql.conf.ext | |||
} | |||
# If you don't have any user-specific settings, you can avoid the user_query | |||
# by using userdb static instead of userdb sql, for example: | |||
# <doc/wiki/UserDatabase.Static.txt> | |||
#userdb { | |||
#driver = static | |||
#args = uid=vmail gid=vmail home=/var/vmail/%u | |||
#} |
@@ -0,0 +1,159 @@ | |||
# This file is commonly accessed via passdb {} or userdb {} section in | |||
# conf.d/auth-sql.conf.ext | |||
# This file is opened as root, so it should be owned by root and mode 0600. | |||
# | |||
# http://wiki2.dovecot.org/AuthDatabase/SQL | |||
# | |||
# For the sql passdb module, you'll need a database with a table that | |||
# contains fields for at least the username and password. If you want to | |||
# use the user@domain syntax, you might want to have a separate domain | |||
# field as well. | |||
# | |||
# If your users all have the same uig/gid, and have predictable home | |||
# directories, you can use the static userdb module to generate the home | |||
# dir based on the username and domain. In this case, you won't need fields | |||
# for home, uid, or gid in the database. | |||
# | |||
# If you prefer to use the sql userdb module, you'll want to add fields | |||
# for home, uid, and gid. Here is an example table: | |||
# | |||
# CREATE TABLE users ( | |||
# username VARCHAR(128) NOT NULL, | |||
# domain VARCHAR(128) NOT NULL, | |||
# password VARCHAR(64) NOT NULL, | |||
# home VARCHAR(255) NOT NULL, | |||
# uid INTEGER NOT NULL, | |||
# gid INTEGER NOT NULL, | |||
# active CHAR(1) DEFAULT 'Y' NOT NULL | |||
# ); | |||
# Database driver: mysql, pgsql, sqlite | |||
driver = mysql | |||
# Database connection string. This is driver-specific setting. | |||
# | |||
# HA / round-robin load-balancing is supported by giving multiple host | |||
# settings, like: host=sql1.host.org host=sql2.host.org | |||
# | |||
# pgsql: | |||
# For available options, see the PostgreSQL documention for the | |||
# PQconnectdb function of libpq. | |||
# Use maxconns=n (default 5) to change how many connections Dovecot can | |||
# create to pgsql. | |||
# | |||
# mysql: | |||
# Basic options emulate PostgreSQL option names: | |||
# host, port, user, password, dbname | |||
# | |||
# But also adds some new settings: | |||
# client_flags - See MySQL manual | |||
# ssl_ca, ssl_ca_path - Set either one or both to enable SSL | |||
# ssl_cert, ssl_key - For sending client-side certificates to server | |||
# ssl_cipher - Set minimum allowed cipher security (default: HIGH) | |||
# ssl_verify_server_cert - Verify that the name in the server SSL certificate | |||
# matches the host (default: no) | |||
# option_file - Read options from the given file instead of | |||
# the default my.cnf location | |||
# option_group - Read options from the given group (default: client) | |||
# | |||
# You can connect to UNIX sockets by using host: host=/var/run/mysql.sock | |||
# Note that currently you can't use spaces in parameters. | |||
# | |||
# sqlite: | |||
# The path to the database file. | |||
# | |||
# Examples: | |||
# connect = host=192.168.1.1 dbname=users | |||
# connect = host=sql.example.com dbname=virtual user=virtual password=blarg | |||
# connect = /etc/dovecot/authdb.sqlite | |||
# | |||
connect = host={{dovecot_postfixadmin_mysql_host}} dbname={{dovecot_postfixadmin_mysql_database}} user={{dovecot_postfixadmin_mysql_username}} password={{dovecot_postfixadmin_mysql_password}} | |||
# Default password scheme. | |||
# | |||
# List of supported schemes is in | |||
# http://wiki2.dovecot.org/Authentication/PasswordSchemes | |||
# | |||
default_pass_scheme = MD5-CRYPT | |||
# passdb query to retrieve the password. It can return fields: | |||
# password - The user's password. This field must be returned. | |||
# user - user@domain from the database. Needed with case-insensitive lookups. | |||
# username and domain - An alternative way to represent the "user" field. | |||
# | |||
# The "user" field is often necessary with case-insensitive lookups to avoid | |||
# e.g. "name" and "nAme" logins creating two different mail directories. If | |||
# your user and domain names are in separate fields, you can return "username" | |||
# and "domain" fields instead of "user". | |||
# | |||
# The query can also return other fields which have a special meaning, see | |||
# http://wiki2.dovecot.org/PasswordDatabase/ExtraFields | |||
# | |||
# Commonly used available substitutions (see http://wiki2.dovecot.org/Variables | |||
# for full list): | |||
# %u = entire user@domain | |||
# %n = user part of user@domain | |||
# %d = domain part of user@domain | |||
# | |||
# Note that these can be used only as input to SQL query. If the query outputs | |||
# any of these substitutions, they're not touched. Otherwise it would be | |||
# difficult to have eg. usernames containing '%' characters. | |||
# | |||
# Example: | |||
# password_query = SELECT userid AS user, pw AS password \ | |||
# FROM users WHERE userid = '%u' AND active = 'Y' | |||
# | |||
#password_query = \ | |||
# SELECT username, domain, password \ | |||
# FROM users WHERE username = '%n' AND domain = '%d' | |||
# userdb query to retrieve the user information. It can return fields: | |||
# uid - System UID (overrides mail_uid setting) | |||
# gid - System GID (overrides mail_gid setting) | |||
# home - Home directory | |||
# mail - Mail location (overrides mail_location setting) | |||
# | |||
# None of these are strictly required. If you use a single UID and GID, and | |||
# home or mail directory fits to a template string, you could use userdb static | |||
# instead. For a list of all fields that can be returned, see | |||
# http://wiki2.dovecot.org/UserDatabase/ExtraFields | |||
# | |||
# Examples: | |||
# user_query = SELECT home, uid, gid FROM users WHERE userid = '%u' | |||
# user_query = SELECT dir AS home, user AS uid, group AS gid FROM users where userid = '%u' | |||
# user_query = SELECT home, 501 AS uid, 501 AS gid FROM users WHERE userid = '%u' | |||
# | |||
#user_query = \ | |||
# SELECT home, uid, gid \ | |||
# FROM users WHERE username = '%n' AND domain = '%d' | |||
# | |||
# postfixadmin: Query to retrieve user information, note uid matches dovecot.conf AND Postfix virtual_uid_maps parameter. | |||
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid FROM mailbox WHERE username = '%u' AND active='1' | |||
# If you wish to avoid two SQL lookups (passdb + userdb), you can use | |||
# userdb prefetch instead of userdb sql in dovecot.conf. In that case you'll | |||
# also have to return userdb fields in password_query prefixed with "userdb_" | |||
# string. For example: | |||
#password_query = \ | |||
# SELECT userid AS user, password, \ | |||
# home AS userdb_home, uid AS userdb_uid, gid AS userdb_gid \ | |||
# FROM users WHERE userid = '%u' | |||
# | |||
# postfixadmin: Query to retrieve password. user can be used to retrieve username in other | |||
# formats also. | |||
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1' | |||
# Query to get a list of all usernames. | |||
#iterate_query = SELECT username AS user FROM users | |||
# MYSQL : | |||
user_query = SELECT CONCAT('/var/vmail/mail/', maildir) AS home, 1001 AS uid, 1001 AS gid, | |||
CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1' | |||
# PostgreSQL : (no Quota though) : | |||
# user_query = SELECT '/var/vmail/mail/' || maildir AS home, 1001 as uid, 1001 as gid FROM mailbox WHERE username = '%u' AND active = '1' |