ライン

ポイント:コンパイルの-fPIC指定をDRAC側に追加

ライン

 はじめに

 FreeBSD 9.1のサーバにPOPサーバを導入します。そろそろQpopperはないでしょう…ということで、Dovecot2の導入を実施しようと思います。
必要な要件として、まだPbSが必要というユーザがいるのでこれを加えること。
 どうにも面倒ですが、これを加えるようにして構築することにします。

 導入

mail/dovecot2

 今回は、Dovecot 2系で利用することを決めようと思います。

# make config 

 選択肢を確認しておきます。

 LIBWRAPは入れておくことにします。

# make install clean

 コンパイルは即終わりました。

---------------------------------------------------------------------

 You can get basic IMAP and POP3 services running by enabling
 dovecot in the /etc/rc.conf file.

        dovecot_enable
                (bool) If set to ``YES'', run the dovecot command
                at boot time.

 In the basic configuration Dovecot will authenticate users against
 the system's passwd file and use the default /var/mail/$USER mbox
 files.

        dovecot_config
                (str) Path to dovecot configuration file(s).
                Default /usr/local/etc/dovecot/dovecot.conf.

 To start multiple instances of dovecot set dovecot_config to
 a space separated list of configuration files.

---------------------------------------------------------------------

/etc/rc.conf に以下を加えました。

# 2013-04-01
dovecot_enable="YES"

 設定ファイルのサンプルが /usr/local/share/doc/dovecot/example-config/ にあるというのは前回に確認済。

total 40
drwxr-xr-x  2 root  wheel  1024 Apr  1 22:00 conf.d/
-r--r--r--  1 root  wheel   410 Apr  1 22:00 dovecot-db.conf.ext
-r--r--r--  1 root  wheel   628 Apr  1 22:00 dovecot-dict-auth.conf.ext
-r--r--r--  1 root  wheel   782 Apr  1 22:00 dovecot-dict-sql.conf.ext
-r--r--r--  1 root  wheel  5192 Apr  1 22:00 dovecot-ldap.conf.ext
-r--r--r--  1 root  wheel  5348 Apr  1 22:00 dovecot-sql.conf.ext
-r--r--r--  1 root  wheel  4195 Apr  1 22:00 dovecot.conf

conf.d 以下は、

total 108
-r--r--r--  1 root  wheel   5263 Apr  1 22:00 10-auth.conf
-r--r--r--  1 root  wheel   1893 Apr  1 22:00 10-director.conf
-r--r--r--  1 root  wheel   2649 Apr  1 22:00 10-logging.conf
-r--r--r--  1 root  wheel  15256 Apr  1 22:00 10-mail.conf
-r--r--r--  1 root  wheel   3383 Apr  1 22:00 10-master.conf
-r--r--r--  1 root  wheel   1869 Apr  1 22:00 10-ssl.conf
-r--r--r--  1 root  wheel   1607 Apr  1 22:00 15-lda.conf
-r--r--r--  1 root  wheel   1137 Apr  1 22:00 15-mailboxes.conf
-r--r--r--  1 root  wheel   2418 Apr  1 22:00 20-imap.conf
-r--r--r--  1 root  wheel    574 Apr  1 22:00 20-lmtp.conf
-r--r--r--  1 root  wheel   3729 Apr  1 22:00 20-pop3.conf
-r--r--r--  1 root  wheel    676 Apr  1 22:00 90-acl.conf
-r--r--r--  1 root  wheel    292 Apr  1 22:00 90-plugin.conf
-r--r--r--  1 root  wheel   2251 Apr  1 22:00 90-quota.conf
-r--r--r--  1 root  wheel    496 Apr  1 22:00 auth-checkpassword.conf.ext
-r--r--r--  1 root  wheel    486 Apr  1 22:00 auth-deny.conf.ext
-r--r--r--  1 root  wheel    921 Apr  1 22:00 auth-ldap.conf.ext
-r--r--r--  1 root  wheel    558 Apr  1 22:00 auth-master.conf.ext
-r--r--r--  1 root  wheel    512 Apr  1 22:00 auth-passwdfile.conf.ext
-r--r--r--  1 root  wheel    785 Apr  1 22:00 auth-sql.conf.ext
-r--r--r--  1 root  wheel    608 Apr  1 22:00 auth-static.conf.ext
-r--r--r--  1 root  wheel   2182 Apr  1 22:00 auth-system.conf.ext
-r--r--r--  1 root  wheel    327 Apr  1 22:00 auth-vpopmail.conf.ext

となっていました。以前よりも増えているな。

 設定

dovecot.conf

 設定を開始します。

# cp /usr/local/share/doc/dovecot/example-config/dovecot.conf /usr/local/etc/dovecot
# cp -rp /usr/local/share/doc/dovecot/example-config/conf.d /usr/local/etc/dovecot/

この辺りは、ports側で面倒見てくれても良さそうなんだけど変わっていないようだ。

dovecot.conf の追記開始。意外に設定箇所がある。前回確認していなかった、TCP WRAPPERの今回は確認しておく。

protocols = pop3
  Service tcpwrap {
  unix_listener login/tcpwrap {
    user = $default_login_user
    group = $default_login_user
    mode = 0600
  }

他の設定も、入れないとダメなのかな。このままやると、前回に同じくSSLのエラーが出て…と続くんだよね。
面倒なんで、/etc/ssl以下を前のサーバより持ってきてしまいました。
(作りたい方は、他のページに書いてあるので見てくださいな。)

# ps -ax | grep dove| grep -v grep
33381 ??  Is    0:00.00 /usr/local/sbin/dovecot -c /usr/local/etc/dovecot/dovec
33382 ??  I     0:00.00 dovecot/anvil
33383 ??  I     0:00.00 dovecot/log
33385 ??  I     0:00.01 dovecot/config

まずは、PCからの受信を試そう。

Apr  2 21:52:58 - dovecot: master: Dovecot v2.1.15 starting up
Apr  2 21:54:58 - dovecot: pop3-login: access(tcpwrap): Client refused (rip=192.168.xxx.xxx)

ちゃんとTCP Wrapper有効に動作するのを確認できました。
でも、別な理由でエラーになってしまいましたが。

/etc/hosts.allowに記述するのは、dovecotなどではなく、プロトコルを記述するもののようだ。
これまでと勝手が違うので、便利なような不便なような。

pop3: 192.168.1.0/255.255.255.0 : allow
pop3: ALL : deny

このような例で追加する。

conf.d/10-auth.conf

さて、上記のエラーを回避するには、popsで受信することなんだろうけど、うちのサービスを受ける人たちが理解できるとは考えにくいので、あえて変えてしまうことを検討。conf.d/10-auth.confを修正する。
(その分、TCP Wrapperで制限するしかないな)

# 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.
#disable_plaintext_auth = yes
# 2013-04-02
disable_plaintext_auth = no

まだ過渡期かな。

conf.d/10-logging.conf

 ログの出力は、syslog(mail)に出力される。これが結構な量になるので分けておきたい。

##
## Log destination.
##

# Log file to use for error messages. "syslog" logs to syslog,
# /dev/stderr logs to stderr.
#log_path = syslog
# 2013-04-08
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot_info.log

# Log file to use for informational messages. Defaults to log_path.
#info_log_path =
# Log file to use for debug messages. Defaults to info_log_path.
#debug_log_path =

# Syslog facility to use if you're logging to syslog. Usually if you don't
# want to use "mail", you'll use local0..local7. Also other standard
# facilities are supported.
#syslog_facility = mail

エラーログのみdovecot.logに出力され、それ以下のレベルのものがinfoに出力される。
デーモンのリスタート時の有効。ファイルも自動生成される。root以外からは参照できないのでセキュア。

conf.d/10-mail.conf

 それと、conf.d/10-mail.confにも細工が必要っぽい。

# 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 =
# 2013-04-02
mail_location = mbox:~/mail:INBOX=/var/mail/%u

# 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 =
# 2013-04-02
mail_privileged_group = mail

 そういえば、過去に同じことやったっけな。

とりあえず、TLSでも標準でも受信できることを確認できました。

 DRAC 連動

POP before SMTP

 マジでウィルス感染したPC経由で踏み台にされる可能性があるから止めたいのですけど。
まぁ、今回もとりあえずやり方を確認することにします。
 パッチはSF経由で提供されているみたいで、良かったです。

DRACの導入は、これまで通り。

# cd  /usr/ports/mail/drac
# make install clean

これで終わり。
設定は、/ust/local/etc/dracd.allow にコメント1行。

255.255.255.255 127.0.0.1

これを残して、後はコメント。
/etc/rc.conf に追加。

dracd_enable="YES"
dracd_flags="-i -e XX"
rpcbind_enable="YES"
rpcbind_flags="-s"

 XXには、何分間を許容するかの分数を指定。
/etc/hosts.allowに

rpcbind : localhost : allow
rpcbind : ALL : deny

のように限定的な記述にしておけばOK。

# /usr/local/etc/rc.d/dracd start

これで動き出したはず。
「Pop-before-SMTP plugin using DRAC」というのをいただいてきます。

# cd  /usr/ports/mail/dovecot2
# make patch
# cd work
# fetch -o dovecot2-drac-0.1.tar.gz 'http://sourceforge.jp/frs/redir.php?m=keihanna&f=%2Fdovecot2-drac%2F53176%2Fdovecot2-drac-0.1.tar.gz'
# tar pzxvf dovecot2-drac-0.1.tar.gz
# cd dovecot2-drac
# make DOVDIR=../dovecot-2.1.15
cc -Wall -W -shared -fPIC -DHAVE_CONFIG_H -I../dovecot-2.1.15  -I../dovecot-2.1.15/src/lib  -I../dovecot-2.1.15/src/lib-index
  -I../dovecot-2.1.15/src/lib-mail  -I../dovecot-2.1.15/src/lib-storage  -I../dovecot-2.1.15/src/lib-storage/index 
 -I../dovecot-2.1.15/src/lib-storage/index/maildir -L/usr/local/lib  -o drac_plugin.so -ldrac
# ls -la
total 40
drwxr-xr-x  2 root  wheel   512 Apr  3 22:18 .
drwxr-xr-x  4 root  wheel   512 Apr  3 22:14 ..
-rw-r--r--  1 root  wheel  7651 Sep  9  2011 COPYING.LGPL
-rw-r--r--  1 root  wheel   439 Sep  9  2011 Makefile
-rw-r--r--  1 root  wheel  1179 Sep  9  2011 README
-rw-r--r--  1 root  wheel  1453 Sep  9  2011 README.j
-rw-r--r--  1 root  wheel  3062 Sep  9  2011 drac-plugin.c
-rwxr-xr-x  1 root  wheel  5028 Apr  3 22:18 drac_plugin.so

みたいな感じでファイルを作成。
プラグインのディレクトリをわざわざつくるほどでもないかな、ということで。

# cp -pi drac_plugin.so /usr/local/lib/dovecot/

また、設定を加える。/usr/local/etc/dovecot/conf.d/10-mail.conf に追加する。

# Directory where to look up mail plugins.
#mail_plugin_dir = /usr/lib/dovecot
# 2013-04-03
mail_plugin_dir = /usr/local/lib/dovecot

# 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 =
# 2013-04-03
mail_plugins = drac

/usr/local/etc/dovecot/conf.d/90-plugin.confに追加する。

##
## Plugin settings
##

# All wanted plugins must be listed in mail_plugins setting before any of the
# settings take effect. See <doc/wiki/Plugins.txt> for list of plugins and
# their configuration. Note that %variable expansion is done for all values.

plugin {
  #setting_name = value
  dracdserver = localhost
  dracdtimeout = 60
}

これでいいのかな。ソースを見る限り、デフォルト値。
/usr/local/etc/dracd.db にファイルができればいいんだけど。

Apr  3 22:57:21 - dovecot: pop3-login: Login: user=<->, method=PLAIN, rip=192.168.1.x, lip=192.168.1.x, mpid=2124, TLS, session=<l7ubO3XZywDAqKG9>
Apr  3 22:57:21 - dovecot: pop3: Error: module /usr/local/lib/dovecot/drac_plugin.so: dlsym(drac_plugin_init) failed: Undefined symbol "drac_plugin_init"
Apr  3 22:57:21 - dovecot: pop3: Error: Module doesn't have init function: /usr/local/lib/dovecot/drac_plugin.so
Apr  3 22:57:21 - dovecot: pop3: Fatal: Couldn't load required plugins

# う…む、エラーで今日も終わり。C言語の初心者講座受けに行きたいなぁ。
dovecot 1.xのように手で入力してコンパイルしてみようとすると、

/usr/bin/ld: /usr/local/lib/libdrac.a(dracauth.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libdrac.a: could not read symbols: Bad value

とかいわれる。そういう意味だったのか。/usr/ports/mail/drac側ののCFLAGS+=-fPICが必要ということだったわけだね。
20年以上C言語とか、斜め読みしていたけど、もうまったくわかっていないというのが明らかだな、と。

--- drac.orig/Makefile  2012-11-17 14:59:01.000000000 +0900
+++ drac/Makefile       2013-04-05 22:59:27.000000000 +0900
@@ -36,7 +36,7 @@
 .include <bsd.port.pre.mk>

 MAKE_ARGS+=    -DWITH_TI_RPC
-
+CFLAGS+=       -fPIC
 pre-everything::
        @${ECHO_MSG} "============================================================="
        @${ECHO_MSG} "For databases compatible with other MTAs than sendmail, use:"

こんな感じで終わり。
DRACなんてもうバージョン上がらないし、portsのメンテナもいないし。
いいよな、このままで。日本以外の人がここに来た場合には、翻訳サイト経由じゃなくても、上記でわかるよな?

POP認証すると、

Apr  5 23:00:15 . dovecot: pop3(-): Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

とやっとエラーのない状態で終了できた。
DRACのDBは、

# ll /usr/local/etc/dracd.db
-rw-------  1 root  wheel  1024 Apr  5 23:00 /usr/local/etc/dracd.db
# makemap -u btree /usr/local/etc/dracd.db
192.168.1.199 1365171315

のように、更新されている。
(上記で実際は何分にしたか、ばれているけど、気にしないでOK!)

こんな感じで使えることを確認しました。
次は、SMTP認証にやっと移れます。 


【改訂履歴】作成:2013/04/01 改訂: 2013/04/08
【参考リンク】

Dovecot…オフィシャルサイト

Copyright © 1996,1997-2006,2007- by F.Kimura,