postfix でバーチャルドメイン環境を作りたいと思います。
ポイント
関連ソフトのインストール
yum install postfix dovecot mysql-server dovecot-mysql php
php.iniのdate.timezone設定忘れずにね。
ポイント
postfixはVDAパッチが適用されたものを利用する必要がある。Quota機能が働かないからね。
groupadd -g 10000 vusers useradd -g 10000 -u 10000 vusers
mysql関連の設定ファイル作成
vi /etc/postfix/mysql_virtual_alias_maps.cf user = postfix password = ******** hosts = localhost dbname = postfix table = alias select_field = goto where_field = address vi /etc/postfix/mysql_virtual_domains_maps.cf user = postfix password = ******** hosts = localhost dbname = postfix table = domain select_field = domain where_field = domain additional_conditions = and active = '1' vi /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfix password = ******** hosts = localhost dbname = postfix table = mailbox select_field = maildir where_field = username vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf user = postfix password = ******** hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
myhostnameはサーバFQDN名として、このFQDN名でのメール配送はローカル配送として /etc/aliasesは有効のまま利用する
main.cf
myhostname = xxxx.xxxx.xxxx mydestinaion = $myhostname, localhost inet_interface = all inet_protocols = ipv4 home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP Unknown #Virtual Domain w/MySQL local_transport = local virtual_transport = virtual virtual_mailbox_base = /home/vusers virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_alias_domains = $virtual_alias_maps virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_uid_maps = static:10000 virtual_gid_maps = static:10000 virtual_minimum_uid = 10000 #SMTP-Auth smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = $myhostname smtpd_client_restrictions = reject_rbl_client bl.spamcop.net smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes #Quota w/VDA Patch virtual_create_maildirsize = yes virtual_maildir_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_overquota_bounce = no virtual_trash_count = no #SMTPS smtpd_use_tls = no smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
master.cf
詳細設定は後ほど submissionの箇所コメントを外す smtpsの箇所コメントを外す
postfixAdminを公式サイトからダウンロード
tar zxvf postfixadmin-2.3.6.tar.gz mv postfixadmin-2.3.6 /var/www/html cd /var/www/html ln -s postfixadmin-2.3.6 postfixAdmin
データベース周りの設定
mysql -p CREATE DATABASE postfix; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'パスワード'; GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
config.inc.phpが設定ファイルであるが、postfixAdminでは将来のアップデート等の為にこのファイルを編集せずにconfig.local.phpを作成すれば上書きできる機構が含まれているので、この機構を利用する。
必要な設定は全てconfig.local.phpに仕込む
vi /var/www/html/postfixAdmin/config.local.php <?php $CONF['configured'] = true; $CONF['setup_password'] = '指定された文字列'; $CONF['default_language'] = 'ja'; $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'データベースパスワード'; $CONF['database_name'] = 'postfix'; $CONF['admin_email'] = 'サイト管理者メールアドレス'; $CONF['alias_domain'] = 'NO'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw"; $CONF['show_password'] = 'YES'; $CONF['show_footer_text'] = 'NO'; $CONF['emailcheck_resolve_domain']='NO'; $CONF['create_mailbox_subdirs_prefix']=''; $CONF['new_quota_table'] = 'YES'; $CONF['quota'] = 'YES'; $CONF['aliases'] = '0'; $CONF['mailboxes'] = '0'; $CONF['maxquota'] = '0'; $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO'; $CONF['encrypt'] = 'md5crypt'; $CONF['user_footer_link'] = "http://サイトアドレス/postfixAdmin/users/main.php"; $CONF['mailbox_postdeletion_script'] = 'sudo -u vusers /home/vusers/bin/postfixadmin-mailbox-postdeletion.sh'; $CONF['domain_postdeletion_script'] = 'sudo -u vusers /home/vusers/bin/postfixadmin-domain-postdeletion.sh'; ?>
で、ブラウザからpostfixAdmin/setup.phpに接続する
環境チェックが実行され問題なければデータベース設定が走る
画面下部に管理者アカウントの作成画面があるので必要事項を入力
Setup Passwordはセットアップ用パスワード文字列を入力
ドメイン管理者は管理者メールアドレスで有効なものでなければいけない
そして、Setup passwordが違うと怒られるはず。赤字でメッセージが表示される。 $CONF['setup_password'] = からの一行をconfig.local.phpに追記して再度実施する。
実行できると「管理者を追加しました」と表示されるのでOK。 setup.phpを削除orリネームして再度接続する。
余談…
http://sourceforge.net/apps/mediawiki/postfixadmin/index.php?title=CryptによるとPostfixAdminの$CONF[encrypt]とDovecotのPassword Schemeで適合するものしないものがあるのが分かる。
Password SHEMEはMD5-CRYPTで$CONF[encrypt]はmd5cryptがよいのか??
dovecotpwの設定項目があって、さらにencryptも’dovecot:MD5CRYPT’とか設定できるがまだバグがあるらしく、dovecot2.x系では正常に動作しない。なので、dovecot専用設定は行わない。これでも問題なく使えるらしい。。。
$CONF['user_footer_link']だが、変数名とは異なりユーザがログインした時の「メイン」のリンク先となるので正しく設定しておいてあげないといけない。ちゃんとconfig.inc.phpに注釈で記載がある。
管理者またはユーザでログインするとAnnouncementが表示される件
motd.txtとmotd-users.txtはリネームしておくこと。このファイルが存在しているとユーザがログインしたときはmotd-users.txtが、管理者でログインした時はmotd.txtが表示される。config.inc.phpで指定する事はできない。特権管理者の場合はmotd-admin.txtとなる。
templates/menu.php内で明示的に指定されているwww
mv motd.txt motd.txt.org mv motd-users.txt motd-users.txt
postfixAdminからユーザやドメインを削除しても実際にはデータベース内から削除されるだけで、ファイルシステム側のディレクトリ等は削除されない。これはpostfixadminがphpプログラムでWebサーバ上に存在しているのが原因。権限の問題で削除したくてもできない。
そこで、解決方法。
config.inc.phpによると
$CONF['mailbox_postcreation_script'] | メールボックス作成後実行 |
$CONF['mailbox_postedit_script'] | メールボックス変更後実行 |
$CONF['mailbox_postdeletion_script'] | メールボックス削除後実行 |
$CONF['domain_postcreation_script'] | ドメイン作成後実行 |
$CONF['domain_postdeletion_script'] | ドメイン削除後実行 |
のそれぞれを設定してシェルスクリプト側で対応できるようになってるとの事
この右辺に記述するサンプルスクリプトはpostfixadmin展開ディレクトリのADDITIONS以下にある
この右辺
$CONF['mailbox_postdeletion_script'] = 'sudo -u vusers /home/vusers/bin/postfixadmin-mailbox-postdeletion.sh'; $CONF['domain_postdeletion_script'] = 'sudo -u vusers /home/vusers/bin/postfixadmin-domain-postdeletion.sh';とか書くのだが、sudo使うわ、Webサーバから実行するわでそこら辺の調整が必要。
mkdir /home/vusers/bin mkdir /home/vusers/deleted-maildirs cp ADDITIONS/*.sh /home/vusers/bin chown -R vusers: /home/vusers/bin chown -R vusers: /home/vusers/deleted-maildirs chmod 700 /home/vusers/bin/*.sh
visudo #Defaults requiretty ←コメントアウトする apache ALL=(vusers) NOPASSWD: /home/vusers/bin/*.sh ←最終行に追記
vi postfixadmin-mailbox-postdeletion.sh basedir=/home/vusers ←修正 trashbase=/home/vusers/deleted-maildirs ←修正 66行目から if [ ! -e "$maildir" ]; then echo "maildir '$maildir' does not exist; nothing to do." exit 0 ←ここを1から0に変更する fi
最後から3行目の所
mv $maildir $trashdir
となってる。つまり$trashdirに移動させるだけなんですね。
完全削除するのであれば、ここをrmとかに変更すればOKかと
vi postfixadmin-domain-postdeletion.sh basedir=/home/vusers ←修正 trashbase=/home/vusers/deleted-maildirs ←修正
最後から3行目の所
mv $domaindir $trashdir
となってる。つまり$trashdirに移動させるだけなんですね。
完全削除するのであれば、ここをrmとかに変更すればOKかと
作成部分はpostfixかdovecotがやってくれるので設定しなくてよさげ。 エラーになるのは、postfixadminでユーザやドメインを作成しておいて「ようこそメール」を送信しない状態でユーザやドメインを削除した場合かな。
ドメインを削除する場合で、ドメインディレクトリがファイルシステム上に存在しない場合はこのシェルスクリプトではexit 0となるので、エラーなく完了できる。 なので、ドメイン作成時のスクリプトを定義しておく必要はない。
Dovecot-2.0.9でテスト
dovecotのMySQL用ドライバ、なければインストールしておく yum install -y dovecot-mysql rpm -ql dovecot-mysql /usr/lib64/dovecot/auth/libdriver_mysql.so /usr/lib64/dovecot/dict/libdriver_mysql.so /usr/lib64/dovecot/libdriver_mysql.so
/etc/dovecot/dovecot.confを小修整して設定ファイル自体はlocal.confに集約する。
これによって、将来のアップデートに対応しやすくなる。
基本設定
vi /etc/dovecot/dovecot.conf !include_try /etc/dovecot/local.conf ←最終行、コメントを外す
本体の設定
vi /etc/dovecot/local.conf # debug関係 auth_debug_passwords = yes auth_verbose = no auth_debug = yes listen = * disable_plaintext_auth = no auth_mechanisms = PLAIN LOGIN CRAM-MD5 mail_location = maildir:/home/vusers/%d/%n first_valid_uid = 10000 first_valid_gid = 10000 mail_plugins = quota protocol imap { imap_client_workarounds = delay-newmail tb-extra-mailbox-sep mail_plugins = $mail_plugins imap_quota } protocol pop3 { pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } passdb { driver = sql args = /etc/dovecot/dovecot-postfixadmin-mysql.conf } userdb { driver = sql args = /etc/dovecot/dovecot-postfixadmin-mysql.conf } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 } } plugin { quota = maildir:User quota }
vi /etc/dovecot/conf.d/10-auth.conf auth_mechanisms = plainをコメントアウト !include auth-system.conf.extをコメントアウト
dovecotのmysql用設定ファイルを作成
vi /etc/dovecot/dovecot-postfixadmin-mysql.conf driver = mysql connect = host=localhost dbname=postfix user=postfix password=**** default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT concat('/home/vusers/', maildir) AS home, 10000 AS uid, 10000 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
doveconf -nで規定値からの変更点のみが表示される。これで設定内容を確認する
postfixからの送信されるバウンス系メールはテンプレート形式で変更できる
bounce_template_file = /etc/postfix/bounce.cf とか
テンプレートファイルが/usr/share/doc/postfix-2.6.6/bounce.cf.defaultにあるのでまずは、こいつをコピーする。そこから編集が始まる。この辺が参考になるかも
今回のQuotaはmaildirsize fileを利用している
ユーザのホームディレクトリ配下にmaildirsizeというファイルが作成される
cat maildirsize 2048000S 524 1 -524 -1 ってな具合 最初の行はQuota値でバイト表記 以降が「バイト数 メール数」となる このファイル自体は5120バイトまでしか拡張できないので 特定のタイミングで「バイト数 メール数」部分が合算される
このファイルはpostfixが対象ユーザにメール配送するタイミングで作成/更新がなされる。 そして、メールクライアントで読み取った後に更新される。 Dovecotの場合、POPであれば即時更新、IMAPでもほぼ同様の動き。 特殊なのが、ごみ箱を空にした時の動きかなぁ。IMAPクライアントを終了させたときにのみ更新されている様子です。
IMAPでのごみ箱「Trash」は扱いが難しいので要注意です。 受信フォルダからゴミ箱に移動する際には、一度メッセージをコピーしてオリジナルを削除する。 つまりこの時点でOver Quotaであればコピーができないのでゴミ箱に移動できない。 つまりメッセージを削除する方法がないって事になる。 Dovecot側ではゴミ箱をQuotaの制限外に設定するか一定量のユーザQuotaとは別のQuotaを仕掛けるかの方法しかないって言ってます。 この時に利用するのが、quota_ruleって事になるんだね…
Dovecot 2.xではPlugin設定のQuotaでmaildirを指定することにより、Maildir++形式であるmaildirsizeファイルでのQuotaがサポートされる。この辺り
postfixAdminの管理者ログインパスワードを忘れた場合、データベース内の情報を書き換えるしかなさげ。 パスワードはCRYPT-MD5で暗号化されてるので、まずphpで暗号化されたパスワード文字列を生成してからsqlで該当部分を更新すればよい。
phpでパスワード文字列生成
phpファイルを作成してもよいけど、まー単純にinteractivelyモードでもよさげ。 ********が設定したいパスワード文字列 php -a php > print(crypt('********')); $1$XXXXXXXX$XXXXXXXXXXXXXXXX php > quit
暗号化されたパスワード文字列をデータベースに突っ込む
テーブル内容を確認してアップデート mysql -u postfix -p postfix Enter password: ******** mysql> select username,password from admin; +------------------------+------------------------------------+ | username | password | +------------------------+------------------------------------+ | admin@e-garakuta.net | $1$YYYYYYYY$YYYYYYYYYYYYYYYYYYYYYY | +------------------------+------------------------------------+ 1 row in set (0.00 sec) mysql> update admin set password='$1$XXXXXXXX$XXXXXXXXXXXXXXXX' where username='admin@e-garakuta.net'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
ちょっと悩んだ動き的なところ
SSL証明書を利用してPOP3S/SMTPS/IMAPS設定を行う
証明書は
/etc/postfix/mail.pem | 証明書 |
/etc/postfix/mail.key | 秘密鍵 |
とする。秘密鍵にはパスフレーズがついていないものとする。
中間証明書とかがあれば、証明書に結合させておく。結合って言っても、中間証明書の内容を証明書に追記しておくだけね。あ、証明書も中間証明書も秘密鍵も全部テキストファイルだから。
/etc/postfix/main.cf
smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/mail.pem smtpd_tls_key_file = /etc/postfix/mail.key smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
/etc/postfix/master.cf
以下の行のコメントアウトを外す smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
/etc/dovecot/conf.d/10-ssl.conf
以下をコメントアウト #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem #ssl_key = </etc/pki/dovecot/private/dovecot.pem
/etc/dovecot/00-base.conf
以下を追記 ssl_cert = </etc/postfix/mail.pem ssl_key = </etc/postfix/mail.key
で、最後にpostfixとdovecotを再開させればOK
ちなみに
プロトコル | ポート番号 |
---|---|
SMTPS | 465 |
IMAPS | 993 |
POP3S | 995 |
ですね。
ドメインクォーター(Domain Quota)について
PostfixAdminやDovecotにはDomain Quotaという文字がところどころ出てくる。 でも実際に設定している事例とかがあまり見つからない。
PostfixAdminはSVNで最新を取得すれば利用できるっぽい。 試したのはr1166 2011-08-05版ね。
config.local.phpのQuota関連部分
$CONF['maxquota'] = '0'; //デフォルト10 MB $CONF[domain_quota_default] = '0'; //デフォルト2048 MB $CONF['quota'] = 'YES'; //デフォルトNO $CONF['domain_quota'] = 'YES' //デフォルトYES $CONF['used_quotas'] = 'YES'; //デフォルトNO $CONF['new_quota_table'] = 'YES'; //デフォルトNO
これで、PostfixAdminにはドメイン一覧に「容量制限(MB)」と「Domain quota(MB)」が表示される。 ユーザ一覧には「容量制限(MB)」が表示される。 Domain quotaはドメイン全体のQuotaサイズを指定する。 ドメインの容量制限はそのドメイン内のメールボックスに設定できる最大サイズを指定する。設定しない場合は0を設定する。
ユーザの容量制限値は
のどちらかを最大値として設定ができる。無制限にする場合は0を設定する。
あ~ややこしや…
発見~。
ドメインをPAから削除した時にquota2テーブルのドメイン行が消えないって問題。それに削除対象ドメイン内にメールアドレスが存在していてそのレコードがquota2テーブルに残っている場合、メールアドレスを削除しないとそのテーブル行が消えない。
PA2.3.1でメールボックスを削除するとquotaとquota2テーブルから該当行が消えるようになったけど、そこまでの実装。
ドメイン行を削除するにはPAのファイルを修正する必要がある
vi delete.php elseif ($fTable == "domain") { authentication_require_role('global-admin'); $fWhere = 'domain'; $result_domain_admins = db_delete ('domain_admins',$fWhere,$fDelete); $result_alias = db_delete ('alias',$fWhere,$fDelete); $result_mailbox = db_delete ('mailbox',$fWhere,$fDelete); $result_alias_domain = db_delete('alias_domain','alias_domain',$fDelete); $result_log = db_delete ('log',$fWhere,$fDelete); if ($CONF['vacation'] == "YES") { $result_vacation = db_delete ('vacation',$fWhere,$fDelete); } if ($CONF['new_quota_table'] == "YES") ←ここから4行追加です! { $result_quota2 = db_delete ('quota2','username',$fDelete); } $result_domain = db_delete ('domain',$fWhere,$fDelete);
これで、ドメインを削除した場合にquota2テーブルからドメイン行は消えるようになる。
まず、Dictionaryの設定
/etc/dovecot/dict-quota.conf
connect = host=localhost dbname=postfix user=postfix password=******** map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages }
/etc/dovecot/conf.d/00-base.conf
plugin { quota2 = dict:User quota::proxy::quota quota = dict:Domain quota:%d:proxy::quota } dict { quota = mysql:/etc/dovecot/dict-quota.conf }
これで、Dovecotを通過したメールデータの情報がquota2テーブルに反映されるようになり quota制限するための現在値を取得できるようになる。
/etc/dovecot/postfixadmin-mysql.conf
driver = mysql connect = host=localhost dbname=postfix user=postfix password=******** default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox \ WHERE username = '%u' AND active = '1' user_query = SELECT concat('/home/vusers/domains/', maildir) AS home, \ 10000 AS uid, 10000 AS gid, \ CONCAT('*:bytes=', mailbox.quota) AS quota2_rule, \ CONCAT('*:bytes=', domain.quota*1024000) AS quota_rule \ FROM mailbox,domain WHERE username = '%u' AND mailbox.active = '1' \ AND domain.domain = '%d' iterate_query = SELECT username FROM mailbox
これで、Dovecotとしてのユーザ認証データ内にユーザのメールボックスクォーターとドメインクォーターを設定することになる。
iterate_query行はデフォルトで組み込まれているユーザ情報検索クエリを上書きするSQL文。 これを記述する事でdoveadm quota -Aが利用できるようになる。
iterate_queryなしの場合 doveadm(root): Error: User listing returned failure doveadm: Error: Failed to iterate through some users となり、表示されない。
容量超過時のメッセージ設定を施す
plugin { quota_exceeded_message = Quota exceeded .(容量オーバーです) }
Quota Warning設定を施す
plugin { quota_warning = storage=95%% quota-warning 95 %u %d quota_warning2 = storage=80%% quota-warning 80 %u %d quota2_warning = storage=95%% quota2-warning 95 %u quota2_warning2 = storage=80%% quota2-warning 80 %u } service quota-warning { executable = script /home/vusers/bin/quota-warning.sh unix_listener quota-warning { user = vusers } } service quota2-warning { executable = script /home/vusers/bin/quota2-warning.sh unix_listener quota2-warning { user = vusers } }
通知用スクリプトの設定
quota-warning.sh #!/bin/sh PERCENT=$1 USER=$2 DOMAIN=$3 cat << EOF | /usr/local/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:Domain quota:noenforcing" From: postmaster Subject: Domain Quota warning Your Domain mailbox is now $PERCENT% full. EOF cat << EOF | /usr/local/libexec/dovecot/dovecot-lda -d admin@$DOMAIN -o "plugin/quota=dict:Domain quota:noenforcing" From: postmaster Subject: Domain Quota warning Your Domain mailbox is now $PERCENT% full. EOF quota2-warning.sh #!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/local/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster Subject: User Quota warning Your mailbox is now $PERCENT% full. EOFquota_とquota2_は、quota設定時にquota rootを複数設定した場合のそれぞれに対応することが可能なので同じように定義するのです。
ここまできたら、ClamAVとSpamAssassinでウィルスチェックとスパムチェックまでやってしまおうおう。
インストールは単純
yum install -y clamd amavisd-new spamassassin
clamd周り
cd /etc cp clamd.conf clamd.conf.org sed -i "s/^TCPSocket 3310/#TCPSocket 3310/g" clamd.conf sed -i "s/^User clam/#User clam/g" clamd.conf chkconfig clamd on freshclam
amavisd周り
cd /etc/amavisd cp amavisd.conf amavisd.conf touch blacklist whitelist vi amavisd.conf $mydomain = '自ドメイン名'; $log_level = 1; @local_domains_maps = (1); $sa_tag_level_deflt = 0; $sa_tag2_level_deflt = 5.0; $sa_kill_level_deflt = -999; $sa_spam_subject_tag = '[SPAM] '; ←修正 $final_virus_destiny = D_PASS; ←修正 $final_spam_destiny = D_PASS; ←修正 # qr'^\.(exe-ms|dll)$', ←コメントアウト # [ qr'^\.(rpm|cpio|tar)$' => 0 ], ←コメントアウト # qr'.\.(pif|scr)$'i, ←コメントアウト # qr'.\.(exe|vbs|pif|scr|cpl)$'i, ←コメントアウト ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], ←修正 以下は追記 @whitelist_sender_maps = ( read_hash('/etc/amavisd/whitelist') ); @blacklist_sender_maps = ( read_hash('/etc/amavisd/blacklist') ); chkconfig amavisd on
SpamAssassin周り
cd /etc/mail/spamassassin mv local.cf local.cf.org cp v310.pre v310.pre.org sed -i "s/^#loadplugin Mail::SpamAssassin::Plugin::TextCat/loadplugin Mail::SpamAssassin::Plugin::TextCat/g" v310.pre vi spamassassin-update chmod +x spamassassin-update sh spamassassin-update mv spamassassin-update /etc/cron.daily/spamassassin-updateはここに保管spamassassin-update.txt
Postfix周り
cd /etc/postfix echo 'content_filter=smtp-amavis:[127.0.0.1]:10024' >> main.cf vi master.cfで以下追加 smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000
で仕上げ。
service clamd start service amavisd start service postfix restart service dovecot restart
ちゃんとテストしておくように。
SpamAssassinのテストはGTUBEと呼ばれるコードを本文に記述して通過させるとスコア1000となり動作確認できる。
GTUBEコード XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
ClamAVはEicarテストウィルスファイルを添付させてメールを通過させると動作確認できる。
ただ通常テストを行おうとする端末上のウィルス対策ソフトのリアルタイムスキャンに検知されるので
ちゃんと停止してテストすること。
テキストで以下の文字列を入力して拡張子を.comや.exeにすればOK X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*