Zimbra邮件服务器无登陆邮箱就可发送邮件的漏洞的处理:
配置目的:用户发送邮件必须通过smtp认证,认证通过后,用户发送邮件时的发件人必须和通过认证的用户相一致,
才能发送邮件,防止伪造发件人发送邮件。
一、SMTP认证与mail from绑定
以zimbra用户修改smtpd_sender_restrictions.cf文件
#su - zimbra
$vim conf/zmconfigd/smtpd_sender_restrictions.cf
增加以下行:
%%contains VAR:zimbraServiceEnabled antivirus^ reject_sender_login_mismatch%%
%%contains VAR:zimbraServiceEnabled antivirus^ reject_authenticated_sender_login_mismatch%%
%%contains VAR:zimbraServiceEnabled antivirus^ reject_unauthenticated_sender_login_mismatch%%
$postconf -e "smtpd_sender_login_maps=hash:/data/zimbra/sender"
1
2
3
4
5
6
7
8
9
10
11
12
#su - zimbra
$vimconf/zmconfigd/smtpd_sender_restrictions.cf
增加以下行:
%%containsVAR:zimbraServiceEnabledantivirus^reject_sender_login_mismatch%%
%%containsVAR:zimbraServiceEnabledantivirus^reject_authenticated_sender_login_mismatch%%
%%containsVAR:zimbraServiceEnabledantivirus^reject_unauthenticated_sender_login_mismatch%%
$postconf-e"smtpd_sender_login_maps=hash:/data/zimbra/sender"
执行完,可以从"/opt/zimbra/postfix/conf/main.cf"文件最后一行看到"smtpd_sender_login_maps = hash:/opt/zimbra/sender"
二、导出用户
#/opt/zimbra/bin/ldapsearch -LLL -x -D "uid=zimbra,cn=admins,cn=zimbra" -w "passwd" -H ldap://IP:389 | sed -n 's/^mail: \(\(.*\)@.*\)$/\1 \2/p' > /opt/zimbra/sender
example:
...
user1@example.com user1
user2@example.com user2
...
1
2
3
4
5
6
7
#/opt/zimbra/bin/ldapsearch -LLL -x -D "uid=zimbra,cn=admins,cn=zimbra" -w "passwd" -H ldap://IP:389 | sed -n 's/^mail: \(\(.*\)@.*\)$/\1 \2/p' > /opt/zimbra/sender
example:
...
user1@example.comuser1
user2@example.comuser2
...
三、生成hash文件sender.db
#/opt/zimbra/postfix/sbin/postmap /opt/zimbra/sender
1
#/opt/zimbra/postfix/sbin/postmap /opt/zimbra/sender
四、重新加载Postfix
$postfix reload
1
$postfixreload
五、计划任务生成sender.db
Crontab 每天生成一个新的sender.db,以解决后续添加邮箱用户发送邮件失败。
#cat /opt/zimbra/smtp_auth.sh
#!/bin/bash
/opt/zimbra/bin/ldapsearch -LLL -x -D "uid=zimbra,cn=admins,cn=zimbra" -w "passwd" -H ldap://IP:389 | sed -n 's/^mail: \(\(.*\)@.*\)$/\1 \2/p' > /opt/zimbra/sender
/opt/zimbra/postfix/sbin/postmap /opt/zimbra/sender
#crontab -l
0 0 * * * bash /opt/zimbra/smtp_auth.sh
1
2
3
4
5
6
7
#cat /opt/zimbra/smtp_auth.sh
#!/bin/bash
/opt/zimbra/bin/ldapsearch-LLL-x-D"uid=zimbra,cn=admins,cn=zimbra"-w"passwd"-Hldap://IP:389 | sed -n 's/^mail: \(\(.*\)@.*\)$/\1 \2/p' > /opt/zimbra/sender
/opt/zimbra/postfix/sbin/postmap/opt/zimbra/sender
#crontab -l
00***bash/opt/zimbra/smtp_auth.sh
感谢运维生存时间的群友上海-Clark分享。