我是 Postfix 新手。发送电子邮件很顺利,但我无法接收外部电子邮件。错误:未找到用户。这是我的配置。出了什么问题?
系统
Centos7.1 x64 (Conoha 的图像)
软件
postfix 3.1.1 (自己编译的)
make makefiles shared=yes shlib_directory=/usr/local/lib/postfix/3.1.1 dynamicmaps=yes 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" ' 'AUXLIBS_MYSQL=-L/usr/lib64/mysql -lmysqlclient -lz -lm'
dovecot 2.2.10 (yum)
cyrus-sasl 2.1.26(yum)
cyrus-imapd* 2.4.17(yum)
postfixadmin 2.93(从 sf.net 下载)
MariaDB 10.1.16(yum)
nginx 1.6.3(yum)
php (yum,禁用一些危险功能)
网络
使用 mydomain123.com 而不是真正的 doname。
使用 123.123.123.123 而不是真实 ip。
专用网络
192.168.0.1(255.255.248.0)
10.0.0.1(255.255.248.0)
公共网络
123.123.123.123(255.255.254.0)(带有 PTR:mydomain.com)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 123-123-123-123
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 123-123-123-123
主机名 123-123-123-123
开放端口
公共 110/tcp 80/tcp 143/tcp 995/tcp 25/tcp 993/tcp 443/tcp 587/tcp 8025/tcp(postfixadmin)
私人全部
域名和DNS
使用 mydomain123.com 而不是真正的 doname。
使用 123.123.123.123 而不是真实 ip。
mydomain123.com
@ 123.123.123.123
@MX mail.mydomain123.com
www.123.123.123.123
邮箱 123.123.123.123
弹出 A 123.123.123.123
pop3 A 123.123.123.123
imap A 123.123.123.123
smtp 123.123.123.123
用户
groupadd -g 5000 vmail
useradd -g vmail -u 5000 -s /sbin/nologin vmail
其它按默认。
/etc/postfix/main.cf
compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mail.mydomain123.com
mydomain = mydomain123.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP unknow
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no
smtputf8_enable = no
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_application_name = smtpd
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
smtpd_sasl_security_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
virtual_mailbox_base = /home/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
meta_directory = /etc/postfix
shlib_directory = /usr/local/lib/postfix/${mail_version}
/etc/postfix/master.cf
smtp inet n - n - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
/etc/postfix/sql/mysql_virtual_alias_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_domains_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u','@',alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = mymaildb
password = mypassword
hosts = localhost
dbname = mymaildb
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
/etc/dovecot/dovecot.conf
# 2.2.10: /etc/dovecot/dovecot.conf
# OS: Linux 3.10.0-327.22.2.el7.x86_64 x86_64 CentOS Linux release 7.2.1511 (Core)
#log_path = /var/log/dovecot.log
#info_log_path = /var/log/dovecot-info.log
protocols = imap pop3
listen = *
!include conf.d/*.conf
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n
}
#debug log
auth_debug_passwords=yes
mail_debug=yes
auth_verbose=yes
auth_verbose_passwords=plain
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext
/etc/dovecot/conf.d/10-ssl.conf
ssl = no
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mbox_write_locks = fcntl
/etc/dovecot/conf.d/10-logging.conf
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
debug_log_path = /var/log/dovecot-debug.log
plugin {
}
/etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener lmtp {
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
}
}
service auth-worker {
}
service dict {
unix_listener dict {
}
}
/etc/dovecot/conf.d/15-lda.conf
postmaster_address = [email protected]
protocol lda {
}
/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=mymaildb user=mymaildb password=mypassword
userdb_warning_disable=yes
#postfixadmin
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT CONCAT('/home/vmail/', maildir) AS home, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active='1'
postfixadmin 配置.inc.php
<?php
$CONF['configured'] = true;
$CONF['setup_password'] = 'mypasswordhash';
$CONF['default_language'] = 'en';
$CONF['language_hook'] = '';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mymaildb';
$CONF['database_password'] = 'mypassword';
$CONF['database_name'] = 'mymaildb';
$CONF['database_prefix'] = '';
$CONF['database_tables'] = array (
'admin' => 'admin',
'alias' => 'alias',
'alias_domain' => 'alias_domain',
'config' => 'config',
'domain' => 'domain',
'domain_admins' => 'domain_admins',
'fetchmail' => 'fetchmail',
'log' => 'log',
'mailbox' => 'mailbox',
'vacation' => 'vacation',
'vacation_notification' => 'vacation_notification',
'quota' => 'quota',
'quota2' => 'quota2',
);
$CONF['admin_email'] = '';
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['authlib_default_flavor'] = 'md5raw';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['password_validation'] = array(
# '/regular expression/' => '$PALANG key (optional: + parameter)',
'/.{5}/' => 'password_too_short 5', # minimum length 5 characters
'/([a-zA-Z].*){3}/' => 'password_no_characters 3', # must contain at least 3 characters
'/([0-9].*){2}/' => 'password_no_digits 2', # must contain at least 2 digits
);
$CONF['generate_password'] = 'NO';
$CONF['show_password'] = 'NO';
$CONF['page_size'] = '10';
$CONF['default_aliases'] = array (
'abuse' => '[email protected]',
'hostmaster' => '[email protected]',
'postmaster' => '[email protected]',
'webmaster' => '[email protected]'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['maildir_name_hook'] = 'NO';
$CONF['admin_struct_hook'] = '';
$CONF['domain_struct_hook'] = '';
$CONF['alias_struct_hook'] = '';
$CONF['mailbox_struct_hook'] = '';
$CONF['alias_domain_struct_hook'] = '';
$CONF['fetchmail_struct_hook'] = '';
$CONF['aliases'] = '1000';
$CONF['mailboxes'] = '1000';
$CONF['maxquota'] = '1000';
$CONF['domain_quota_default'] = '2048';
$CONF['quota'] = 'YES';
$CONF['domain_quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'NO';
$CONF['transport_options'] = array (
'virtual', // for virtual accounts
'local', // for system accounts
'relay' // for backup mx
);
$CONF['transport_default'] = 'virtual';
$CONF['vacation'] = 'NO';
$CONF['vacation_domain'] = 'autoreply.mydomain123.com';
$CONF['vacation_control'] ='YES';
$CONF['vacation_control_admin'] = 'YES';
$CONF['vacation_choice_of_reply'] = array (
0 => 'reply_once', // Sends only Once the message during Out of Office
# considered annoying - only send a reply on every mail if you really need it
# 1 => 'reply_every_mail', // Reply on every email
60*60 *24*7 => 'reply_once_per_week' // Reply if last autoreply was at least a week ago
);
$CONF['alias_control'] = 'YES';
$CONF['alias_control_admin'] = 'YES';
$CONF['special_alias_control'] = 'NO';
$CONF['alias_goto_limit'] = '0';
$CONF['alias_domain'] = 'YES';
$CONF['backup'] = 'NO';
$CONF['sendmail'] = 'YES';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'NO';
$CONF['fetchmail_extra_options'] = 'NO';
$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to mydomain123.com';
$CONF['footer_link'] = 'mydomain123.com';
$CONF['motd_user'] = '';
$CONF['motd_admin'] = '';
$CONF['motd_superadmin'] = '';
$CONF['welcome_text'] = <<<EOM
Hi,
Welcome to your new account.
EOM;
$CONF['emailcheck_resolve_domain']='YES';
$CONF['show_status']='YES';
$CONF['show_status_key']='YES';
$CONF['show_status_text']=' ';
$CONF['show_undeliverable']='YES';
$CONF['show_undeliverable_color']='tomato';
$CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext","exchangeserver.domain.ext");
$CONF['show_popimap']='YES';
$CONF['show_popimap_color']='darkgrey';
$CONF['show_custom_domains']=array("subdomain.domain.ext","domain2.ext");
$CONF['show_custom_colors']=array("lightgreen","lightblue");
$CONF['recipient_delimiter'] = "";
$CONF['mailbox_postcreation_script'] = '';
$CONF['mailbox_postedit_script'] = '';
$CONF['mailbox_postdeletion_script'] = '';
$CONF['domain_postcreation_script'] = '';
$CONF['domain_postdeletion_script'] = '';
$CONF['create_mailbox_subdirs'] = array();
$CONF['create_mailbox_subdirs_host']='localhost';
$CONF['create_mailbox_subdirs_prefix']='INBOX.';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
$CONF['create_mailbox_subdirs_hostoptions'] = array('');
$CONF['theme_logo'] = 'images/logo-default.png';
$CONF['theme_css'] = 'css/default.css';
$CONF['theme_custom_css'] = '';
$CONF['xmlrpc_enabled'] = false;
if (file_exists(dirname(__FILE__) . '/config.local.php')) {
include(dirname(__FILE__) . '/config.local.php');
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
/var/log/maillog [无错误]
localhost postfix/smtpd[31623]: 1077ADEA2: client=unknown[myip], sasl_method=CRAM-MD5, [email protected]
localhost postfix/smtpd[31623]: disconnect from unknown[myip] ehlo=1 auth=1 mail=1 rcpt=1 quit=1 unknown=0/1 commands=5/6
/var/log/dovecot.log [发送电子邮件时没有错误,但是...]
auth: Fatal: master: service(auth): child 30172 killed with signal 11 (core dumped)
lda: Error: userdb lookup([email protected]): Disconnected unexpectedly
lda: Fatal: Internal error occurred. Refer to server log for more information.
auth: Fatal: master: service(auth): child 30757 killed with signal 11 (core dumped)
auth: Fatal: master: service(auth): child 30976 killed with signal 11 (core dumped)
lda: Error: userdb lookup([email protected]): Disconnected unexpectedly
08:18:07 lda: Fatal: Internal error occurred. Refer to server log for more information.
lda: Error: userdb lookup([email protected]): Disconnected unexpectedly
lda: Fatal: Internal error occurred. Refer to server log for more information.
auth: Fatal: master: service(auth): child 31229 killed with signal 11 (core dumped)
/var/log/dovecot-info.log [无错误]
Aug 02 10:22:24 aauth-worker(31671): Info: passwd([email protected],myip): unknown user
Aug 02 10:22:24 imap-login: Info: Login: user=<[email protected]>, method=CRAM-MD5, rip=myip, lip=123.123.123.123, mpid=31673, session=<my session>
/var/log/dovecot-debug.log [无错误,BASE64 解码]
auth: Debug: auth client connected (pid=0)
auth: Debug: client in: AUTH 1 CRAM-MD5 service=smtp nologin lip=123.123.123.123 rip=myip
auth: Debug: client passdb out: CONT 1 <[email protected]>
auth: Debug: client in: CONT 1 [email protected] [some hash..] (previous base64 data may contain sensitive data)
auth: Debug: password([email protected],myip): passdb doesn't support credential lookups
auth-worker(31687): Debug: Loading modules from directory: /usr/lib64/dovecot/auth
auth-worker(31687): Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_mysql.so
auth-worker(31687): Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
auth-worker(31687): Debug: sql([email protected],myip): query: SELECT username AS user,password FROM mailbox WHERE username = '[email protected]' AND active='1'
auth: Debug: password([email protected],myip): Credentials: [some hash]
auth: Debug: client passdb out: OK 1 [email protected]
SQL 日志 [没有错误,但没有关于邮箱的查询。为什么???]
/usr/sbin/mysqld, Version: 10.1.16-MariaDB (MariaDB Server). started with:
Tcp port: 0 Unix socket: (null)
Time Id Command Argument
2 Connect mymaildb@localhost as anonymous on mymaildb
2 Query SELECT username AS user,password FROM mailbox WHERE username = '[email protected]' AND active='1'
3 Connect mymaildb@localhost as anonymous on mymaildb
3 Query SELECT goto FROM alias WHERE address='mydomain123.com' AND active = '1'
4 Connect mymaildb@localhost as anonymous on mymaildb
4 Query SELECT domain FROM domain WHERE domain='mydomain123.com' AND active = '1'
3 Query SELECT goto FROM alias WHERE address='[email protected]' AND active = '1'
3 Query SELECT goto FROM alias WHERE address='[email protected]' AND active = '1'
SQL 日志(向 root 发送 OK 邮件)
5 Connect mymaildb@localhost as anonymous on mymaildb
5 Query SELECT goto FROM alias WHERE address='mydomain123.com' AND active = '1'
6 Connect mymaildb@localhost as anonymous on mymaildb
6 Query SELECT domain FROM domain WHERE domain='mydomain123.com' AND active = '1'
7 Connect mymaildb@localhost as anonymous on mymaildb
7 Query SELECT username AS user,password FROM mailbox WHERE username = '[email protected]' AND active='1'
7 Quit
5 Query SELECT goto FROM alias WHERE address='root@localhost' AND active = '1'
8 Connect mymaildb@localhost as anonymous on mymaildb
8 Query SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = 'localhost' and alias.address = CONCAT('root', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
9 Connect mymaildb@localhost as anonymous on mymaildb
9 Query SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = 'localhost' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
5 Query SELECT goto FROM alias WHERE address='root' AND active = '1'
5 Query SELECT goto FROM alias WHERE address='@localhost' AND active = '1'
9 Query SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = 'localhost' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
5 Query SELECT goto FROM alias WHERE address='localhost' AND active = '1'
6 Query SELECT domain FROM domain WHERE domain='localhost' AND active = '1'
8 Quit
6 Quit
9 Quit
5 Quit
答案1
从您的 来看/var/log/dovecot.log
,您的lda
(本地送货代理)无法从数据库中查找收件人的姓名。因此,您的问题可能与之SQL
相关。我还看到您正在使用anonymous
用户进行查找(顺便说一句,这是不好的做法)。因此,首先您需要确保anonymous
允许用户执行全部所需的查询。您还可以检查SQL
服务器日志中的错误并将其发布在此处(如果有)。