Buộc mã hóa cho SMTP đi với Postfix


22

Có ai biết làm thế nào để nói với Postfix để mã hóa thư đi?

Tôi đã cấu hình nó để sử dụng mã hóa khi nhận, nhưng tôi không thể làm điều đó với thư gửi đi. Đây là main.cftập tin của tôi :

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
transport_maps = hash:/etc/postfix/transport

# tls config
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Câu trả lời:


30

smtp_tls_security_level = mã hóa hoặc smtp_enforce_tls = có

Đối với các điểm đến cụ thể, bạn có thể sử dụng smtp_tls_policy_maps

smtp_use_tls = yessmtp_enforce_tls = yes không được dùng nữa. Thay vào đó, với Postfix 2.3 và sau đó sử dụng smtp_tls_security_level .

Hãy nhớ rằng: Việc thực thi mã hóa TLS có thể gây ra sự cố gửi thư cho máy chủ SMTP, không được cấu hình TLS. Nếu máy chủ được sử dụng để gửi thư đến chỉ máy chủ nội bộ của bạn có TLS được định cấu hình, thì đó không phải là vấn đề trong trường hợp đó. Nhưng nếu máy chủ được sử dụng để gửi thư đến các máy chủ công cộng, bạn không thể cho rằng tất cả các máy chủ đều có hỗ trợ TLS. Trong trường hợp đó, hãy sử dụng smtp_tls_security_level = may


1
Tôi nghĩ rằng anh ta chỉ muốn thực thi nó từ mailclient phần mềm đến máy chủ gửi thư. Không phải từ mailserver đến mailserver (xem bình luận của anh ấy được đăng vào lúc 7 tháng 10, 10 lúc 23:26)
Cojones

4

Ý tưởng là buộc người dùng cấu hình máy khách email của họ với máy chủ smtp gửi đi được mã hóa. Với conf hiện tại, Thunderbird để lại cho họ tùy chọn liên lạc với máy chủ smtp bằng văn bản thuần túy ...

Bạn không thể tắt tùy chọn trong Thunderbird mà không biên dịch lại mã nguồn, nhưng bạn có thể định cấu hình trình nền stmpd postfix (nhận thư từ khách hàng của bạn) để thực thi mã hóa. Để làm điều đó, hãy sử dụng smtpd_tls_security_level = mã hóa , tương đương với các tùy chọn lỗi thời smtpd_use_tls = yessmtp_enforce_tls = yes . smtpd_tls_security_level = mã hóasmtp_enforce_tls = yes ngụ ý smtpd_tls_auth_only = yes

Từ tài liệu postfix về smtpd_tls_security_level = mã hóa

Mã hóa TLS bắt buộc: thông báo hỗ trợ STARTTLS cho khách hàng SMTP và yêu cầu khách hàng sử dụng mã hóa TLS. Theo RFC 2487, điều này KHÔNG PHẢI được áp dụng trong trường hợp máy chủ SMTP được tham chiếu công khai. Thay vào đó, tùy chọn này chỉ nên được sử dụng trên các máy chủ chuyên dụng.

Nếu bạn sử dụng máy chủ công cộng, bạn không thể thực thi mã hóa email trên cổng 25 / tcp. Giải pháp tốt hơn là vô hiệu hóa việc gửi thư bằng postfix smtpd daemon port 25 / tcp từ các máy khách của bạn và kích hoạt daemon gửi postfix (đó là daemon smtpd postfix đặc biệt chỉ được sử dụng để nhận thư từ các máy khách cục bộ của bạn được mô tả trong RFC 4409 chạy trên cổng 587 / tcp) . Để làm điều đó, hãy đặt smtpd_tls_security_level = may và xóa permit_sasl_authenticatedkhỏi smtpd_recipient_restrictions . Trong master.cfdòng uncomment về trình daemon:

submission inet n       -       n       -       -   submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_resrictions=permit_sasl_authenticated,reject

1

Chỉ tò mò, làm thế nào bạn nói rằng nó không sử dụng TLS? Giá trị mặc định cho smtp_tls_loglevel (khác với smtpd_tls_loglevel) là 0, vì vậy theo mặc định, bạn sẽ không thấy bất cứ điều gì về đàm phán TLS cho thư gửi đi trong nhật ký của Postfix.

Nếu bạn đặt smtp_tls_loglevel = 1 hoặc cao hơn, bạn sẽ thấy một dòng như thế này trong nhật ký khi một tin nhắn được gửi:

Ngày 7 tháng 3 22:28:10 postfix / smtp [27400]: khởi tạo công cụ TLS phía máy khách

Tôi thừa nhận rằng tôi lười biếng, nhưng ngoài điều đó (và ghi chú của tôi ở trên), cấu hình có vẻ ổn đối với tôi trong nháy mắt.


1
Tôi đã hiểu rằng Simon muốn thực thi tất cả các thư được mã hóa bằng TLS. smtp_use_tls = yes cho phép sử dụng TLS postfix, nếu máy chủ từ xa hỗ trợ nó (smtp_use_tls = yes tương đương với smtp_tls_security_level = may). Tin nhắn phù hợp nên được đặt trong maillog, nếu thư đi được mã hóa bằng TLS. Bạn đúng rằng các tùy chọn smtp_ * dành cho daemon postfix khác với smtpd_ * (smtpd_ * là để nhận thư từ máy chủ từ xa, smtp_ * dành cho thư gửi đến máy chủ từ xa).
sumar

Thật ra tôi nghĩ câu hỏi có thể hơi mơ hồ. Ít nhất tôi không thể biết Simon có muốn Postfix yêu cầu TLS hay chỉ sử dụng nó nếu máy chủ của người nhận hỗ trợ.
jlupolt

1
Cảm ơn lời nói của bạn, tôi có lẽ đã không giải thích cho tôi tốt. Ý tưởng là buộc người dùng cấu hình máy khách email của họ với máy chủ smtp gửi đi được mã hóa. Với conf hiện tại, Thunderbird để lại cho họ tùy chọn liên lạc với máy chủ smtp bằng văn bản thuần túy ... có thể tránh điều này không? Cảm ơn trước, Simon.
Simon

Cách dễ dàng để xác định xem TLS có hoạt động hay không là xem tin nhắn thô ở phía nhận và tìm kiếm Xác thực-Kết quả: domainkeys = trung tính (không có sig); Điều này cho thấy nó không sử dụng TLS
Scott Stensland
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.