Vine Linux 4でSMTP-AUTHやIMAPを利用しよう

2006/10/11

Vine Linux 4.0 (以下Vine4) でIMAPサーバーを立ち上げてみたので、メモを残しておきます。


ソフトウェア構成と作業内容

次のような構成でやってみました。

  • SMTPはVine4で標準配布しているPostfix2.2使い、SMTP-AUTH(SASL認証)で利用する。Vine4のPostfixは最初からSMTP-AUTH対応になっています。
  • courier-imap + courier-authlibを使い、POP&IMAPサーバを実現する。Vine4のcourier-imapは最初からSSL対応になっています。
  • iptablesの設定を変更する。

設定オプションで以下をやってみました。

  • メールサーバのTLS化をしてみました。これでパスワードが暗号化され、プレーンテキストではなくなります。Vine4のPostfixやcourier-imapは最初からTLS対応で作られているので、設定ファイルを編集するのみで利用できます。

目次

  1. Vine4でプレーン・テキストによる認証で、IMAP + SMTP-AUTHの環境を作る。ここまででも使えます。ただし、パスワードはそのままネットワークを流れます。
    1. 各ソフトウェアのインストール
    2. IMAPサーバの設定と起動
    3. spoolディレクトリの変換
    4. iptablesの設定変更
    5. Postfixの設定
  2. TLS対応にする。パスワードなどが暗号化されます。
    1. TLS用の秘密鍵などを生成
    2. PostfixをTLS対応に設定
    3. courier-imapをTLS対応に設定
    4. TLS対応でiptablesを設定変更

Postfixの設定が終わったら「不正中継のテスト」を実行しておきましょう。

なお、それぞれのサーバ環境での、クライアント側は「クライアント側の設定」を見てください。

このメモを作るときに SMTP Authetication+TLSの導入(Postfix2.0編)を参考にしました。


各ソフトウェアのインストール

目次へ
  1. 最初に不用となるソフトウェアをアンインストールしておきます。これらは初期状態ではインストールされていないかもしれません。
    $ su
    # apt-get remove imap
    # apt-get remove qpopper
  2. IMAPサーバで必要となるパッケージをインストールします。
    # apt-get update
    # apt-get install courier-imap courier-authlib
  3. SMTP-AUTHで必要となるパッケージをインストールします。
    # apt-get install cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5

IMAPサーバの設定と起動

目次へ
  1. courier-imap用の認証サービスを起動します。
    # /etc/init.d/courier-authlib start
    # /sbin/chkconfig courier-authlib on
  2. courier-imapを開始します。
    # /etc/init.d/courier-imap start
    # /sbin/chkconfig courier-imap on
  3. ディレクトリ「Maildir」を各ユーザーごとに作成します。
    たとえば、以下のスクリプトで/home/USERNAME以下のディレクトリにMaildirを作成します。
  4. 今後、新規ユーザーを作成したときにMaildirが自動生成されるようにするため、/etc/skelにMaildirを作成します。
    # /usr/sbin/maildirmake /etc/skel/Maildir

spoolディレクトリの変換

目次へ

すでにmbox形式でサーバを運用しており、/var/spool/mailにメールがたまっている場合、それをMaildirへ変換します。 Postfixにはツールが付属しないので、他のツールを利用しました。

  1. このツールで必要となるパッケージのインストールをします。
    # apt-get install perl-TimeDate
  2. Converting Mbox mailboxes to Maildir formatからmb2md-3.20.pl.gzをダウンロードします。
  3. 解凍します。
    # gzip -d mb2md-3.20.pl.gz
  4. インストールします。
    # install -m 0755 mb2md-3.20.pl /usr/bin/mb2md
  5. /var/spool/mail以下に落ちているメールは次のようにしてMaildirへ変換します。
    # mb2md -m

iptablesの設定変更

目次へ
  1. ファイアーウォールが有効になっているかを確認してみます。有効になっていたら、たぶん次のような感じになっています。
    # iptables -L --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target 	prot opt source 			  destination
    1	 RH-Firewall-1-INPUT  all  --  anywhere 			anywhere
    
    Chain FORWARD (policy ACCEPT)
    num  target 	prot opt source 			  destination
    1	 RH-Firewall-1-INPUT  all  --  anywhere 			anywhere
    
    Chain OUTPUT (policy ACCEPT)
    num  target 	prot opt source 			  destination
    
    Chain RH-Firewall-1-INPUT (2 references)
    num  target 	prot opt source 			  destination
    1	 ACCEPT 	all  --  anywhere			  anywhere
    2	 ACCEPT 	icmp --  anywhere			  anywhere			  icmp any
    3	 ACCEPT 	ipv6-crypt--  anywhere			   anywhere
    4	 ACCEPT 	ipv6-auth--  anywhere			  anywhere
    5	 ACCEPT 	udp  --  anywhere			  224.0.0.251		  udp dpt:mdns
    6	 ACCEPT 	udp  --  anywhere			  anywhere			  udp dpt:ipp
    7	 ACCEPT 	tcp  --  anywhere			  anywhere			  tcp dpt:ipp
    8	 ACCEPT 	all  --  anywhere			  anywhere			  state RELATED,ESTABLISHED
    9	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:ssh
    10	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:http
    11	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:ftp
    12	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:smtp
    13	 REJECT 	all  --  anywhere			  anywhere			  reject-with icmp-host-prohibited
    		
  2. ファイアーウォールが有効になっていたら、iptablesの設定をします。
    この例では、13番目のREJECTの前にPOPの110番ポートと、IMAPの143番ポートを開放するようにします。
    # iptables -I RH-Firewall-1-INPUT 13 -m state --state NEW -p tcp --dport 110 -j ACCEPT
    # iptables -I RH-Firewall-1-INPUT 14 -m state --state NEW -p tcp --dport 143 -j ACCEPT
    上記設定後、正しいかを確認します。
    # iptables -L --line-numbers
    Chain RH-Firewall-1-INPUT (2 references)
    num  target 	prot opt source 			  destination
    1	 ACCEPT 	all  --  anywhere			  anywhere
    2	 ACCEPT 	icmp --  anywhere			  anywhere			  icmp any
    3	 ACCEPT 	ipv6-crypt--  anywhere			   anywhere
    4	 ACCEPT 	ipv6-auth--  anywhere			  anywhere
    5	 ACCEPT 	udp  --  anywhere			  224.0.0.251		  udp dpt:mdns
    6	 ACCEPT 	udp  --  anywhere			  anywhere			  udp dpt:ipp
    7	 ACCEPT 	tcp  --  anywhere			  anywhere			  tcp dpt:ipp
    8	 ACCEPT 	all  --  anywhere			  anywhere			  state RELATED,ESTABLISHED
    9	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:ssh
    10	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:http
    11	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:ftp
    12	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:smtp
    13	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:pop3
    14	 ACCEPT 	tcp  --  anywhere			  anywhere			  state NEW tcp dpt:imap
    15	 REJECT 	all  --  anywhere			  anywhere			  reject-with icmp-host-prohibited
    		
    設定を間違えていたら、この時点では、サーバを再起動すれば元に戻ります。
    または、14行目が間違っていたら、「iptables -D RFirewallH--1-INPUT 14」のようにすれば、その行を削除できます。
    間違いないようなら、iptablesの設定値を保存します。
    # /etc/init.d/iptables save

Postfixの設定

目次へ
  1. /usr/lib/sasl2/smtpd.conf をエディタで新規作成します。
    pwcheck_method: saslauthd
    saslauthdデーモンの起動をします。
    # /etc/init.d/saslauthd start
    # /sbin/chkconfig saslauthd on
  2. PostfixをMaildirに設定します。 /etc/postfix/main.cf を変更します。
    #home_mailbox = Maildir/
    mail_spool_directory = /var/spool/mail
        ↓
    home_mailbox = Maildir/
    #mail_spool_directory = /var/spool/mail

    Postfixの初期インストール時は、これ以外に、myhostnameやmydomainなども変更しておいたほうがいいでしょう。

  3. PostfixのSASLを有効にします。 /etc/postfix/main.cf に以下を追加します。
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_local_domain = $myhostname
    smtpd_recipient_restrictions = permit_mynetworks,
        permit_sasl_authenticated,
        check_relay_domains,
        reject
    smtpd_sasl_security_options = noanonymous
  4. Postfixを再起動します。
    # /etc/init.d/postfix restart
  5. 念のため、動作チェックします。AUTHの行が表示されるとメール送信時に認証が必要になっているようです。
    # telnet localhost 25
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 YOURHOSTNAME ESMTP Postfix
    EHLO localhost
    250-YOURHOSTNAME
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN DIGEST-MD5 LOGIN CRAM-MD5
    250-AUTH=PLAIN DIGEST-MD5 LOGIN CRAM-MD5
    250 8BITMIME
    QUIT
    221 Bye
    Connection closed by foreign host.

ここまでで、SMTP-AUTH対応、POP&IMAP対応になっています。Linuxのパスワードでの認証となります。
クライアントの設定方法は「クライアント側の設定」を見てください。

maillogに「fatal: no SASL authentication mechanisms」となり、smtpできないようなら、次の点を確認してください。
私はここでハマりましたので、書いておきます。

  • /usr/lib/sasl2/smtpd.confが存在するかを確認。そして、この設定値が間違っていないかを確認。
  • /usr/lib/sasl2/smtpd.confに「pwcheck_method: saslauthd」とした場合、saslauthdサービスが動作しているかを確認。
  • cyrus-sasl-xxxxというパッケージがインストールされているかを確認。または、ソース・インストールした場合にはUSE_SASL_AUTHの定義とsasl2のリンクを確認。

TLS用の秘密鍵などを生成

目次へ

すでに作ってあるならApache用に作ったキーを使ってもいいですが、ここではメール用に最初から作ってみます。

  1. 作られるキーは、ここでは例として/etc/postfix/ssl/に作るように書きます。
    # mkdir /etc/postfix/ssl/
    # cd /etc/postfix/ssl/
  2. サーバ・キー(秘密鍵)を作ります。server.keyができます。
    # openssl genrsa -des3 -out server.key 1024
    パスフレーズを2回、聞かれるので答えます。
  3. サーバ・キーのパスフレーズを排除します。
    # openssl rsa -in server.key -out server.key
    # chmod 600 server.key
    パスフレーズを聞かれるので答えます。
  4. 署名依頼用のCSRを作ります。
    # openssl req -new -key server.key -out server.csr
    Country Name (2 letter code) [AU]:JP ←国を入力
    State or Province Name (full name) [Some-State]:Mie ←都市を入力
    Locality Name (eg, city) []:Kuwana ←町を入力
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tsuttayo ←会社名などを入力
    Organizational Unit Name (eg, section) []: ←必要ない
    Common Name (eg, your name or your server's hostname) []:tsuttayo.sytes.net ←-ホスト名などを入力
    Email Address []:sg@tsuttayo.sytes.net ←メール・アドレスを入力
     
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []: ←必要ない
    An optional company name []: ←必要ない
  5. 認証局へ依頼する場合は、上記でできたserver.csrを送付して署名してもらいます。
    認証局を使わず、自己署名する場合は次のようにします。
    # openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 365
    「-days 365」は1年間(365日)有効という意味なので、ご自身の判断で必要に応じて適当に変えてください。うちは1000にしてます(3年弱ですね)。

PostfixをTLS対応に設定

目次へ
  1. /etc/postfix/main.cfを編集し、以下を追加します。
    smtpd_use_tls = yes
    smtpd_tls_key_file = /etc/postfix/ssl/server.key
    smtpd_tls_cert_file = /etc/postfix/ssl/server.pem
  2. Postfixの再起動をします。
    # /etc/init.d/postfix restart

courier-imapをTLS対応に設定

目次へ
  1. /etc/courier-imap/imapd-ssl をエディタで編集します。
    # IMAPDSSLSTARTがNOになっていたらYESにする。
    # Vine4では最初からYESになっていると思う。
    IMAPDSSLSTART=YES
     
    # キーを、さきほど作成したファイルにする。
    TLS_CERTFILE=/etc/postfix/ssl/server.pem
  2. /etc/courier-imap/pop3d-ssl をエディタで編集します。
    # POP3_STARTTLSがNOになっていたらYESにする。
    # Vine4では最初からYESになっていると思う。
    POP3_STARTTLS=YES
     
    # キーを、さきほど作成したファイルにする。
    TLS_CERTFILE=/etc/postfix/ssl/server.pem
  3. courier-imapデーモンを再起動します。
    # /etc/init.d/courier-imap restart

TLS対応でiptablesを設定変更

目次へ

これは、Vineインストール時にファイアーウォールを有効にした場合は以下の設定をします。

  1. IMAP-SSL(993ポート), POP-SSL(995ポート)を通過させるようにしておきます。
    # iptables -I RH-Firewall-1-INPUT 15 -m state --state NEW -p tcp --dport 993 -j ACCEPT
    # iptables -I RH-Firewall-1-INPUT 16 -m state --state NEW -p tcp --dport 995 -j ACCEPT
  2. 設定の確認をします。
    # iptables -L --line-numbers
    間違いないようなら、iptablesの設定値を保存します。
    # /etc/init.d/iptables save

ここまでで、SMTPサーバやPOP&IMAPサーバがTLS対応となり、暗号化されたパスワードを送信します。


不正中継のテスト

目次へ
  1. RBL.JPの「第三者中継チェック」をクリックします。
  2. 「ホスト名」にホスト名を入力して「Check」ボタンをクリックします。
  3. 何回かテストされます。結構、時間がかかるのでゆっくり待ちましょう。
  4. 「全てのテストが行われました, no relays accepted.」と表示されればテストは完了です。

クライアント側の設定

目次へ

ここでは例としてOutlook Expressでの設定を書いてみます。

  1. アカウントのプロパティを開いて、まずはSMTP-AUTHの設定をします。
    この例ではPOP3になってますがIMAPでも同じです。
    SMTP-AUTHでは、「このサーバーは認証が必要」のチェックを付けます。そして、設定ボタンをクリックします。
  2. ここで登録するパスワードがSMTPサーバへのパスワードとなります。
  3. TSL対応に設定した場合、さらに以下を設定します。
    詳細設定の送信メール(SSL)と受信メール(SSL)にチェックをつけます。
    受信メールのポートは、POP3なら995、IMAPなら993に設定します。
Copyright©2001-2017 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org