ライン

ポイント:Dovecotはローカル配信、SquirrelMailはLDAPパスワード変更に

ライン

 はじめに

MTAにPostfix、POP3/IMAP4サーバにDovecotを利用する

 今回も続き物なので、FreeBSD 10.0を利用して作業していきます。
OpenLDAPを使って、メール系とFTPを利用できるユーザを作ることが目的ですが、その過程としてメール系を導入していきます。

 導入

 Postfixはportsで導入することにします。

# cd /usr/ports/mail/postfix 
# make config

選択メニューが表示されます。

上記がデフォルト値です。
PCREのみに選択されています。
INST_BASEは、/usr/local/etcに設定ファイルを持つのではなく、/etc/postfixに作成される形となります。

 完了したら、次です。

# make config-recursive

各portsのパラメータ選択です。pkgを使う以上、変更しないで進みますが、Dovecotは指定が必要なのでportsで入れます

※LIBWRAPはクリックを入れました

今回は、APOPは棄てます。
では、makeとインストールを開始します。
CPUもメモリーもハードディスクも結構速いので、サクサク進む予定です。
# 画面の流れが既に見えていません!!

# make reinstall clean
...
    Warning: you still need to edit myorigin/mydestination/mynetworks
    parameter settings in /etc/postfix/main.cf.

    See also http://www.postfix.org/STANDARD_CONFIGURATION_README.html
    for information about dialup sites or about sites inside a
    firewalled network.

    BTW: Check your /etc/aliases file and be sure to set up aliases
    that send mail for root and postmaster to a real person, then
    run /usr/bin/newaliases.

install  -o root -g wheel -m 555 /usr/ports/mail/postfix/work/postfix-2.11.0/auxiliary/rmail/rmail /usr/bin/rmail
install  -o root -g wheel -m 555 /usr/ports/mail/postfix/work/postfix-2.11.0/auxiliary/qshape/qshape.pl /usr/bin/qshape
install  -o root -g wheel -m 444 /usr/ports/mail/postfix/work/postfix-2.11.0/man/man1/qshape.1 /usr/share/man/man1
===> Staging early rc.d startup script(s)
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y
To enable postfix startup script please add postfix_enable="YES" in
your rc.conf

If you not need sendmail anymore, please add in your rc.conf:

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

And you can disable some sendmail specific daily maintenance routines in your
/etc/periodic.conf file:

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

If /etc/periodic.conf does not exist please create it and add those values.

If you are using SASL, you need to make sure that postfix has access to read
the sasldb file.  This is accomplished by adding postfix to group mail and
making the /usr/etc/sasldb* file(s) readable by group mail (this should
be the default for new installs).

If you are upgrading from Postfix 2.6 or earlier, review the RELEASE_NOTES to
familiarize yourself with new features and incompatabilities.
===>   Compressing manual pages for postfix-base-2.11.0,1
===>   Registering installation for postfix-base-2.11.0,1
Installing postfix-base-2.11.0,1... done
===> SECURITY REPORT:
      This port has installed the following binaries which execute with
      increased privileges.
/usr/sbin/postqueue
/usr/sbin/postdrop

      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/libexec/postfix/dnsblog
/usr/libexec/postfix/trivial-rewrite
/usr/libexec/postfix/pipe
/usr/libexec/postfix/discard
/usr/libexec/postfix/virtual
/usr/libexec/postfix/smtp
/usr/libexec/postfix/oqmgr
/usr/libexec/postfix/spawn
/usr/libexec/postfix/local
/usr/libexec/postfix/tlsproxy
/usr/libexec/postfix/flush
/usr/libexec/postfix/proxymap
/usr/libexec/postfix/postscreen
/usr/libexec/postfix/master
/usr/libexec/postfix/lmtp
/usr/libexec/postfix/smtpd
/usr/libexec/postfix/scache
/usr/libexec/postfix/qmgr
/usr/libexec/postfix/pickup
/usr/libexec/postfix/verify
/usr/libexec/postfix/nqmgr
/usr/libexec/postfix/showq
/usr/libexec/postfix/tlsmgr
/usr/libexec/postfix/error
/usr/libexec/postfix/bounce
/usr/libexec/postfix/qmqpd
/usr/libexec/postfix/anvil
/usr/libexec/postfix/cleanup

      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/etc/rc.d/postfix

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.postfix.org/
===>  Cleaning for pcre-8.34
===>  Cleaning for openldap-client-2.4.38
===>  Cleaning for dovecot2-2.2.10
===>  Cleaning for postfix-base-2.11.0,1

 導入は完了です。意外に余計な物が突っ込まれずに終わりました。
上記に書かれている通りですが、
(1) /etc/rc.conf に追加

postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

を加える。そして、
(2) /etc/periodic.conf を新規作成し、以下を追加。
/etc/periodic/daily/のものは手をつけないけど、影響なしなのかは調べていないけど。

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

 次に、POP/IMAP用に Dovecotを導入しているので、/etc/rc.confに

dovecot_enable="YES"

を追加しました。

 OpenLDAPはクライアントしか入っていないので、これは後で導入することにします。
ClamAVやSpamAssassinなどもMilter動作するように設定予定です。

 さて、ローカルアカウントに対しても、動作はするはず。この後は設定とテストを行うことにします。

 設定

postfix(基本)

 まずはシンプルに、マルチドメインにせず、普通にシングルドメインでの設定を行うことにしました。
(1) main.cf

# cd /etc/postfix/
# ll
total 100
-rw-r--r--  1 root  wheel  11942 Mar  2 22:14 LICENSE
-rw-r--r--  1 root  wheel   1629 Mar  2 22:14 TLS_LICENSE
-rw-r--r--  1 root  wheel   3547 Mar  2 22:14 bounce.cf.default
-rw-r--r--  1 root  wheel  26257 Mar  2 22:14 main.cf
-rw-r--r--  1 root  wheel  32970 Mar  2 22:14 main.cf.default
-rw-r--r--  1 root  wheel   1974 Mar  2 22:14 makedefs.out
-rw-r--r--  1 root  wheel   6200 Mar  2 22:14 master.cf

 上記のように、設定ファイルは準備されていました。

# cp -p main.cf main.cf.orig
# grep -v "^#" main.cf | grep -v '^$'
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
mynetworks_style = host

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = maildrop
html_directory = /usr/share/doc/postfix
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /u

 まずは、追加する部分と修正する部分を加工します。
# 何年かぶりで思い出しながら設定してます

myhostname = ns.example.jp
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases

 これでどのような動きになるかを確認しようと思います。

# ps -ax | grep mail | grep -v grep
  916  -  Ss     0:00.13 sendmail: accepting connections (sendmail)
  919  -  Is     0:00.00 sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue (sendmail)
# kill -KILL 916 919
# postconf -n
..
# cd /etc/mail
# make aliases
# service postfix start

 特に問題なく起動できているようです。
 テストメール(ローカル同士)を投げてみました。ローカルへの配送は問題なし。
/home/ユーザ名 以下にMaildir のディレクトリも正常に作成されていました。

OpenLDAP Serverの導入

 Postfixはとりあえず後で見ることにして、サーバ側を入れておきます。

 portsでmake configしてオプションを見ましたが、まずはそのままで良さそうなのでpkgでつっこんでしまうことにしました。
この部分は、article freebsd sogo [BMT Solutions]を参考にして入力を真似して作っていく方針で進めました。

# pkg install openldap-server
Updating repository catalogue
The following 3 packages will be installed:

        Installing libltdl: 2.4.2_2
        Installing db46: 4.6.21.4
        Installing openldap-server: 2.4.38_1

The installation will require 34 MB more space

6 MB to be downloaded

Proceed with installing packages [y/N]:y
libltdl-2.4.2_2.txz                 100%   39KB  38.9KB/s  38.9KB/s   00:01
db46-4.6.21.4.txz                   100% 5211KB 473.7KB/s 450.8KB/s   00:11
openldap-server-2.4.38_1.txz        100%  894KB 446.8KB/s 263.5KB/s   00:02
Checking integrity... done
[1/3] Installing libltdl-2.4.2_2... done
[2/3] Installing db46-4.6.21.4... done
[3/3] Installing openldap-server-2.4.38_1...===> Creating users and/or groups.
Creating group 'ldap' with gid '389'.
Creating user 'ldap' with uid '389'.
 done
************************************************************

The OpenLDAP server package has been successfully installed.

In order to run the LDAP server, you need to edit
  /usr/local/etc/openldap/slapd.conf
to suit your needs and add the following lines to /etc/rc.conf:
  slapd_enable="YES"
  slapd_flags='-h "ldapi://%252fvar%252frun%252fopenldap%252fldapi/ ldap://0.0.0.0/"'
  slapd_sockets="/var/run/openldap/ldapi"

Then start the server with
  /usr/local/etc/rc.d/slapd start
or reboot.

Try `man slapd' and the online manual at
  http://www.OpenLDAP.org/doc/
for more information.

slapd runs under a non-privileged user id (by default `ldap'),
see /usr/local/etc/rc.d/slapd for more information.

************************************************************

 このような感じでした。/etc/rc.confには上記の通りを書くわけですが、ldap://0.0.0.0/だとどことでも認証してしまいそう。
/etc/hosts.allowで制限することもできるのでしょうけど。この辺りは後に検討が必要そうです。
※自サーバのみでいいのなら、127.0.0.1でいいでしょうし、イントラだけならその範囲を記述でいいかと思います。

# cd  /usr/local/etc/openldap 
# cp -p DB_CONFIG.example DB_CONFIG
# service slapd start
/usr/local/etc/rc.d/slapd: WARNING: slapd: Can't find socket /var/run/openldap/ldapi

警告が出ました。何も設定しないままでサービスあげちゃうとこんなかな。
slap.confには、

# grep -v "^#" slapd.conf | grep -v '^$'
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

modulepath      /usr/local/libexec/openldap
moduleload      back_bdb

access to attrs=userPassword
        by dn="cn=Manager,dc=." read
        by self write
        by anonymous auth
        by * none
access to *
        by self write
        by users read
        by anonymous auth

database        bdb
suffix          "dc=."

rootdn          "cn=Manager,dc=."
rootpw          {SSHA}eHiznw~Z2T

directory       /var/db/openldap-data
index   objectClass     eq

TLSCertificateFile      /usr/local/etc/openldap/key/cert.crt
TLSCertificateKeyFile   /usr/local/etc/openldap/key/cert.key

のようにしました。
パスワードは以前と同じで、パスワードをSSHAの形になるように変換して上記に貼り付けます。
コマンドは以下です。

# slappasswd -s (パスワード)

ldap.confには、以下を追加しました。

#grep -v "^#" ldap.conf | grep -v '^$'
host    127.0.0.1
BASE    dc=.
URI     ldap:///
SIZELIMIT       12
TIMELIMIT       15

また、前回に同じくトップレベルを設定することにしました。
ファイルを同じディレクトリに作成しておきます。

dn: dc=.
objectClass: top
objectClass: domain
dc: .

top.ldifというファイルを置きました。
ここで

# ldapadd -x -W -h localhost -D "cn=Manager,dc=." -f top.ldif
Enter LDAP Password:********
adding new entry "dc=."

として初期の追加をしました。ここでslapcatと入力すれば、内容が表示できますので、確認しておいてください。

# slapcat
dn: dc=.
objectClass: top
objectClass: domain
dc: .
structuralObjectClass: domain
entryUUID: -
creatorsName: cn=Manager,dc=.
createTimestamp: 20140315034040Z
entryCSN: 20140315034040.045662Z#000000#000#000000
modifiersName: cn=Manager,dc=.
modifyTimestamp: 20140315034040Z

 こんな感じです。

# mkdir key;cd  key
# openssl genrsa -out cert.key 2048
Generating RSA private key, 2048 bit long modulus
.............................................................................................................................+++
.......+++
e is 65537 (0x10001)
# openssl req -new -key cert.key -out cert.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:TOKYO
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ldap.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -in  cert.csr -out cert.crt -req -signkey cert.key -days 3650
# chmod 400 *
# chown ldap:ldap *

ちなみに、上記に書いたsocketのエラーですが、/etc/rc.confに追加した内容を

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

とすることで解消しました。

 ユーザを作成しておかないとテストにならないので、まずはテスト用のドメインとユーザを作成していきます。
example.com.ldifというファイル名してファイルを準備します。

dn: dc=example.com,dc=.
objectClass: dcObject
objectClass: organization
objectClass: top
dc: example.com
o: example.com

dn: ou=users,dc=example.com,dc=.
objectClass: organizationalUnit
objectClass: top
ou: users

dn: ou=groups,dc=example.com,dc=.
objectClass: organizationalUnit
objectClass: top
ou: groups

dn: cn=mail,ou=users,dc=example.com,dc=.
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: user1
sn: example
userPassword: {SSHA}...hidden...
mail: user1@example.com
uid: user1@example.com

dn: cn=exampleusers,ou=groups,dc=example.com,dc=.
objectClass: extensibleObject
objectClass: groupOfNames
objectClass: top
cn: exampleusers
mail: exampleusers@example.com
member: cn=users1,ou=users,dc=example.com,dc=.

のように投入。先ほどと同じく、以下で登録。

# ldapadd -x -W -h localhost -D "cn=Manager,dc=." -f example.com.ldif
Enter LDAP Password:
adding new entry "dc=example.com,dc=."

adding new entry "ou=users,dc=example.com,dc=."

adding new entry "ou=groups,dc=example.com,dc=."

adding new entry "cn=user1,ou=users,dc=example.com,dc=."

adding new entry "cn=exampleusers,ou=groups,dc=examle.com,dc=."

こんなイメージで登録されます。ちなみに、初回はすんなりいかなくて

ldapadd: attributeDescription "dn": (possible missing newline after line 20, entry "dc=example.com,dc=."?)
adding new entry "dc=example.com,dc=."
ldap_add: Type or value exists (20)
        additional info: objectClass: value #13 provided more than once

のようにエラーが出て、少し悩みました。
コピペで入力した際に、おかしな改行コードが紛れ込でしまったことが、ウェブ検索の情報でわかりました。
一回catした内容をコピペし直しで解消することを確認しました。ウェブのいろんな情報がありがたいです。

 さて、10-mail.confに設定を加えます。これも、参考にしたページのほぼそのままです。

#grep -v "^.*#" 10-mail.conf | grep -v '^$'
mail_location = maildir:~/Maildir
namespace inbox {
  inbox = yes
}
mail_uid = vmail
mail_gid = vmail

vmailのID/GIDを決めて、ユーザとグループを作成。そして、/mailを作成して、vmailのオーナーで変更するところまで同じに作業しました。

Devecot2

 設定ファイルは、/usr/local/etc/dovecot/以下に設定しますが、現時点は空フォルダ。

# 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/

dovecot.confに必要な設定を加えます。TCP Wrapperなどの設定を入れておきます。

# grep -v "^#" dovecot.conf | grep -v '^$'
protocols = imap pop3 lmtp
login_access_sockets = tcpwrap
service tcpwrap {
    unix_listener login/tcpwrap {
        group = $default_login_user
        mode = 0600
        user = $default_login_user
    }
}
dict {
}
!include conf.d/*.conf
!include_try local.conf

 conf.d/10-logging.confにはログ位置を記述。

log_path = /var/log/dovecot.log

 conf.d/10-auth.confは以下のようなイメージ。もうプレーンテキストやめるぞ、にすることに。
ただし、popsなどではこの設定でも、プレーンテキストは通るので大丈夫とのこと。

#grep -v "^#" 10-auth.conf  | grep -v '^$'
disable_plaintext_auth = yes
auth_cache_size = 10M
auth_cache_ttl = 1200
auth_cache_negative_ttl = 1 hour
auth_mechanisms = plain
!include auth-ldap.conf.ext

 conf.d/10-mail.confを記述。vmailというユーザとグループを作成する前提です。
メールのディレクトリを /home/virtual を作成し、その下にLDAPユーザのメールを集めます。
mkdir /home/virtual ; chown vmail:vmail /home/virtualしたイメージです。

# grep -v ".*#" 10-mail.conf | grep -v '^$'
mail_location = maildir:/home/virtual/%d/%u
namespace inbox {
  inbox = yes
}
mail_uid = vmail
mail_gid = vmail

 conf.d/20-lmtp.confを記述。

protocol lmtp {
   mail_plugins = quota
}

 次に、auth-ldap.conf.extを修正。
複数行ある以下のディレクトリ位置を変更。これはportsで最初から変更していても良さそうなのに。

#grep -v "^#" auth-ldap.conf.ext  | grep -v '^$'
passdb {
  driver = ldap
  # Path for LDAP configuration file, see example-config/dovecot-ldap.conf.ext
  args = /usr/local/etc/dovecot/dovecot-ldap.conf.ext
}
userdb {
  driver = ldap
  args = /usr/local/etc/dovecot/dovecot-ldap.conf.ext

  # Default fields can be used to specify defaults that LDAP may override
  default_fields = home=/home/virtual/%d/%u
}

 conf.d/10-ssl.confにはログ位置を記述。

ssl = yes
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem

 SSLのためのキーの設定の実施をします。

# mkdir -p /etc/ssl/private
# mkdir -p /etc/ssl/certs
# cd /usr/local/share/examples/dovecot/
# sh ./mkcert.sh
Generating a 1024 bit RSA private key
..............................++++++
......++++++
writing new private key to '/etc/ssl/private/dovecot.pem'
-----

subject= /OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
SHA1 Fingerprint=E9:3D:40:D4:8E:2A:64:3C:1F:50:8A:69:00:65:28:AC:59:D8:9D:3E

該当するファイルを位置に配置。

# cd  /usr/local/etc/dovecot/
# cp /usr/local/share/doc/dovecot/example-config/dovecot-ldap.conf.ext ./
# vi dovecot-ldap.conf.ext

こんな感じで後は設定をしていきます。

#grep -v "^#" dovecot-ldap.conf.ext  | grep -v '^$'
hosts = localhost
dn = cn=Manager,dc=.
dnpass = PASSWORD
base = "dc=."
user_filter = (mail=%u)
pass_attrs = userPassword=password
pass_filter = (mail=%u)
default_pass_scheme = LDAP-SHA

dnpassは直に書くしか無いのかな。ちょっと気持ちが悪い。
ここを平文入力にならないように早めにして欲しいところ。

# chmod 600 dovecot-ldap.conf.ext

として、root以外からは参照できないように変更しました。
ここで、サービスを再起動させて動作確認しました。
どのように見えるかを確認しました。

# doveadm -v user user1@example.com
field   value
uid     vmail
gid     vmail
home    /mail/11112222-3333-dddd-5555-123456789012
mail    maildir:~/Maildir

なんかいい感じです。
実際に、becky!でPOPs受信してみました。

# tail -f /var/log/dovecot.log
Mar 16 22:01:41 pop3-login: Info: Login: user=<user1@example.com>, 
   method=PLAIN, rip=192.168.1.171, lip=192.168.1.101, mpid=2253, TLS, session=<YYm111a0UADAqKJh>
Mar 16 22:01:41 pop3(user1@example.com): Info: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

以上のように、認証できました。当然メールは何も届いていない状態なので、空振りするだけです。
/mail 以下にはMaildir形式でフォルダが作成されていました。
もちろん、

Mar 16 22:24:35 imap-login: Info: Login: user=<user1@example.com>, method=PLAIN, rip=192.168.1.171, 
   lip=192.168.1.101, mpid=2307, TLS, session=<XaaNNbn0RgDBqLLh>

のように、IMAP4sでも大丈夫でした。

 では、今度は送信側の設定を開始することにします。

postfix(送信)

 SMTP認証は必須を前提にします。前著の通りで、PbSはこのタイミングで入れません。
考えていたのは、Cyrus SASL(Ver 2)にするか、DovecotのSASLにするかです。実際には後者を選択することにしました。

ということで、まだDovecotの設定ファイルを修正してから開始します。
10-master.conf (/usr/local/etc/dovecot/conf.d)を修正します。

#grep -v ".*#" 10-master.conf | grep -v '^$'
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    user  = postfix
    group = postfix
    mode  = 0666
  }
}
service imap {
}
service pop3 {
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
  }
}

サービスの再起動で、/var/spool/postfix/private/auth= が作成されました。
さて、postfixの設定ですが、BASE指定しているので/etc/postfixにあります。
/etc/postfix/main.cfの設定を修正しておきます。

#grep -v "^#" main.cf  | grep -v '^$'
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
myhostname = localhost
mydomain = localdomain
myorigin = $myhostname
mydestination =
local_recipient_maps =
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks =  192.168.1.0/24, 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
home_mailbox = Maildir/

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = maildrop
html_directory = /usr/share/doc/postfix
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix
inet_protocols = ipv4
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/ssl/postfix/postfix.key
smtpd_tls_cert_file = /etc/ssl/postfix/postfix.crt
smtpd_tls_session_cache_database = btree:/var/db/postfix/smtpd_tls_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_relay_restrictions = permit_sasl_authenticated, defer_unauth_destination
message_size_limit = 10240000
mailbox_size_limit = 51200000
local_transport = dovecot
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = example.com example.jp
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
allow_percent_hack = yes
swap_bangpath = yes
allow_untrusted_routing = no
smtpd_client_restrictions =
 permit_mynetworks,
 reject_rbl_client relays.ordb.org,
 reject_rbl_client spamcop.net,
 reject_rbl_client sbl.spamhaus.org,
 reject_rbl_client list.dsbl.org,
 permit

message_size_limitなどはデフォルト値ですが、後で修正するために明示しました。

上記にあわせたTLS用の鍵も準備しておきます。

# cd /etc/ssl/postfix
# openssl genrsa -out postfix.key 2048
Generating RSA private key, 2048 bit long modulus
........+++
....+++
e is 65537 (0x10001)
# openssl req -new -days 3650 -key postfix.key -out postfix.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:server.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []
#openssl x509 -in postfix.csr -out postfix.crt -req \
? -signkey postfix.key -days 3650
Signature ok
subject=/C=JP/ST=TOKYO/O=example.com/CN=server.example.com
Getting Private key
# chmod 400 *

master.cfの一部をコメントを外して有効にしておきます。

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject

サービスを再起動しておきます。

# service postfix restart

この後送信テストしてみたところ、ちゃんとTLSでのみ送信できるようになりました。

 アンチウィルス、SPAM対策

アンチウィルス

 milter-managerで導入した前回のケースでインストールをします。

 まずは、ClamAVをportsで導入します。

# cd /usr/ports/security/clamav-milter
# make install clean

milterを指定して導入を行います。pkgで導入で良かったですね。
そろそろpkgでロックするものとしないものを整理しておかないとアップグレードで動かなくなったりという面倒なことがありそうです。

後は選択画面は表示されることなく終了しました。

===>  Cleaning for arc-5.21p
===>  Cleaning for arj-3.10.22_4
===>  Cleaning for lha-1.14i_6
===>  Cleaning for unzoo-4.4_2
===>  Cleaning for clamav-milter-0.98.1

/etc/rc.conf に以下を追加します。

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_milter_enable="YES"
clamav_milter_socket_mode="660"
clamav_milter_socket_group="mail"

/usr/local/etc にあるそれぞれの設定ファイルの指定。
clamd.conf を確認。

#grep -v ^# clamd.conf | grep -v ^$
LogFile /var/log/clamav/clamd.log
LogTime yes
LogVerbose yes
LogRotate yes
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/db/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
User clamav
AllowSupplementaryGroups yes
ScanMail yes

freshclam.conf を確認。

#grep -v ^# freshclam.conf | grep -v ^$
DatabaseDirectory /var/db/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogTime yes
LogVerbose yes
LogRotate yes
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
AllowSupplementaryGroups yes
DatabaseMirror db.jp.clamav.net
DatabaseMirror database.clamav.net
Checks 24
NotifyClamd /usr/local/etc/clamd.conf
OnUpdateExecute /usr/local/etc/rc.d/clamav-milter.sh restart

clamav-milter.conf を確認。

# clamav-milter.conf | grep -v ^$
MilterSocket /var/run/clamav/clmilter.sock
FixStaleSocket yes
User clamav
AllowSupplementaryGroups yes
PidFile /var/run/clamav/clamav-milter.pid
ClamdSocket unix:/var/run/clamav/clamd.sock
OnInfected Reject
AddHeader Replace
LogFile /tmp/clamav-milter.log
LogFileMaxSize 2M
LogTime yes
LogVerbose yes
LogInfected Full

 clam-milter用にログの準備をしておきます。 

# touch /var/log/clamav-milter.log
# chown clamav:clamav /var/log/clamav-milter.log
# chmod 660 /var/log/clamav-milter.log

導入が終わったら、さっさとあげてしまいましょう。

# /usr/local/etc/rc.d/clamav-freshclam start
# /usr/local/etc/rc.d/clamav-clamd start
# /usr/local/etc/rc.d/clamav-milter start

の順番であげます。最近上がってくるまでに少々時間を要しているサービスなので気長に作業しましょう。

 さて、milter managerを導入します。これも終わってみると、pkgで十分でした。
毎度でportsの追従も古い状態。VINE Linuxみたいでなんか残念な気分。

# cd /usr/ports/mail/milter-manager 
# make install clean
===>  Cleaning for ruby-1.9.3.484_1,1
===>  Cleaning for ruby19-glib2-1.1.5
===>  Cleaning for intltool-0.50.2
===>  Cleaning for libev-4.15,1
===>  Cleaning for libyaml-0.1.4_3
===>  Cleaning for rubygem-pkg-config-1.1.4
===>  Cleaning for p5-XML-Parser-2.41_1
===>  Cleaning for ruby19-gems-1.8.29
===>  Cleaning for rubygem-rake-10.1.1
===>  Cleaning for milter-manager-1.8.6

/etc/rc.confに追加します。

miltermanager_enable="YES"
miltermanager_uid="milter-manager"
miltermanager_gid="milter-manager"

 上記のように専用のユーザとグループを追加します。

# pw groupadd -n milter-manager -g 333
# pw useradd milter-manager -g milter-manager -G mail -m
# pw useradd -n milter-manager -u 333 -g milter-manager -G mail -s /usr/sbin/nologin -d /var/milter-manager -c "milter manager"

ネットで検索しても、このportsを利用している人が見つからない。
情報ないなーって思う。

# milter-test-server -s unix:/var/run/milter-manager/milter-manager.sock
status: accept
elapsed-time: 0.005649 seconds

更に確認。

# milter-manager -u milter-manager --show-config
..
define_milter("clamav-milter") do |milter|
  # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:42
  milter.connection_spec = "unix:/var/run/clamav/clmilter.sock"
  # default
  milter.description = nil
  # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:35
  milter.enabled = true
  # default
  milter.fallback_status = "accept"
  # default
  milter.evaluation_mode = false
  # default
  milter.applicable_conditions = []
  # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:37
  milter.command = "/usr/sbin/service"
  # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:38
  milter.command_options = "clamav-milter start"
  # default
  milter.user_name = nil
  # default
  milter.connection_timeout = 297.0
  # default
  milter.writing_timeout = 7.0
  # default
  milter.reading_timeout = 7.0
  # default
  milter.end_of_message_timeout = 297.0
end

define_applicable_condition("Unauthenticated") do |condition|
  condition.description = "Apply a milter only when sender is not authorized"
end

define_milter("clamav-milter") do |milter|
  milter.connection_spec = "unix:/var/run/clamav/clmilter.sock"
  milter.description = nil
  milter.enabled = true
  milter.fallback_status = "accept"
  milter.evaluation_mode = false
  milter.applicable_conditions = []
  milter.command = "/usr/local/etc/rc.d/clamav-milter"
  milter.command_options = "start"
  milter.user_name = nil
  milter.connection_timeout = 300.0
  milter.writing_timeout = 10.0
  milter.reading_timeout = 10.0
  milter.end_of_message_timeout = 300.0
end

Postfixの設定を加えます。main.cf の最後に以下を追加しました。

milter_protocol = 6
milter_default_action = accept
milter_mail_macros = {auth_author} {auth_type} {auth_authen}
smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock
milter_command_timeout = 150s

そして、postfixを再起動。

試しにメールを送信してみましょう。

Mar 22 16:34:21 server postfix/smtpd[57193]: connect from unknown[192.168.1.10]
Mar 22 16:34:21 server postfix/smtpd[57193]: Anonymous TLS connection established from unknown[192.168.1.10]: TLSv1 with cipher AES128-SHA (128/128 bits)
Mar 22 16:34:21 server postfix/smtpd[57193]: D2713720F: client=unknown[192.168.1.10], sasl_method=PLAIN, sasl_username=foo@example.com
Mar 22 16:34:21 server postfix/cleanup[57198]: D2713720F: message-id=<20140322163422.A70E.647AB3BC@example.com>
Mar 22 16:34:31 server milter-manager[57051]: [statistics] [milter][header][add](6): <X-Virus-Scanned>=<clamav-milter 0.98.1 at server.example.com>: clamav-milter
Mar 22 16:34:31 server milter-manager[57051]: [statistics] [milter][header][add](6): <X-Virus-Status>=<Clean>: clamav-milter
Mar 22 16:34:31 server milter-manager[57051]: [statistics] [session][header][add](5): <X-Virus-Scanned>=<clamav-milter 0.98.1 at server.example.com>
Mar 22 16:34:31 server milter-manager[57051]: [statistics] [session][header][add](5): <X-Virus-Status>=<Clean>
Mar 22 16:34:31 server postfix/qmgr[57180]: D2713720F: from=<foo@example.com>, size=38690, nrcpt=1 (queue active)
Mar 22 16:34:31 server postfix/smtpd[57193]: disconnect from unknown[192.168.1.10]
Mar 22 16:34:31 server milter-manager[57051]: [statistics] [session][end][end-of-message][accept][9.86025](5)
Mar 22 16:34:31 server milter-manager[57051]: [statistics] [sessions][finished] 3(+1) 0
Mar 22 16:34:35 server postfix/smtp[57199]: D2713720F: to=<x........x@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.26]:25,
 delay=14, delays=9.6/0/0.73/3.1, dsn=2.0.0, status=sent (250 2.0.0 OK 1395473675 j1si5067012pbr.472 - gsmtp)
Mar 22 16:34:35 server postfix/qmgr[57180]: D2713720F: removed

うまくいっているようです。

 動作の確認ができているので、他のmilterアプリも続けて入れてしまいましょう。

SPAM対策

 何年かぶりのGreylisting。メールを受信できない元があって、やめちゃったんだけど。今回はもう安定しているだろうし。

# cd /usr/ports/mail/milter-greylist
# make install clean
# pkg lock milter-greylist
milter-greylist-4.4.3: lock this package? [y/N]: y
Locking milter-greylist-4.4.3

オプションにpostfixにクリック入れてmakeが必要なのでpkgではなく、portsでの導入が必要です。

導入が終わった後には設定ファイルの修正を入れます。SFのページを例に修正していきます。

# cd /usr/local/etc/mail
# cp greylist.conf.sample greylist.conf
# diff -urN greylist.conf.sample greylist.conf
--- greylist.conf.sample        2014-03-22 16:58:05.647706739 +0900
+++ greylist.conf       2014-03-22 17:24:10.504662459 +0900
@@ -6,10 +6,10 @@
 #

 pidfile "/var/run/milter-greylist.pid"
-socket "/var/milter-greylist/milter-greylist.sock"
+socket "/var/milter-greylist/milter-greylist.sock" 600
 dumpfile "/var/milter-greylist/greylist.db" 600
 dumpfreq 1
-user "mailnull:mailnull"
+user "mailnull:mail"

 # Log milter-greylist activity to a file
 #stat ">>/var/milter-greylist/greylist.log" \
@@ -135,7 +135,11 @@
 #               msg "Sender IP caught in NJABL blacklist"
 #racl greylist list "grey users" dnsrbl "SORBS DUN" delay 24h autowhite 3d
 racl greylist list "grey users" delay 30m autowhite 3d
-racl whitelist default
+#racl whitelist default
+subnetmatch /24
+greylist 10m
+autowhite 1w
+racl greylist default

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

miltergreylist_enable="YES"
miltergreylist_runas="mailnull:mail"

折角なので、日本版のSpamAssassinを導入してからspamass-milterを入れることにします。
※以下の通り、パッケージの名称が変わったようですが、本ページでは当時のままで残していますので、必要に応じて読み替えてください

20140310:
  AFFECTS: users of mail/p5-Mail-SpamAssassin and japanese/p5-Mail-SpamAssassin
  AUTHOR: ohauer@FreeBSD.org

  The port mail/p5-Mail-SpamAssassin was renamed to mail/spamassassin and
  the port japanese/p5-Mail-SpamAssassin was renamed to japanese/spamassassin.
  To ease upgrading run the following set of commands:

  pkgng users:

  # pkg set -o mail/p5-Mail-SpamAssassin:mail/spamassassin
  # pkg set -o japanese/p5-Mail-SpamAssassin:japanese/spamassassin

  portmaster users:

  # portmaster -o mail/spamassassin mail/p5-Mail-SpamAssassin
  # portmaster -o japanese/spamassassin japanese/p5-Mail-SpamAssassin

以下の流れです。

# cd /usr/ports/japanese/p5-Mail-SpamAssassin
# make config
# make install clean
# cd /usr/ports/mail/spamass-milter
# make install clean

以下のように設定します。
GNUPGは、外れているけど。実際にはpkg install gnupgで入れていますので、気にしないでください。

インストールは正常終了。

/etc/rc.conf を追加します。

spamd_enable="YES"
spamd_flags="-s /var/log/spamd.log -u spamd -H /var/spool/spam"
spamass_milter_enable="YES"
spamass_milter_flags="-i 127.0.0.1/8,XXX.YYY.ZZZ.NNN/MM -f -p /var/run/spamass-milter/spamass-milter.sock"
spamass_milter_user="spamd"
spamass_milter_group="spamd"
spamass_milter_socket="/var/run/spamass-milter/spamass-milter.sock"
spamass_milter_socket_owner="spamd"
spamass_milter_socket_group="mail"
spamass_milter_socket_mode="660"
spamass_milter_localflags="-u spamd -- -u spamd"

ディレクトリの作成とオーナーの付与を行います。

# mkdir /var/run/spamass-milter/
# chown spamd:spamd /var/run/spamass-milter

 続いて、事前実行コマンドとサービスの開始。

# sa-update
# service sa-spamd start

動くことだけ確認できたので、設定ファイル系を入れます。

# cd /usr/local/etc/mail/spamassassin/
# fetch -o local.cf http://www.flcl.org/~yoh/user_prefs

その他の修正は、他のページにも書いているし割愛。

# service spamass-milter start
# service milter-manager stop
# service milter-manager start

これで完了。

 ウェブメールとLDAPの個人パスワードの変更

SquirrelMail

 やりたかった部分にやっと入り口まで到着しました。
マジに再確認のためにchefのレシピで作っておけば良かったなとか思えてしまうけど。

portsでインストールから開始します。

# cd /usr/ports/mail/squirrelmail
# make config

ここでLDAPというオプションがあるけど、どういう使い方になるのかは理解していません。
とりあえず、やってみます。

ApacheはApache2の2.4にしようと思ったけど、勝手に2.2になってしまいました。
でも、いいことにして先に進めることにしました。

Installing squirrelmail-20131229_1... done
To activate SquirrelMail, you must complete the following steps:

1) Set up a VirtualHost or an alias in httpd.conf that points to
   /usr/local/www/squirrelmail

2) Make sure the following is set in your php.ini:
   file_uploads = On

3) If you have trouble logging in, add the following to your php.ini:
   session.auto_start = 1

4) Configure your installation.
   SQUIRRELMAIL WILL NOT WORK UNTIL THIS HAS BEEN DONE.
   cd /usr/local/www/squirrelmail && ./configure

5) It is best practice to change the data/user preference directory
   (under General Options) to somewhere outside of
   /usr/local/www/squirrelmail.
# make clean
===>  Cleaning for php5-5.4.26
===>  Cleaning for php5-session-5.4.26
===>  Cleaning for php5-hash-5.4.26
===>  Cleaning for php5-gettext-5.4.26
===>  Cleaning for php5-mbstring-5.4.26
===>  Cleaning for php5-openssl-5.4.26
===>  Cleaning for php5-xml-5.4.26
===>  Cleaning for php5-ldap-5.4.26
===>  Cleaning for apache22-2.2.26
===>  Cleaning for oniguruma4-4.7.1
===>  Cleaning for apr-1.4.8.1.5.3
===>  Cleaning for gdbm-1.11
===>  Cleaning for squirrelmail-20131229_1

Apache2.2系なら慣れているし、いつも通りに設定してしまいましょう。
httpd.confに

    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
## ... ##
    Alias /webmail/ "/usr/local/www/squirrelmail/"
    <Directory "/usr/local/www/squirrelmail">
       AllowOverride All
       Options None
       Order   allow,deny
       Allow   from All
       DirectoryIndex  index.php
    </Directory>

を追加します。/etc/rc.confには、

apache22_enable="YES"
apache22_http_accept_enable="YES"

を追加してapacheを起動しました。

# service apache22 start

まずは、ウェブサーバの動作ができたことは確認できました。

# cd /usr/local/www/squirrelmail/config/ && ./conf.pl 

SquirrelMail Configuration : Read: config_default.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit

Command >>

10(Language)-1. Default Language : ja_JP
10(Language)-2. Default Charset : iso-2022-jp

この設定をし、「S」で保存するとログイン画面を見ることができるようになります。
ここの文字コードは、メールの漢字のコードなので、JISとするべきなので「iso-2022-jp」にします。
最初 ETF-8 を指定したのですが、漢字が読めなくなって困りました。
(ウェブメール自身はEUCになっているので、あまり考えなくてもいいみたいです)

全然日本語にはなっていませんけど、ログインすることができました。
日本語にならないのは、PHP5.4の影響と考えて良いと思う。5.3はEOL(2014年7月10日まではある)。どうするかな。
選択肢はいろいろ。PHP 5.3でリスク覚悟で使い続ける。表示は英語で良しとする。(メール本文がダメかも)
PHP 5.4にパッチ当ててしのぐ。SquirrelMailを使うのをやめるなど。
コミッターに既に日本語圏の人がいないみたいだし、期待できないとして棄てるがいいのかな。
RoundCubeはDBMSを使うので、ちょっと大掛かりだし。

出した結論は、無難な PHP5.3へのダウングレード。
これまでに修正されていないのだから、この数ヶ月で解消されるとは思っていないけど。
まずは
http://(IP)/webmail/src/configtest.php
でテストしてみる。あれ?現行版は既に日本語ファイルを同梱していないんですね。気づけませんでした。

以下を適用したところ、上記のように通るようになりました。

# cd/usr/local/www/squirrelmail/
# fetch http://sourceforge.net/projects/squirrelmail/files/locales/1.4.18-20090526/ja_JP-1.4.18-20090526.tar.gz
# tar pzxvf ja_JP-1.4.18-20090526.tar.gz

ログインしてみます。メールの送信まで試しますが、IMAPでローカル送信をSASLなしでいけるように
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
のように追記してサービス再起動して実施しました。

表示できました。
PHP 5.4でも行けそうな気がしますが、もう面倒だし。しばらくこのままで試す予定です。

SSL化

これは毎度のことですが、画面はSSLのみに限定します。
httpd.confの以下の1行をコメント行を外して有効にします。

# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf

該当するconfファイルのキーは、先ほど作成しているpostfixの鍵をそのまま使いました。

SSLCertificateFile "/etc/ssl/postfix/postfix.crt"
SSLCertificateKeyFile "/etc/ssl/postfix/postfix.key"

これでapache22サービスの再起動で自己認証のSSLは動作します。
SSLだけで利用するように以下の太字部分の1行を追加しています。

    Alias /webmail/ "/usr/local/www/squirrelmail/"
    <Directory "/usr/local/www/squirrelmail">
       AllowOverride All
       Options None
       Order   allow,deny
       Allow   from All
       SSLRequireSSL
       DirectoryIndex  index.php
    </Directory>

これで少しは安心して利用できるようになりました。

プラグイン

 SquirrelMailのプラグインはportsに多くありますが、今回試したいのはLDAPのパスワード変更です。
これを試して今回は終わろうと思います。

squirrelmail-abook_import_export-plugin
squirrelmail-askuserinfo-plugin
squirrelmail-avelsieve-plugin
squirrelmail-calendar_file_backend-plugin
squirrelmail-change_ldappass-plugin
squirrelmail-change_sqlpass-plugin
squirrelmail-check_quota-plugin
squirrelmail-compatibility-plugin
squirrelmail-decode
squirrelmail-email_footer-plugin
squirrelmail-login_auth-plugin
squirrelmail-login_notes-plugin
squirrelmail-mark_read-plugin
squirrelmail-multilogin-plugin
squirrelmail-notes-plugin
squirrelmail-notify-plugin
squirrelmail-password_forget-plugin
squirrelmail-plugins
squirrelmail-pupdate-plugin
squirrelmail-qmailadmin_login-plugin
squirrelmail-quota_usage-plugin
squirrelmail-sasql-plugin
squirrelmail-secure_login-plugin
squirrelmail-shared_calendars-plugin
squirrelmail-spam-buttons-plugin
squirrelmail-squirrel_logger-plugin
squirrelmail-timeout_user-plugin
squirrelmail-tmda-plugin
squirrelmail-translations
squirrelmail-unsafe_image_rules-plugin
squirrelmail-user_special_mailboxes-plugin
squirrelmail-vlogin-plugin
squirrelmail-websearch-plugin
squirrelmail-wetteronline-plugin

当然に、squirrelmail-change_ldappass-plugin を試せば良い感じです。
しかしながらここは、squirrelmail-compatibility-pluginから入れることを考えましたが、

# pkg install squirrelmail-compatibility-plugin
Updating repository catalogue
The following 9 packages will be installed:

        Installing php5: 5.4.26
        Installing php5-xml: 5.4.26
        Installing php5-openssl: 5.4.26
        Installing php5-hash: 5.4.26
        Installing php5-gettext: 5.4.26
        Installing php5-mbstring: 5.4.26
        Installing php5-session: 5.4.26
        Reinstalling squirrelmail-20131229_1 (options changed)
        Installing squirrelmail-compatibility-plugin: 2.0.16

The installation will require 19 MB more space

3 MB to be downloaded

Proceed with installing packages [y/N]:

とした時に、面倒なportsとpkgの課題にぶつかりました。
5.4系のPHPを入れたがっていることや、SquirrelMailも再導入したがっています。
ロックしていないまま走ってしまったつけがきました。
まずは、SquirrelMailはportsだけで生活したいのでロックします。

# pkg lock squirrelmail
squirrelmail-20131229_1: lock this package? [y/N]: y
Locking squirrelmail-20131229_1

しかし、これを実施しても、"Installing php5: 5.4.26"だけは許してくれない感じ。
portsでいきますか。

# cd /usr/ports/mail/squirrelmail-compatibility-plugin
# make install
..
make: exec(/usr/ports/mail/squirrelmail-compatibility-plugin/work/stage/usr/local/www/squirrelmail/config/conf.pl) failed (No such file or directory)
*** Error code 1

うまくいかずにエラー。確かにこんなディレクトリはないし。

# cd /usr/ports/mail/squirrelmail-compatibility-plugin/work/stage/usr/local/www/squirrelmail/plugins
# mv compatibility /usr/local/www/squirrelmail/plugins/
# cd /usr/local/www/squirrelmail
# ./configure
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Plugins
  Installed Plugins
    1. newmail
    2. message_details
    3. compatibility

  Available Plugins:
    4. administrator
    5. bug_report
    6. calendar
    7. delete_move_next
    8. demo
    9. filters
    10. fortune
    11. info
    12. listcommands
    13. mail_fetch
    14. sent_subfolders
    15. spamcop
    16. squirrelspell
    17. test
    18. translate

R   Return to Main Menu
C   Turn color on
S   Save data
Q   Quit

Command >>

のような感じで手動で入れました。pkgやportsの管理からは外れちゃいますけど。
これでいいことにします。良くないのは同様に他のプラグインパッケージもそうするしかないということです。
SquirrelMailはもうレガシーなパッケージといわざる得ないでしょうね。
消えるまでは楽しみましょう。

# cd /usr/ports/mail/squirrelmail-change_ldappass-plugin
# make install
# cd work/stage/usr/local/www/squirrelmail/plugins/
# mv change_ldappass/ /usr/local/www/squirrelmail/plugins/
# cd /usr/local/www/squirrelmail
# ./configure

こんな感じで登録を完了しました。

でも、このままでは動作しない。
plugins/change_ldappassのディレクトリにconfig_sample.phpがあるので、これをベースにconfig.phpを作成してください、とのこと。

# cp -p config_sample.php config.php
# grep -v ^# config.php | grep '\$' | grep -v '^.\*' | grep -v '^//' | grep -v ^$
$ldap_server = 'localhost';
$ldap_protocol_version = 3;
$ldap_password_field = 'userPassword';
$ldap_user_field = 'mail';
$ldap_base_dn = 'dc=.';
$ldap_filter = '';
$query_dn = '';
$query_pw = '';
$no_bind_as_user = false;
$ldap_bind_as_manager = false;
$ldap_manager_dn="cn=Manager,$ldap_base_dn";
$ldap_manager_pw='';
$change_smb=false;
$smb_passwd='/usr/bin/smbpasswd';
$smb_host='';
$change_ldapsmb=false;
$mkntpwd='/usr/bin/mkntpwd';
$ldapsmb_lmpassword='sambalmpassword';
$ldapsmb_ntpassword='sambantpassword';
$ldapsmb_object = 'sambasamaccount';
$lcp_crack_dict = '';
$force_smb_sync = true;
$debug = false;

どう設定するのが正しいのかわからず、しばらく試行錯誤していました。
$debug = trueにして試行錯誤して上記になりました。

ログ(debug.log)を確認しました。

Mar 30 18:18:13 HOST slapd[1586]: conn=1007 fd=9 ACCEPT from IP=127.0.0.1:31257 (IP=0.0.0.0:389)
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=0 BIND dn="" method=128
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=0 RESULT tag=97 err=0 text=
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=1 SRCH base="dc=." scope=2 deref=0 filter="(mail=foo@example.com)"
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=1 SRCH attr=dn
Mar 30 18:18:13 HOST slapd[1586]: <= bdb_equality_candidates: (mail) not indexed
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=2 BIND dn="cn=foo,ou=users,dc=example.com,dc=." method=128
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=2 BIND dn="cn=foo,ou=users,dc=example.com,dc=." mech=SIMPLE ssf=0
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=2 RESULT tag=97 err=0 text=
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=3 SRCH base="cn=foo,ou=users,dc=example.com,dc=." scope=0 deref=0 filter="(mail=foo@example.com)"
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=3 SRCH attr=dn userpassword mail objectclass
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=3 SEARCH RESULT tag=101 err=0 nentries=1 text=
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=4 MOD dn="cn=foo,ou=users,dc=example.com,dc=."
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=4 MOD attr=userpassword
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=4 RESULT tag=103 err=0 text=
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 op=5 UNBIND
Mar 30 18:18:13 HOST slapd[1586]: conn=1007 fd=9 closed

「Password changed successfully」が返ってきました。これでユーザにより手間無くパスワード変更がしてもらえそうです。
久々に日本語化もやってみたんですが、何故かうまくいかない。moファイルは正常に作成されるのですが化けてしまいます。
change_ldappass.potを変換したものを作成し、 locale/ja_JP/LC_MESSAGES/以下にchange_ldappass.poとして設置。
その後、EUC-JPにnkf -e で変換したものをmsgfmt -o change_ldappass.mo change_ldappass.poで置き換えればできあがり…のはずだったけど。
これはもう面倒になってきたのでそのままで良いことにしました。誰かsend prして更新してくださいまし。

以上で、メール編は完了しました。
残りは、FTP用のアカウントの作成です。


【改訂履歴】

作成:2014/03/10 更新日: 2014/03/30


【参照ページ】

big admin big daddy freebsd + postfix + sasl + openldap
OpenLDAP 構築メモ
Postfix Dovecot インストール FreeBSDサーバー構築マニュアル
Postfix+Dovecot+OpenLDAP - OSSでLinuxサーバ構築
Postfix+Dovecot+OpenLDAPでメールサーバ UNIXLife
CentOS Postfix+OpenLDAPの連携
LDAP-データ登録-domain.ldif - Chaperone
HowTo-DoveLdapCheatSheet - Dovecot Wiki
Dovecot でローカル配信する volatile memory

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