Postfix 3.3 on Amazon Linux 2 ソースインストール 2018年7月版

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、多ドメインでの設定を試したい。

 

参考書

古いですが、勉強しました!w

タイトルとURLをコピーしました