≪ トップ |
2005年11月11日
qmail + Courier-IMAP + Qmail-Scanner + Clam AntiVirus + SpamAssassin
今度新規にメールサーバを構築する時は、qmail + Courier-IMAP の組み合わせにしようかと思っています。
なので、タイトルの導入手順をメモっておきます。
受信メールサーバを IMAP ,システムの文字コードがUTF-8(デフォルト)の場合で、メールユーザはメールサーバ構築後作成するものとしています。
Clam AntiVirus インストール
dag 用 GPG キーインポート
dag 用 yum リポジトリ設定ファイル作成
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
includepkgs=clamd clamav*
Clam AntiVirusインストール
Clam AntiVirus を常駐起動する
clamd 設定ファイル編集
root権限で動作するようにする(コメントアウト)
clamd 起動
clamd 自動起動設定,確認
[root@server ~]# chkconfig --list clamd
ウィルス定義ファイル最新化
※以後のウィルス定義ファイルのアップデートは、/etc/cron.daily/freshclamにより毎日自動で行われる
ウィルススキャン実行スクリプト作成
PATH=/usr/bin:/bin
CLAMSCANTMP=`mktemp`
clamdscan --recursive --remove / > $CLAMSCANTMP
[ ! -z "$(grep FOUND $CLAMSCANTMP)" ] && \
grep FOUND $CLAMSCANTMP | mail -s "Virus Found" root
rm -f $CLAMSCANTMP
実行権限付加
毎日自動実行されるディレクトリへ移動
SpamAssassin インストール
TLECで公開されている日本語のスパムメールに対応したSpamAssassin用のルールファイルをセットアップする
ルールファイル最新化スクリプト作成
# TLEC(http://tlec.linux.or.jp/)より最新のルールファイルダウンロード
cd /etc/mail/spamassassin
wget -qN http://tlec.linux.or.jp/docs/user_prefs
cp user_prefs local.cf
# スパム判断したメールを添付形式にしないように設定
echo "report_safe 0" >> local.cf
# 受信メールサーバーがPOPの場合(IMAPサービスが未起動の場合)はメール件名に「*****SPAM*****」の文字列を付加するように設定
if [ -z "$(/usr/sbin/lsof -i:imap)" ] && [ -z "$(/usr/sbin/lsof -i:imaps)" ]; then
echo "rewrite_header Subject *****SPAM*****" >> local.cf
fi
# SpamAssassin再起動
/etc/rc.d/init.d/spamassassin restart > /dev/null
実行権限付加
スクリプト実行
ルールファイル確認(local.cf があること)
毎日自動実行されるディレクトリへ移動
SpamAssassin 起動(おそらく起動済み)
SpamAssassin自動起動設定,確認
[root@server ~]# chkconfig --list spamassassin
qmail インストール準備
qmail インストールディレクトリ作成
qmail インストールに必要なユーザ,グループを作成する
[root@server ~]# useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null
[root@server ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
[root@server ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
[root@server ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
[root@server ~]# groupadd qmail
[root@server ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
[root@server ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
[root@server ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails
qmail インストール
qmail ダウンロード(最新版確認)
日本標準時間対応パッチダウンロード
SMTP-Auth 対応パッチダウンロード
不正中継拒否対応パッチダウンロード
qmail 展開
日本標準時間対応パッチ展開
日本標準時間対応パッチを qmail 展開先ディレクトリへ移動
SMTP-Auth 対応パッチ展開
SMTP-Auth 対応パッチを qmail 展開先ディレクトリへ移動
不正中継拒否対応パッチを qmail 展開先ディレクトリへ移動
qmail 展開先ディレクトリへ移動
日本標準時間対応パッチ施行
SMTP-Auth 対応パッチ施行
不正中継拒否対応パッチ施行
error.h 編集(変更)(エラーメッセージを出力してインストールが失敗してしまうことの対処)
↓
#include<errno.h>
qmail に QMAILQUEUE 環境変数対応パッチを施行する。
QMAILQUEUE 環境変数対応パッチダウンロード
QMAILQUEUE 環境変数対応パッチ施行
qmail インストール
qmail 初期設定
自ドメイン名を受信ドメイン名として追加
自ドメイン名をローカルドメイン名として追加
qmail 展開先ディレクトリを抜ける
man コマンドで qmail コマンドのマニュアルを参照できるようにする
SMTP-Auth 対応パッチ展開先ディレクトリ削除
ダウンロードした SMTP-Auth 対応パッチ削除
qmail 展開先ディレクトリ削除
ダウンロードした qmail 削除
checkpassword インストール
SMTP認証,POP認証に使用する checkpassword をインストールする
checkpassword ダウンロード(最新版確認)
展開
展開先ディレクトリへ移動
error.h 編集(変更)
↓
#include<errno.h>
checkpassword インストール
展開先ディレクトリを抜ける
展開先ディレクトリ削除
ダウンロードした checkpassword 削除
checkpassword の所有者,所有グループ変更
checkpassword が所有者権限で動作するように設定
ucspi-tcp インストール
qmail へのSMTP接続制御を行うため、tcpserver が含まれた ucspi-tcp をインストールする
ucspi-tcp ダウンロード(最新版確認)
展開
展開先ディレクトリへ移動
error.h 編集(変更)
↓
#include<errno.h>
ucspi-tcp インストール
展開先ディレクトリを抜ける
ucspi-tcp 展開先ディレクトリ削除
ダウンロードした ucspi-tcp 削除
中継の許可を指定するファイルを作成する
127.:allow,RELAYCLIENT=""
/etc/tcp.smtp の cdb 形式データベースを作成
fastforward インストール
sendmail 用システム共通メール転送設定ファイル(/etc/aliases)を qmail で利用するのに必要な fastforward をインストールする
fastforward ダウンロード(最新版確認)
展開
展開先ディレクトリへ移動
error.h 編集(変更)
↓
#include<errno.h>
fastforward インストール
展開先ディレクトリを抜ける
展開先ディレクトリ削除
ダウンロードした fastforward 削除
旧 newaliases コマンド無効化
旧 newaliases コマンドをリネーム
newaliases コマンドを fastforward に置換え
/etc/aliases の cdb 形式データベース作成
/etc/aliases の cdb 形式データベース作成確認
/etc/aliases.cdb を qmail が参照するように設定
qmail 設定
1メールあたりのサイズに上限を設定(10MB(10*1024*1024)にする場合)
※制限を超えた場合、送信元へエラー通知される
ダブルバウンスメールは破棄する
新規ユーザ追加時に自動でユーザのホームディレクトリに Maildir 形式のメールボックスが作成されるようにする
[root@server ~]# /var/qmail/bin/maildirmake /etc/skel/Maildir
qmail 起動
旧SMTPサーバ(sendmail)停止
sendmail 停止
自動起動設定解除,確認
[root@server ~]# chkconfig --list sendmail
旧sendmailコマンド無効化
[root@server ~]# chmod 0 /usr/sbin/sendmail
旧sendmailコマンドをリネーム
[root@server ~]# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
sendmail コマンドを qmail に置き換え
[root@server ~]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
qmail 起動コマンドサンプルを所定の場所へコピー
※他にも /var/qmail/boot/ ディレクトリに幾つかサンプルがあります。適当なものを利用します。
qmail 起動スクリプト作成
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail start/stop script
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
start() {
# Start daemons.
if [ -z $(/sbin/pidof qmail-send) ] ; then
echo -n "Starting qmail"
# qmail
csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
# SMTP
tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` ¥
-x /etc/tcp.smtp.cdb 0 smtp ¥
qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|¥
splogger smtp &
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
return $RETVAL
else
echo "qmail is already started"
fi
}
stop() {
# Stop daemons.
if [ ! -z $(/sbin/pidof qmail-send) ] ; then
echo -n "Shutting down qmail"
/bin/kill $(/sbin/pidof tcpserver)
/bin/kill $(/sbin/pidof qmail-send)
until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done
echo
rm -f /var/lock/subsys/qmail
else
echo "qmail is not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
if [ ! -z $(/sbin/pidof qmail-send) ] ; then
echo -n "qamil (pid"
echo -n " `/sbin/pidof qmail-send`"
echo -n " `/sbin/pidof tcpserver`"
echo ") is running..."
else
echo "qmail is stoped"
fi
;;
*)
echo "Usage: qmail {start|stop|restart|status}"
exit 1
esac
exit 0
実行権限付加
qmail 起動
自動起動設定,確認
[root@server ~]# chkconfig qmail on
[root@server ~]# chkconfig --list qmail
ルータ設定でポート25番をOPENする
Courier-IMAP インストール
Courier Authentication Library インストールに必要なパッケージをインストール
Courier Authentication Library ダウンロード(最新版確認)
Courier Authentication Library の RPM パッケージ作成
作成した RPM パッケージインストール
ダウンロードした Courier Authentication Library 削除
Courier-IMAP の RPM パッケージ作成は root ではできないため、一般ユーザ( nanami とする)で行う
Courier-IMAP インストールに必要なパッケージをインストール
一般ユーザへ切替
RPM パッケージ作成作業用ディレクトリ作成
RPM パッケージ作成作業用ディレクトリ設定
Courier-IMAP ダウンロード(最新版確認)
specファイル取り出し
famをgaminに置き換え
修正した spec ファイルを所定のディレクトリへ移動
ダウンロードしたソースアーカイブを所定のディレクトリへ移動
courier-imap インストール時に以下のエラーメッセージが出力されないように、perl のパスがデフォルトの /usr/bin/perl で認識されるようにする
エラー: Failed dependencies:
/usr/local/bin/perl is needed by courier-imap-4.0.6-1.i386
Courier-IMAP の RPM パッケージ作成
spec ファイル取り出し時に作成されたディレクトリ削除
root へ戻る
作成した RPM パッケージをインストール
RPM パッケージ作成作業用ディレクトリ設定ファイル削除
RPM パッケージ作成作業用ディレクトリ削除
Courier-IMAP 設定
POP 機能の無効化
POP(SSL) 機能の無効化
courier-IMAP 認証設定ファイル編集
認証機能を PAM 認証のみにする(変更)
↓
authmodulelist="authpam"
Courier-IMAP 起動
courier-authlib 起動
courier-IMAP 起動
自動起動設定,確認
[root@server ~]# chkconfig courier-imap on
ルータ設定でポート143番をOPENする
maildrop インストール
Qmail-Scanner がメールを解析するのに必要な reformimeを含んでいる maildrop をインストールする
maildrop インストールに必要なpcre-devel をインストール
maildrop ダウンロード(最新版確認)
maildrop の RPM パッケージ作成
作成したRPMパッケージをインストール
ダウンロードした maildrop を削除
Qmail-Scanner インストール
Qmail-Scanner インストールに必要な perl-suidperl をインストール
qscand ユーザ作成
Qmail-Scanner ダウンロード(最新版確認)
展開
展開先ディレクトリへ移動
configure
応答
[Hit to continue]
空ENTER
‥‥‥‥
Continue? ([Y]/N)
y
‥‥‥‥
Continue? ([Y]/N)
y
‥‥‥‥
Finished installation of initial directory structure for Qmail-Scanner
under /var/spool/qmailscan and qmail-scanner-queue.pl under /var/qmail/bin.空ENTER
‥‥‥‥
展開先ディレクトリを抜ける
Qmail-Scanner テストツールを退避
展開先ディレクトリ削除
ダウンロードした Qmail-Scanner 削除
Qmail-Scanner 設定
ウィルス感染メール削除スクリプト作成
rm -f /var/spool/qmailscan/quarantine/new/*
実行権限付加
ウィルス感染メール削除スクリプトを毎日自動実行されるディレクトリへ移動
SpamAssassin の Qmail-Scanner 対応
SpamAssassin 起動オプション設定ファイル編集
追加
SpamAssassin 再起動
qmail の Qmail-Scanner 対応
QMAILQUEUE 環境変数を /etc/tcp.smtp へ追加
/etc/tcp.smtp の cdb 形式データベース再作成
qmail 起動スクリプト編集
追加
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail start/stop script
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE
‥‥‥‥
‥‥‥‥
qmail 再起動
スパムメール振分け設定
SpamAssassin がスパム判定したメールはスパム専用メールボックスへ配送するようにし、未承諾広告メール(件名に「未承諾広告※」が含まれているメール)は自動的に削除するようにする
新規ユーザ追加時に自動でスパム専用メールボックスが作成されるようにする
procmail設定ファイル編集
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
#LOGFILE=$HOME/procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力
# 未承諾広告メール削除※システムの文字コードがUTF-8(デフォルト)の場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null
# SpamAssassin がスパム判定したメールはスパム専用メールボックスへ配送
:0
*^X-Spam-Flag: YES
$SPAM
メールユーザ( sakura )追加
ユーザにSSHによるリモート接続を開放しない場合
[root@server ~]# passwd sakura
ユーザにSSHによるリモート接続を開放する場合
[root@server ~]# passwd sakura
メールソフト設定
Outlook Expressを起動し、メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う
↓
「表示名」に送信者の名前(任意)を入力して「次へ」
↓
「電子メールアドレス」に送信者のメールアドレスを入力して「次へ」
↓
「受信メールサーバーの種類」で「IMAP」を選択
「受信メールサーバー」にメールサーバー名を入力
「送信メールサーバー」にメールサーバー名を入力して「次へ」
↓
「パスワード」にパスワードを入力して「次へ」
↓
「完了」
↓
追加したアカウントをダブルクリックしてプロパティを開く
↓
「サーバー」タブの「このサーバーは認証が必要」をチェックして「OK」
↓
「IMAP」タブの「ルートフォルダのパス」に「INBOX」と入力
「IMAP」タブの「送信済みアイテムのパス」に「Sent」と入力
「IMAP」タブの「下書きのパス」に「Drafts」と入力して「OK」
↓
「閉じる」
↓
「はい」
↓
「OK」
↓
メールアカウント選択して「IMAPフォルダ」ボタン押下
↓
「リセット」ボタン押下して「Spam」フォルダが表示される
↓
「Spam」フォルダを選択して「表示」ボタン押下、「OK」ボタン押下
↓
「Spam」フォルダが表示される
ウィルス&スパムチェック確認
Qmail-Scanner に付属していたツールを使用して、ウィルス感染メールの排除、スパムメールの検知及び、正常メールの正常配送を確認する
テストメールは root 宛に送信されるので、あらかじめ root 宛メールをメールクライアントに設定したユーザ( sakura )宛に転送するようにしておく
旧 root 宛メール転送設定削除
sakura 宛に転送する
確認
root: sakura
転送設定反映
Qmail-Scanner テストツール実行
「Qmail-Scanner test (1/4): inoffensive message」という件名のメール(正常テストメール)が受信トレイに配送されること
「Qmail-Scanner anti-spam test (4/4): checking SpamAssassin [if present] (There yours for FREE!)」という件名のメール(スパムテストメール)がSpamフォルダに配送されること
「Qmail-Scanner viral test (2/4): checking perlscanner...」という件名のメール(ウィルステストメール)が配送されないこと
「Qmail-Scanner viral test (3/4): checking non-perlscanner AV...」という件名のメール(ウィルステストメール)が配送されないこと
Qmail-Scanner テストツール削除
スパムメール学習
SpamAssassin 学習スクリプト作成
PATH=/usr/bin:/bin
for user in `ls /home/`
do
# 正常メール
hammail=/home/$user/Maildir/cur
# 正常メール学習
if [ -d "$hammail" ]; then
# 正常メールをSpamAssassinに学習させる
su $user -s "/bin/bash" -c "sa-learn --ham $hammail | \
logger -p mail.info -t 'sa-learn for $user'"
fi
# スパムメール
spammail=/home/$user/Maildir/.Spam/cur
# スパムメール学習
if [ -d "$spammail" ]; then
# スパムメールをSpamAssassinに学習させる
su $user -s "/bin/bash" -c "sa-learn --spam $spammail | \
logger -p mail.info -t 'sa-learn for $user'"
fi
done
実行権限付加
SpamAssassin 学習スクリプトを毎日自動実行されるディレクトリへ移動
投稿者 ゆう : 2005年11月11日 11:36 | カテゴリー CentOS (27)
トラックバック
http://www.wave440.com/blog/mt-trbk.cgi/157