如何限制IP地址使用postfix SMTP中继
在本教程中,我们将涵盖以下问题:
我如何限制我的后缀中继服务器仅由某些IP地址使用
如何将带有后缀的中继限制到某些IP网络
我如何只允许某些网络地址通过Postfix中的中继发送邮件
如何通过访问后缀中继服务器将某些网络列入黑名单
实验室环境
我已经在CentOS 8 Linux上使用名为chroot DNS的设置了Intranet Postfix中继服务器。
以下是服务器和客户端的节点详细信息:
后缀中继服务器:192.168.43.154(mail.example.com)
Postfix Client-1:``192.168.43.48
(client-1.example.com
)Postfix Client-2:``192.168.43.148
(client-2.example.com
)
我的中继服务器的nslookup
输出
# nslookup mail.example.com Server: 192.168.43.154 Address: 192.168.43.154#53 mail.example.com canonical name = server.example.com. Name: server.example.com Address: 192.168.43.154
定义允许使用smtp中继服务器的子网
在postfix中,我们有两个变量来控制此行为以允许中继
mynetworks_style
mynetworks
mynetworks_style
生成mynetworks参数的默认值的方法。
这是中继访问控制等的受信任网络的列表。
当Postfix仅信任本地计算机时,请指定mynetworks_style = host。
当Postfix应该在与本地计算机相同的IP子网中信任远程SMTP客户端时,请指定mynetworks_style = subnet。
当Postfix应该信任与本地计算机相同的IP类A/B/C网络中的远程SMTP客户端时,请指定mynetworks_style = class。
我的网络
具有比陌生人更多特权的受信任的远程SMTP客户端列表
特别是,允许受信任的SMTP客户端通过Postfix中继邮件
我们可以手动指定受信任的网络地址列表,也可以让Postfix为我们完成(这是默认设置)
如果我们手动指定" mynetworks"列表,则Postfix会忽略" mynetworks_style"设置。
指定网络地址或者网络/网络掩码模式的列表,以逗号和/或者空格分隔。
通过在下一行以空格开头继续长行。列表从左到右匹配,搜索从第一个匹配项停止。
指定!pattern从列表中"排除"地址或者网络块。
例如:
mynetworks = 127.0.0.0/8 168.100.189.0/28 mynetworks = !192.168.0.1, 192.168.0.0/28
实施限制之前的现有行为
在我的环境中,当前我的中继服务器已配置为允许以下子网
mynetworks = 192.168.43.0/24, 127.0.0.0/8
让我们使用中继服务器" mail.example.com"将邮件从" client-1.example.com"发送到" client-2.example.com"。
# mail [email protected] Subject: Test message Hello . EOT
登录
client-1.example.com`
Aug 02 00:33:09 client-1.example.com postfix/smtp[926]: 2C14D5FDFA: to=<[email protected]>, relay=mail.example.com[192.168.43.154]:25, delay=0.51, delays=0.12/0.12/0.21/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as A3EAD5FB32)
登录
mail.example.com`
Aug 02 11:10:56 mail.example.com postfix/smtp[21464]: A3EAD5FB32: to=<[email protected]>, relay=client-2.example.com[192.168.43.148]:25, delay=0.21, delays=0.03/0.04/0.1/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 85A1C5FBDC)
登录到client-2.example.com
Aug 02 00:33:09 client-2.example.com postfix/local[21349]: 85A1C5FBDC: to=<[email protected]>, relay=local, delay=0.08, delays=0.04/0/0/0.04, dsn=2.0.0, status=sent (delivered to maildir)
因此,我们的邮件已使用我的后缀中继服务器(即mail.example.com)成功发送
限制Postfix SMTP中继(smtpd_relay_restrictions)
Postfix SMTP服务器在" smtpd_recipient_restrictions"之前在" RCPT TO"命令的上下文中应用的邮件中继控制的访问限制。
在2.10之前的Postfix版本中,中继权限和垃圾邮件阻止规则在
smtpd_recipient_restrictions
下合并,导致容易出错的配置从Postfix 2.10开始,中继许可规则最好用smtpd_relay_restrictions来实现,这样,在smtpd_recipient_restrictions下的垃圾邮件阻止策略将不再导致邮件中继策略。
默认情况下,Postfix SMTP服务器接受:
来自IP地址与$mynetworks匹配的客户端的邮件,或者:
邮寄到与
$relay_domains
相匹配的远程目的地,但包含发件人指定的路由的地址(user @ elsewhere @ domain
)除外,或者:邮寄到与$inet_interfaces或者$proxy_interfaces,$mydestination,$virtual_alias_domains或者$virtual_mailbox_domains匹配的本地目标。
将单个IP地址列入黑名单以访问中继服务器
我们将使用smtpd_relay_restrictions
限制client-1.example.com
使用此中继服务器
在中继服务器上的/etc/postfix/main.cf中进行以下更改
mynetworks = !192.168.43.48, 192.168.43.0/24, 127.0.0.0/8
提示:
请注意,在给" 192.168.43.0/24"之前,我已经将该IP设置为被阻止,因为后缀将执行从左到右的查找,因此,如果将" 192.168.43.0/24"放置在黑名单的IP之前,则提供的IP将在""中匹配192.168.43.0/24子网,将允许中继,因此我们的设置将不起作用。
添加以下内容(如果已经在main.cf
中定义,则修改现有值)
smtpd_relay_restrictions = permit_mynetworks, reject
因此,这里我们拒绝来自除" mynetworks"和" mynetworks"中定义之外的任何其他网络的请求,我已将客户的IP地址列入黑名单
重新加载后缀服务
# systemctl reload postfix
现在我们尝试从我们的client-1.example.com发送邮件
# mail [email protected] Subject: Test message Check bounce . EOT
登录
client-1.example.com`
Aug 02 00:35:35 client-1.example.com postfix/smtp[926]: 970F25FDF4: to=<[email protected]>, relay=mail.example.com[192.168.43.154]:25, delay=0.44, delays=0.08/0/0.25/0.11, dsn=5.7.1, status=bounced (host mail.example.com[192.168.43.154] said: 554 5.7.1 <[email protected]>: Recipient address rejected: Access denied (in reply to RCPT TO command))
登录到client-2.example.com
No logs on client-2.example.com as the mail didn't reached here
登录
mail.example.com`
Aug 02 11:13:10 mail.example.com postfix/smtpd[21642]: NOQUEUE: reject: RCPT from client-1[192.168.43.48]: 554 5.7.1 <[email protected]>: Recipient address rejected: Access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<client-1.example.com>
因此,我们的配置将使用SMTP中继服务器的单个IP地址列入黑名单的工作已按预期进行。
允许特定的网络地址使用中继服务器
同样,我们可以修改" mynetworks"值,以允许所有网络子网使用中继服务器发送邮件。
mynetworks = 192.168.43.0/24, 127.0.0.0/8
现在,我们允许192.168.43.0/24子网中的所有IP地址能够使用我们的中继服务器发送邮件。
重新加载后缀服务以激活我们的更改
# systemctl reload postfix
现在,通过从我们的client-1.example.com发送邮件来验证此配置
Aug 01 13:14:21 client-1.example.com sendmail[10202]: 0717iL9A010202: [email protected], ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30231, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 1E91F5FDDE) Aug 01 13:14:21 client-1.example.com postfix/smtpd[10203]: disconnect from localhost[127.0.0.1] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7 Aug 01 13:14:21 client-1.example.com postfix/smtp[10207]: 1E91F5FDDE: to=<[email protected]>, relay=mail.example.com[192.168.43.154]:25, delay=0.21, delays=0.06/0.04/0.08/0.03, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 4B8745FCE3)
因此,这次中继服务器允许我们在192.168.43.0/24子网中从客户端发送邮件