2012年2月28日火曜日

SSL自己署名証明書の作成

SSL自己署名証明書ではアクセス時に警告が出るため、商用で使う場合はベリサイン等の正規の認証局が発行する証明書するの通常です。

SSL自己署名証明書の作成手順

  1. 秘密鍵を生成します
  2. 秘密鍵からパスフレーズを削除
  3. 生成された秘密鍵を使ってサイト証明書を発行
1. 秘密鍵を生成します。

[root@hoge ~]#cd /etc/pki/tls [root@hoge tls]# openssl genrsa -des3 2048 > private/localhost.key
Generating RSA private key, 2048 bit long modulus
.........................................................................................................................................+++
.............+++
e is 65537 (0x10001)
Enter pass phrase: # パスフレーズを入力
Verifying - Enter pass phrase: # パスフレーズを再入力
[root@hoge tls]#

2.秘密鍵からパスフレーズを削除します。(Apache起動時に毎回パスフレーズを聞かれるので..)

[root@hoge tls]# cd private
[root@hoge private]# cp -p localhost.key localhost.key.org # オリジナルを退避する。(パスフレーズを問い合わせる)
[root@hoge private]# cd ../
[root@hoge tls]# openssl rsa -in private/localhost.key -out private/localhost.key
Enter pass phrase for private/localhost.key: # パスフレーズを入力
writing RSA key
[root@hoge tls]#

3.生成された秘密鍵を使ってサイト証明書を発行します(Common NameはURLでのホスト名を入力)

[root@hoge tls]# openssl req -new -x509 -key private/localhost.key -out certs/localhost.crt -days 3650
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) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:chiyoda-ku
Organization Name (eg, company) [My Company Ltd]:example.inc
Organizational Unit Name (eg, section) []:example
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:
[root@hoge tls]#

下記の3つのファイル(実際は2つ)を作成
/etc/pki/tls/private/localhost.key.org パスフレーズ削除前
/etc/pki/tls/private/localhost.key     パスフレーズ削除後
/etc/pki/tls/private/localhost.crt     サイト証明書
※作成後はパーミッションを下記のようにしておきます。
 -r-------- 1 root root   1444  2月 16 05:58 localhost.key.org
 -r-------- 1 root root   1444  2月 16 05:58 localhost.key
 -r-------- 1 root root   1444  2月 16 05:58 localhost.crt

2012年2月21日火曜日

OpenLDAPと暗号化通信

SMTPやPOP3プロトコルでは平文パスワードがネットワーク上を流れるますが,LDAPでも同じです。tcpdumpなどで通信をキャプチャしてみると,パスワード文字列を簡単に取得することができてしまいます。

アカウント情報(UNIXアカウント)をOPENLDAPで管理する場合、実際のパスワード情報はLDAPサーバ上のuserPassword属性中に暗号化された状態で格納されていますが,ネットワーク上のトラフィックをキャプチャしてみると,平文のパスワードを取得することができてしまう。

信頼されたネットワーク内のみで運用するのであれば話は別ですが,盗聴の危険性を考慮した場合,ネットワーク経路の暗号化の検討が必要になります。

暗号化の種類

データを暗号化させるためには,いくつかの方法が考えられますが,これはSMTP/POP3/IMAPなどの基本的なプロトコルにおける考え方と同様です。

ひとつ目の方法はSSL/TLSにより,トラフィック全体を暗号化させることです。この場合SSLを使用しますので,LDAPサーバ上にサーバ鍵,証明書,CA情報などを設置しておく必要があります。トラフィックをSSLでカプセリングすることで,パスワード情報だけではなく接続の最初から最後までの全情報を暗号化させることができることが最大のメリットです。また,暗号化だけではなく信頼された接続先に安全に接続できる,という意味も持ちます。

2012年2月20日月曜日

iptablesの設定について

/etc/sysconfig/iptables を見てみる。

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
上記の記述を上から順に確認すると
  • INPUTチェーンの定義
  • FORWARDチェーンの定義
  • OUTPUTチェーンの定義
  • RH-Firewall-1-INPUTチェーンの定義
  • INPUTチェーンに来たものはすべて無条件にRH-Firewall-1-INPUTチェーンへ転送する
  • FORWARDチェーンに来たものはすべて無条件にRH-Firewall-1-INPUTチェーンへ転送する
となります。
つまり、これでINPUTとFORWARDがRH-Firewall-1-INPUTチェーンで束ねられたことになります。

さらに/etc/sysconfig/iptables を見ていくと、以下のようになっていると思います。

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

これは、RH-Firewall-1-INPUTチェーン内のルール設定で、外部からの80番と8080番ポートへのアクセスを許可するように設定しています。

そして最後の行の
「-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited」
によって、RH-Firewall-1-INPUT チェーン内のどのルールにもマッチしなかったパケットは、icmp-host-prohibitedエラーを返すように設定しています。
つまり上記の場合、80番でも8080番でもない宛先ポートのパケットは全部エラーになるということになります。

2012年2月18日土曜日

python-hashlibのインストール

あるリポジトリを設定してパッケージをインストールしようとしたら、”python-hashlib”がないぞ!とインストールを拒否されたので、「python-hashlib-20081119-1.el5.rf」をYum Extender からインストールをした。

Error: failure: repodata/primary.xml.gz from git: [Errno 256] No more mirrors to try.

さて、python-hashlib とは何ぞや? と思い確認してみると、パッケージの概要では「Secure hash and message digest aldorithm library」と記述されている。

yum は、Python 書かれているようで、必要なセキュリティアルゴリズムが不足したため(python-hashlibに含まれている処理が利用されている)であった。

2012年2月15日水曜日

統計データへの取り組み..

統計データの数理モデルへの適用について少し調べてみた。
昨今を鑑みても、コンピュータのディスクの大容量化にともない、大量のデータをどのように分析するかが課題であることは言うまでもない。そこで重要になるのは数理統計を用いた大量データの分析である。
まずは身近な題材のものから確認して理解を深めていくことにした。
さしあたり、下記の2点から確認検証していこうと思う

  • 項目反応理論(項目応答理論)
  • べイズ統計学(ベイズ確立・ベイズ推定)
とりあえず、上記を習得(システムで利用できるように)することを目標とする。

SDNへの潮流...

シンクイット(Think IT)の第1回 SDNへの潮流とOpenFlowの歴史第2回 OpenFlowのアーキテクチャと仕様・機能を参照(読む)

この流れが実現されると通信機器のベンダーごとに微妙に異なる設定や通信機器の種類(スイッチ(L2〜L5)・ルーター(専用機)・ファイアウォール(専用機))の垣根がなくなる。利用者にとって複数機器を導入しなくて済むが、業者にとっては競争の激化と技術者の確保が命題になってくる。

2012年2月8日水曜日

ソースファイルからRPMファイルの作成

インストールしたいプログラムがRPMでなくtarボールのみで配布されていることも多い。しかし、ソースファイルをそのままコンパイルしてインストールするとRPMによる恩恵(インストール済みプログラムおよび更新の検知)が得られないので、プログラムはできるだけRPMファイルでインストールしたい。

tarボールで配布されているプログラムの中には、RPMファイルを作成するためのSPECファイルを含んでいるものがある。この場合は、rpmbuildコマンドでtarボールからRPMファイルを作成することができます。( -taオプションをつけて実行する)
しかし、SPECファイルが含まれていない場合はどうしたら良いか?
CheckInstallを使うことで、SPECファイルが用意されていなくてもRPMファイルを作成できます。

Postfixの作者、Wietse Venema氏のPGP公開鍵を入手します。
入手した公開鍵は、次のようにインポートします:
[hoge@hoge Source]$ gpg --import wietse.pgp
gpg: /home/shorisawa/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵C12BCD99: 公開鍵“Wietse Venema ”を読み込みました
gpg: 鍵D5327CB9: 公開鍵“wietse venema ”を読み込みました
gpg:     処理数の合計: 2
gpg:           読込み: 2  (RSA: 2)
gpg: 絶対的に信用する鍵が見つかりません

■
[hoge@hoge Source]$ gpg postfix-2.10-20120202.tar.gz.sig
gpg: 2012年02月03日 09時58分34秒 JSTにRSA鍵ID C12BCD99で施された署名
gpg: “Wietse Venema ”からの正しい署名  ←←←この行があればOK
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: FF 96 4A 8C 96 88 7C 6E  A4 EF AD BF 48 34 E1 BB
[hoge@hoge Source]

CheckInstallのWebサイトからからパッケージをダウンロードしてインストールする。今回は、checkinstall-1.6.1-1.i386.rpmをダウンロードしてインストールする。

[root@hoge rpm]# ls
checkinstall-1.6.1-1.i386.rpm
[root@hoge rpm]# rpm -ivh checkinstall-1.6.1-1.i386.rpm
準備中...                ########################################### [100%]
   1:checkinstall           ########################################### [100%]
[root@hoge rpm]# 

debパッケージからRPMパッケージに変換

パッケージの最新版がRPMはないのにdebがある事が多々ある。特にCENTOSのパッケージについては、かなり古いものが多く、最新版をインストールしたい時は、パッケージからでなくソースからになってしまう場合ある。ソースからインストールされたソフトはパッケージ管理されないので、最新版等の更新チェックや他ソフトの依存管理も面倒になってします。
そこで、方法としてはSRPMやdebパッケージからバイナリRPMを作成してインストールする方法かソースからRPMを作成する方法とに限定されてします。

ここでは、debパッケージからRPMパッケージを作成(変換)する方法について書き留めておきます。

変換するにはalienコマンドを利用するが、alienコマンドはyumからのインストールできないので、ソースコードを入手しビルドします。

[root@hoge Source]# wget http://ftp.debian.org/debian/pool/main/a/alien/alien_8.81.tar.gz
--2012-02-08 15:02:58--  http://ftp.debian.org/debian/pool/main/a/alien/alien_8.81.tar.gz
ftp.debian.org をDNSに問いあわせています... 130.89.148.12, 2001:610:1908:b000::148:12
ftp.debian.org|130.89.148.12|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 63918 (62K) [application/x-gzip]
`alien_8.81.tar.gz' に保存中

100%[======================================>] 63,918      53.5K/s 時間 1.2s    

2012-02-08 15:02:59 (53.5 KB/s) - `alien_8.81.tar.gz' へ保存完了 [63918/63918]

[root@ora02 Source]# rpmbuild -ta alien_8.81.tar.gz実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.29269
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /usr/src/redhat/BUILD
+ rm -rf alien
+ /bin/gzip -dc /home/shorisawa/Desktop/DownLoad/Source/alien_8.81.tar.gz
+ tar -xvvf -
drwxr-xr-x 0/0               0 2010-05-18 09:57:16 alien/
-rwxr-xr-x 0/0             923 2009-11-21 07:32:47 alien/Makefile.PL
drwxr-xr-x 0/0               0 2010-05-18 09:57:56 alien/debian/
-rw-r--r-- 0/0             746 2010-05-18 09:57:52 alien/debian/control
-rw-r--r-- 0/0              19 2009-05-29 23:58:47 alien/debian/docs
-rwxr-xr-x 0/0             519 2009-10-20 05:34:17 alien/debian/rules
-rw-r--r-- 0/0           93524 2010-05-18 09:57:00 alien/debian/changelog
-rw-r--r-- 0/0            1302 2009-05-29 23:58:47 alien/debian/copyright
-rw-r--r-- 0/0               2 2009-05-29 23:58:47 alien/debian/compat
-rw-r--r-- 0/0             917 2009-05-29 23:58:47 alien/alien.spec.in
-rw-r--r-- 0/0            2719 2009-05-29 23:58:47 alien/README
-rw-r--r-- 0/0             897 2010-05-18 09:57:16 alien/alien.spec
drwxr-xr-x 0/0               0 2010-04-29 00:29:14 alien/Alien/
-rw-r--r-- 0/0           10556 2010-04-29 00:29:14 alien/Alien/Package.pm
drwxr-xr-x 0/0               0 2010-05-18 09:57:04 alien/Alien/Package/
-rw-r--r-- 0/0            7487 2009-10-20 05:34:17 alien/Alien/Package/Slp.pm
-rw-r--r-- 0/0            4735 2009-10-20 05:34:17 alien/Alien/Package/Tgz.pm
-rw-r--r-- 0/0           16306 2010-05-18 09:54:12 alien/Alien/Package/Rpm.pm
-rw-r--r-- 0/0           17298 2010-04-29 00:27:17 alien/Alien/Package/Deb.pm
-rw-r--r-- 0/0            2244 2009-05-29 23:58:47 alien/Alien/Package/Lsb.pm
-rw-r--r-- 0/0            7221 2009-10-20 05:34:17 alien/Alien/Package/Pkg.pm
-rw-r--r-- 0/0             739 2005-07-14 02:37:34 alien/gendiff.txt
-rwxr-xr-x 0/0           16379 2009-12-15 03:42:56 alien/alien.pl
-rw-r--r-- 0/0           17976 2005-07-14 02:37:34 alien/GPL
-rw-r--r-- 0/0             448 2005-07-14 02:37:34 alien/TODO
-rw-r--r-- 0/0             283 2005-07-14 02:37:34 alien/INSTALL
-rw-r--r-- 0/0             576 2010-05-18 09:57:16 alien/alien.lsm
-rw-r--r-- 0/0             586 2005-07-14 02:37:34 alien/alien.lsm.in
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd alien
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ rm -rf /tmp/alien-8.81.build
+ exit 0
実行中(%install): /bin/sh -e /var/tmp/rpm-tmp.53925
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd alien
+ LANG=C
+ export LANG
+ unset DISPLAY
+ perl Makefile.PL PREFIX=/tmp/alien-8.81.build/usr
Writing Makefile for Alien
+ make
cp Alien/Package/Deb.pm blib/lib/Alien/Package/Deb.pm
cp Alien/Package/Tgz.pm blib/lib/Alien/Package/Tgz.pm
cp Alien/Package.pm blib/lib/Alien/Package.pm
cp Alien/Package/Rpm.pm blib/lib/Alien/Package/Rpm.pm
cp Alien/Package/Pkg.pm blib/lib/Alien/Package/Pkg.pm
cp Alien/Package/Lsb.pm blib/lib/Alien/Package/Lsb.pm
cp Alien/Package/Slp.pm blib/lib/Alien/Package/Slp.pm
perl -pe '$_="" if /use lib/; $_="our \$Version=\"8.81\";\n" if /VERSION_AUTOREPLACE/' alien.pl > alien
cp alien blib/script/alien
/usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/alien
Manifying blib/man1/alien.1
Manifying blib/man3/Alien::Package::Tgz.3pm
Manifying blib/man3/Alien::Package::Deb.3pm
Manifying blib/man3/Alien::Package::Rpm.3pm
Manifying blib/man3/Alien::Package.3pm
Manifying blib/man3/Alien::Package::Pkg.3pm
Manifying blib/man3/Alien::Package::Lsb.3pm
Manifying blib/man3/Alien::Package::Slp.3pm
perl -i -pe "s/\@version\@/8.81/g" alien.lsm
perl -i -pe "s/\@version\@/8.81/g" alien.spec
+ make pure_install VARPREFIX=/tmp/alien-8.81.build
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package.pm
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package/Deb.pm
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package/Slp.pm
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package/Rpm.pm
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package/Lsb.pm
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package/Pkg.pm
Installing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/Alien/Package/Tgz.pm
Installing /tmp/alien-8.81.build/usr/share/man/man1/alien.1
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package::Deb.3pm
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package::Rpm.3pm
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package::Pkg.3pm
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package::Tgz.3pm
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package::Slp.3pm
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package.3pm
Installing /tmp/alien-8.81.build/usr/share/man/man3/Alien::Package::Lsb.3pm
Installing /tmp/alien-8.81.build/usr/bin/alien
Writing /tmp/alien-8.81.build/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Alien/.packlist
install -d /tmp/alien-8.81.build/usr/share/alien/patches \
                   /tmp/alien-8.81.build/var/lib/alien
+ find /tmp/alien-8.81.build -not -type d -printf '/%P\n'
+ sed '/\/man\//s/$/\*/'
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-java-repack-jars
ファイルの処理中: alien-8.81-1
実行中(%doc): /bin/sh -e /var/tmp/rpm-tmp.74313
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd alien
+ DOCDIR=/tmp/alien-8.81.build/usr/share/doc/alien-8.81
+ export DOCDIR
+ rm -rf /tmp/alien-8.81.build/usr/share/doc/alien-8.81
+ /bin/mkdir -p /tmp/alien-8.81.build/usr/share/doc/alien-8.81
+ cp -pr debian/changelog GPL README alien.lsm /tmp/alien-8.81.build/usr/share/doc/alien-8.81
+ exit 0
Provides: perl(Alien::Package) perl(Alien::Package::Deb) perl(Alien::Package::Lsb) perl(Alien::Package::Pkg) perl(Alien::Package::Rpm) perl(Alien::Package::Slp) perl(Alien::Package::Tgz)
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /usr/bin/perl perl perl(Alien::Package::Deb) perl(Alien::Package::Lsb) perl(Alien::Package::Pkg) perl(Alien::Package::Rpm) perl(Alien::Package::Slp) perl(Alien::Package::Tgz) perl(Cwd) perl(Getopt::Long) perl(base) perl(constant) perl(strict) perl(vars)
伸張ファイルの検査中: /usr/lib/rpm/check-files /tmp/alien-8.81.build
書き込み完了: /usr/src/redhat/SRPMS/alien-8.81-1.src.rpm
書き込み完了: /usr/src/redhat/RPMS/noarch/alien-8.81-1.noarch.rpm
[root@hoge Source]# ls /usr/src/redhat/RPMS/noarch
alien-8.81-1.noarch.rpm
[root@hoge Source]# 
[root@hoge Source]# rpm -ivh /usr/src/redhat/RPMS/noarch/alien-8.81-1.noarch.rpm
準備中...                ########################################### [100%]
   1:alien                  ########################################### [100%]
[root@hoge Source]# 
# alien --to-rpm --scripts *.deb
xxx.rpm generated
...

2012年2月6日月曜日

dovecotインストール

LDAPを設定する機会にあわせて、dovecot-2.0.17-1をインストールする。いつもは、POP3をインストールするが、昨今の Thin client化の波やオフィスや出先の(別の端末からメール確認)を考えてIMAPである dovecot-2.0.16-1をインストールすることにした。パッケージのインストールには、unixlife.repo にお世話になりました。

LDAP + DOVECOT2

dovecotの概要
Dovecotは、デフォルトでPOP3とIMAPが動作するように設定されていますが、Courie-IMAPと同様にPOP3sとIMAPsもサポートされています。

今回は、dovecotをIMAP4とPOP3をクライアントが選択できるように設定します。

# 2.0.16: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.18-274.18.1.el5xen i686 CentOS release 5.7 (Final) 
auth_anonymous_username = anonymous
auth_cache_negative_ttl = 1 hours
auth_cache_size = 0
auth_cache_ttl = 1 hours
auth_debug = no
auth_debug_passwords = no
auth_default_realm = 
auth_failure_delay = 2 secs
auth_first_valid_uid = 500
auth_gssapi_hostname = 
auth_krb5_keytab = 
auth_last_valid_uid = 0
auth_master_user_separator = 
auth_mechanisms = plain
auth_realms = 
auth_socket_path = auth-userdb
auth_ssl_require_client_cert = no
auth_ssl_username_from_cert = no
auth_use_winbind = no
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_username_format = 
auth_username_translation = 
auth_verbose = no
auth_verbose_passwords = no
auth_winbind_helper_path = /usr/bin/ntlm_auth
auth_worker_max_count = 30
base_dir = /var/run/dovecot
config_cache_size = 1 M
debug_log_path = 
default_client_limit = 1000
default_idle_kill = 60
default_internal_user = dovecot
default_login_user = dovenull
default_process_limit = 100
default_vsz_limit = 256 M
deliver_log_format = msgid=%m: %$
dict_db_config = 
director_doveadm_port = 0
director_mail_servers = 
director_servers = 
director_user_expire = 15 mins
disable_plaintext_auth = yes
dotlock_use_excl = yes<
doveadm_allowed_commands = 
doveadm_password = 
doveadm_proxy_port = 0
doveadm_socket_path = doveadm-server
doveadm_worker_count = 0
first_valid_gid = 1
first_valid_uid = 500
hostname = 
imap_capability = 
imap_client_workarounds = 
imap_id_log = 
imap_id_send = 
imap_idle_notify_interval = 2 mins
imap_logout_format = bytes=%i/%o
imap_max_line_length = 64 k
import_environment = TZ
info_log_path = 
last_valid_gid = 0
last_valid_uid = 0
lda_mailbox_autocreate = no
lda_mailbox_autosubscribe = no
lda_original_recipient_header = 
libexec_dir = /usr/libexec/dovecot
listen = *, ::
lmtp_proxy = no
lmtp_save_to_detail_mailbox = no
lock_method = fcntl
log_path = syslog
log_timestamp = "%b %d %H:%M:%S "
login_access_sockets = 
login_greeting = Dovecot ready.
login_log_format = %$: %s
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
login_trusted_networks = 
mail_access_groups = 
mail_attachment_dir = 
mail_attachment_fs = sis posix
mail_attachment_hash = %{sha1}
mail_attachment_min_size = 128 k
mail_cache_fields = flags
mail_cache_min_mail_count = 0
mail_chroot = 
mail_debug = no
mail_fsync = optimized
mail_full_filesystem_access = no
mail_gid = 
mail_home = 
mail_location = 
mail_log_prefix = "%s(%u): "
mail_max_keyword_length = 50
mail_max_lock_timeout = 0
mail_max_userip_connections = 10
mail_never_cache_fields = imap.envelope
mail_nfs_index = no
mail_nfs_storage = no
mail_plugin_dir = /usr/lib/dovecot
mail_plugins = 
mail_privileged_group = 
mail_save_crlf = no
mail_temp_dir = /tmp
mail_uid = 
mailbox_idle_check_interval = 30 secs
mailbox_list_index_disable = no
maildir_copy_with_hardlinks = yes
maildir_stat_dirs = no
maildir_very_dirty_syncs = no
managesieve_client_workarounds = 
managesieve_implementation_string = Dovecot Pigeonhole
managesieve_logout_format = bytes=%i/%o
managesieve_max_compile_errors = 5
managesieve_max_line_length = 65536
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
master_user_separator = 
mbox_dirty_syncs = yes
mbox_dotlock_change_timeout = 2 mins
mbox_lazy_writes = yes
mbox_lock_timeout = 5 mins
mbox_min_index_size = 0
mbox_read_locks = fcntl
mbox_very_dirty_syncs = no
mbox_write_locks = fcntl
mdbox_preallocate_space = no
mdbox_rotate_interval = 0
mdbox_rotate_size = 2 M
mmap_disable = no
passdb {
  args = 
  deny = no
  driver = pam
  master = no
  pass = no
}
plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}
pop3_client_workarounds = 
pop3_enable_last = no
pop3_fast_size_lookups = no
pop3_lock_session = no
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
pop3_no_flag_updates = no
pop3_reuse_xuidl = no
pop3_save_uidl = no
pop3_uidl_format = %08Xu%08Xv
postmaster_address = 
protocols = imap pop3 lmtp
quota_full_tempfail = no
recipient_delimiter = +
rejection_reason = Your message to <%t> was automatically rejected:%n%r
rejection_subject = Rejected: %s
sendmail_path = /usr/sbin/sendmail
service anvil {
  chroot = empty
  client_limit = 0
  drop_priv_before_exec = no
  executable = anvil
  extra_groups = 
  group = 
  idle_kill = 4294967295 secs
  privileged_group = 
  process_limit = 1
  process_min_avail = 1
  protocol = 
  service_count = 0
  type = anvil
  unix_listener anvil-auth-penalty {
    group = 
    mode = 0600
    user = 
  }
  unix_listener anvil {
    group = 
    mode = 0600
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service auth-worker {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = auth -w
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 1
  type = 
  unix_listener auth-worker {
    group = 
    mode = 0600
    user = $default_internal_user
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service auth {
  chroot = 
  client_limit = 4096
  drop_priv_before_exec = no
  executable = auth
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener auth-client {
    group = 
    mode = 0600
    user = 
  }
  unix_listener auth-login {
    group = 
    mode = 0600
    user = $default_internal_user
  }
  unix_listener auth-master {
    group = 
    mode = 0600
    user = 
  }
  unix_listener auth-userdb {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/login {
    group = 
    mode = 0666
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service config {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = config
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = config
  unix_listener config {
    group = 
    mode = 0600
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service dict {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = dict
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener dict {
    group = 
    mode = 0600
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service director {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = director
  extra_groups = 
  fifo_listener login/proxy-notify {
    group = 
    mode = 00
    user = 
  }
  group = 
  idle_kill = 4294967295 secs
  inet_listener {
    address = 
    port = 0
    ssl = no
  }
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener director-admin {
    group = 
    mode = 0600
    user = 
  }
  unix_listener director-userdb {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/director {
    group = 
    mode = 00
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service dns_client {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = dns-client
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener dns-client {
    group = 
    mode = 0666
    user = 
  }
  unix_listener login/dns-client {
    group = 
    mode = 0666
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service doveadm {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = doveadm-server
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 1
  type = 
  unix_listener doveadm-server {
    group = 
    mode = 0600
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service imap-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = imap-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener imap {
    address = 
    port = 143
    ssl = no
  }
  inet_listener imaps {
    address = 
    port = 993
    ssl = yes
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = imap
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 18446744073709551615 B
}
service imap {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = imap
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1024
  process_min_avail = 0
  protocol = imap
  service_count = 1
  type = 
  unix_listener login/imap {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service ipc {
  chroot = empty
  client_limit = 0
  drop_priv_before_exec = no
  executable = ipc
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener ipc {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/ipc-proxy {
    group = 
    mode = 0600
    user = $default_login_user
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service lmtp {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = lmtp
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = lmtp
  service_count = 0
  type = 
  unix_listener lmtp {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service log {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = log
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = log
  user = 
  vsz_limit = 18446744073709551615 B
}
service managesieve-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = managesieve-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener sieve {
    address = 
    port = 4190
    ssl = no
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = sieve
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 64 M
}
service managesieve {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = managesieve
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = sieve
  service_count = 1
  type = 
  unix_listener login/sieve {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service pop3-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = pop3-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener pop3 {
    address = 
    port = 110
    ssl = no
  }
  inet_listener pop3s {
    address = 
    port = 995
    ssl = yes
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = pop3
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 18446744073709551615 B
}
service pop3 {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = pop3
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1024
  process_min_avail = 0
  protocol = pop3
  service_count = 1
  type = 
  unix_listener login/pop3 {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service ssl-params {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = ssl-params
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = startup
  unix_listener login/ssl-params {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
shutdown_clients = yes
ssl = yes
ssl_ca = 
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_cert_username_field = commonName
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_key_password = 
ssl_parameters_regenerate = 168
ssl_verify_client_cert = no
submission_host = 
syslog_facility = mail
userdb {
  args = 
  driver = passwd
}
valid_chroot_dirs = 
verbose_auth = no
verbose_proctitle = no
verbose_ssl = no
version_ignore = no
設定内容もほぼ標準で問題ないようだ。


■dovecotの設定内容の確認

  • doveconf -a (同じ dovecot -a )
    設定内容を表示する。(コメントが除去されてすべての設定内容が表示される。)
  • doveconf -n
    標準設定以外の設定項目を出力する。
他にもオプションはあるが、manコマンドで確認して下さい。

2012年2月5日日曜日

postfix インストール

設定方法については、「OSSでLinuxサーバ構築」さんや「Stray Penguin」さんを参照させて頂いております。「OSSでLinuxサーバ構築」さん「Stray Penguin」さんありがとうございます。

[root@ora02 ~]# yum install postfix
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
 * rpmforge: fr2.rpmfind.net
 * updates: rsync.atworks.co.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package postfix.i386 2:2.3.3-2.3.el5_6 set to be updated
--> Processing Dependency: cyrus-sasl >= 2.1.10 for package: postfix
--> Running transaction check
---> Package cyrus-sasl.i386 0:2.1.22-5.el5_4.3 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch         Version                     Repository    Size
================================================================================
Installing:
 postfix            i386         2:2.3.3-2.3.el5_6           base         3.5 M
Installing for dependencies:
 cyrus-sasl         i386         2.1.22-5.el5_4.3            base         1.2 M

Transaction Summary
================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 4.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): cyrus-sasl-2.1.22-5.el5_4.3.i386.rpm              | 1.2 MB     00:00     
(2/2): postfix-2.3.3-2.3.el5_6.i386.rpm                  | 3.5 MB     00:00     
--------------------------------------------------------------------------------
Total                                           4.4 MB/s | 4.7 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : cyrus-sasl                                               1/2 
  Installing     : postfix                                                  2/2 

Installed:
  postfix.i386 2:2.3.3-2.3.el5_6                                                

Dependency Installed:
  cyrus-sasl.i386 0:2.1.22-5.el5_4.3                                            

Complete!
[root@ora02 ~]# 
【postfixユーザー】
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

【postfixグループ】
postdrop:x:90:
postfix:x:89:

正規表現によるメールフィルタリングの制御に PCRE があると高度なフィルタリングが可能。
デフォルトでインストールされていると思いますが、コンパイルオプションでunicode-propertiesが有効になっていないということあるかもしれないので、確認をする。

[root@ora02 ~]# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  Unicode properties support   ← これでOK! NGの時 → No Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack
[root@ora02 ~]# 

基本設定

■ main.cfの編集
・設定ファイル/etc/postfix/main.cfの編集
# vi /etc/postfix/main.cf

# ホスト名
myhostname =  mail.oss-d.net

# ドメイン名
mydomain = oss-d.net
 
# @以降のドメイン名
myorigin = $mydomain

# メールを受け取るネットワークインタフェースのアドレス範囲
inet_interfaces = all

# メールの最終目的地とみなす範囲の指定
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# 信頼できるクライアントのネットワーク
mynetworks =  192.168.11.0/24, 127.0.0.0/8

# リレーを許可するドメインを指定
relay_domains = $mydestination

# メールBOXの形式
home_mailbox = Maildir/

■ SMTP-AUTH対応(SASL認証)

■ main.cfの編集
・設定ファイル /etc/postfix/main.cf を編集(設定を追記する)
# SASLによるSMTP認証を使用
smtpd_sasl_auth_enable = yes

# 使用可能な認証メカニズムの設定
# noanonymous : 匿名接続を拒否。
# noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応)
#smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_security_options = noanonymous

# 認証時のTLSの利用(TLSを強制する場合はyesに変更)
#smtpd_tls_auth_only = yes

#ローカル認証 realm を設定
smtpd_sasl_local_domain = $myhostname

#メールの送信可能なユーザ定義
# mynetworks sasl認証された は許可。それ以外は拒否
smtpd_recipient_restrictions =
 permit_mynetworks
 permit_auth_destination
 permit_sasl_authenticated
 reject

# Outlook LOGIN 認証を利用するための設定
broken_sasl_auth_clients = yes
■ SASLの設定
1. 「/usr/lib/sasl2/smtpd.conf」を下記の通り設定します。
pwcheck_method: saslauthd
mech_list: login plain 
2. 「/etc/sysconfig/saslauthd」を下記の通り設定します。ユーザ情報はPAM経由でUNIXアカウントを利用します。
MECH=pam
3. SASLの自動起動設定
# chkconfig saslauthd on
4. SASLの起動
# /etc/init.d/saslauthd start
  または
# service saslauthd start

■ SMTP-AUTH対応(LDAP認証)

SMTP-AUTHの認証をLDAPで行うように設定します。
■ SASLの設定
1. 「/usr/lib/sasl2/smtpd.conf」を下記の通り設定します。
# vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: login plain 
2. 「/etc/sysconfig/saslauthd」を下記の通り設定します。
# vi /etc/sysconfig/saslauthd
MECH=ldap
3. SASLがLDAPのユーザ情報を使用するよう「/etc/saslauthd.conf」を作成する。
# vi /etc/saslauthd.conf
ldap_servers: ldap://localhost 
ldap_search_base: ou=Users,dc=hoge,dc=com 
ldap_filter: uid=%u
4. SASLの自動起動設定
# chkconfig saslauthd on
5. SASLの起動
# /etc/init.d/saslauthd restart
-------------------------

SMTP-TSL対応

■ 秘密鍵と証明書の作成
秘密鍵「localhost.key」と証明書「localhost.crt」を作成します。


今回 sendmail でなく postfix をインストールする理由

Sendmailはメールアカウントの認証をホストのログインアカウントの流用で行っており、Postfixがサポートしているような仮想メールアカウントの機能を備えていないため、メールアカウントをLDAP参照にするのはpam_ldap等を使用してホストのログインアカウントをldap参照とし、これを流用するという方法による間接的な対応となります。今回はLDAPによるユーザー認証を目的としているので Postfix で行うことにします。


中途半端な記述になってしまいましたが、後日追記します...

I am not feeling well now.

I am not feeling well now. Although I caught cold yesterday, I recovered somehow. However, my physical condition is not good still today.

I will strive for recovery of my body today.