我正在尝试配置 sendmail 以防止它允许通过 RCPT TO: 命令进行用户名枚举。
我一直在谷歌上搜索,从我所看到的,实现这一点的最佳方式是向 virtusertable 添加一个 catch all email 帐户。
因此我生成了一个新的 sendmail.cf 文件,其中包含以下指令:
FEATURE(`virtusertable', `hash /etc/mail/virtusertable')dnl
然后,我在 virtusertable.db 文件中添加:
@ubuntu test
并重新启动sendmail,但是不起作用:
mail from:root@ubuntu
250 2.1.0 root@ubuntu... Sender ok
rcpt to:root
250 2.1.5 root... Recipient ok
rcpt to:fake
550 5.1.1 fake... User unknown
我哪里做错了吗?或者有更好的方法来实现这一点?
谢谢你的帮助
答案1
如果你想实现一个万能地址,像这样做:
LOCAL_CONFIG
Kuser user -m -a.FOUND
LOCAL_RULE_0
R$- < $=w . > $* $: $(user $1 $) < $2 . > $3
R$- . FOUND < $=w . > $* $@ catch-all < $2 . > $3
请记住,规则的左侧与右侧用制表符分隔。使用上述代码更新 sendmail.mc 后,运行sendmailconfig
但请记住,发送到 RCPT TO: 命令的任何内容都会通过 check_rcpt 规则集进行检查。为了防止用户名枚举,您可能需要采用以下技术灰名单(我在用格雷米尔特)并设置适当的值问候暂停ClientConn 和 ClientRate。
“全部接收”地址并不总是一个好的解决方案。请考虑是否希望输入错误地址的发件人被告知他们的错误。