2016/05/09(月)今更ながら dovecot-SASL による CRAM-MD5,DIGEST-MD5,SCRAM-SHA-1 SMTP認証のサポート
2017/10/12 19:25
実はこれらの動作検証をするには、メールサーバが欠かせません。
実際に顧客に提供しているサーバはサービス停止を引き起こす障害が起きると、その対応となりますので、非公開のメールサーバをいじることになります。
ところが、手元のメールサーバ(dovecot + OpenLDAP + postfix) の構成にて、どのようにサポートしているのか(特にパスワード自体の管理方法)の情報が断片的かつごく少数しかありません。
弊社では、SMTP認証を dovecot-SASL に担当させ、電子メールアカウントやパスワードを OpenLDAP にて管理しています。
試行錯誤したところ、OpenLDAP には今まで通り平文管理(実際の格納形式は Base64)で、全種類いけることが判明しました。
こうなると簡単です。
dovecot.conf に

のような設定を行い、postfix 側は CRAM-MD5 や DIGEST-MD5 のための特別な設定は要りません。(厳密には、postfix側にセキュリティ的設定オプションがあるが、LOGIN 認証と PLAIN 認証をサポートするのであれば、デフォルトでいけるはず)
dovecot.conf に上記の設定を行ったあと再起動し、他ホストから SMTP を喋ってみると、サポートできていることが下記のように確認できます。

これで作業を進めることが出来ました。
昨今では、通信経路そのものを暗号化しようかという方向で、SMTP認証の CRAM-MD5や DIGEST-MD5 といった暗号化ハッシュ認証対応はどちらかというと消極的なISPが多いのですが、簡単にできるのが判っててサポートしな いのは手抜きですので、近日中に全ての弊社メールサーバにて対応予定としたいと考えてます。
〔2016/05/16 追記〕上記は、2016/05/11 付でサポート開始しています。
SCRAM 認証は 2010年7月に RFC5802 として規定されましたが、現在どこまでサポートされているのかはよく知りません。
SHA-1 は MD5 と並んで広く使われている暗号化ハッシュ関数の名称ですが、脆弱性が指摘されていて、SSL サーバ証明書なんかがこの影響をもろに受け、SHA-2 へ移行しています。
2016/03/09(水)今般の FreeBSD 9.3 のセキュリティアップデートは見送ったほうが無難
2017/10/12 19:19
今のところ、
・SSH 接続ができない(接続がクラッシュする)
・SMTP接続にて TLS 接続やるとクラッシュする
・IMAP接続にて TLS 接続やるとクラッシュする
といった情報が上がっています。
公式サイトにも FreeBSD 9.3R-p37 のアナウンスは無いようです。
運用環境的にどうしても OpenSSL 周りのパッチが必要な場合は、ports/pakkages の OpenSSL で凌ぐしかないと思います。(こちらは大丈夫という報告があがっています)
個人的には、メンテナンス工数との絡みがあり、数日様子見したほうがいいかなと考えています。
〔2016/03/10 追記〕
本日、FreeBSD 9.3R-p38 が提供されたようです。
公式サイトにも掲載されています。
2015/09/17(木)fml Ver 4.04 の Perl 5.22 対応
2017/10/12 19:02
fml はPerl で動作する有名なメーリングリスト提供ソフトウェアで、弊社でも使っていますが、どうやら Perl 5.22 にすると動作しなくなるようです。
12年も前に作られた代物なので、これだけ長寿命なのも素晴らしいですが、さらなる長寿化ヾ(^^; を図らないといけないので、対策しました。
以下の2箇所を修正することで対応できるようです。
fml.pl 693行目:(単にコメントアウトする)
# $* = 0; # match one linejcode.pl 677行目以降:(以下のように変更)
参考 jcode.plでdefined(%hash) is deprecated at ../perllib/jcode.pl line 684.のエラー 〔アイスポテト - C#|Tex|Perl|東京凰籃学院〕
sub z2h_euc {
local(*s, $n) = @_;
# &init_z2h_euc unless defined %z2h_euc;
&init_z2h_euc if (! %z2h_euc) ;
# $s =~ s/($re_euc_c|$re_euc_kana)/
# $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
# /geo;
$s =~ s/($re_euc_c|$re_euc_kana)/$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1/geo;
$n;
}
sub z2h_sjis {
local(*s, $n) = @_;
# &init_z2h_sjis unless defined %z2h_sjis;
&init_z2h_sjis if (! %z2h_sjis) ;
$s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
$n;
}
680行目付近の3行コメントアウトの部分は、3行にまたがってる判りにくい部分を単に1行にまとめているだけなので、修正しなくても大丈夫だと思います。
2015/09/07(月)Postfix を 3.0 系にしてみた
2017/10/12 19:00
その過程で Postfix も 3.0 系にしました。

Postfix 3.0 系(一部では Postfix 2.12 というアナウンスもあるが同じです) のハイライトは、国際化メールアドレスのサポートでしょうか。これは SMTPUTF8 と言われており、公式サポートは Postfix 3.0 が最初のようです。
尚、完全なサポートは Postfix 3.1 系のリリースになるらしいです。
これは早い話、電子メールアドレスに、ネイティブ言語が使えるという機能で、文字コードは UTF-8(Unicode) に限定されるという代物です。
要するに
はんかくさい日報@ベースカーネル.jp
みたいなメールアドレスが使えるというものです。電子メール本文も UTF-8 での使用になります。(と、いうことは多言語の文字を混在できるということ)
↑ 言い切っているけれど、ここちょっとあやしい
日本のように既に電子メールが普及している国では、それほど大きな需要がないのですが、どこの誰か使うか判りませんし、今後は受信する場面も出てくるかもしれませんので。。
また、メールサーバ的には対応しているけれど、Thunderbird 等でのソフトウェアで対応しているかどうかまではちょっと判りません。皆さまの方がご存じでしょう。
弊社では発信アドレスは日本語対応(というか国際化対応)していませんが、
受信電子メールの送信元、返信・転送メールの送信先と転送先は国際化対応できているはずです。(「できているはず」というのは確認できる環境がないため)
弊社で電子メールサーバを預かっている方は、利用した機会があったら「使えた/使えなかった」レポートをください。
2015/04/04(土)FreeBSD 10.1 上における dovecot 2.2.x の構築
2017/10/12 18:54
FreeBSD 10.1 では、dovecot の構築の最終段階に入る際(実行形式ファイルの生成と思われる)、以下のようなエラーになり、コンパイルが出来ません。
dovecot 2.2.15 、dovecot 2.2.16 でこの現象を確認しています。
../lib-charset/.libs/libcharset.a(charset-iconv.o): In function `charset_to_utf8_begin': /usr/local/src/dovecot-2.2.16/src/lib-charset/charset-iconv.c:27: undefined reference to `libiconv_open' ../lib-charset/.libs/libcharset.a(charset-iconv.o): In function `charset_to_utf8_end': /usr/local/src/dovecot-2.2.16/src/lib-charset/charset-iconv.c:46: undefined reference to `libiconv_close' ../lib-charset/.libs/libcharset.a(charset-iconv.o): In function `charset_to_utf8_reset': /usr/local/src/dovecot-2.2.16/src/lib-charset/charset-iconv.c:53: undefined reference to `libiconv' ../lib-charset/.libs/libcharset.a(charset-iconv.o): In function `charset_to_utf8_try': /usr/local/src/dovecot-2.2.16/src/lib-charset/charset-iconv.c:76: undefined reference to `libiconv' cc: error: linker command failed with exit code 1 (use -v to see invocation) *** Error code 1このような場合は、src/lib-charset/Makefile.in を、dovecot 構築開始前に以下のように編集してから構築作業を始めると回避できます:
● 92行目付近
CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) -libcharset_la_LIBADD = +libcharset_la_LIBADD = $(LTLIBICONV) am_libcharset_la_OBJECTS = charset-iconv.lo charset-utf8.lo libcharset_la_OBJECTS = $(am_libcharset_la_OBJECTS)(先頭を- で示している行を削除し、先頭を + で示している行を挿入する)
参考: 2.2.16 link failure on FreeBSD 10.1, with patch
2014/12/08(月)Raspberry Pi model B+ をDNSサーバにしてみる
2017/10/12 17:53
「返せ」と言われれば返却しなければなりませんが、同じものを買って返すということで。。
こういう代物は正直なところ、業務で扱わない限り関わることはまずありませんが、今回はたまたまですね。
確かに色々できるのですが、自立的に最初から何もできるわけではなく、このボード用のOSとアプリケーションを人手でインストールする必要があるため、取引先の業態ではコスト的・生産性的に合わないかなというと ころです。
このボードでは Debian 系の Linux OSである、RASPBIAN をインストールするのが確実。
こちらから、ダウンロードできます。→ http://www.raspberrypi.org/downloads/
提起サイトには掲載されていない FreeBSD10 なんかも FreeBSD本家サイトでは提供しているのですが、model B 用であり、model B+ には今のところ対応できていません。FreeBSD11-current で動作した例も見受けられる のですが、筆者の環境では上手くいきませんでした。
このボードだけでは、本当に何もできず、別途 8GByte 以上の microSD カードと、microUSB のACアタブタ(スマホ充電用のもので可)、HDMI ケーブルとディスプレイ、USBキーボードとUSBマウスが必要になります。
microSD カードは、32GByte 以上で class10 がお勧めです。
筆者は、東芝製の 32GByte,class10 ものを採用しました。
OSをインストールする際、予め microSDカードをフォーマットするように書かれていますが、通常、その必要はありません。
また、最近は Raspberry Pi model B+ 用の専用ケースが 1000円から 1500円前後で売られてはいますが、そのカネさえままならないので、簡易的なユニットを、下記のようにこしらえました。
Debian 系 Linux を常用している方々であれば、すんなりと触れると思います。
筆者は FreeBSD 使いなので、面食らいましたが。。orz
試行錯誤がありましたが、本日から実用試験的にこのボードで運用開始しました。
主目的は、消費電力の低減(→ 電気代の削減)にあります。
上手くいけば 10%弱の節電が実現できるはず・・です。
2014/11/24(月)suPHP の構築 ― Ver 0.7.2 からは一筋縄でいかない
2017/10/12 17:52
これも今までのように行かず、導入に面食らいました。
# cd /usr/local/src # tar -xvzf suphp-0.7.2.tar.gz # cd suphp-0.7.2 # aclocal && libtoolize --force && automake --add-missing && autoreconf # ./configure --with-apr=/usr/local/apache2/bin/apr-1-config # make # make install(configure のオプション指定は、実際にはこれでは大きく役不足です)
ポイントは 4行目。
これがないと、
cannot find install-sh, install.sh, or shtool in config "@"/configのようなメッセージが出るだけで、何も出来ません。
aclocal,automake 等は、FreeBSD の場合、 ports の devel/autoconf 、 devel/automake をインストールすることで入手できます。
libtoolize を実行しないと、make時に Version mismatch error となってしまう模様。
〔参考〕suPHPのインストール (がらくたネット)
2014/11/24(月)FreeBSD における mysql のアップデート手順
2017/10/12 17:50
情報量が多いので何とかなっているというところでしょうか。
1)先ずは、バックアップ。 これは常識的に行う作業です。
# mysqldump -A -u user -p > dumpfile.sql
これで、全てのデータベースクラスタを SQL にてダンプ出力します。
SQL でないと、バージョンが異なるアップデートの際、データを元に戻せません。
2)FreeBSD ports にてインストール(例示は mysql 5.5 の場合)
# cd /usr/ports/databases/mysql55-server
# make BATCH=yes WITH_CHARSET=utf8 WITH_XCHARSET=all install clean
# rehash
3)データベースクラスタの設置場所をこしらえる
# mkdir /home/db/mysql
# chown -R mysql:mysql /home/db/mysql
4)設定情報の雛形をコピー
# cp /usr/local/share/mysql/my-medium.cnf /home/db/mysql/my.cnf
# chown mysql:mysql /home/db/mysql/my.cnf
# chmod 644 /home/db/mysql/my.cnf
5)サーバ起動時に自動起動するようにする
# vi /etc/rc.conf
〔/etc/rc.conf に下記を追記〕
mysql_enable="YES"
mysql_dbdir="/home/db/mysql"
6)mysql の設定
# vi /home/db/mysql/my.cnf
〔/home/db/mysql/my.cnf の [mysqld]セクションに追記〕
skip-character-set-client-handshake
character-set-server = utf8
datadir = /home/db/mysql
〔/home/db/mysql/my.cnf の [client]セクションに追記〕
default-character-set = utf8
7)mysql サーバを起動
# /usr/local/etc/rc.d/mysql-server start
Starting mysql.
8)データベースの初期設定
# mysql -u root
mysql> SET PASSWORD FOR root@localhost=password('mysql_root_pass');
(mysql root ユーザのパスワード設定。任意の文字列を指定。)
mysql> SELECT user,host FROM mysql.user;
+------+---------------------+
| user | host |
+------+---------------------+
| root | 127.0.0.1 |
| root | ::1 |
| | hoge.basekernel.jp |
| root | hoge.basekernel.jp |
| | localhost |
| root | localhost |
+------+---------------------+
6 rows in set (0.00 sec)
#上から3つめと上から5つ目は、空ユーザで、誰でもログインできてしまうため、削除。
mysql> DELETE FROM mysql.user WHERE user='';
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
#データベース test を削除。
mysql> DROP DATABASE test;
mysql> EXIT;
Bye.
9)リストア
# mysql -u user -p < dumpfile.sql
Enter password: mysql_root_pass
(パスワードを入力)
#以下は任意
mysql> CREATE DATABASE db_name;
mysql> GRANT ALTER,CREATE,DELETE,DROP,INSERT,LOCK TABLES,SELECT,UPDATE ON db_name.* TO user_name@localhost IDENTIFIED BY 'user_pass';
mysql> EXIT;
Bye.
○ ログイン
# mysql -u root -p
Enter password: mysql_root_pass
(パスワードを入力)
○ バージョン表示
# mysql --version
mysql Ver 14.14 Distrib 5.5.40, for FreeBSD9.3 (i386) using 6.3
○ ユーザ削除
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_name'@'localhost';
mysql> DELETE FROM mysql.user WHERE user='user_name' and host='localhost';
〔参考〕FreeBSD サーバ構築マニュアル MySQL5 インストール
freebsd.server-manual.com
〔参考〕FreeBSD 9.1-RELEASEにMySQL 5.5をインストール
クソゲ~製作所
2014/11/23(日)FreeBSD における PHP 5.5.x の mysql サポート
2017/10/12 17:48
PHP 5.5系にて mysql アクセスのサポートをしようと構築をかけると、
構築の最終段階(本当に構築の最終工程)で、
ext/mysqlnd/.libs/mysqlnd_ps_codec.o: In function `ps_fetch_float': ext/mysqlnd/mysqlnd_ps_codec.c:233: undefined reference to `__extendsfsd' ext/mysqlnd/mysqlnd_ps_codec.c:233: undefined reference to `__extendsddf'のようなエラーが出て構築できない現象に嵌りました。
FreeBSD 10.x系 ではこのようなエラーは出ません。
おそらく gcc コンパイラ と clang コンパイラの違いなのでしょう。
PHP 5.5 におけるmysql サポートは複雑で、先ず、
・ mysql インタフェース
・ mysqli インタフェース
・ PDO-mysql インタフェース
の3種類あります。
このうち、最初の mysql インタフェースは古いので、利用は非推奨。
将来のバージョンでは削除されることが決まっています。
mysqli は拡張 mysql インタフェース、 PDO-mysql は Perl で言うところの DBI インタフェースみたいなものです。
今どきの PHP アプリケーションは、mysqli と PDO-mysql を使うように強い推奨がなされている状態です。
さらに、この内部モジュールは、各インタフェース専用以外に3つを統合した mysqlnd というものがあり、構築オプションによっては mysqlnd をインストールするようになっている感じです。全部で mysql サポートがモジュール4つあるらしく、何故こういう面倒なことになっているのか、利用者には理解不能です。
どうやら、configure で指定する構築オプションの組み合わせで mysqlnd を使う場合に、上記のエラーとなるようです。
今のところ、FreeBSD 9.x 以下のバージョンで PHP 5.5 を mysql 対応にする場合、 configure のオプションは、必ず以下をつけるといいです。
--with-mysql=/usr/local --with-pdo-mysql=/usr/local --with-mysqli=/usr/local/bin/mysql_config --disable-mysqlnd --with-mysql-sock=/tmp/mysql.sockポイントは --disable-mysqlnd でmysqlnd を外す指定です。
環境によっては mysql の unix ソケットが検出できず、この場合も mysqlnd を使うように強制されてしまうようなので、明示的に指定します。
筆者は PHP も mysql も使いません。昔からこの類の変更が多いからです。
アプリケーションの寿命が長い perl と postgreSQL を多用しており、長い目でのメンテナンス工数の面からお勧めしています。