Postgresql Postfix:连接到 pgsql 服务器 unix:/var/run/postgresql:无法连接到服务器

Postgresql Postfix:连接到 pgsql 服务器 unix:/var/run/postgresql:无法连接到服务器

我正在尝试使用 Postfix 在实验性的 Debian 8 服务器上对 postgresql 数据库进行身份验证。我的 postgresql 配置如下:

/etc/postgresql/9.4/main/pg_hba.conf 文件:

# Database administrative login by Unix domain socket
local   all             postgres                                peer 
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
#local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.\
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5
local    mail        all                 ident map=mailmap
local   all              all                                     peer

/etc/postgresql/9.4/main/pg_ident.conf 文件:

 mailmap         dovecot                 mailreader
 mailmap         postfix                 mailreader
 mailmap         root                    mailreader

我的 Postfix 配置包含以下文件:

具有/etc/postfix/main.cf以下配置:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/pcmagas.tk/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/pcmagas.tk/privkey.pem

smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
# The path is relative to $queue_directory:
#   # postconf |grep queue_directory
#   queue_directory = /var/spool/postfix
smtpd_sasl_path = private/auth
# Do not accept SASL authentication over unencrypted connections
smtpd_tls_auth_only = yes

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases


myhostname = mail.pcmagas.tk
myorigin = /etc/mailname
mydestination = mail.pcmagas.tk,localhost

relayhost = [mail.smtp2go.com]:2525
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

#virtual mailbox
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = pcmagas.tk  
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-boxes.cf
virtual_alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf

/etc/postfix/pgsql-boxes.cf内容如下:

user=mailreader
dbname=mail
table=users
select_field=email
where_field=email
hosts=unix:/var/run/postgresql

/etc/postfix/pgsql-aliases.cf内容如下:

user=mailreader
dbname=mail
table=aliases
select_field=alias
where_field=email
hosts=unix:/var/run/postgresql

另外还ls -l /var/run/postgresql/给出了以下内容:

drwxr-s--- 2 postgres postgres 120 Ιούν 29 18:06 9.4-main.pg_stat_tmp
-rw-r--r-- 1 postgres postgres   4 Ιούν 29 17:20 9.4-main.pid

当我尝试通过sendemail命令发送本地邮件时,它会输出以下消息:

6 月 29 日 18:08:42 mailservertest sendemail[1189]: 通知 => 远程 SMTP 服务器不支持身份验证! 6 月 29 日 18:08:42 mailservertest sendemail[1189]: 警告 => 收件人被邮件服务器拒绝,错误如下: 6 月 29 日 18:08:42 mailservertest sendemail[1189]: 警告 => 收到:451 4.3.0:临时查找失败 6 月 29 日 18:08:42 mailservertest sendemail[1189]: 错误 => 退出。邮件服务器不接受任何收件人进行投递。

/var/log/mail.log文件有以下日志:

6 月 29 日 18:10:38 MailserverTest postfix/postscreen[1202]: 从 [::1]:32932 连接到 [::1]:25 6 月 29 日 18:10:38 MailserverTest postfix/postscreen[1202]: 列入白名单 [::1]:32932 6 月 29 日 18:10:38 MailserverTest postfix/smtpd[1203]: 从 localhost[::1] 连接 6 月 29 日 18:10:38 MailserverTest postfix/trivial-rewrite[1205]: 警告:连接到 pgsql 服务器 unix:/var/run/postgresql:无法连接到服务器:没有此文件或目录??服务器是否在本地运行并接受??Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?? 6 月 29 日 18:10:38 MailserverTest postfix/trivial-rewrite[1205]: 警告:pgsql:/etc/postfix/pgsql-aliases.cf:表查找问题 6 月 29 日 18:10:38 MailserverTest postfix/trivial-rewrite[1205]: 警告:virtual_alias_domains 查找失败 6 月 29 日 18:10:38 MailserverTest postfix/trivial-rewrite[1205]: 警告:pgsql:/etc/postfix/pgsql-aliases.cf:表查找问题 6 月 29 日 18:10:38 MailserverTest postfix/trivial-rewrite[1205]: 警告:virtual_alias_domains 查找失败 6 月 29 日 18:10:38 MailserverTest postfix/smtpd[1203]: NOQUEUE:拒绝:来自 localhost[::1] 的 RCPT: 451 4.3.0:临时查找失败;来自= 到= proto=ESMTP helo= 6 月 29 日 18:10:38 MailserverTest postfix/smtpd[1203]:从 localhost[::1] 进行 RCPT 后丢失连接 6 月 29 日 18:10:38 MailserverTest postfix/smtpd[1203]:断开与 localhost[::1] 的连接

我使用的数据库还有下表:

 Schema |  Name   | Type  |   Owner    
--------+---------+-------+------------
 public | aliases | table | mailreader
 public | users   | table | mailreader

每个表具有以下化学性质:

mail=> \d users
                Table "public.users"
  Column  |           Type           |   Modifiers   
----------+--------------------------+---------------
 email    | text                     | not null
 password | text                     | not null
 maildir  | text                     | not null
 created  | timestamp with time zone | default now()

mail=> \d aliases
  Table "public.aliases"
 Column | Type | Modifiers 
--------+------+-----------
 alias  | text | not null
 email  | text | not null

此外,postgresql 还监听 unix 套接字:

netstat -xlnp | grep postgresql
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
unix  2      [ ACC ]     STREAM     LISTENING     11651    -                   /var/run/postgresql/.s.PGSQL.5432

你们知道为什么我会遇到这些错误以及如何修复它们吗?

答案1

最后,我需要切换到主机身份验证,效果非常好:

将该pg_hba.conf行更改为:host mail mailreader 127.0.0.1/32 ident map=mailmap

另外,在 postgresql 中sudo -u postgres psql(通常)通过执行以下命令为用户设置密码mailreader

ALTER USER mailreader WITH PASSWORD '^password_here^'

然后同时打开/etc/postfix/pgsql-boxes.cf/etc/postfix/pgsql-aliases.cf更改

hosts=unix:/var/run/postgresql 

排成一行

hosts=localhost

还可以像这样设置password上述两个文件的字段:

password=^put the password here^

答案2

显然,postgres 没有监听套接字:

ls -l /var/run/postgresql/ 还提供以下内容:

drwxr-s--- 2 postgres postgres 120 Ιούν 29 18:06 9.4-main.pg_stat_tmp -rw-r--r-- 1 postgres postgres 4 Ιούν 29 17:20 9.4-main.pid

要启用套接字端点,请unix_socket_directories在 postgres conf 中进行配置(并确保服务器实际正在运行)。

答案3

您必须在 pg_hba.conf 中定义邮件阅读器。

相关内容