Điểm:1

Added dkimproxy to OpenSMTPD ... mail loop when sending to my own domain

lá cờ in

I have a nicely working OpenSMTPD configuration and I added dkimproxy to it.

Everything is working nicely and mail-tester, etc., all report that I have proper DKIM signing and my email score is 10/10, etc.

The problem is ...

If I attempt to send an email from [email protected] to [email protected] the mail server gets into a loop and the mail never gets sent. I see this in maillog:

Nov 15 08:34:13 mail dkimproxy.out[38686]: DKIM signing - signed; message-id=<[email protected]>, signer=<[email protected]>, from=<[email protected]>
Nov 15 08:34:13 mail smtpd[33463]: 4dea90938ef29e98 smtp message msgid=0b62ff80 size=104666 nrcpt=1 proto=ESMTP
Nov 15 08:34:13 mail smtpd[33463]: 4dea90938ef29e98 smtp envelope evpid=0b62ff80eb408785 from=<> to=<[email protected]>                                                               
Nov 15 08:34:13 mail smtpd[33463]: 4dea9092f4274d88 mta delivery evpid=6fe8c750a74f16ac from=<> to=<[email protected]> rcpt=<-> source="200.100.240.135" relay="200.100.240.135 (mail.mydomain.com)" delay=1s result="Ok" stat="250 2.0.0 0b62ff80 Message accepted for delivery"

... and it loops like that maybe 50 times over and over - eventually it gives up with this error:

Nov 15 08:34:18 mail smtpd[33463]: warn: loop detected                                                                                                                                            
Nov 15 08:34:18 mail smtpd[33463]: 4dea9097226c93aa smtp failed-command command="DATA" result="500 5.4.6 Routing loop detected: Loop detected"                                                    
Nov 15 08:34:18 mail smtpd[33463]: 4dea90969c6cf495 mta delivery evpid=49514d020281ac48 from=<> to=<[email protected]> rcpt=<-> source="200.100.240.135" relay="200.100.240.135 (mail.mydomain.com)" delay=1s result="PermFail" stat="500 5.4.6 Routing loop detected: Loop detected"

I have no idea what the issue is. This only happens when I send email to myself or to another user with this domain that is hosted on this mail server.

# cat dkimproxy_in.conf

# specify what address/port DKIMproxy should listen on
listen    200.100.240.135:10025

# specify what address/port DKIMproxy forwards mail to
relay     200.100.240.135:10026


# cat dkimproxy_out.conf 

# specify what address/port DKIMproxy should listen on
listen    200.100.240.135:10027

# specify what address/port DKIMproxy forwards mail to
relay     200.100.240.135:10028

# specify what domains DKIMproxy can sign for (comma-separated, no spaces)
domain    mydomain.com

# specify what signatures to add
signature dkim(c=relaxed)
signature domainkeys(c=nofws)

# specify location of the private key
keyfile   /root/dkim.private.key

# specify the selector (i.e. the name of the key record put in DNS)
selector  selector1

# control how many processes DKIMproxy uses
#  - more information on these options (and others) can be found by
#    running `perldoc Net::Server::PreFork'.
#min_servers 5
#min_spare_servers 2

... and that's everything ... thank you.

EDIT - here is the opensmtpd.conf:

table aliases file:/usr/local/etc/mail/aliases

filter check_dyndns phase connect match rdns regex \
    { '.*\.dyn\..*', '.*\.dsl\..*' } \
    disconnect "550 no residential connections"

filter check_rdns phase connect match !rdns \
    disconnect "550 no rDNS"

filter check_fcrdns phase connect match !fcrdns \
    disconnect "550 no FCrDNS"

listen on 200.100.240.135 filter { check_dyndns, check_rdns, check_fcrdns }

listen on 200.100.240.135 port 10028 tag DKIM

listen on 200.100.240.135 port submission

action "local_mail" mbox alias <aliases>
action "relay_dkim" relay host smtp://200.100.240.135:10027
action "outbound" relay helo mail.mydomain.com
    
match from any mail-from "[email protected]" action "local_mail"

match tag DKIM for any action "outbound"
match for any action "relay_dkim"

match from any for domain "mydomain.com" action "local_mail"
match for local action "local_mail"

match from any auth for any action "outbound"
match for any action "outbound"
Paul avatar
lá cờ cn
Bạn đang sử dụng hệ điều hành nào? Bạn có thể vui lòng đăng `smtpd.conf` không?
user227963 avatar
lá cờ in
Hệ điều hành là FreeBSD. Tôi có thể đăng smtpd.conf nhưng một lần nữa, mọi thứ đều hoạt động tốt - điểm hoàn hảo từ trình kiểm tra thư, ký DKIM rất tuyệt ... mọi thứ đều hoạt động tốt và tôi có thể gửi email cho tên miền của mình trước khi thêm dkimproxy ... chỉ SAU KHI thêm dkimproxy mà tôi nhận được một vòng lặp thư với tên miền của riêng mình ....
user227963 avatar
lá cờ in
OK, đã thêm smtpd.conf ...
Paul avatar
lá cờ cn
Nếu tất cả những thứ này nằm trên cùng một máy chủ, việc không sử dụng `lo0` hoặc `127.0.0.1` là bất thường. Có lý do cụ thể nào khiến bạn sử dụng DKIMproxy không? Gói đó dường như không được cập nhật trong mười năm hoặc lâu hơn, ngoài ra, có thể dễ dàng tìm thấy các ví dụ cấu hình cho các công cụ được sử dụng bởi những người bảo trì OpenSMTPD, chẳng hạn như `rspamd` trong các cổng FreeBSD, tốt nhất tôi có thể nói, và nằm trong `smtpd.conf(5)`. Đánh giá gần hơn theo thứ tự `trận đấu` vì `smtpd` "quy tắc trận đấu được đánh giá tuần tự, với trận đấu đầu tiên chiến thắng."
user227963 avatar
lá cờ in
Tôi phải sử dụng dkimproxy vì có một vấn đề tương thích nhị phân freebsd kỳ lạ với rspamd (và điểm người gửi). Vì vậy, tôi đang sử dụng dkimproxy, một lần nữa, HOẠT ĐỘNG TUYỆT VỜI ... chỉ là vòng lặp kỳ lạ này gửi đến miền của riêng tôi từ miền của riêng tôi ...
Paul avatar
lá cờ cn
Có lý do nào bạn đang sử dụng địa chỉ IP giao diện bên ngoài thay vì loopback không?
Điểm:1
lá cờ cn

Câu trả lời này được viết với giả định không có lý do gì để sử dụng giao diện bên ngoài cho các quy trình nội bộ. Câu hỏi không bao gồm pf.conf cấu hình có thể có cài đặt xung đột với quá trình xử lý thư thông thường khi sử dụng giao diện không phải loopback và nên có đặt bỏ qua trên lo hoặc cấu hình tương đương.

smtpd.conf:

# Xác minh đây là vị trí chính xác của bí danh, thường là
# nằm trong /etc/mail/aliases. Nếu bạn đã thay đổi bí danh
# từ mặc định, hãy đảm bảo chạy bí danh mới.
tệp bí danh bảng:/usr/local/etc/mail/aliases

bộ lọc pha check_dyndns kết nối khớp rdns regex \
    { '.*\.dyn\..*', '.*\.dsl\..*' } \
    ngắt kết nối "550 không có kết nối dân cư"

bộ lọc check_rdns giai đoạn kết nối phù hợp !rdns \
    ngắt kết nối "550 không có rDNS"

bộ lọc check_fcrdns giai đoạn kết nối phù hợp !fcrdns \
    ngắt kết nối "550 không có FCrDNS"

nghe trên 127.0.0.1 port 10028 tag DKIM
nghe trên bộ lọc 200.100.240.135 \
    { check_dyndns, check_rdns, check_fcrdns }
lắng nghe khi gửi cổng 200.100.240.135

hành động "local_mail" bí danh mbox <bí danh>
hành động "relay_dkim" máy chủ chuyển tiếp smtp+notls://127.0.0.1:10027
hành động chuyển tiếp "hướng ngoại" helo mail.mydomain.com

đối sánh thẻ DKIM cho bất kỳ hành động nào "đi"
khớp thư từ hành động "[email protected]" "local_mail"
khớp từ bất kỳ hành động nào đối với tên miền "mydomain.com" "local_mail"
đối sánh từ bất kỳ xác thực nào cho bất kỳ hành động nào "hướng ngoại"
khớp với hành động cục bộ "local_mail"
phù hợp với bất kỳ hành động nào "relay_dkim"

# Tôi giải thích điều này là dư thừa:
# phù hợp với bất kỳ hành động nào "ra nước ngoài"

# Dòng cấu hình ban đầu này có vẻ vô nghĩa vì
# "mail-from" cũng là "từ bất kỳ", nên đã bỏ "từ bất kỳ"
# khớp với mọi thư-từ hành động "[email protected]" "local_mail"

Mặc dù dkimproxy_in.conf được định cấu hình, hiện tại không có xác thực tiêu đề DKIM trong tin nhắn đã nhận vì điều này không được định cấu hình trong bản gốc smtpd.conf, vì vậy tôi đã không thêm nó.

dkimproxy_in.conf:

# chỉ định địa chỉ/cổng DKIMproxy sẽ nghe trên
nghe 127.0.0.1:10025

# chỉ định địa chỉ/cổng DKIMproxy chuyển tiếp thư đến
chuyển tiếp 127.0.0.1:10026

dkimproxy_out.conf:

# chỉ định địa chỉ/cổng DKIMproxy sẽ nghe trên
nghe 127.0.0.1:10027

# chỉ định địa chỉ/cổng DKIMproxy chuyển tiếp thư đến
chuyển tiếp 127.0.0.1:10028

# chỉ định miền mà DKIMproxy có thể đăng nhập (phân tách bằng dấu phẩy, không có dấu cách)
tên miền mydomain.com

# chỉ định những chữ ký để thêm
chữ ký dkim(c=thoải mái)
tên miền chữ ký (c=nofws)

# chỉ định vị trí của khóa riêng
tệp khóa /root/dkim.private.key

# chỉ định bộ chọn (tức là tên của bản ghi chính được đặt trong DNS)
bộ chọn bộ chọn1

# kiểm soát số lượng quy trình DKIMproxy sử dụng
# - bạn có thể tìm thêm thông tin về các tùy chọn này (và các tùy chọn khác) bằng cách
# chạy `perldoc Net::Server::PreFork'.
#min_servers 5
#min_spare_servers 2
Paul avatar
lá cờ cn
Có thể điều này vẫn cần một số điều chỉnh. Hãy thử nghiệm và nhận xét.
user227963 avatar
lá cờ in
Cảm ơn bạn rất nhiều - điều này thực sự đã giải quyết được vòng lặp thư.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.