我的网站遭受了垃圾邮件攻击。有人使用我的电子邮件向所有人发送垃圾邮件。
所以现在我打算找到一种方法来阻止它。
我看到有人用正则表达式拒绝邮件。但我有无数不同的电子邮件(50,000 个用户)。
我想看看数据库中是否有电子邮件,然后允许它发送。否则就隔离。不想让它们滞留在邮件队列中。
#main.cf
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:/private/greylist
#master.cf
greylist unix - n n - - spawn user=nobody argv=/usr/bin/perl /tmp/mailrejct.
但是当我使用它时,我在邮件日志中收到这些错误:
Dec 25 09:24:58 intelligent-mahavira postfix/spawn[107258]: warning: command /usr/bin/perl exit status 2
Dec 25 09:24:58 intelligent-mahavira postfix/smtpd[107253]: warning: premature end-of-input on /private/greylist while reading input attribute name
Dec 25 09:24:59 intelligent-mahavira postfix/spawn[107258]: warning: command /usr/bin/perl exit status 2
Dec 25 09:24:59 intelligent-mahavira postfix/smtpd[107253]: warning: premature end-of-input on /private/greylist while reading input attribute name
Dec 25 09:24:59 intelligent-mahavira postfix/smtpd[107253]: warning: problem talking to server /private/greylist: Connection reset by peer
我smtpd_access_policy
用我的替换了。这是区别之一。有没有人是这方面的专家。
谁在发送属性值?后缀?它是如何传递的?
未解决。这仅适用于接收电子邮件。仅适用于传入垃圾邮件。
对于外发电子邮件仅存在模式检查。
1 #!/bin/sh
2
3 # Simple shell-based filter. It is meant to be invoked as follows:
4 # /path/to/script -f sender recipients...
5
6 # Localize these. The -G option does nothing before Postfix 2.3.
7 INSPECT_DIR=/var/spool/filter
8 SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.
9
10 # Exit codes from <sysexits.h>
11 EX_TEMPFAIL=75
12 EX_UNAVAILABLE=69
13
14 # Clean up when done or when aborting.
15 trap "rm -f in.$$" 0 1 2 3 15
16
17 # Start processing.
18 cd $INSPECT_DIR || {
19 echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
20
21 cat >in.$$ || {
22 echo Cannot save mail to file; exit $EX_TEMPFAIL; }
23
24 # Specify your content filter here.
25 # filter <in.$$ || {
26 # echo Message content rejected; exit $EX_UNAVAILABLE; }
27
28 $SENDMAIL "$@" <in.$$
29
30 exit $?
上面的代码能转换成 php 代码吗?我想知道如果我从 php 发送邮件,它会返回到同一个位置吗?
exec("/usr/sbin/sendmail $email < /etc/postfix/myfilter/email.txt");
我需要将电子邮件内容放入 email.txt。当我将整个测试放入其中时,它会弄乱电子邮件,其中包含显示所有内容和标题的详细信息和内容
我需要清理
From [email protected] Sun Dec 26 12:31:47 2021
Received: from webmail.test.com (localhost.localdomain [IPv6:::1])
by intelligent-mahavira.51-163-215-224.plesk.page (Postfix) with ESMTPSA id B9CFD82DA1
for <[email protected]>; Sun, 26 Dec 2021 12:31:47 +0000 (UTC)
Authentication-Results: intelligent-mahavira.51-163-215-224.plesk.page;
spf=pass (sender IP is ::1) [email protected] smtp.helo=webmail.test.com
Received-SPF: pass (intelligent-mahavira.51-163-215-224.plesk.page: connection is authenticated)
MIME-Version: 1.0
Date: Sun, 26 Dec 2021 04:31:47 -0800
From: [email protected]
To: alex3 <[email protected]>
Subject: testing filter2
User-Agent: Roundcube Webmail/1.4.11
Message-ID: <[email protected]>
X-Sender: [email protected]
Content-Type: text/plain; charset=US-ASCII;
format=flowed
Content-Transfer-Encoding: 7bit
X-PPP-Message-ID: <164052190789.24073.12166249882816501264@intelligent-mahavira.51-163-215-224.plesk.page>
X-PPP-Vhost: test.com
sss
我在谷歌的某个地方看到了这个问题,明天会尝试使用正则表达式从内容类型和正文中过滤掉主题。
To: [email protected]
Subject: This is an HTML message
From: [email protected]
Content-Type: text/html; charset="utf8"
<html>
<body>
<div style="
background-color:
#abcdef; width: 300px;
height: 300px;
">
</div>
You can add any valid email HTML here.
</body>
</html>
- 灰名单-我们可以以“不知道”、“拒绝可选文本”的形式给出访问反馈。
- 简单过滤器没有反馈。过滤器必须处理发送电子邮件。不清楚它是如何完成的。我基本上捕获了所有的 STDIN 并将其作为电子邮件发送,但它有所有的标题。不知道附件是如何处理。需要看看当我发送附件时它显示什么。
- 高级过滤看起来令人困惑。我看到 plex 电子邮件安全实现了这一点。当我添加它时,它将其添加到 main.cf 和 master.cf
smtp inet n - n - - smtpd
-o content_filter = smtp-amavis:[127.0.0.1]:10024
localhost:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_delay_reject=no
-o smtpd_authorized_xforward_hosts=127.0.0.0/8,[::1]/128
-o smtpd_authorized_xclient_hosts=127.0.0.0/8,[::1]/128
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8,[::1]/128
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o local_header_rewrite_clients=
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o content_filter=smtp-amavis:[127.0.0.1]:10026
pickup unix n - n 60 1 pickup
-o content_filter=smtp-amavis:[127.0.0.1]:10026
这是保存在 data.txt 中的电子邮件,如果与系统中的收件人电子邮件匹配,则手动发送
Received: from webmail.test.com (localhost.localdomain [IPv6:::1])
by intelligent-mahavira.serverip.plesk.page (Postfix) with ESMTPSA id C7E7282E1B;
Tue, 28 Dec 2021 00:36:31 +0000 (UTC)
Authentication-Results: intelligent-mahavira.serverip.plesk.page;
spf=pass (sender IP is ::1) [email protected] smtp.helo=webmail.test.com
Received-SPF: pass (intelligent-mahavira.serverip.plesk.page: connection is authenticated)
MIME-Version: 1.0
Date: Mon, 27 Dec 2021 16:36:31 -0800
From: [email protected]
To: alex2 <[email protected]>, alex3 <[email protected]>,
[email protected]
Subject: Attachment test
User-Agent: Roundcube Webmail/1.4.11
Message-ID: <[email protected]>
X-Sender: [email protected]
Content-Type: multipart/mixed;
boundary="=_5745fc7d762d12dda4165a3e0be576fc"
X-PPP-Message-ID: <164065179196.8458.1248882909976426707@intelligent-mahavira.serverip.plesk.page>
X-PPP-Vhost: test.com
--=_5745fc7d762d12dda4165a3e0be576fc
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII;
format=flowed
Attachment succes?
--=_5745fc7d762d12dda4165a3e0be576fc
Content-Transfer-Encoding: base64
Content-Type: image/jpeg;
name=536_PIA23645_PaleBlueDotRevisited_1600.jpg
Content-Disposition: attachment;
filename=536_PIA23645_PaleBlueDotRevisited_1600.jpg;
size=74009
/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMcaHR0cDov
问题是电子邮件中没有主题。它隐藏在标题中。太丑了。
结果
答案1
Postfix 支持政策服务。可以通过设计策略服务来实现您的要求。也可能有其他方法;这种方法只是我首先想到的。该页面末尾的示例几乎满足了您的所有需求。
然而,这是死路一条。你没有正确设计和保护 Web 应用程序和服务器,而是允许恶意方进入,然后试图避免不可避免的后果。你弄清楚他们是如何通过你的 Web 应用程序做到这一点的了吗?你修复了那个漏洞吗?这应该是你的首要任务。
除此之外,一般建议:
- 您的 Web 应用程序不应按照第三方的意愿发送邮件。它只能在您确定需要发送电子邮件时才发送。
- Web 应用程序应该始终进行身份验证
mail()
到邮件服务器。如果你依赖这样的功能,那就大错特错了。有几个 PHP 库知道如何进行 ESMTP 身份验证,请使用其中一个。 - 您的邮件服务器应该限制您的网站可以使用哪些发件人地址。并且,它还可以通过设置一些限制(每小时、每天等)来限制邮件流量;有多种方法可以做到这一点。
- 邮件服务器可以在发送邮件之前检查邮件是否为垃圾邮件。这样你就可以减少垃圾邮件的发送。