今から2週間、自分のアドレスから送信されたスパムメールを受信し続けます。
次に例を示します。
Apr 2 10:15:13 hostname postfix/smtpd[28874]: warning: hostname 212.156.246.74.static.turktelekom.com.tr does not resolve to address 212.156.246.74
Apr 2 10:15:13 hostname postfix/smtpd[28874]: connect from unknown[212.156.246.74]
Apr 2 10:15:14 hostname postfix/smtpd[28874]: 750991E018: client=unknown[212.156.246.74]
Apr 2 10:15:16 hostname postfix/cleanup[28880]: 750991E018: message-id=<[email protected]>
Apr 2 10:15:17 hostname opendkim[14624]: 750991E018: [212.156.246.74] [212.156.246.74] not internal
Apr 2 10:15:17 hostname opendkim[14624]: 750991E018: not authenticated
Apr 2 10:15:17 hostname opendkim[14624]: 750991E018: no signature data
Apr 2 10:15:17 hostname postfix/qmgr[19733]: 750991E018: from=<[email protected]>, size=3207, nrcpt=1 (queue active)
Apr 2 10:15:17 hostname dovecot: lda([email protected]): msgid=<[email protected]>: saved mail to INBOX
Apr 2 10:15:17 hostname postfix/pipe[28882]: 750991E018: to=<[email protected]>, relay=dovecot, delay=2.7, delays=2.7/0.01/0/0.05, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr 2 10:15:17 hostname postfix/qmgr[19733]: 750991E018: removed
Apr 2 10:15:18 hostname postfix/smtpd[28874]: disconnect from unknown[212.156.246.74]
私はこれらの制限を持っています:
smtpd_helo_required = yes
smtpd_client_restrictions = reject_rbl_client all.spam-rbl.fr
smtpd_sender_restrictions = permit_mynetworks permit_sasl_authenticated
smtpd_recipient_restrictions =
reject_unknown_recipient_domain
reject_non_fqdn_recipient
reject_unlisted_sender
permit_mynetworks
reject_authenticated_sender_login_mismatch
permit_sasl_authenticated
reject_unauth_destination
reject_unauth_pipelining
reject_non_fqdn_sender
reject_unknown_sender_domain
reject_invalid_hostname
これらのメールをブロックするには、何を追加すればよいですか?
不明なホスト名からのメールをブロックしても安全ですか?
もう1つ目にしたのは、私の受信トレイによると、上記の電子メールは午前10時15分に受信したにもかかわらず、本日午後12時40分に受信されたということです。メールで受信時刻を偽造することも可能ですか?
回答ありがとうございます!
ご覧のとおり、このメッセージはあなたのアドレスをenvelope senderとして使用しています:
postfix/qmgr[19733]: 750991E018: from=<[email protected]>, size=3207, nrcpt=1 (queue active)
つまり、MAIL FROM
(またはRCPT TO
)の直後にそのようなメッセージを拒否するメソッドがあるということです。 From:
やDate:
のようなヘッダーに関しては、それらは偽装され、何でも含むことができます。 Spamassassinのような追加のスパムフィルターはこれらに対してテストを実行できますが、それは別の話です。
メールクライアントが、サーバーが実際にメールを受信した時刻ではなく、Date:
ヘッダーによって提供された日時を表示しています。 Received
ヘッダーを見て、メッセージが通過したサーバーによって追加された日付を確認できますが、電子メールクライアントはDate:
ヘッダーを信頼しています。
方法1:外部ソースからドメインをブラックリストに登録する
メソッドは順番ではありません:最初のメソッドは簡単に追加できますが、2番目のメソッドはあらゆる点で優れています。
このサーバーがドメインexample.com
からのメールの唯一の正当な送信元である場合は、ドメインからのすべてのメッセージをブロックできます。ただし、独自のネットワークまたは認証されたユーザーからの場合を除き、 check_sender_access
を使用します。個人的にすべてをsmtpd_recipient_restrictions
に入れて、接続を拒否する前にログで詳細を取得します。 main.cf
の場合:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
. . .
check_sender_access hash:/etc/postfix/access/sender_access,
. . .
/etc/postfix/access/sender_access
は、ホワイトリストおよびブラックリストに登録されたMAIL FROM
アドレス、ドメインなどのルックアップテーブル(postmap
を忘れないでください)です。このドメインからのメールをブラックリストに登録するには、たとえば、.
example.com 550 YOU ARE NOT ME.
方法2:ドメインにSPFを実装し、Postfixで送信者SPFをテストする
メールの他のソースがある場合、前の方法は使用できません。また、SPFは、ドメインがスパムの送信に使用されるのを防ぐために実際に実装する必要があるものです。まず、ドメインのTXT
レコードを追加して、承認されたすべての送信者をリストします。 SPF Introduction および Record Syntax を参照してください。
その後、Postfixを設定してSPFをチェックします( SPFをPostfixに実装する方法 を参照)。例えば。
Mail::SPF
およびNetAddr::IP
モジュールを使用してPerlをインストールします。postfix-policyd-spf-Perl
をインストールする
main.cf
:
smtpd_recipient_restrictions =
. . .
reject_unauth_destination,
check_policy_service unix:private/policy-spf,
. . .
master.cf
:
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf
私の環境には、受信メール用の外向きポート(25)と認証済み送信用の別のポート(587)がすでにあります。
main.cf
では
smtpd_sender_restrictions = check_sender_access pcre:/etc/postfix/sender-access
(私はpcre
を使用するので、正規表現を使用できます)
次に、私の/etc/postfix/sender-access
には
/@example.com$/ REJECT 554 You may not send as example.com without authenticating.
(example.com
を独自のドメインに置き換えます。)
しかし、フィルタリングを行わないように587
をオーバーライドする必要がありました。そのため、それをクリアするために-o smtpd_sender_restrictions=
を追加しました。
したがって、master.cf
では、次のようになります。
# Incoming
25 inet n - n - - smtpd
-o mynetworks_style=Host
-o mynetworks=10.0.0.0/8
-o milter_macro_daemon_name=Origin_EXTERNAL
# TLS + authenticated submissions
587 inet n - n - - smtpd
-o smtpd_sender_restrictions=
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,defer
-o milter_macro_daemon_name=Origin_AUTH
(逆を行ってmain.cf
でクリアしてmaster.cf
に設定できたと思います。)
テストするには、587を使用してドメイン内の誰かに電子メールを送信し、ポート25にtelnetで接続して、なりすましが可能かどうかを確認します。
$ telnet smtp.example.com 25
Trying 1.2.3.4...
Connected to smtp.example.com.
Escape character is '^]'.
220 smtp.example.com ESMTP Postfix
helo example.com
250 example.com
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
554 5.7.1 <[email protected]>: Sender address rejected: 554 You may not send as example.com without authenticating.
それはかなり一般的なスパマーの戦術です。すべての送信者にpermit_mynetworks
とpermit_sasl_authenticated
を要求することで制限できます。これはsmtpd_sender_restrictions
で設定されます
以下はiRedMailプロジェクトの例です。
# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
check_helo_access pcre:/etc/postfix/helo_access.pcre
reject_non_fqdn_helo_hostname
reject_unknown_helo_hostname
# Sender restrictions
smtpd_sender_restrictions =
reject_unknown_sender_domain
reject_non_fqdn_sender
reject_unlisted_sender
permit_mynetworks
permit_sasl_authenticated
check_sender_access pcre:/etc/postfix/sender_access.pcre
# Recipient restrictions
smtpd_recipient_restrictions =
reject_unknown_recipient_domain
reject_non_fqdn_recipient
reject_unlisted_recipient
check_policy_service inet:127.0.0.1:7777
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
ポリシーサーバーを実行していない場合は、check_policyを削除する必要があります。