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対応で作られているので、設定ファイルを編集するのみで利用できます。
- Vine4でプレーン・テキストによる認証で、IMAP + SMTP-AUTHの環境を作る。ここまででも使えます。ただし、パスワードはそのままネットワークを流れます。
- 各ソフトウェアのインストール
- IMAPサーバの設定と起動
- spoolディレクトリの変換
- iptablesの設定変更
- Postfixの設定
- TLS対応にする。パスワードなどが暗号化されます。
- TLS用の秘密鍵などを生成
- PostfixをTLS対応に設定
- courier-imapをTLS対応に設定
- TLS対応でiptablesを設定変更
Postfixの設定が終わったら「不正中継のテスト」を実行しておきましょう。
なお、それぞれのサーバ環境での、クライアント側は「クライアント側の設定」を見てください。
このメモを作るときに SMTP Authetication+TLSの導入(Postfix2.0編)を参考にしました。
最初に不用となるソフトウェアをアンインストールしておきます。これらは初期状態ではインストールされていないかもしれません。
$ su
# apt-get remove imap
# apt-get remove qpopper
IMAPサーバで必要となるパッケージをインストールします。
# apt-get update
# apt-get install courier-imap courier-authlib
SMTP-AUTHで必要となるパッケージをインストールします。
# apt-get install cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5
courier-imap用の認証サービスを起動します。
# /etc/init.d/courier-authlib start
# /sbin/chkconfig courier-authlib on
courier-imapを開始します。
# /etc/init.d/courier-imap start
# /sbin/chkconfig courier-imap on
ディレクトリ「Maildir」を各ユーザーごとに作成します。
たとえば、以下のスクリプトで/home/USERNAME以下のディレクトリにMaildirを作成します。
今後、新規ユーザーを作成したときにMaildirが自動生成されるようにするため、/etc/skelにMaildirを作成します。
# /usr/sbin/maildirmake /etc/skel/Maildir
すでにmbox形式でサーバを運用しており、/var/spool/mailにメールがたまっている場合、それをMaildirへ変換します。
Postfixにはツールが付属しないので、他のツールを利用しました。
このツールで必要となるパッケージのインストールをします。
# apt-get install perl-TimeDate
-
-
解凍します。
# gzip -d mb2md-3.20.pl.gz
インストールします。
# install -m 0755 mb2md-3.20.pl /usr/bin/mb2md
/var/spool/mail以下に落ちているメールは次のようにしてMaildirへ変換します。
# mb2md -m
ファイアーウォールが有効になっているかを確認してみます。有効になっていたら、たぶん次のような感じになっています。
# 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
|
ファイアーウォールが有効になっていたら、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
/usr/lib/sasl2/smtpd.conf をエディタで新規作成します。
|
pwcheck_method: saslauthd
|
saslauthdデーモンの起動をします。
# /etc/init.d/saslauthd start
# /sbin/chkconfig saslauthd on
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なども変更しておいたほうがいいでしょう。
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
|
Postfixを再起動します。
# /etc/init.d/postfix restart
念のため、動作チェックします。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のリンクを確認。
|
すでに作ってあるならApache用に作ったキーを使ってもいいですが、ここではメール用に最初から作ってみます。
作られるキーは、ここでは例として/etc/postfix/ssl/に作るように書きます。
# mkdir /etc/postfix/ssl/
# cd /etc/postfix/ssl/
サーバ・キー(秘密鍵)を作ります。server.keyができます。
# openssl genrsa -des3 -out server.key 1024
パスフレーズを2回、聞かれるので答えます。
サーバ・キーのパスフレーズを排除します。
# openssl rsa -in server.key -out server.key
# chmod 600 server.key
パスフレーズを聞かれるので答えます。
署名依頼用の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 []: ←必要ない
|
認証局へ依頼する場合は、上記でできたserver.csrを送付して署名してもらいます。
認証局を使わず、自己署名する場合は次のようにします。
# openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 365
「-days 365」は1年間(365日)有効という意味なので、ご自身の判断で必要に応じて適当に変えてください。うちは1000にしてます(3年弱ですね)。
/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
|
Postfixの再起動をします。
# /etc/init.d/postfix restart
courier-imapをTLS対応に設定 |
目次へ |
/etc/courier-imap/imapd-ssl をエディタで編集します。
|
# IMAPDSSLSTARTがNOになっていたらYESにする。
# Vine4では最初からYESになっていると思う。
IMAPDSSLSTART=YES
# キーを、さきほど作成したファイルにする。
TLS_CERTFILE=/etc/postfix/ssl/server.pem
|
/etc/courier-imap/pop3d-ssl をエディタで編集します。
|
# POP3_STARTTLSがNOになっていたらYESにする。
# Vine4では最初からYESになっていると思う。
POP3_STARTTLS=YES
# キーを、さきほど作成したファイルにする。
TLS_CERTFILE=/etc/postfix/ssl/server.pem
|
courier-imapデーモンを再起動します。
# /etc/init.d/courier-imap restart
これは、Vineインストール時にファイアーウォールを有効にした場合は以下の設定をします。
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
設定の確認をします。
# iptables -L --line-numbers
間違いないようなら、iptablesの設定値を保存します。
# /etc/init.d/iptables save
ここまでで、SMTPサーバやPOP&IMAPサーバがTLS対応となり、暗号化されたパスワードを送信します。
RBL.JPの「第三者中継チェック」をクリックします。
- 「ホスト名」にホスト名を入力して「Check」ボタンをクリックします。
- 何回かテストされます。結構、時間がかかるのでゆっくり待ちましょう。
- 「全てのテストが行われました, no relays accepted.」と表示されればテストは完了です。
ここでは例としてOutlook Expressでの設定を書いてみます。
アカウントのプロパティを開いて、まずはSMTP-AUTHの設定をします。
この例ではPOP3になってますがIMAPでも同じです。
SMTP-AUTHでは、「このサーバーは認証が必要」のチェックを付けます。そして、設定ボタンをクリックします。
ここで登録するパスワードがSMTPサーバへのパスワードとなります。
TSL対応に設定した場合、さらに以下を設定します。
詳細設定の送信メール(SSL)と受信メール(SSL)にチェックをつけます。
受信メールのポートは、POP3なら995、IMAPなら993に設定します。
|