当前位置: 首页 > 工具软件 > Postfix > 使用案例 >

Linux学习-postfix配置

段干弘毅
2023-12-01

本文基本centos6.10,postfix2.11.11
postfix基本配置
myhostname:定义主机名,判断当前主机工作在什么位置,跟mx记录对应的主机名称一致
mydomain:自己所处的核心域
mynetworks:定义本地网络,允许给中继的网络或地址
mydestination:自己为哪些发往目标收取邮件,如目标不是此处定义的域的,则要进行中继
myorigin:发件人地址伪装,通常是本地域名,会为发件人补充地址
inet_interfaces:定义postfix进程监听的IP地址
postfix基于客户端的访问控制

  1. 基于客户端的访问控制
    postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制,客户端判别机制可以设定一系列客户信息的判别条件
    smtpd_client_restrictions:控制客户端连接时的限制(建立tcp连接)
    smptd_data_restrictions:控制输入客户端输入数据的限制(data)
    smtpd_helo_restrictions:控制输入helo的限制(helo)
    smtpd_recipient_restrictions:控制收件人的限制(rcpt to)
    smtpd_sender_restrictions:控制发件人限制(mail from)
    上面的参数用于检查SMTP会话过程中的特定阶段,即客户端提供相应信息的阶段,当客户端发起连接请求时,postfix就可以根据配置文件中定义的smtpd_client_restrictions参数来判别此客户端IP的访问控制权限,相应smtpd_helo_restrictions则用于根据用户的helo信息判别客户端的访问能力等。
    如果DATA命令之前的所有内容都被接受,客户端接着就可以开始传送邮件内容了,邮件内容通常由两部分组成,前半部分是标题(header),其可以由header_check过滤,后半部分是邮件正文(body),其可以由check_body过滤,这两项实现的是邮件“内容检查”。

查找表
访问控制文件,
/etc/postfix/access —Hash格式 ---->/etc/postfix/access.db
tye@test.com reject
edison@test.com ok

自定义访问表的条件通常使用check_client_access,check_helo_access,check_sender_access,check_recipient_access进行,它们后面跟上type:mapname格式的访问表类型和名称。其中check_sender_access和check_recipient_access用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如admin@test.com;也可以使用域名,如test.com还可以只使用用户的一部分:admin@

拒绝客户端192.168.88.1发送邮件

#修改/etc/postfix/access文件
192.168.88.1		REJECT
#将access文件转换为hash格式
postmap /etc/postfix/access
[root@mail ~]# ls /etc/postfix/access*
/etc/postfix/access  /etc/postfix/access.db
#配置postfix使用此文件对客户端进行检查
	#编辑/etc/postfix/main.cf文件,添加以下参数
	smtpd_client_restrictions = check_client_access hash:/etc/postfix/access            #hash表示带有.db的文件,后面文件名不用加.db
#重新启动postfix或重新载入配置文件
service postfix restart
#使用192.168.88.1这台机器测试发送邮件
[C:\~]$ telnet 192.168.88.135 25


Connecting to 192.168.88.135:25...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
220 Welcome to our mail.tye.com ESMTP,Warning:Version not Available!
helo mail.tye.com
250 mail.tye.com
mail from :root
501 5.5.4 Syntax: MAIL FROM:<address>
mail from: root
250 2.1.0 Ok
rcpt to: hadoop
**554 5.7.1 <unknown[192.168.88.1]>: Client host rejected: Access denied**
#使用本机测试,一切正常
[root@mail ~]# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Welcome to our mail.tye.com ESMTP,Warning:Version not Available!
helo mail.tye.com
250 mail.tye.com
mail from: root
250 2.1.0 Ok
rcpt to: hadoop
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
123
1
,
.
250 2.0.0 Ok: queued as D8457BF30C
quit
221 2.0.0 Bye
Connection closed by foreign host.

拒绝发件人域为whitehose.com的所有人发送邮件


#在/etc/postfix/access文件修改如下,来对发送者的域进行控制
whitehouse.com   REJECT
#转换为hash格式文件
[root@mail ~]# postmap /etc/postfix/access
#在/etc/postfix/main.cf中配置中添加以下行
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access

[root@mail ~]# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Welcome to our mail.tye.com ESMTP,Warning:Version not Available!
helo mail.tye.com
250 mail.tye.com
mail from: sender@whitehouse.com
250 2.1.0 Ok
rcpt to: hadoop
**554 5.7.1 <sender@whitehouse.com>: Sender address rejected: Access denied**

拒绝向haddoop域的所有人发送邮件

#编译/etc/postfix/recipient,建制所有人不能向hadoop发送邮件
[root@mail ~]# vim /etc/postfix/recipient
hadoop@  REJECT
#转换为hash格式文件
[root@mail ~]# postmap /etc/postfix/recipient
[root@mail ~]# ls /etc/postfix/recipient*
/etc/postfix/recipient  /etc/postfix/recipient.db
#修改postfix配置文件,/etc/postfix/main.cf
[root@mail ~]# vim /etc/postfix/main.cf
smtpd_recipient_restrictions = hash:/etc/postfix/recipient,permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination

#测试发送邮件
[root@mail ~]# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Welcome to our mail.tye.com ESMTP,Warning:Version not Available!
helo mail.tye.com
250 mail.tye.com
mail from: tye@tye.com
250 2.1.0 Ok
rcpt to:hadoop
**554 5.7.1 <hadoop>: Recipient address rejected: Access denied**

  1. 检查表格式的说明
    hash类的检查表使用如下格式
    pattern action
    注:检查表文件中,空白行,仅包含空白字符的行和以#开头的行都会被忽略,以空白字符开头后跟其它非空白字符的行会被认为是前一行的延续,是一行的组成部分
    1)关于pattern
    其pattern通常有两类地址:邮件地址和主机名称/地址
    邮件地址的pattern格式如下:
    user@domain 用于匹配指定邮件地址
    domain.tld 用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址
    user@ 用于匹配以此作为邮件地址中的用户名部分的所有邮件地址
    主机名称/地址的pattern如下
    domain.tld 用于匹配指定域及其子域内的所有主机
    .domain.tld 用于匹配指定域的子域内的所有主机
    net.work.addr.ess
    net.work.addr
    net.work
    net 用于匹配特定的IP地址或网络内的所有主机
    network/mask CIDR格式,匹配指定网络内的所有主机
    2)关于action
    接受类的动作
    OK 接受其pattern匹配的邮件地址或主机名称/地址
    全部由数字组成的action 隐式表示OK
    拒绝类的动作(部分):
    4NN text
    5NN text
    其中4NN类表示过一会儿重试;5NN表示严重错误,将停止重试邮件发送:421和521对postfix有特殊意义,不要自定义这两个代码
    REJECT optional text… 拒绝:text为可选信息
    DEFER optional text… 拒绝:text为可选信息
 类似资料: