設定ガイド · 2 min read · Sep 28, 2025

完璧なSpamSnake - Ubuntu Jaunty Jackalope - ページ 5

17.11 権限を設定してすべてをまとめる

chown -R postfix:www-data /var/spool/MailScanner   
chown -R postfix:www-data /var/lib/MailScanner   
chown -R postfix:www-data /var/spool/postfix/hold   
chmod -R ug+rwx /var/spool/postfix/hold   
chmod -R u+rwx,g+rx /var/spool/MailScanner/quarantine

最後に、MailScannerを再起動することを確認してください:

killall mailscanner
check_mailscanner

セットアップをテストします:

spamassassin -x -D -p /opt/MailScanner/etc/spam.assassin.prefs.conf --lint

次のような行を確認してください:

debug: bayes: Database connection established   
debug: bayes: found bayes db version 3   
debug: bayes: Using userid: 2

DCC、Pyzor、Razorのプラグインが読み込まれているという行が表示され、エラーが表示されないことを確認してください。

この部分を終えるにあたり、クロンジョブを追加してクリーンアップ/更新を行う必要があります。MailScannerインストールスクリプトが終了した後にこのメッセージを見たかもしれません。

まず、conf.phpを編集し、conf.phpの’QUARANTINE_DAYS_TO_KEEP’を設定し、/usr/src/mailwatch-1.0.4/tools/db_cleanの次の行を変更します:

#!/usr/bin/php -q
require('/var/www/mailscanner/functions.php');

クアランティンクリーンアップスクリプトをインストールします:

cp /usr/src/mailwatch-1.0.4/tools/quarantine_maint.php /usr/bin/quarantine_maint.php   
cp /usr/src/mailwatch-1.0.4/tools/db_clean.php /usr/bin/db_clean.php   
chmod +x /usr/bin/quarantine_maint.php   
chmod +x /usr/bin/db_clean.php

実行します

crontab -e

次の内容を追加します:

15 10 * * 2 /usr/bin/quarantine_maint.php --clean &> /dev/null
58 23 * * * /usr/bin/db_clean.php &> /dev/null

MailScannerがインストールしたクロンスクリプト/etc/cron.daily/clean.quarantineを無効にします(注意: clean.quarantineスクリプトが存在する場合のみこれを行ってください)。

$disabled = 1; 

17.12 システムを再起動

reboot

mail.logを確認してください(tail –f /var/log/mail.log)し、次のような内容が表示されるはずです:

Jun 13 12:18:23 hoshi MailScanner[26388]: MailScanner E-Mail Virus Scanner version 4.20-3 starting...   
Jun 13 12:18:24 hoshi MailScanner[26388]: Config: calling custom init function MailWatchLogging   
Jun 13 12:18:24 hoshi MailScanner[26388]: Initialising database connection   
Jun 13 12:18:24 hoshi MailScanner[26388]: Finished initialising database connection

おめでとうございます - これでMailScannerがMySQLにログを記録するようになりました。

17.13 MailWatchインターフェースをテスト

ブラウザをhttp:///mailscanner/に向けてください - ユーザー名とパスワードを求められます - 以前に作成したMailWatchウェブユーザーの詳細を入力してください。そうすれば、MailScannerによって処理された最後の50件のメッセージのリストが表示されるはずです。

メールが表示されない場合は、次の権限を設定する必要があるかもしれません:

chgrp -R www-data /var/spool/MailScanner

lintテストでエラーを防ぐために次のディレクトリを作成する必要があるかもしれません:

mkdir /var/www/.spamassassin

17.14 SpamAssassinルールテーブルを更新

MailWatchは、’メッセージ詳細’ページに表示されるすべてのSpamAssassinルールと説明のリストを保持しています - 説明を表示するには、新しいルールを追加するたびにアップデーターを実行する必要があります。 ‘ツール/リンク’メニューをクリックし、’SpamAssassinルールの説明を更新’を選択し、’今すぐ実行’をクリックします。

17.15 GeoIPデータベースを更新

/var/www/mailscanner/geoip_update.phpのこの行を次のように変更します:

dbquery("LOAD DATA LOCAL INFILE 

*注: php.iniでallow_url_fopen = Onが設定されていることを確認してください。

‘ツール/リンク’メニューをクリックし、’GeoIPデータベースを更新’を選択し、’今すぐ実行’をクリックします。

17.16 ホワイトリスト/ブラックリストでワイルドカードを許可する修正

/opt/MailScanner/lib/MailScanner/CustomFunctions/SQLBlackWhiteList.pmのreturn 1セクションの最後に次の内容を追加します:

return 1 if $BlackWhite->{$to}{'*@'.$fromdomain};
return 1 if $BlackWhite->{$to}{'*@*.'.$fromdomain};
return 1 if $BlackWhite->{$todomain}{'*@'.$fromdomain};
return 1 if $BlackWhite->{$todomain}{'*@*.'.$fromdomain};
return 1 if $BlackWhite->{'default'}{'*@'.$fromdomain};
return 1 if $BlackWhite->{'default'}{'*@*.'.$fromdomain};

17.17 メッセージ操作がメッセージを見つけられない修正

/var/www/mailscanner/do_message_ops.phpファイルの次の内容を変更します:

$id = $Regs[1]; 

$id = str_replace("_", ".",$Regs[1]); 

17.18 スパムメッセージを解放する

MailWatchがスパムメッセージを再処理せずに解放できるように、MailWatch/Listインターフェースに127.0.0.1をホワイトリスト項目として追加します。これらのオプションを設定した後、MailScannerを再起動することを確認してください。以下は私のエントリの例です。

| 127.0.0.1 | default | Delete |

17.19 メッセージ操作でのメッセージの複数回解放を許可する修正

/var/www/mailscanner/do_message_ops.phpを編集し、次の変更を行います:

   case 'F':
    $type='forget';
    break;
   case 'R':
    $type='release';
    break;
   default:
    continue;
    break;

次に、次のセクションを見つけて次のように変更します:

$itemnum = array($num);
   if ($type == 'release'){
      if($quarantined = quarantine_list_items($id,RPC_ONLY)) {
         $to = $quarantined[0]['to'];
       }
       echo "$id$type" . quarantine_release($quarantined, $itemnum, $to, RPC_ONLY) . "\n";
    } else {
     echo "$id$type" . quarantine_learn($items, $itemnum, $type, RPC_ONLY) . "\n";
     }
   }
  echo "\n";
      }
    }
  }
}
echo "  \n";

次に、/var/www/mailscanner/functions.phpファイルを編集し、次のように変更します:

$fieldname[$f] = "Ops
S  H  F";

$fieldname[$f] = "Ops
S  H  F  R";

次に、次のように変更します:

array_unshift($row, "   "); 

を:

array_unshift($row, "    "); 

次に、ラジオボタンを処理するjavascript関数のブロックを見つけます。次のように3番目の値を追加します:

echo "function SetRadios(p) {\n";
echo " var val;\n";
echo " if (p == 'S') {\n";
echo "  val = 0;\n";
echo " } else if (p == 'H') {\n";
echo "  val = 1;\n";
echo " } else if (p == 'F') {\n";
echo "  val = 2;\n";
echo " } else if (p == 'R') {\n";
echo "  val = 3;\n";
echo " } else if (p == 'C') {\n";
echo "  ClearRadios();\n";

次に、ラジオボタンのテキストを追加します:

echo "  S";
echo "  H";
echo "  F";
echo "  R";

最後に、次のように変更します:

echo "

S = Spam   H = Ham   F = Forget\n";

を:

echo "

S = Spam   H = Ham   F = Forget   R = Release\n";

17.20 MailScannerを停止する際の自動コミットエラーを修正するパッチ

MailWatch.pmの80行目を次のように編集します:

$dbh = DBI->connect("DBI:mysql:database=$db_name;host=$db_host", $db_user, $db_pass, {PrintError => 0, AutoCommit => 0}); 

*注: これにより接続時に自動コミットがオフになり、閉じるときのコミット行がエラーを引き起こさないようになります。

18. SPFをインストールして設定

postfix-policyd-spf-perlパッケージは、Mail::SPFおよびNetAddr::IP Perlモジュールに依存しています。

次のように、/usr/src/ディレクトリにpostfix-policyd-spf-perlをダウンロードし、/usr/lib/postfix/ディレクトリにインストールする必要があります:

cd /usr/src   
wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.005.tar.gz   
tar xvfz postfix-policyd-spf-perl-2.005.tar.gz   
cd postfix-policyd-spf-perl-2.005   
cp postfix-policyd-spf-perl /usr/lib/postfix/policyd-spf-perl

次に、/etc/postfix/master.cfを編集し、最後に次のスタンザを追加します:

policy unix - n n - - spawn
   user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl

(user=nobodyの前の空白は重要で、Postfixがこの行が前の行に属することを認識します!)

次に、/etc/postfix/main.cfを開き、smtpd_recipient_restrictionsディレクティブを検索します。このディレクティブにはreject_unauth_destinationが含まれている必要があり、reject_unauth_destinationのすぐ後にcheck_policy_service unix:private/policyを追加します:

[...]
smtpd_recipient_restrictions =
[...]
   reject_unauth_destination
   check_policy_service unix:private/policy
[...]

reject_unauth_destinationの後にcheck_policy_serviceを指定することが重要です。そうしないと、システムがオープンリレーになる可能性があります!

次に、Postfixを再起動します:

/etc/init.d/postfix restart

これで完了です。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。