メールサーバ Postfix & Dovecot をソースコードからインストール
動作確認済みシステム Debian 12
IMAPサーバのdovecot、SMTPサーバのpostfix、SASL認証のsasl2-binをインストールします。
Postfix用のユーザーとグループを追加します。
useradd -d /dev/null -s /bin/false postfix
groupadd postdrop
必要なパッケージをインストールします。
apt install build-essential m4 libdb-dev libsasl2-dev libnsl-dev libicu-dev libpcre2-dev
Cyrus SASLのソースコードをダウンロードし、展開します。
cd /usr/local/src/
wget https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.28/cyrus-sasl-2.1.28.tar.gz
tar zxvf cyrus-sasl-2.1.28.tar.gz
インストールします。
cd cyrus-sasl-2.1.28
./configure --sysconfdir=/usr/local/etc/sasl --with-openssl=/usr/local/ssl --enable-login=yes
make
make install
インストールされた共有ライブラリの読み込みのため、ldconfigを実行します。
ldconfig
Postfixのソースコードをダウンロードし、展開します。
cd /usr/local/src/
wget https://mirror.reverse.net/pub/postfix-release/official/postfix-3.9.1.tar.gz
tar zxvf postfix-3.9.1.tar.gz
cd postfix-3.9.1
インストールします。
make tidy
make makefiles CCARGS="-DDEF_COMMAND_DIR=\\"/usr/local/sbin\\" -DDEF_CONFIG_DIR=\\"/usr/local/etc/postfix\\" -DDEF_DAEMON_DIR=\\"/usr/local/libexec/postfix\\" -DDEF_DATA_DIR=\\"/usr/local/var/lib/postfix\\" -DDEF_MAILQ_PATH=\\"/usr/local/bin/mailq\\" -DDEF_NEWALIAS_PATH=\\"/usr/local/bin/newaliases\\" -DDEF_SENDMAIL_PATH=\\"/usr/local/sbin/sendmail\\" -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -DUSE_TLS -I/usr/local/include -I/usr/local/include/openssl -I/usr/local/include/sasl -DHAS_PCRE=2 pcre2-config --cflags
" AUXLIBS="-L/usr/local/lib -lsasl2 -L/usr/local/lib64 -lssl -lcrypto" AUXLIBS_PCRE="pcre2-config --libs8
"
make
make install
全て何も入力せずEnterキーで進めます。
Please specify the prefix for installed file names. Specify this ONLY
if you are building ready-to-install packages for distribution to OTHER
machines. See PACKAGE_README for instructions.
install_root: [/]
Please specify a directory for scratch files while installing Postfix. You
must have write permission in this directory.
tempdir: [/usr/local/src/postfix-3.9.1]
Please specify the final destination directory for installed Postfix
configuration files.
config_directory: [/usr/local/etc/postfix]
Please specify the final destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of administrative users.
command_directory: [/usr/local/sbin]
Please specify the final destination directory for installed Postfix
daemon programs. This directory should not be in the command search path
of any users.
daemon_directory: [/usr/local/libexec/postfix]
Please specify the final destination directory for Postfix-writable
data files such as caches or random numbers. This directory should not
be shared with non-Postfix software.
data_directory: [/usr/local/var/lib/postfix]
Please specify the final destination directory for the Postfix HTML
files. Specify "no" if you do not want to install these files.
html_directory: [no]
Please specify the owner of the Postfix queue. Specify an account with
numerical user ID and group ID values that are not used by any other
accounts on the system.
mail_owner: [postfix]
Please specify the final destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/local/bin/mailq]
Please specify the final destination directory for the Postfix on-line
manual pages. You can no longer specify "no" here.
manpage_directory: [/usr/local/man]
Please specify the final destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/local/bin/newaliases]
Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix]
Please specify the final destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no]
Please specify the final destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/local/sbin/sendmail]
Please specify the group for mail submission and for queue management
commands. Specify a group name with a numerical group ID that is
not shared with other accounts, not even with the Postfix mail_owner
account. You can no longer specify "no" here.
setgid_group: [postdrop]
Please specify the final destination directory for Postfix shared-library
files.
shlib_directory: [no]
Please specify the final destination directory for non-executable files
that are shared among multiple Postfix instances, such as postfix-files,
dynamicmaps.cf, as well as the multi-instance template files main.cf.proto
and master.cf.proto.
meta_directory: [/usr/local/etc/postfix]
設定ファイルを編集します。
vi /usr/local/etc/postfix/main.cf
mail_owner = postfix
# ホスト名指定
myhostname = mail.example.com
# ドメイン名指定
mydomain = digitalmania.info
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
# Telnet等でアクセスした際にpostfixのバージョン情報が表示されるのはセキュリティ上好ましくないため
smtpd_banner = $myhostname ESMTP unknown
sendmail_path = /usr/local/sbin/postfix
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no
# IPv6もlistenする場合はallに変更
inet_protocols = ipv4
# SMTP-Auth用の設定
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# 送受信メールのサイズ制限。例は10MB。
message_size_limit = 10485760
master.cfでSubmissionポートの設定を行います。
vi /usr/local/etc/postfix/master.cf
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
SMTH-Authの設定を行います。
vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
Dovecotをインストールする前に、DovenullユーザとDovecotユーザを作成しておきます。
useradd -c 'Dovecot mail server' -d /dev/null -s /sbin/nologin dovecot
useradd -c 'Dovecot login user' -d /dev/null -s /sbin/nologin dovenull
Dovecotのソースコードをダウンロードし、展開します。
cd /usr/local/src/
wget https://dovecot.org/releases/2.3/dovecot-2.3.21.1.tar.gz
tar zxvf dovecot-2.3.21.1.tar.gz
cd dovecot-2.3.21.1
インストールします。
./configure --sysconfdir=/usr/local/etc --with-pam --with-ssl=openssl --with-ssldir=/usr/local/ssl --with-systemdsystemunitdir=auto
make
make install
設定ファイルをコピーします。
cp -r /usr/local/share/doc/dovecot/example-config/* /usr/local/etc/dovecot
dovecotの設定を行います。
dovecot.confを編集します。
vi /usr/local/etc/dovecot/dovecot.conf
プロトコルを指定し、listenの行をコメント解除します。
protocols = imap
listen = *, ::
10-mail.confを編集します。
vi /usr/local/etc/dovecot/conf.d/10-mail.conf
メールボックスの形式と場所を指定します。
mail_location = maildir:~/Maildir
10-auth.confを編集します。
vi /usr/local/etc/dovecot/conf.d/10-auth.conf
プレーンテキスト認証を許可し、loginでの認証を許可します。
また、ユーザ名からドメイン部分を削除して認証できるようにします。
disable_plaintext_auth = no
auth_username_format = %n
auth_mechanisms = plain login
10-master.confを編集します。
vi /usr/local/etc/dovecot/conf.d/10-master.conf
IMAPを許可し、SMTP認証ができるようにします。
service imap-login {
inet_listener imap {
port = 143
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
10-ssl.confを編集します。
vi /usr/local/etc/dovecot/conf.d/10-ssl.conf
ssl = no
#ssl_cert = </etc/ssl/certs/dovecot.pem
#ssl_key = </etc/ssl/private/dovecot.pem
15-mailboxes.confを編集します。
vi /usr/local/etc/dovecot/conf.d/15-mailboxes.conf
Draftsフォルダ、Junkフォルダ、Trashフォルダ、Sentフォルダを自動的に作成・購読させるようにします。
namespace inbox {
# These mailboxes are widely used and could perhaps be created automatically:
mailbox Drafts {
special_use = \Drafts
auto = subscribe
}
mailbox Junk {
special_use = \Junk
auto = subscribe
}
mailbox Trash {
special_use = \Trash
auto = subscribe
}
mailbox Sent {
special_use = \Sent
auto = subscribe
}
# mailbox "Sent Messages" {
# special_use = \Sent
# }
}
ユーザー作成時に一緒に作成される必要なフォルダを/etc/skel/以下に作成します。
mkdir /etc/skel/Maildir
mkdir /etc/skel/Maildir/cur
mkdir /etc/skel/Maildir/new
mkdir /etc/skel/Maildir/tmp
chmod 700 -R /etc/skel/Maildir
既存ユーザーのホームディレクトリにも、Maildirディレクトリを作成します。
cd /home/hogehoge/
mkdir Maildir
mkdir Maildir/cur
mkdir Maildir/new
mkdir Maildir/tmp
chmod 700 -R Maildir
chown hogehoge. -R Maildir
エイリアス定義ファイル/etc/aliasesファイルを作成します。
vi /etc/aliases
postmaster: root
root: administrator
postmaster宛はrootが受け取るべきこと、root宛はadministratorが受け取るべきことが記述されています。
/etc/aliases.dbを作成するために、newaliasesコマンドを実行します。
newaliases
saslauthdサービスを作成します。
vi /etc/default/saslauthd
# Begin /etc/default/saslauthd
# Which authentication mechanisms should saslauthd use? (default: shadow)
#
# Available options in this package:
# getpwent -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam -- use PAM
# rimap -- use a remote IMAP server
# shadow -- use the local shadow password file
# sasldb -- use the local sasldb database file
# ldap -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="shadow"
MECHANISMS="pam"
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
# Note: Specify "-O options" in the following variable or saslauthd will fail.
MECH_OPTIONS=""
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5
# Other options (default: -c -m /run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
SASLAUTHD_OPTS="-c -m /run/saslauthd"
# End /etc/default/saslauthd
vi /etc/systemd/system/saslauthd.service
[Unit]
Description=Cyrus SASL authentication daemon
[Service]
Type=forking
EnvironmentFile=/etc/default/saslauthd
ExecStart=/usr/local/sbin/saslauthd -a $MECHANISMS -n $THREADS $MECH_OPTIONS $SASLAUTHD_OPTS
PIDFile=/run/saslauthd/saslauthd.pid
[Install]
WantedBy=multi-user.target
Postfixサービスを作成します。
vi /etc/systemd/system/postfix.service
[Unit]
Description=Postfix Mail Transport Agent
After=network.target
Conflicts=sendmail.service exim.service
[Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
ExecStart=/usr/local/sbin/postfix start
ExecStop=/usr/local/sbin/postfix stop
ExecReload=/usr/local/sbin/postfix reload
Restart=always
[Install]
WantedBy=multi-user.target
Dovecotサービスは別途作成する必要はありませんが、編集する必要はあります。
vi /lib/systemd/system/dovecot.service
[Service]
ProtectSystem=false
systemdサービスを再読み込みします。
systemctl daemon-reload
各種サービスを自動起動設定、起動します。
systemctl enable saslauthd.service
systemctl start saslauthd.service
systemctl enable postfix.service
systemctl start postfix.service
systemctl enable dovecot.service
systemctl start dovecot.service
ファイアウォールの設定を行い、必要なポートを許可するようにします。
ufw allow 'IMAP'
ufw allow 'SMTP'
ufw reload
メーラーで送受信ができていることが確認できればOKです。