SpamSnake · 7 min read · Dec 25, 2025

完璧なSpamSnake - Ubuntu Jeos 10.10 Maverick Meerkat - ページ 4

14. KAM

vi /etc/cron.daily/kam.sh

以下の内容を追加し、

chmod +x /etc/cron.daily/kam.sh
#!/bin/bash
   
 # Andrew MacLachlanによって修正されたオリジナルバージョン
 # 初回の再起動失敗時に追加のMailScanner再起動を追加
 # 通常(成功)動作のためにスクリプトをサイレントで実行
 # UPDATEMAXDELAYを600から900に増加
 
 # ウイルス更新を広めるために、この値までのランダムな遅延を挿入
 # 1800秒 = 30分。
 # これを0に設定すると無効になります。
 UPDATEMAXDELAY=0
 if [ -f /opt/MailScanner/var/MailScanner ] ; then
 . /opt/MailScanner/var/MailScanner
 fi
 export UPDATEMAXDELAY
 
 if [ "x$UPDATEMAXDELAY" = "x0" ]; then
 :
 else
 logger -p mail.info -t KAM.cf.sh $UPDATEMAXDELAY秒までcronジョブを遅延
 perl -e "sleep int(rand($UPDATEMAXDELAY));"
 fi
 
 # JKF Fetch KAM.cf
 #echo KAM.cfを取得中...
 cd /etc/mail/spamassassin
 rm -f KAM.cf
 wget -O KAM.cf http://www.peregrinehw.com/downloads/SpamAssassin/contrib/KAM.cf > /dev/null 2>&1
 if [ "$?" = "0" ]; then
 #echo 完了し、何かを取得しました
 if ( tail -10 KAM.cf | grep -q '^#.*EOF' ); then
 # echo 成功したのでバックアップを作成
 cp -f KAM.cf KAM.cf.backup
 else
 echo ERROR: EOFマーカーが見つかりませんでした
 cp -f KAM.cf.backup KAM.cf
 fi
 else
 echo 正常に完了しませんでした
 cp -f KAM.cf.backup KAM.cf
 fi
 #echo MailScannerとSpamAssassinの設定ルールを再読み込み中
 /etc/init.d/mailscanner reload > /dev/null 2>&1
 if [ $? != 0 ] ; then
 echo "MailScannerの再読み込みに失敗しました - 再試行中..."
 /etc/init.d/mailscanner force-reload
 if [ $? = 0 ] ; then
 echo "MailScannerの再読み込みに成功しました。"
 else
 echo "MailScannerを停止中..."
 /etc/init.d/mailscanner stop
 echo "1分待機中..."
 perl -e "sleep 60;"
 echo "MailScannerを起動しようとしています..."
 /etc/init.d/mailscanner start
 fi
 
 fi 

15. ScamNailer

vi /usr/sbin/update_scamnailer

chmod +x /usr/sbin/update_scamnailer

注: *内容は scamnailer.docにあります。)

それをcronに追加:

@daily /usr/sbin/update_scamnailer &> /dev/null #Scamnailerを更新

16. FireholでSpamSnakeをファイアウォール

はじめに

Fireholは、状態を持つiptablesパケットフィルタリングファイアウォールコンフィギュレータです。抽象化されており、拡張可能で、簡単かつ強力です。あらゆる種類のファイアウォールを処理できますが、最も重要なのは、あなたが考えるのと同じ方法で構成する手段を提供することです。

Fireholのインストール

apt-get install firehol

Fireholの設定:

vi /etc/default/firehol

そして以下を変更:

START_FIREHOL=YES
vi /etc/firehol/firehol.conf

そして以下を追加:

version 5
   # すべてのクライアントトラフィックを任意のインターフェースで受け入れる
   interface any internet
   protection strong
   server "icmp ping ICMP ssh http https telnet webmin dns dcc echo smtp" accept
 client all accept

これは、上記のサービスに関連しないすべての着信接続をフィルタリングします。より失礼になりたい場合は、’protection strong’の後に以下を追加してドロップできます: policy drop

vi /usr/sbin/get-iana

以下の内容で

chmod +x /usr/sbin/get-iana
#!/bin/bash
 # $Id: get-iana.sh,v 1.13 2010/09/12 13:55:00 jcb Exp $
   #
 # $Log: get-iana.sh,v $
 # Revision 1.13 2010/09/12 13:55:00 jcb
 # 最新のIANA予約形式に更新。
 #
 # Revision 1.12 2008/03/17 22:08:43 ktsaou
 # 最新のIANA予約形式に更新。
 #
 # Revision 1.11 2007/06/13 14:40:04 ktsaou
 # * 空のログメッセージ *
 #
 # Revision 1.10 2007/05/05 23:38:31 ktsaou
 # 外部定義のサポートを追加:
 #
 # RESERVED_IPS
 # PRIVATE_IPS
 # MULTICAST_IPS
 # UNROUTABLE_IPS
 #
 # 同じ名前のファイルを/etc/firehol/に配置します。
 # RESERVED_IPSのみが必須です(fireholはそれがないと文句を言いますが、
 # それがなくても動作します)、また、fireholがどれだけ古いかを確認する唯一のファイルでもあります。
 # 90日以上古い場合、fireholは再度文句を言います。
 #
 # 提供されたget-iana.shスクリプトを変更してRESERVED_IPSファイルを生成します。
 # FireHOLは、ファイルが欠落しているか、古すぎる場合にこのスクリプトを使用するように指示します。
 #
 # Revision 1.9 2007/04/29 19:34:11 ktsaou
 # * 空のログメッセージ *
 #
 # Revision 1.8 2005/06/02 15:48:52 ktsaou
 # 127.0.0.1をRESERVED_IPSに含めることを許可
 #
 # Revision 1.7 2005/05/08 23:27:23 ktsaou
 # 現在のIANA予約にRESERVED_IPSを更新。
 #
 # Revision 1.6 2004/01/10 18:44:39 ktsaou
 # http://www.vergenet.net/linux/aggregate/を使用してPRIVATE_IPSをさらに最適化し、削減。
 #
 # 提供されたget-iana.shは、パスに.aggregate.が見つかると使用します。
 # (aggregateは、Gentooにインストールされたときのこのプログラムの名前です)
 #
 # Revision 1.5 2003/08/23 23:26:50 ktsaou
 # バグ #793889:
 # #!/bin/shを#!/bin/bashに変更して、FireHOLが
 # bashが/bin/shにリンクされていないシステムで実行できるようにします。
 #
 # Revision 1.4 2002/10/27 12:44:42 ktsaou
 # CVSテスト
 #
 #
 # IANAによるIPv4アドレス空間の割り当てをダウンロードし、
 # すべての予約されたアドレス空間のリストを作成するプログラムです。
 #
 IPV4_ADDRESS_SPACE_URL="http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt"
 # プログラムは、ファイル内のすべての行を一致させます。
 # 数字で始まり、スラッシュがあり、
 # その後に別の数字が続く行に対して、次のパターンも一致します。
 IANA_RESERVED="(RESERVED|UNALLOCATED)"
 # 上記で一致した行を無視するために
 # (つまり、RESERVED_IPSに含めない)は?
 #IANA_IGNORE="(Multicast|Private use|Loopback|Local  Identification)"
 IANA_IGNORE="Multicast"
 tempfile="/tmp/iana.$$.$RANDOM"
 AGGREGATE="`which aggregate 2>/dev/null`"
   if [ -z "${AGGREGATE}" ]
   then
   AGGREGATE="`which aggregate 2>/dev/null`"
   fi
 if [ -z "${AGGREGATE}" ]
   then
   echo >&2
   echo >&2
   echo >&2 "WARNING"
   echo >&2 "'aggregate'をインストールしてIPのリストを縮小してください。"
   echo >&2
   echo >&2
   fi
 echo >&2
   echo >&2 "IANA IPv4アドレス空間を取得中、ソース:"
   echo >&2 "${IPV4_ADDRESS_SPACE_URL}"
   echo >&2
 wget -O - -proxy=off "${IPV4_ADDRESS_SPACE_URL}" |\
   egrep " *[0-9]+/[0-9]+.*${IANA_RESERVED}" |\
   egrep -vi "${IANA_IGNORE}" |\
   sed -e 's:^ *\([0-9]*/[0-9]*\).*:\1:' |\
   (
 while IFS="/" read range net
   do
   if [ ! $net -eq 8 ]
   then
   echo >&2 "ネットワークマスクが$netビットのため処理できません ($range/$net)"
   continue
   fi
 first=`echo $range | cut -d '-' -f 1`
   first=`expr $first + 0`
 last=`echo $range | cut -d '-' -f 2`
   last=`expr $last + 0`
 x=$first
   while [ ! $x -gt $last ]
   do
   # test $x -ne 127 && echo "$x.0.0.0/$net"
   echo "$x.0.0.0/$net"
   x=$[x + 1]
   done
   done
   ) | \
   (
   if [ ! -z "${AGGREGATE}" -a -x "${AGGREGATE}" ]
   then
   "${AGGREGATE}"
   else
   cat
   fi
   ) >"${tempfile}"
 echo >&2
   echo >&2
   echo >&2 "次の予約されたIP範囲が見つかりました:"
   printf "RESERVED_IPS=\"
   i=0
   for x in `cat ${tempfile}`
   do
   i=$[i + 1]
   printf "${x} "
   done
   printf "\"
   if [ $i -eq 0 ]
   then
   echo >&2
   echo >&2
   echo >&2 "予約されたIPを見つけることに失敗しました。"
   echo >&2 "ファイル形式が変更されたか、URLを取得できません。"
   echo >&2
 rm -f ${tempfile}
   exit 1
   fi
   echo >&2
   echo >&2
   echo >&2 "取得したリストと/etc/firehol/RESERVED_IPSにインストールされたリストの違い:"
 echo >&2 "# diff /etc/firehol/RESERVED_IPS  ${tempfile}"
   diff /etc/firehol/RESERVED_IPS ${tempfile}
 if [ $? -eq 0 ]
   then
   echo >&2
   echo >&2 "違いは見つかりませんでした。"
   echo >&2
 rm -f ${tempfile}
   exit 0
   fi
 echo >&2
   echo >&2
   echo >&2 "このリストを/etc/firehol/RESERVED_IPSに保存しますか"
   echo >&2 "これによりFireHOLは今後自動的に使用しますか?"
   echo >&2
   while [ 1 = 1 ]
   do
   printf >&2 "はいまたはいいえ > "
   read x
 case "${x}" in
   yes) cp -f /etc/firehol/RESERVED_IPS /etc/firehol/RESERVED_IPS.old  2>/dev/null
   cat "${tempfile}" >/etc/firehol/RESERVED_IPS || exit 1
   echo >&2 "新しいRESERVED_IPSが'/etc/firehol/RESERVED_IPS'に書き込まれました。"
   echo "Fireholは再起動します"
   sleep 3
   /etc/init.d/firehol restart
   break
   ;;
 no)
   echo >&2 "何も保存されていません。"
   break
   ;;
 *) echo >&2 "'${x}'を理解できません。"
   ;;
 esac
   done
 rm -f ${tempfile}
vi /usr/sbin/update-iana

以下の内容で

chmod +x /usr/sbin/update-iana
#!/bin/sh
 /usr/sbin/get-iana  < /etc/firehol/get-iana-answerfile
vi /etc/firehol/get-iana-answerfile

以下の内容で:

yes

RESERVED_IPSを更新するためにスクリプトを実行:

/usr/sbin/update-iana

これで、サーバーは許可したサービスの接続のみを受け入れるように設定されています。

それをcronに追加:

@monthly /usr/sbin/update-iana &> /dev/null #firehol予約ipsを更新

17. リレー受信者の適用

以下の指示は、Microsoft Exchange 2000またはMicrosoft Exchange 2003を使用している人向けです。

このページでは、メールゲートウェイを構成して、定期的にExchangeシステムから有効な受信者のメールアドレスのリストを取得する方法を説明します。これにより、無効なアドレスに宛てられたメールを自動的に拒否するようにサーバーを構成できます。これにより、非配信レポートを処理する必要がなくなり、Exchangeサーバーの負荷が軽減され、Postfixサーバーの負荷も軽減されます。

依存関係のインストール

perlモジュールNet::LDAPをインストール:

perl -MCPAN -e shell  
install Net::LDAP
vi /usr/bin/getadsmtp.pl

以下の内容で:

#!/usr/bin/perl -T -w
   # このスクリプトは、Active DirectoryからすべてのユーザーのSMTPアドレスを取得し
   # (プライマリおよびセカンダリのメールアドレスを含む)
   # Postfixがrelay_recipient_mapsで使用する形式"[email protected] OK"でリストします。
   # 上記のperlのパスを再確認してください。
   # これにはNet::LDAPがインストールされている必要があります。インストールするには、シェルで
   # "perl -MCPAN -e shell"と入力し、次に"install Net::LDAP"と入力します。
   use Net::LDAP;
   use Net::LDAP::Control::Paged;
   use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );
   # 出力のパス/ファイルを入力
   $VALID = "/etc/postfix/relay_recipients";
   open VALID, ">$VALID" or die "CANNOT OPEN $VALID $!";
   # Active DirectoryドメインコントローラーのFQDNを以下に入力
   $dc1="domaincontroller1.example.com";
   $dc2="domaincontroller2.example.com";
   # ユーザーベースのLDAPコンテナを入力。
   # 構文はCN=Users,dc=example,dc=com
   # これはWindows 2000サポートツールをインストールして
   # ADSI Editを実行することで見つけることができます。
   # ADSI Editで「Domain NC [domaincontroller1.example.com]」を展開し、
   # 例えば、DC=example,DC=com(これがベースです)を確認します。
   # ユーザーコンテナは、右ペインにCN=Usersとして指定されます。
   # スキーマによって異なります(これがコンテナです)。
   # ADSI Editでユーザーフォルダーの「プロパティ」をクリックして
   # 「パス」値を確認することで再確認できます。
   # LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com
   # これは$hqbase="cn=Users,dc=example,dc=com"になります。
   # 注: $hqbase="dc=example,dc=com"を使用することもできます。
   $hqbase="cn=Users,dc=example,dc=com";
   # 有効なユーザーのユーザー名とパスワードを入力
   # usernameはcn=username,cn=Users,dc=example,dc=comの形式
   # ユーザーのパスワードが期限切れにならないようにしてください。このユーザーは
   # 特別な権限を必要としません。
   # ADSI Editでユーザーの「プロパティ」をクリックして
   # 「パス」値を確認することで再確認できます。
   # LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com
   # これは$user="cn=user,cn=Users,dc=example,dc=com"になります。
   # 注: UPNログインを使用することもできます: "user\@example.com"
   $user="cn=user,cn=Users,dc=example,dc=com";
   $passwd="password";
   # Active Directoryドメインコントローラーに接続
   $noldapserver=0;
   $ldap = Net::LDAP->new($dc1) or
   $noldapserver=1;
   if ($noldapserver == 1)  {
   $ldap = Net::LDAP->new($dc2) or
   die "指定されたドメインコントローラーへの接続エラー $@ \n";
   }
   $mesg = $ldap->bind ( dn => $user,
   password =>$passwd);
   if ( $mesg->code()) {
   die ("エラー:", $mesg->error_text((),"\n"));
   }
   # 各ページラウンドで取得するLDAPクエリ結果の数
   # Active Directory用に1000未満に設定
   $page = Net::LDAP::Control::Paged->new( size => 990 );
   @args = ( base     => $hqbase,
   # これを調整して、連絡先、パブリックフォルダーなどのオブジェクトを取得します。
   # メールを持つユーザーのための最小限のフィルターは:
   # filter => "(&(sAMAccountName=*)(mail=*)))"
   filter => "(& (mailnickname=*) (| (&(objectCategory=person)
   (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))
   (&(objectCategory=person)(objectClass=user)(|(homeMDB=*)
   (msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact))
   (objectCategory=group)(objectCategory=publicFolder) ))",
   control  => [ $page ],
   attrs  => "proxyAddresses",
   );
   my $cookie;
   while(1) {
   # 検索を実行
   my $mesg = $ldap->search( @args );
   # proxyAddresses属性の結果をフィルタリング
   foreach my $entry ( $mesg->entries ) {
   my $name = $entry->get_value( "cn" );
   # LDAP属性は複数値を持つため、各値を印刷する必要があります。
   foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) {
   # 行が次のいずれかで始まるかテスト:
   # proxyAddresses: [smtp|SMTP]:
   # また、この開始文字列を破棄して、$mailが他の文字なしのアドレスのみになるようにします...
   if ( $mail =~ s/^(smtp|SMTP)://gs ) {
   print VALID $mail." OK\n";
   }
   }
   }
   # LDAP_SUCCESSのみに続行
   $mesg->code and last;
   # ページ制御からクッキーを取得
   my($resp)  = $mesg->control( LDAP_CONTROL_PAGED ) or last;
   $cookie    = $resp->cookie or last;
   # ページ制御にクッキーを設定
   $page->cookie($cookie);
   }
   if ($cookie) {
   # 異常終了したので、サーバーにもうこれ以上は望まないことを知らせます
   $page->cookie($cookie);
   $page->size(0);
   $ldap->search( @args );
   # ここで不幸に死ぬのも良いアイデアです
   die("LDAPクエリが成功しませんでした");
   }
   # 出力ファイルに追加の制限、ユーザーなどを追加します。
   #print VALID "user\@domain1.com OK\n";
   #print VALID "user\@domain2.com 550 ユーザーが不明です。\n";
   #print VALID "domain3.com 550 ユーザーが存在しません。\n";
 close VALID;

次に、ファイルの権限を設定して実行可能にします:

chmod +x /usr/bin/getadsmtp.pl

ファイルを編集して特定のドメインにカスタマイズします。ファイルは読み取り専用のため、viで:w!を使用してファイルを保存する必要があります。

  1. $dc1と$dc2をドメインコントローラーの完全修飾ドメイン名またはIPアドレスに設定します。
  2. $hqbaseをメールアカウントのメールアドレスを取得したいコンテナまたは組織単位のLDAPパスに設定します。
  3. $userと$passwdを、この情報にアクセスするために使用するユーザーアカウントを示すように設定します。このアカウントはドメインのメンバーである必要があるため、特にこのためのアカウントを設定することをお勧めします。

スクリプトを実行してみてください。正しく動作すれば、/etc/postfix/relay_recipientsが作成されます。

PostfixサーバーがActive Directoryコントローラーからファイアウォールで分離されている場合は、PostfixサーバーからADCsへのTCPポート389を開く必要があります。

getadsmtp.pl

この時点で、/etc/postfix/relay_recipientsを編集して、不要なメールアドレスを削除することをお勧めします。このスクリプトはすべてをインポートします。

ハッシュDBを作成するためにファイルをPostmap

postmap /etc/postfix/relay_recipients  
postfix reload

最後に、/etc/postfix/relay_recipients.dbファイルを定期的に更新して構築するためのcronジョブを設定することをお勧めします。/usr/bin/update-relay-recipients.shというスクリプトを作成できます:(オプション)

vi /usr/bin/update-relay-recipients.sh

以下の内容で

chmod +x /usr/bin/update-relay_recipients.sh
#!/bin/sh
/usr/bin/getadsmtp.pl
postmap /etc/postfix/relay_recipients
postfix reload

次の内容が/etc/postfix/main.cfファイルに含まれていることを確認してください:

relay_recipient_maps = hash:/etc/postfix/relay_recipients

それをcronに追加:

30 2 * * * /usr/bin/update-relay-recipients.sh #Active Directoryアドレスでrelay_recipientsを同期

:このcronジョブは毎日午前2時30分にデータベースファイルを更新します。新しいメールユーザーをシステムに追加する頻度に応じて、もっと頻繁に実行するか、実行しないかを選択できます。

18. Webminのインストール(オプション):

apt-get install perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions  
cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/universe/libm/libmd5-perl/libmd5-perl_2.03-1_all.deb  
dpkg -i libmd5-perl_2.03-1_all.deb  
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.520/webmin_1.520_all.deb  
dpkg --install webmin_1.520_all.deb

19. alterMIMEで送信メールに自動的に免責事項を追加(オプション)

このチュートリアルでは、alterMIMEをインストールして使用する方法を示します。alterMIMEは、メールに自動的に免責事項を追加できるツールです。この記事では、UbuntuでPostfixフィルターとしてインストールする方法を説明します。

alterMIMEのインストール:

apt-get install altermime

次に、ユーザーフィルターを作成し、ホームディレクトリを/var/spool/filterに設定します - alterMIMEはそのユーザーとして実行されます:

useradd -r -c "Postfix Filters" -d /var/spool/filter filter  
mkdir /var/spool/filter  
chown filter:filter /var/spool/filter  
chmod 750 /var/spool/filter

その後、alterMIMEを実行する/etc/postfix/disclaimerというスクリプトを作成します。UbuntuのalterMIMEパッケージには、単に/etc/postfix/disclaimerにコピーできるサンプルスクリプトが付属しています:

cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer  
chgrp filter /etc/postfix/disclaimer  
chmod 750 /etc/postfix/disclaimer

このスクリプトの問題は、着信メールと送信メールを区別しないことです - すべてのメールに免責事項を追加します。通常、免責事項は送信メールのみに必要であり、さらにすべての送信者アドレスに対して必要ではありません。したがって、/etc/postfix/disclaimerスクリプトを少し修正しました - それについては後で説明します。

今、/etc/postfix/disclaimer_addressesというファイルを作成し、alterMIMEが免責事項を追加すべきすべての送信者メールアドレス(1行ごとに)を保持します:

vi /etc/postfix/disclaimer_addresses
[email protected]
[email protected]
[email protected]

次に、/etc/postfix/disclaimerを開いて以下のように修正します(変更した部分をマークしました):

vi /etc/postfix/disclaimer
#!/bin/sh
# これをローカライズします。
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
####### オリジナルスクリプトから変更 #######
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses
####### オリジナルスクリプトから変更終了 #######
# からの終了コード
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# 完了時または中止時にクリーンアップ。
trap "rm -f in.$$" 0 1 2 3 15
# 処理を開始します。
cd $INSPECT_DIR || { echo $INSPECT_DIRは存在しません; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo メールをファイルに保存できません; exit $EX_TEMPFAIL; }
####### オリジナルスクリプトから変更 #######
# Fromアドレスを取得
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
  /usr/bin/altermime --input=in.$$ \
                   --disclaimer=/etc/postfix/disclaimer.txt \
                   --disclaimer-html=/etc/postfix/disclaimer.txt \
                   --xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \
                    { echo メッセージコンテンツが拒否されました; exit $EX_UNAVAILABLE; }
fi
####### オリジナルスクリプトから変更終了 #######
$SENDMAIL "$@" 

次に、免責事項テキストを保持するテキストファイル/etc/postfix/disclaimer.txtを作成する必要があります。UbuntuのalterMIMEパッケージには、今のところ使用できるサンプルテキストが付属しています(もちろん、必要に応じて変更できます):

cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt

最後に、Postfixに/etc/postfix/disclaimerスクリプトを使用して送信メールに免責事項を追加するように指示する必要があります。/etc/postfix/master.cfを開き、smtp行に-o content_filter=dfilt:を追加します:

vi /etc/postfix/master.cf
#
# Postfixマスタープロセス構成ファイル。ファイルの形式の詳細は、
# master(5)マニュアルページを参照してください(コマンド: "man 5 master")。
#
# ========================================================================== 
# サービスタイプ  プライベート  非特権  chroot  ウェイクアップ  最大プロセス  コマンド + 引数
#               (はい)   (はい)   (はい)   (決して) (100)
# ========================================================================== 
smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=dfilt:
[...] 

同じファイルの最後に、次の2行を追加します:

[...] 
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} 

その後、Postfixを再起動します:

/etc/init.d/postfix restart

これで完了です!これで、/etc/postfix/disclaimer_addressesにリストされているアドレスから送信された送信メールに免責事項が追加されるはずです。

20. スクリーンショット

おめでとうございます

これで、すべての機能を備えた完全なSpamSnakeが完成しました :-)

Share: X/Twitter LinkedIn

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

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