postfix 的常见功能和配置有哪些?
postfix是一种MTA,用来收发邮件
service:postfix
port:25
proto:smtp
datafile:/var/spool/mail/user
queue:/var/spool/postfix
log:/var/log/maillog
paraments: http://www.postfix.org/postconf.5.html
configuration:/etc/postfix/main.cf(主要配置如下参数)
myhostname:默认为主机名(可自己写)
mydomain:默认为主机的域(...)
myorigin:当发信时,如果不写@domain,默认用该变量值补齐,默认为mydomain
mydestination:该变量决定什么样后缀的邮件到达该MTA的时候会被该MTA接受
inet_interfaces:监听哪个网卡
relayhost:找一个帮忙转发的MTA,可以是[IP],也可以是hostname,如果hostname写在[]中,可以避免查dns
mynetworks:信任的网络,如果信任,可以帮忙转发.如果不设置,默认使用该机器网卡的网段(所有网卡)
local_transport=error:local delivery disabled //本地不接受邮huh件
MTA必须配合DNS使用,当发邮件时,
mail user@domain
机器是无法识别domain的,必须由DNS解析出IP,然后找到IP对应的MTA,通过SMTP协议将邮件发到MTA的25号端口,因此DNS必须有一条MX记录,帮助解析MTA的IP
domain MX 5 name //5为优先级,当有多条MX记录,默认走优先级高的,即数字小的
name A ip
配置之后通过dig查看配置是否成功
备注:修改hostname的时候,修改网卡配置的时候,会改变/etc/resolv.conf文件的内容,影响DNS的正常使用,在/etc/NetworkManager/NetworkManager.conf中添加dns=none就会不受影响。
【relayhost】
relayhost参数指定了下一个MTA,自己可以不做DNS解析,将邮件发给RELAYHOST,RELAYHOST帮忙解析
relayhost=[IP]/hostname
hostname必须可以解析,默认的解析方法时DNS,如果想要用/etc/hosts解析,需要修改一个参数
smtp_host_lookup,该参数的值可以时dns(只有dns);native(只用/etc/nsswitch.conf);dns,native(优先dns)
【transport】
transport:作用和relayhost一样,但是不是无条件帮忙转发,有域的限定
/etc/postfix/main.cf transport_maps = hash:/etc/postfix/transport(文件可以随意,这个时默认的)
domain smtp:[IP]:25
生成数据库:postmap /etc/postfixe/transport 生成数据库 transport.db
备注:transport的优先级 > mydestination > relayhost
备注:transport的数据库表有好几种格式,postconf -m 可以查看支持的数据库表格式,常见的有hash,regexp
如果为regexp格式,transport文件中的转发格式则不同:
/filter/ :relayhost //filter中的“.”符号要加转义符号
【queue】
当邮件发不出去的时候,会将邮件留在queue里,/var/spool/postfix下
mailq查看queue中的邮件
postqueue -f 尝试重新发送queue中的邮件
postqueue -i q_id 把指定的邮件再发送一次
postsuper -d All 删除queue中的所有邮件
postsuper -d ALL queuename 删除特定queue内的所有邮件
postconf 查看主配置文件的参数
postconf -d 查看主配置文件参数的默认值
关于邮件在queue中的发送的几个参数:
queue_run_delay:一个检测queue的程序自服务启动后运行的时间间隔
maximal_backoff_time:在检测程序跑的时候,queue中的邮件超过该时间的会被重新发送
minimal_backoff_time:当超过最小值还没有发送成功,发送的时间会变成*2,一直到最大的间隔
maximal_queue_lifetime:在queue中存在的最长时间,超过被删除(系统认为该邮件发布出去)
【telnet】
一种测试MTA是否能正常通信的方式
telnet ****** 25 (某台MTA的25号端口)
ehlo *** //表明身份
mail from: user@domain //邮件来源
rcpt to: user@domain //邮件发往
data //之后输入邮件的内容
subject: //主题,下面就可以输入邮件的正文
【alias】
/etc/aliases里可以定义别名,到达MTA本地的邮件会走这个文件,
例如:定义了a1:root,创建新的数据库,newaliases 则发给a1的邮件会存在/var/mail/root中
【virtual aliases domain】
虽然感觉并没有什么卵用,但是还是能起到一点点一个MTA上面可以接受多个域的邮件,存放地方还不会混乱的一个机制
/etc/postfix/main.cf :
virtual_alias_domains=domain1,domain2
virtual_alias_map = hash:/etc/postfix/virtual(默认为该文件,可以修改)
/etc/postfix/virtual
user@domain1 user1(local user) //发给某个域的某个用户的邮件存在/var/spool/mail/user1中
【virtual mailbox domain】
/etc/postfix/main.cf
virtual_mailbox_domains = domain
virtual_mailbox_base = /var/mail/vhosts //发过来的邮件会基于这个目录
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100 //系统默认值,如果下面两个参数小于该值,就会报错
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
/etc/postfix/vmailbox
user@domain file //发给该用户的邮件会存在该文件里
user@domain dir //发给该用户的邮件会存在该目录下的一个文件里,这样,每一封邮件都有一个文件
postmap /etc/postfix.vmailbox
chown 5000:5000 存放邮件的上层目录
【sasl】
加在MTA外面的一层认证,当用我这个MTA帮忙转发的时候,就像RELAYHOST和transport中被信任以外,还可以时通过验证的,有该MTA的user去做验证
1.install cyrus-sasl,cyrus-sasl-plain
2. /etc/postfix/main.cf:
smtpd_sasl_path = smtpd //默认值
3./etc/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN //默认就有
4. /etc/sysconfig/saslauthd:
MECH=shadow/pam
5. saslauthd restart
6.# testsaslauthd -u xxx -p xxx //用用户和密码测试sasl是否成功
7./etc/postfix/main.cf:
smtpd_sasl_auth_enable = yes //sasl在postfix中生效
broken_sasl_auth_clients = yes //兼容微软的outlook
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination
8.# echo -ne '\000username\000password' | openssl base64 //用户和密码生成base64的密文,当另一台MTA将邮件传过来转发时,要进行认证
备注:sasl 采用 /etc/shadow 文件验证用户的时候,selinux 会有限制,为了解除selinux 的限制,需要打开 saslauthd_read_shadow 布尔值
test:
telnet:
auth plain 密文
user username
pass password
认证成功就可以帮助转发了
2023-07-11 广告