Computer
Postfix Qpopper courier-imap Procmail Docomo対策

Postfixのインストール

まず,apt-get removeでpostfixとcyrus-sasl*をアンインストールする.

apt-get install cyrus-sasl*で4つくらいインストール.
(saslとsasl2がインストールされるみたいだが,saslのほうを使用するみたい.)
ここからはhttp://www.miloweb.net/postfix2.htmlを参考にした.
Postfixをftp://ftp.ring.gr.jp/pub/net/mail/postfix/からDLする.
$ tar zxvf postfix-2.x.x.tar.gz
$ cd postfix-2.x.x
$ make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" AUXLIBS="-L/usr/lib -lsasl"
$ make
$ su
次にpostfixとpostdropというユーザとグループを作る.
# adduser -u 465 postfix
# passwd postfix
# groupadd -g 466 postdrop
# vipw

postfix:x:465:466:Postfix:/nonexistent:/sbin/nologin
と後半部分をいじる.
「保存時に「このシステムではシャドウパスワードが使われています。 /etc/shadowを今すぐ編集しますか[y/n]?」 と聞かれるので「y」を押して,postfixの部分を以下の様に変更する.
postfix:!!:(これ以降はいじらないでよい)
で,
# make install
する.

そして, /etc/postfix/main.cfの編集.
# ホスト名の設定
myhostname = silvia.satze.net

# ドメイン名の設定
mydomain = satze.net

# メール送信の設定
myorigin = $mydomain

# メール受信の設定
#inet_interfaces = $myhostname, localhost

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

# 信頼できるクライアントのネットワークを指定(192.168.0.0/24と192.168.1.0/24を合わせて指定)
mynetworks = 192.168.1.0/24, 127.0.0.0/8

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

# sendmail互換プログラムの修正
endmail_path = /usr/sbin/sendmail

こんな感じ. その後に,SMTP-AUTH に関わる設定のため,
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
broken_sasl_auth_clients = no
を追加.

編集が終わったら,SMTP-AUTH 用のパスワードを設定をする.
# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h mydomain` ユーザ名
場合によっては,
# /usr/sbin/saslpasswd -d ユーザ名
が必要かも(さらにエラーだとか怒られるかもしれないが気にしない).
認証用DBのアクセス権変更します(初回のみ).
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb
/usr/lib/sasl/ に新規に smtp.conf というファイルを作成し,
pwcheck_method: sasldb
を記述.

エイリアスの設定のため,
# cp /etc/postfix/aliases /etc 
とし, /etc/aliases をエディタで開き以下の様に編集する.
root: username
エイリアスの設定を以下のコマンドで反映させる.
# newaliases
Postfixを起動させる.
# /usr/sbin/postfix start
また,
# printf 'ユーザ名\0ユーザ名\0パスワード' | mmencode

とし,ユーザー名パスワードをエンコードする.
SMTP-AUTH の確認のため,
$ telnet localhost 25
に接続.
220 hoge.net ESMTP Postfix
な行や,
EHLO localhost
と入力した後,
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
こんな行があればOK.
さらに
AUTH PLAIN エンコードしたユーザ名パスワード
として,
235 Authentication successful
と出てくればOK.
後から, /etc/postfix/main.cfのsmtpd_sasl_security_optionsに
smtpd_sasl_security_options = noanonymous,noplaintext
とnoplaintextを追加をしておくと良いかも.

メールソフト側で,SMTP認証を有効にすればよい (内部に送信するにはSMTP認証は関係ないらしい).
なお,送信のためにルータやファイアウォールのTCPの25番をあけておく.
最後にメール不正中継拒否のテストとして, 第三者中継の調査NETWORK ABUSE CLEARINGHOUSE - Mail relay testing を試してみると良い.

/etc/rc.d/init.d/postfixを作成し設定をする.
実際はWebminで設定すると楽.

Qpopperの設定

受信にはQpopperを利用した.
ついでにSSLで受信できるように再構築.
http://www.ring.gr.jp/pub/linux/Vine/VineSeed/SRPMS/ らへんからqpopperの新しいのを取得.
$ rpm -Uvh qpopper-4.0.4-0vl1.src.rpm
をすると展開を行ったユーザーのホームディレクトリ中に 「 ./rpm/SPECS/qpopper.spec 」が作成されているので, これをエディタで開き
%build CFLAGS="$RPM_OPT_FLAGS" ./configure \
 --prefix=/usr \
 --enable-bulletins=/var/spool/mail/bulletins \
 --enable-specialauth \
 --with-pam=qpopper \
 --with-popuid=pop \
 --enable-apop=/etc/pop.auth \
 --with-openssl
make
とする.保存をして,
$ rpm -bb ./rpm/SPECS/qpopper.spec
とRPMファイルを作成(場合によっては,apt-get install pam-devel gdbm-develなどが必要かも).
$ su
# rpm -Uvh ./rpm/RPMS/i386/qpopper-4.0.4-0vl1.i386.rpm
でインストール完了.

続いてSSLの証明書の作成をする.
まず,証明書をおくディレクトリを作る.
# mkdir -p -m665 /etc/mail/certs
# chown root:mail /etc/mail/certs
# chmod 660 /etc/mail/certs 
次に,証明書のリクエスト用ファイルを作る.
# openssl req -new -nodes -out req.pem -keyout /etc/mail/certs/cert.pem 
とし,適宜質問に答える.
A challenge password[]:
An optional company name []: 
は何も入れなくて良い.
出来上がったファイルにアクセス権を設定する.
# chmod 600 /etc/mail/certs/cert.pem
# chown root:0 /etc/mail/certs/cert.pem 
さらに,
# openssl genrsa -des3 -out ca.key 1024 
パスワードを入力し,
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
上と同じパスワードを入力.
また,同じように質問に答える.
さらにさらに,
# openssl x509 -req -CA ca.crt -CAkey ca.key -days 365 -in req.pem -out signed-req.pem -CAcreateserial
と入力し,
# cat signed-req.pem >> /etc/mail/certs/cert.pem
とすればよい.

Qpopper側では, /etc/mail/qpopper.configというファイルを作り,
set tls-support = alternate-port
set tls-server-cert-file = /etc/mail/certs/cert.pem 
と記述する.
さらに, /etc/inet.confに,
pop3s  stream  tcp nowait  root  /usr/sbin/tcpd  in.qpopper -s -f /etc/mail/qpopper.config
を加える.pop-3の行はコメントアウトしても良い(TCPの110で受信できなくなるだけ).
そして,
# /etc/rc.d/inet.d/inet restart
として,設定を有効にする.

また,QpopperはMaildirに非対応なので, /etc/postfix/main.cfでは,
#home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail
としておく必要がある.
そして,受信のためにTCPの995番を開けておく.

これで基本的な設定は終了なので,メールソフト側で, popサーバ,smtpサーバにhostnameを, ユーザ名,パスワードはLinuxのもの(受信用はSMTP-AUTH 用のパスワード)を, ポートはpop3s(995)とsmtp(25)に設定し送受信をする.

courier-imapの設定

QpopperはMaildirに非対応なので courier-imapをインストールした.
まず,apt-get -eなどでQpopperを削除.
/etc/mail/qpopper.configを削除.
また,/etc/inet.confもいらないので削除.
それに伴い,/etc/rc.d/init.d/inetも不要(終了して削除).
# apt-get install courier-imap*
でインストール.
設定ファイルは/etc/courier-imapにインストールされる.
今回はpop3d-sslだけ使えばよいので,
imapd,imapd-ssl,pop3dを開いて,
それぞれ
IMAPDSTART = NO
などとしておく.
pop3d-sslは
TLS_CERTFILE=/usr/share/courier-imap/imapd.pem
とする.
そして, /usr/share/courier-imap に imapd.pem と pop3d.pem があるので消し, mkimapdcertとmkpop3dcert を実行すると証明書が作り直される.

また,/etc/postfix/main.cfでは,
home_mailbox = Maildir/
#mail_spool_directory = /var/spool/mail
としておく.

最後に
/etc/rc.d/init.d/courier-imap start
/etc/rc.d/init.d/courier-authlib start
などで起動(restartで再起動)する.
なお,これはapt-getからインストールしているので, 起動スクリプトに自動的に設定されている.

Procmailの設定

メールフィルタリングのために,Procmailを設定しました.(2005/10/09)
Vine 3.1には標準で /usr/bin/procmail にインストールされているので そのまま利用します.
Maildir で運用しているので,Web検索した設定ファイルと若干違った. (かなり格闘しました.改行コードもWindowsじゃダメだし.)
以下,ホームディレクトリに置く設定ファイルです.
まず,.forward ファイル.
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #usename"
お次は,.procmailrc ファイル.
MAILDIR=$HOME/Maildir
LOGFILE=$HOME/Maildir/procmail.log
DEFAULT=$MAILDIR/
LOCKFILE=$HOME/.lockmail

(ここにレシピを追加する)

:0
$DEFAULT
こんな感じで何とかうまく行ってるっぽい.

場合によると/etc/postfix/main.cf に
mailbox_command = /usr/bin/procmail
を追加する(コメントアウトを取る?)必要があるかもしれない.

Docomoへメールが届かない

自宅サーバからだとDocomoへメールが届かないことがあります.
以下の方法で回避できるようです.
参考:http://www.aconus.com/~oyaji/mail2/postfix.htm
まず,/etc/postfix/main.cf に
transport_maps = hash:/etc/postfix/transport
を追加. さらに,/etc/postfix/transport に
docomo.ne.jp    smtp:[mail.hoge.ne.jp]
.docomo.ne.jp   smtp:[mail.hoge.ne.jp]
(mail.hoge.ne.jpはプロバイダのSMTPサーバ)を記述.
最後に,
# postmap /etc/postfix/transport
# postfix reload
として完了.
Valid HTML 4.01 Transitional Valid CSS!
Copyright© Satze.net All rights reserved.