Postfix:在本地通過埠 465/587 發送外發郵件
我有一個使用 postfix、dovecot、opendkim 和 spamassassin 設置的郵件伺服器。經過一番麻煩,我設法讓收到的郵件正常工作——我什至使用該伺服器設置了這個帳戶。
但是,我在發送郵件時遇到了問題。我的 ISP,雖然很胖,但阻止了通過埠 25 的通信……這意味著,顯然,發送消息不起作用。以下是嘗試發送到我的舊 Protonmail 帳戶後的日誌(來自外部機器上的 Neomutt):
postfix/qmgr[653083]: 7E2BD9006AB: from=<swurl@doma.in>, size=479, nrcpt=1 (queue active) // disconnect from external client postfix/smtp[653086]: connect to mail.protonmail.ch[185.70.41.101]:25: Connection timed out postfix/smtp[653093]: connect to mail.protonmail.ch[185.70.41.101]:25: Connection timed out postfix/smtp[653086]: connect to mailsec.protonmail.ch[185.70.40.102]:25: Connection timed out postfix/smtp[653086]: 44DED90068A: to=<oldaccount@protonmail.com>, relay=none, delay=115, delays=55/0.05/60/0, dsn=4.4.1, status=deferred (connect to mailsec.protonmail.ch[185.70.40.102]:25: Connection timed out)
所以,是的…… ISP 阻止了埠 25(傳出),所以我需要一種繞過它的方法。我經常看到的一種方法是配置為使用外部 smtpd。我要麼必須使用我的 ISP(不理想),要麼在我朋友的 VPS 上設置後綴(也不完全理想,但如果一切都失敗了,我會問他)。從技術上講,我可以要求我的 ISP 解除對 25 埠的阻塞,但這可能行不通。
但是,我希望僅使用本地後綴設置將所有外發郵件路由到外部伺服器的埠 465 或 587,**而不是25。**我在網上找不到任何關於此的資訊,並且將傳出的 smtp 埠更改為備用埠
master.cf
仍然通過 25 發送內容。那麼,我應該怎麼做呢?請記住,如果我真的無能為力,那麼我可以向我的朋友詢問他的 VPS
postconf -n
:alias_database = $alias_maps alias_maps = hash:/etc/postfix/aliases command_directory = /usr/bin compatibility_level = 3.6 daemon_directory = /usr/lib/postfix/bin data_directory = /var/lib/postfix 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 home_mailbox = Mail/Inbox/ html_directory = no inet_protocols = ipv4 mail_owner = postfix mailbox_command = /usr/lib/dovecot/deliver mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man meta_directory = /etc/postfix milter_default_action = accept milter_protocol = 6 mydestination = $myhostname $mydomain localhost localhost.localdomain mydomain = doma.in myhostname = mail.doma.in mynetworks = 127.0.0.0/8 [::1]/128 MY.IP/32 192.168.86.1 192.168.86.0/24 newaliases_path = /usr/bin/newaliases non_smtpd_milters = inet:127.0.0.1:12301 queue_directory = /var/spool/postfix readme_directory = /usr/share/doc/postfix relay_domains = $mydestination sample_directory = /etc/postfix sendmail_path = /usr/bin/sendmail setgid_group = postdrop shlib_directory = /usr/lib/postfix smtp_tls_CAfile = /etc/letsencrypt/live/doma.in/cert.pem smtp_tls_loglevel = 1 smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtp_tls_security_level = may smtpd_milters = inet:127.0.0.1:12301 smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_path = private/auth smtpd_sasl_security_options = noanonymous smtpd_sasl_tls_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_tls_auth_only = yes smtpd_tls_cert_file = /etc/letsencrypt/live/doma.in/fullchain.pem smtpd_tls_exclude_ciphers = aNULL, LOW, EXP, MEDIUM, ADH, AECDH, MD5, DSS, ECDSA, CAMELLIA128, 3DES, CAMELLIA256, RSA+AES, eNULL smtpd_tls_key_file = /etc/letsencrypt/live/doma.in/privkey.pem smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtpd_tls_security_level = may tls_preempt_cipherlist = yes unknown_local_recipient_rject_code = 550
我要求我的 ISP 解除對 25 埠的封鎖,不幸的是,公司高層根本不允許使用者使用該埠,因此無法解除封鎖。
所以正因為如此,我只是把它吸了起來,買了一個 VPS,它執行得很好。事實證明,除了郵件之外,它還可以用於很多事情,例如 VPN、用於要求更高的伺服器任務的快速 CPU(例如 Matrix 家庭伺服器)等。
不幸的是,我從來沒有設法找出如何使 postfix 表現得像這樣。如果有人確實知道如何,那麼請務必回答。
對於 ISP 阻止埠 25 的任何人,請考慮投資購買 VPS 或切換 ISP。
您可以將埠 587 用於:
postconf -ev relayhost=smtp.example.com:submission
使用埠 587 時,中繼主機可能需要身份驗證,在這種情況下,您需要在 file 中指定所需的使用者名和密碼
/etc/postfix/sasl_passwd
。如果所選中繼主機的 DNS 名稱不是其主名稱(即
dig -x <ip-address-of-relay-host>
返回中繼主機的其他名稱),那麼您可以通過將中繼主機的名稱放在括號中來覆蓋規範名稱檢查,並添加引號以保護外殼中的括號:postconf -ev "relayhost=[smtp.example.com]:submission"