PostfixでのMTA関係の構築、最近のOSでは行っていなかったので、備忘録的にやってみました。
OSも、最近リリースされた、AmazonLinux2で、試しました。
Postfix 系 関連記事(追加記事)
■Postfix 3.4 ソースインストール CentOS7(マルチドメイン) (2019/05/09追加)
■postfix構築、ツール類一覧 2018/2019年 (2019/04/28追加)
■Postfix 3.3 バーチャルドメイン(複数ドメイン)版 (2018/08/17追加)
■Postfix 3.3 マルチドメイン ソース版 dovecot 設定 (2018/09/19追加)
■Postfix3.3 ソース版 マルチドメイン対応 SMTP認証設定 (2018/10/07追加)
■Postfix3.3 ソース版 マルチドメイン 自己証明書TLS(SSL)対応版 (2018/10/14追加)
■Postfix3.3 ソース版 マルチドメイン グローバル証明書TLS(SSL)対応版 (2018/10/17追加)
■Postfix3.3 迷惑メール対策 SPF設定 (2018/10/20追加)
■Postfix3.3 迷惑メール対策 DKIM設定 (2018/10/23追加)
■Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン) (2018/10/25追加)
■Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン)設定その2 (2018/10/27追加)
■迷惑メール対策 SpamAssassin(スパムアサシン)と、WebMail(RainLoop)との連携 (2018/10/28追加)
■Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン)[ユーザ毎の設定] (2018/11/01追加)
初期設定
yum -y groupinstall "Development Tools"
yum install db*-devel
yum install openssl-devel
# mv /usr/sbin/sendmail /usr/sbin/sendmail-OLD
# mv /usr/bin/mailq /usr/bin/mailq-OLD
# mv /usr/bin/newaliases /usr/bin/newaliases-OLD
↑ソースからインストールするため、Development Toolsなどを入れておきます。
icu4c、dbのインストール
あらかじめ、周辺ツールを入れておきます。
wget http://download.icu-project.org/files/icu4c/60.2/icu4c-60_2-src.tgz tar zxfv icu4c-60_2-src.tgz cd icu/source ./runConfigureICU Linux make make install
dbは、「yum install db*-devel」で、うまくいかなかったので、ソースからインストール。
# wget http://download.oracle.com/berkeley-db/db-4.8.30.tar.gz # tar zxvf db-4.8.30.tar.gz # cd db-4.8.30.tar/build_unix/ # ../dist/configure --prefix=/usr/local/ # make # make install
↑「../dist/configure」
だと、
/usr/local/include
にdb.hとかが、できる。
同様に
/usr/local/lib
に「libdb.a」ができる。
これで、postfix 3.3 をmakeしようとすると、
# wget http://mirror.postfix.jp/postfix-release/official/postfix-3.3.1.tar.gz # tar xzvf postfix-3.3.1.tar.gz # cd postfix-3.3.1/ # make makefiles CCARGS='-DUSE_TLS -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -I/usr/local/include' AUXLIBS="-lssl -lcrypto -L/usr/local/lib" make -f Makefile.in MAKELEVEL= Makefiles (echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp No <db.h> include file found. Install the appropriate db*-devel package first. make: *** [Makefiles] Error 1 make: *** [makefiles] Error 2
と、エラーになる。
cd /usr/lib ln -s ../local/lib/libdb.a
などと、シンボリックリンクをはってもだめでした。
postfixで、エラーになるので、
# wget http://download.oracle.com/berkeley-db/db-4.8.30.tar.gz # tar zxvf db-4.8.30.tar.gz # cd db-4.8.30.tar/build_unix/ # ../dist/configure --prefix=/usr/ # make # make install </pre>
# ../dist/configure –prefix=/usr/
として、configureをしました。
すると、
/usr/lib/libdb.a
/usr/include/db.h
に、ライブラリとヘッダが生成されます。
これで、postfixで、うまく認識してくれます。
Postfix 3.3 ソースインストール
# wget http://mirror.postfix.jp/postfix-release/official/postfix-3.3.1.tar.gz
# tar xzvf postfix-3.3.1.tar.gz
# cd postfix-3.3.1/
# make makefiles CCARGS='-DUSE_TLS -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -I/usr/local/include' AUXLIBS="-lssl -lcrypto -L/usr/local/lib"
(echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp
set +e; if cmp makedefs.tmp conf/makedefs.out; then rm makedefs.tmp; \
(略)
cat ../../conf/makedefs.out Makefile.in >Makefile
#
↑うまくいきました。
# make # make install
とします。
bin/postconf: error while loading shared libraries: libdb-4.8.so: cannot open shared object file: No such file or directory
とエラーが出ることがあります。
db関係のライブラリを探せないというエラーで
# echo /usr/lib > /etc/ld.so.conf.d/usr-lib.conf # ldconfig
として、dbのライブラリを認識させます。
再度、「make」「make install」をすればうまくいきます。
メールボックス作成(2018/08/12追加)
メールボックスの作成、シングルドメイン版の記事 へ。(2018/08/12追加)
SMTP認証 を入れます。
# yum install cyrus-sas
# systemctl start saslauthd
# systemctl enable saslauthd
dovecot 2.3 基本
pop,imapサービスの「dovecot 2.3」を入れます。これも、2018年7月時点での最新版をソースから入れます。
# groupadd -g 143 dovecot # useradd -u 143 -g dovecot -s /sbin/nologin -M dovecot # groupadd -g 144 dovenull # useradd -u 144 -g dovenull -s /sbin/nologin -M dovenull # wget https://www.dovecot.org/releases/2.3/dovecot-2.3.2.1.tar.gz #./configure --prefix=/usr --sysconfdir=/etc #make #make install #vi /etc/rc.d/init.d/dovecot ---------------------------------- #DAEMON=/usr/local/sbin/dovecot ↓下記に変更 #DAEMON=/usr/sbin/dovecot ---------------------------------- # cp /root/src/dovecot-2.3.2.1/doc/example-config/dovecot.conf /etc/dovecot/dovecot.conf # cp -a /root/src/dovecot-2.3.2.1/doc/example-config/conf.d/ /etc/dovecot/
↑基本設定などです。
dovecot 2.3 TSL設定
# cd /etc/pki/CA/private
# openssl genrsa -out cakey.pem 1024
# chmod 400 cakey.pem
# vi /etc/pki/CA/private/ca.info
------------------------------------------
cn="xxxxCA"
organization="xxxxNet"
unit="xxxxUnit"
country=JP
expiration_days=3650
serial=1001
ca
cert_signing_key
crl_signing_key
------------------------------------------
# cd /etc/pki/CA/private
# yum -y install gnutls-utils
# certtool -s --load-privkey cakey.pem --template ca.info --outfile ../cacert.pem
# cp -a ../cacert.pem /etc/pki/tls/certs/
# cd /etc/pki/tls/private
# openssl genrsa -out mailkey.pem 1024
# chmod 400 mailkey.pem
# vi /etc/pki/tls/private/mailcert.info
------------------------------------------
cn=mail.examle.jp
organization="examleNet"
unit="IT Development"
state="Tokyo"
locality="Shibuya"
country=JP
expiration_days=730
serial=1001
tls_www_server
encryption_key
signing_key
------------------------------------------
# cd /etc/pki/tls/private
# certtool -c --load-privkey mailkey.pem --load-ca-certificate /etc/pki/CA/cacert.pem --load-ca-privkey /etc/pki/CA/private/cakey.pem --template mailcert.info --outfile ../certs/mailcert.pem
# certtool -q --load-privkey mailkey.pem --template mailcert.info --outfile mailcert.csr
↑TSL系の情報を設定します。
dovecot 2.3 本体セッティング
# vi /etc/dovecot/conf.d/10-ssl.conf
------------------------------------------
ssl = yes
ssl_cert = </etc/pki/tls/certs/mailcert.pem
ssl_key = </etc/pki/tls/private/mailkey.pem
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
# /etc/rc.d/init.d/dovecot restart
# doveconf: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
# doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:25: 'imaps' protocol is no longer necessary, remove it
# doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:25: 'pop3s' protocol is no longer necessary, remove it
↑dovectは、ver2から、
pop3sは、かかなくても、pop3だけでいい。
protocols = imap pop3 imaps pop3s
↓
protocols = imap pop3
と変更をする。
# telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. -ERR Disconnected: Auth process broken Connection closed by foreign host. dovecot: auth: Fatal: Support not compiled in for passdb driver 'pam'
↑とりあえず、110ポートをたたくとエラーになる。
パスワード系を整備する
# vi conf.d/10-auth.conf #!include auth-passwdfile.conf.ext ↓ !include auth-passwdfile.conf.ext と、plan text認証を有効にする #disable_plaintext_auth = yes ↓ disable_plaintext_auth = no
vi # conf.d/auth-passwdfile.conf.ext -------------以下をコメントに------------ userdb { driver = passwd-file args = username_format=%u /etc/dovecot/users # Default fields that can be overridden by passwd-file #default_fields = quota_rule=*:storage=1G # Override fields from passwd-file #override_fields = home=/home/virtual/%u } ----------- 以下を残す ------------------- passdb { driver = passwd-file args = scheme=CRYPT username_format=%u /etc/dovecot/users }
# vi conf.d/auth-system.conf.ext passdb { driver = pam # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>] # [cache_key=<key>] [<service name>] #args = dovecot } ---------------------------------------------------------------------------- ↓pam を無効化 ---------------------------------------------------------------------------- #passdb { #driver = pam # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>] # [cache_key=<key>] [<service name>] #args = dovecot #}
# vi conf.d/10-mail.conf #mail_location = ↓ mail_location = maildir:~/Maildir
vi /etc/dovecot/users -------------------------- tarosan:{PLAIN}tarosan --------------------------
↑上記の「tarosan」は、Linux上のアカウントと同じ。
パスワードも同じに。
# telnet localhost pop3 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Dovecot ready. user tarosan +OK pass tarosan +OK Logged in. list +OK 0 messages: . QUIT +OK Logging out. Connection closed by foreign host.
↑うまく、認証されました。
今度は、TSLをチェックします。
# telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Dovecot ready. capa <- と、うつ +OK CAPA TOP UIDL RESP-CODES PIPELINING AUTH-RESP-CODE STLS <- リストの中にこれが出ればOK USER SASL PLAIN . stls <- と、うつ +OK Begin TLS negotiation now. -ERR [SYS/TEMP] TLS initialization failed. Connection closed by foreign host.
↑エラーで落ちる。
/var/log/maillog
をみてみると、
Failed to initialize SSL server context: Couldn't parse DH parameters
とありました。
# openssl dhparam -out /etc/dovecot/dh.pem 4096 Generating DH parameters, 4096 bit long safe prime, generator 2 This is going to take a long time ...........................................
↑DHパラメータを設定します。生成には、しばらく、時間がかかります。
作成後、
# vi conf.d/10-ssl.conf #ssl_dh = </etc/dovecot/dh.pem ↓ ssl_dh = </etc/dovecot/dh.pem
↑と、有効にします。
# telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Dovecot ready. capa +OK CAPA TOP UIDL RESP-CODES PIPELINING AUTH-RESP-CODE STLS USER SASL PLAIN . stls +OK Begin TLS negotiation now.
↑と、「+OK Begin TLS negotiation now.」で、OKとなりました。
Postfix 3.3 ,dovecot 2.3 まとめ
今回、virtual hostではないタイプで構築しましたが、実際に面倒(笑)。
OSや、ソフトウェアのバージョンが変わると、設定も変わる。
実際の運用には、まだまだ、設定が必要。
次回は、VirtualHost、多ドメインでの設定を試したい。
参考書
古いですが、勉強しました!!