postfix/dovecotメールサーバでWindows Live Mail 2012がエラーになる


qmail+vpopmailという古代の環境から、postfix/dovecotのメールサーバに移行した。
移行の詳細については別途記事にしますが、移行後、Windows Live Mail 2012ユーザからクレームが・・・

POP3で受信ができないという
原因は、Windows Live Mail 2012のPOP3アクセス機能が古い、という点に尽きる。
対処するにはサーバ側でセキュリティを弱める設定を入れる必要があった。

その1:POP3受信時にエラー

/var/log/dovecot/pop3.log

Feb 19 10:35:59 oflex-1096-1 dovecot: pop3-login: Disconnected (tried to use disallowed plaintext auth): user=<osakana@example.net>, rip=xxx.xxx.xxx.xxx, lip=xxx.xx.x.xxx, session=<brxUt4ZlTfPbavEx>

→ dovecotの「ssl = required」と「disable_plaintext_auth = yes」の設定により発生
これを「ssl = yes」と「disable_plaintext_auth = no」に変更することで対処できる

設定箇所は下記の3ファイル
/etc/dovecot/dovecot.conf ではsslとdisable_plaintext_authの双方が設定されている可能性がある
/etc/dovecot/conf.d/10-auth.conf ではdisable_plaintext_authが設定されている可能性がある
/etc/dovecot/conf.d/10-ssl.conf ではsslが設定されている可能性がある
3ファイルをそれぞれ確認して修正すること

うちの環境ではssl=requriedがdovecot.confと10-ssl.confの双方で設定されていたが、
10-ssl.confしか認識しておらずいくら設定しても反映されないと悩んだ。

その2:SMTP送信時にエラー1

/var/log/maillog

Feb 19 10:41:49 mailserver.osakana.net postfix/smtpd[8343]: NOQUEUE: reject: RCPT from clienthostname.osakana.net[xxx.xxx.xxx.xxx]: 504 5.5.2 <clienthostname>: Helo command rejected: need fully-qualified hostname; from=<osakana@osakana.net> to=<osakana@example.com> proto=ESMTP helo=<clienthostname>

→postfixの「smtpd_helo_restrictions」で「reject_non_fqdn_helo_hostname」が設定されているため発生

現在値確認

# postconf smtpd_helo_restrictions
smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated check_helo_access pcre:/etc/postfix/helo_access.pcre reject_non_fqdn_helo_hostname reject_unknown_helo_hostname
#

変更前の /etc/postfix/main.cf の該当部分

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
    reject_non_fqdn_helo_hostname
    reject_unknown_helo_hostname

変更後の /etc/postfix/main.cf の該当部分

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
    reject_unknown_helo_hostname
#    reject_non_fqdn_helo_hostname
# postconf smtpd_helo_restrictions
smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated check_helo_access pcre:/etc/postfix/helo_access.pcre reject_unknown_helo_hostname
#

その3:SMTP送信時にエラー2

Feb 19 11:04:48 mailserver.osakana.net postfix/smtpd[11966]: NOQUEUE: reject: RCPT from clienthostname.osakana.net[xxx.xxx.xxx.xxx]: 450 4.7.1 <clienthostname>: Helo command rejected: Host not found; from=<osakana@osakana.net> to=<osakana@example.com> proto=ESMTP helo=<clienthostname>

→postfixの「smtpd_helo_restrictions」で「reject_unknown_helo_hostname」が設定されているため発生

変更前はエラー1と同じなので省略

変更後の /etc/postfix/main.cf の該当部分

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
#    reject_non_fqdn_helo_hostname
#    reject_unknown_helo_hostname

その4:SMTP送信時にエラー3
/var/log/maillog

Feb 19 11:07:08 mailserver.osakana.net postfix/smtpd[12710]: NOQUEUE: reject: RCPT from clienthostname.osakana.net[xxx.xxx.xxx.xxx]: 454 4.7.1 <osakana@example.com>: Relay access denied; from=<osakana@osakana.net> to=<osakana@example.com> proto=ESMTP helo=<DTCF801>

これはテスト用にセットアップしたアカウントがSMTPポート25を使っていたせいで失敗していた。
ポート587に変更したら成功

fail2banで全部JAILのステータスを確認したい


Linuxサーバでfail2banを使ってアクセス拒否設定を行っている。

JAILを複数している場合に、全部を一括で確認する手段が標準ではない模様。
調べたところ「kamermans/fail2ban-allstatus.sh」の下記コメントを発見

joergludwig commented on 20 Dec 2017
Shorter version:
fail2ban-client status | sed -n ‘s/,//g;s/.*Jail list://p’ | xargs -n1 fail2ban-client status

これを ~/.bashrc に下記にように追加し、「fail2ban-check」で確認出来るように設定した。

alias fail2ban-check="fail2ban-client status | sed -n 's/,//g;s/.*Jail list://p' | xargs -n1 fail2ban-client status"

ZentyalというExchange互換をうたうUbuntuベースのメール/グループウェアアプライアンス


以前、UbuntuをWeb GUIで管理するツールとしてZentyalというものを見つけたが、結局使わなかった。
現状、どんな感じになっているかを確認してみたところ、Web GUIメインというよりは、メールアプライアンスの管理画面として元気に動いていた。

商用版サイト:http://www.zentyal.com/
非商用版サイト:http://www.zentyal.org/
github:https://github.com/Zentyal/zentyal

Zentyal 5.0が2016/11にリリースされている。

ベースOSはUbuntu 16.04で、そこにOpenChange®, SOGo, Samba4, Heimdal Kerberos®, Dovecot, Postfix, Postgrey, Sieve, Fetchmail, Amavis, SpamAssasin, ClamAV, Apache, CUPS, Netfilter, BIND9, ISC DHCP, NTPd, OpenSSL, OpenVPNを載せてアプライアンスとしている。

興味深いのは「OpenChange
Microsoft Exchange Server互換をうたっており、メールやスケジュール管理のグループウェア的な利用方法もサポートしているらしい。
OutlookからExchange Serverとして使えるようだ。
いままでも、そういう製品はいくつかあったが、大抵商用ライセンスのみで、非商用版でも使えそうなのは見かけなかった。

Zentyalの場合、商用版と非商用版で何が違うのか?
DIFFERENCES BETWEEN ZENTYAL EDITIONS
どちらも「All the latest features.」とあり、機能差はないようだ。
非商用版は、常に最新パッケージを使うので、安定版にとどめておく、ということができない、という違いがあるようだ
まぁ、小規模で使うんだったら、まぁ、関係無い感じですね

Zentyalを使うには以下の4つのパターンがあるようだ
・Zentyal Cloudを契約し、Zentyalが提供する基盤を借りる
・Zentyal Serverを購入し、指定されたISOイメージを使ってインストールを行い、運用する
・Zentyal Development editionのISOイメージを使ってインストールを行い、運用する
・UbuntuにZentyal Development editionのレポジトリを追加し、インストールを行い、運用する

とりあえず試してみるのであれば「Zentyal Development editionのISOインストール」か「UbuntuにZentyal追加」になる。

公式Wiki」の更新状況が微妙なのだが、
いろいろ探すと「5.0対応のInstallation Guide」が出てくる。
この手順にしたがうと、素のUbuntu 16.04に対して、レポジトリを追加することでzentyalがセットアップできるようになるらしい。

この手順でインストールしたものは「DEVELOPMENT EDITION」という扱いで、zentyal.orgで入手できるバージョン扱いになる。
なお、development editionから商用版へのアップデートはできない、とのこと。

で・・・本来であれば導入に関する記事を書くはずだったのですが
いまだのConoHaでUbuntu 16.04 64bit環境がデプロイできないという件が解決していないので、続きがかけていません。

いつになったら解決するかなぁ・・・

qmailの情報収集 2016/03/31


2012年に作成した「いまさらqmailのパッチ情報収集 2012/02/17」という記事に、いまでも時々アクセスがある。

あれから4年。何か変わったところがあるか調べてみた。

・新星 s/qmail登場
なんと「s/qmail」という新作が登場。

これまで普通のqmail向けに、SMTP Authentication, Spamcontrol(4年前の記事でも紹介)などを作成してきた開発者が提供するqmail 2016年版、的なもの。
IPv4,IPv6にちゃんと対応し、vpopmailなどのqmailを使用するソフトウェアがそのまま使用できるものとなっている。

SSL/TLS対応はs/qmail自身ではなく「ucspi-ssl」が提供しているようだ。
SPF,DKIMには対応していない。

・IndiMail
qmail, serialmail, qmailanalog, dotforward, fastforward, mess822, daemontools, ucspi-tcp, Courier IMAP/POP3, Bogofilter – A Bayesian Spam Filter, Fetchmailをまとめてパッケージングしている「www.indimail.org」にアーキテクチャ図あり
SPF,DKIM対応
各ディストリビューション用のレポジトリーが用意されている。(RHEL/CentOS5~7,Debian7~8,Ubuntu12.04~15.10,OpenSuSE11.4など)
安定版:http://download.opensuse.org/repositories/home:/indimail/
開発版:http://download.opensuse.org/repositories/home:/mbhangui/

基本的にパッケージとして使うためものであるため、qmail単独で使うにはちょっと厳しい感じがある。
vpopmailと組み合わせて使えるか、というと、結構謎。

qmail-isp
qmail-1.03に対するパッチをまとめたもの。netqmail-1.06相当のパッチも含まれている。
2013年6月に更新版が出ていた。
こいつはvpopmailと一緒に使えるらしい

Courier-IMAPからdovecotへの移行


Courier-IMAPの最近のバージョンが使っているcourier-authlibは、vpopmail連携機能が切られてしまい使えなくなってしまっているため代替策を検討中。

まず、dovecotに乗り換え実験中。

Dovecotのwikiを探すと「AuthDatabase/VPopMail」というページを発見。
vpopmail専用のデータベースファイルを使っている場合は、「–with-vpopmail」でコンパイル。
vpopmailからmysqlを使っている場合は、「–with-sql –with-mysql」でコンパイルということが分かる。

次に、設定。

うちの環境では、単純なvpopmailではなく、ユーザ管理にmysqlを利用している。
このため、vpopmail由来のmysqlを使う場合に重要なポイントのみを記載する。

・「/etc/dovecot/dovecot-sql.conf.ext」

password_query = SELECT CONCAT( pw_name,'@', pw_domain ) AS user,\
        pw_passwd AS password \
        FROM vpopmail  \
        where pw_name='%n' AND pw_domain='%d' ;
user_query = SELECT pw_dir as home, \
        <vpopmailのUID> AS uid, <vchkpwのGID> AS gid \
        FROM vpopmail \
        WHERE pw_name = '%n' AND pw_domain = '%d'

なお、動作確認時はmysqlを起動して「SELECT CONCAT( pw_name,’@’, pw_domain ) AS user, pw_passwd AS password FROM vpopmail where pw_name=’ユーザ名’ AND pw_domain=’ドメイン名’ ;」という感じで実行して、以下の様な感じで表示されればok。

# mysql -u root --password=パスワード
mysql> use vpopmail;
Database changed
mysql> SELECT CONCAT( pw_name,'@', pw_domain ) AS user, pw_passwd AS password FROM vpopmail where pw_name='ユーザ名' AND pw_domain='ドメイン名';
+---------------------+------------------------------------+
| user                | password                           |
+---------------------+------------------------------------+
| ユーザ名@ドメイン名   | 文字列~                           |
+---------------------+------------------------------------+
1 row in set (0.00 sec)

mysql> quit
Bye
#

・「/etc/dovecot/conf.d/10-auth.conf」と「/etc/dovecot/conf.d/auth-sql.conf.ext」
上記で作成したsql設定ファイルをここで指定
10-auth.confでは、下記の「sql」に関するところだけを修正。(vpopmailはいじらない)

!include auth-sql.conf.ext

auth-sql.conf.extでは、dovecot-sql.conf.extのパスがきちんと指定されていることを確認。

・「/etc/dovecot/conf.d/10-mail.conf」
Maildirを操作する際のユーザ権限のチェックをしている項目の設定を変更する。
今回は元々vpopmailの1アカウントのみで全ユーザを動かしていたため、UIDを1つだけ指定している形になる。

first_valid_uid=<vpopmailのUID>
last_valid_uid=<vpopmailのUID>
first_valid_gid=<vchkpwのGID>
last_valid_gid=<vchkpwのGID>

なお、この設定をしていないと、POP3などでログインしてみると、/var/log/maillogに以下のようなエラーが出力される。

Feb 25 15:21:46 サーバ名 dovecot: pop3: Error: user ユーザ名@ドメイン名: Mail access for users with UID <vpopmailのUID> not permitted (see first_valid_uid in config file, uid from userdb lookup).
Feb 25 15:21:46 サーバ名 dovecot: pop3: Error: Invalid user settings. Refer to server log for more information.

・POP3の未読管理の移行
標準設定だとPOP3のUIDLコマンドの出力結果が全然違うので、メーラ側の未読管理がリセットされる。
dovecot公式wikiに「Migration」という項目がある。

「/etc/dovecot/conf.d/20-pop3.conf」内の「pop3_uidl_format」を定義することで対処できる、とあるが、20-pop3.conf内に記載されている「Courier: %f or %v-%u (both might be used simultaneosly)」を設定してみると、「%f」と「%v-%u」は、Courier-IMAPでの結果と異なるものになる。

よく見てみると、「Migration/Courier v0.43 and later to Dovecot v1.1+」と専用の項目がある。
「courier-dovecot-migrate.pl」を使って、各Maildir内にある「courierimapuiddb」などをdovecot用の「dovecot-uidlist」にコンバートする、というもの。
コレを実行することで、同じUIDLの結果が得られるようになった。

・「/etc/dovecot/conf.d/15-mailboxes.conf」
IMAP用メールボックスの標準名調整。
いままで下書きフォルダ名「Draft」、スパムメール用「Spam」と設定していた。
dovecotの標準設定では「Drafts」、「Junk」であるため、読み替え設定を入れる

  mailbox Draft {
    special_use = \Drafts
  }
  mailbox Spam {
    special_use = \Junk
  }
  mailbox Trash {
    special_use = \Trash
  }

・・・・・・・

で、ここまでやって気がついたこと。
Courier-IMAPでも、vpopmail関係無く、直接MySQLを見れば良かったんじゃね?ということ。

まぁ、2つのバージョンの並行動作が難しいので、動作確認がしにくく、やりたくはないですがね。