Cách đơn giản nhất để thiết lập một máy chủ email, IMAP, an toàn? [đóng cửa]


17

Tôi muốn thoát khỏi Google với tư cách là nhà cung cấp email và thiết lập một giải pháp email hoàn chỉnh trên máy chủ chuyên dụng của tôi. Vấn đề: Tôi muốn thiết lập đơn giản nhất có thể, để không phải thiết lập lại mọi thứ nếu có vấn đề.

Điều kiện tiên quyết

  • Chỉ có một tài khoản người dùng trên máy.
    • (tên diti; e-mail chính kra@diti.me; các bí danh khác được chuyển hướng nhưng một ứng dụng khách email có thể quản lý các bí danh khác nhau và phản ứng tương ứng)
  • Tốt nhất là không sử dụng MySQL.
    • (trong trường hợp sao lưu và khôi phục dữ liệu cũng như để đơn giản, sẽ tốt hơn nếu người ta không cài đặt & bảo mật MySQL trước khi nhận được một máy chủ email chức năng)
  • E-mail có thể được truy cập (IMAP và SMTP) từ bên ngoài.
  • Mã hóa SSL / TLS để xác thực IMAP và SMTP (Tôi đang sử dụng chứng chỉ CAcert , có vấn đề gì không?).

Tôi tin rằng tính đơn giản, quyền truy cập IMAP / SMTP và xác thực an toàn là những tính năng cơ bản trên cơ sở mà mọi người mong muốn rời khỏi Google / bất cứ điều gì khác, muốn có. Nếu tôi nhầm lẫn và có một giải pháp đơn giản hơn (ví dụ: một giải pháp giống như của riêng Apple, với mọi thứ được bao gồm), tôi sẽ rất vui khi nghe.

Tôi nghĩ rằng sự kết hợp của Postfix và Dovecot sẽ là con đường để đi. Nhân tiện, tôi đang chạy Debian.

Thông tin tôi đã tìm thấy cho đến nay

  • Một bài báo tiếng Pháp mô tả rất chi tiết về cách thiết lập một giải pháp email hoàn chỉnh, an toàn. Nó dài, khó bảo trì hơn, khó sao lưu và khôi phục hơn, v.v ... Bên cạnh đó, bộ đệm DNS có cần thiết không?
  • Gentoo wiki ( Complete_Virtual_Mail_Server/SSL_Certificatestrang) đề cập đến việc sử dụng chứng chỉ CAcert, nhưng không rõ ràng về nó (tất cả các SubjectAltNametên miền phụ đó có cần thiết không?), Cũng không sử dụng Postfix (Tôi đã đọc rằng Chuyển phát nhanh khó khăn hơn).
  • Nhiều hướng dẫn khác nhau về tự lưu trữ, tất cả đều khác nhau, hiếm khi mô tả những gì họ đang làm và tại sao (e-mail tự lưu trữ với quyền truy cập từ xa có vẻ phức tạp để thiết lập, vậy tại sao chỉ cung cấp một danh sách các lệnh mà không cần giải thích cho các công cụ giả mạo? .

Tôi hy vọng tôi đã hỏi những điều đúng đắn, và rằng chúng không quá ngớ ngẩn.


1
Bất kỳ ý tưởng làm thế nào câu hỏi này có thể được rephras và mở lại?
Diti

Câu trả lời:


19
  • Không, không bắt buộc phải thiết lập bộ đệm DNS trên máy chủ. Máy chủ nên sử dụng trình phân giải DNS bộ đệm ẩn ở đâu đó gần đó, nhưng hầu hết các công ty lưu trữ đã chạy trình phân giải riêng của họ cho toàn bộ trung tâm dữ liệu và định cấu hình máy chủ để sử dụng chúng theo mặc định.

  • Theo mặc định, cả Postfix và Dovecot đều sử dụng tài khoản cục bộ cho mọi thứ. Nếu bạn có tài khoản Linux có tên diti, bạn có thể đăng nhập vào Dovecot bằng tài khoản đó và bạn có thể thiết lập Postfix để xác thực đăng nhập SMTP chống lại Dovecot .

  • Nếu bạn ổn với việc chuyển tất cả thư vào cùng một tài khoản, bạn có thể thiết lập các bí danh đơn giản (như trong /etc/aliases) để chuyển hướng thư cho kra@hoặc postmaster@đến dititài khoản.

  • Tất cả những chủ đề đó không cần thiết. Những cái duy nhất bạn cần là cho tên miền bạn sẽ thực sự sử dụng , ví dụ mail.diti.mehoặc glaux.diti.me. Tôi không chắc chắn nếu bạn cần bao gồm chính tên miền (tức là diti.me).


Giả định sau đây cho rằng tên miền đã có các bản ghi MX được định cấu hình để trỏ đến máy chủ này. Tôi thường cố gắng giữ cho cấu hình của mình rõ ràng một cách hợp lý, vì tôi luôn tự hỏi "cái quái gì thế này" vài tháng sau.

1. Đầu tiên, cài đặt postfixdovecot-imapdgói. Khi được nhắc về cấu hình Postfix, chọn tùy chọn "Trang web Internet" và nhập diti.melàm tên thư. Tại thời điểm này, bạn đã có thể gửi và nhận thư dưới dạng diti@diti.mevà thậm chí có thể kết nối với IMAP.

Tuy nhiên, nó không có SSL, cũng không cho phép gửi thư qua SMTP từ bên ngoài, cũng không phải là nơi lưu trữ thư (mặc định là tệp mbox /var/mail, không đáng tin cậy và cho hiệu suất kém, đặc biệt là với IMAP).

2. Nếu bạn đã có chứng chỉ SSL, hãy đặt nó vào /etc/ssl/private/diti.me.pemvà khóa riêng /etc/ssl/private/diti.me.key. Vị trí chính xác không thực sự quan trọng, nhưng /etc/ssl/privatelà nơi Debian giữ chúng.

Đảm bảo rằng cả hai tệp đều thuộc sở hữu và có thể đọc được của ssl-certnhóm, để Postfix và Dovecot có thể truy cập chúng. Đồng thời thêm cả tài khoản của daemon vào nhóm đó bằng cách sử dụng gpasswd -a.

3. Postfix được tạo tự động của Debian cũng main.cflà một mớ hỗn độn, vì vậy tôi sẽ chỉ đăng một phiên bản tối thiểu được dọn sạch:

# Thông tin máy chủ
tên miền của tôi = diti.me
myorigin = $ mydomain
  # Nhiều tham số khác sử dụng hai biến này làm giá trị mặc định.

# Dịch vụ SMTP
smtpd_tls_security_level = có thể
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # Điều này cho phép STARTTLS được sử dụng trên tất cả các kết nối SMTP đến.
  # Lưu ý rằng `postfix` phải được thêm vào nhóm` ssl-cert` để có thể
  # để truy cập các tệp trong / etc / ssl / private.

# Chính sách
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0THER/104
  # Điều này liệt kê các địa chỉ IP được coi là "đáng tin cậy" và có thể sử dụng
  # máy chủ này để gửi thư ra bên ngoài (tức là đến các tên miền khác). Bởi
  # mặc định, chỉ cho phép "localhost". Từ những người khác chỉ gửi thư đến
  # tên miền trong $ mydestination sẽ được chấp nhận.
mydestination = $ mydomain, localhost
  # Danh sách các tên miền để chấp nhận thư cho, từ bất kỳ địa chỉ IP nào. 
# Chuyển
alias_maps = hash: / etc / bí danh
  # Điều này giữ bí danh trên toàn hệ thống. Thật tốt khi đặt nó rõ ràng bởi vì
  # giá trị mặc định đôi khi bao gồm NIS, không có nghĩa.
receive_d Friiter = +
  # Yêu cầu postfix chia phần cục bộ của địa chỉ ở '+' đầu tiên,
  # cái gọi là "địa chỉ cộng": thư được gửi tới diti + foo @ sẽ được gửi
  # vào hộp thư diti @.

Đối với Dovecot, Debian chỉ sử dụng các cấu hình ví dụ mặc định và chúng đủ tốt, với mỗi tùy chọn được mô tả.

Bất cứ khi nào bạn thay đổi cấu hình, hãy tải lại trình nền với postfix reloadvà / hoặc doveadm reload.

4. Theo mặc định, Postfix chuyển thư đến /var/mail/$USERở định dạng mbox , đủ đơn giản (bạn có thể dễ dàng xem nó bằng trình soạn thảo văn bản) nhưng có nhiều vấn đề, đặc biệt là với IMAP, vì toàn bộ tệp phải được viết lại bất cứ khi nào bạn di chuyển tin nhắn hoặc thậm chí đánh dấu một là "đọc" hoặc "chưa đọc".

Thay đổi cả hai trình nền để sử dụng Maildir. (Có các định dạng khác, nhưng chúng có xu hướng cụ thể đối với máy chủ MTA hoặc MDA hoặc IMAP hoặc bất cứ điều gì; Maildir được hỗ trợ rộng rãi.)

Trong /etc/postfix/main.cf, thêm phần sau vào phần "Giao hàng":

home_mailbox = Thư /

Định cấu hình Dovecot để sử dụng cùng một đường dẫn, trong /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5. Tại một số điểm, bạn cần nói với Dovecot để sử dụng SSL. Các cài đặt có liên quan là trong /etc/dovecot/conf.d/10-ssl.conf. Trên thực tế, gói Debian cho Dovecot đã sử dụng SSL, mặc dù với chứng chỉ tự ký hầu như vô dụng. Cấu hình nó để sử dụng chứng chỉ của riêng bạn:

ssl = có

ssl_cert = </etc/ssl/private/diti.me-mail.pem
ssl_key = </etc/ssl/private/diti.me-mail.key

6. Bây giờ bạn có thể gửi thư ra bên ngoài và nhận nó. Vẫn cần phải định cấu hình Postfix để cho phép bạn gửi từ bên ngoài bằng cách kết nối với ứng dụng thư khách của bạn qua SMTP.

Đầu tiên hãy báo cho Postfix sử dụng Dovecot để xác minh thông tin đăng nhập. Các hướng dẫn sau đây chủ yếu được lấy từ wiki của Dovecot .

/etc/dovecot/conf.d/10-master.confNhu cầu của Dovecot để lắng nghe một ổ cắm mà Postfix có thể truy cập; cấu hình mặc định đã có một ví dụ nhận xét:

dịch vụ xác thực {
    ...
    unix_listener / var / spool / postfix / private / auth {
        chế độ = 0660
        người dùng = hậu tố
        nhóm = hậu tố
    }
    ...
}

Và Postfix cần sử dụng nó - /etc/postfix/main.cfmột lần nữa:

# Xác thực
smtpd_sasl_type = dovecot
smtpd_sasl_path = private / auth
  # Loại khác có thể là "cyrus", cho Cyrus SASL 'saslauthd'
  # daemon. Tôi chọn Dovecot ở đây vì nó hoạt động tốt như một máy chủ SASL và
  # nó chỉ đơn giản hơn để cho phép nó xử lý xác thực cho cả hai trình nền.

7. Lưu ý rằng những điều trên không được đặt ở smtpd_sasl_auth_enablebất cứ đâu. Quy ước hiện tại là không kích hoạt SMTP auth trên toàn cầu mà chỉ giữ tcp / 25 hoàn toàn dưới dạng cổng SMTP "máy chủ đến máy chủ". Trong khi đó, tin nhắn mới từ người dùng được chấp nhận qua SMTP trên tcp / 587, cổng "gửi thư", yêu cầu xác thực. Một số ISP thậm chí chặn tcp / 25 vì spam, nhưng vẫn mở tcp / 587 vì nó thường được bảo mật tốt hơn.

Kích hoạt cổng "Gửi" trong /etc/postfix/master.cf, với auth auth. Mặc định master.cfđã có các dòng cần thiết chỉ cần bỏ bình luận, mặc dù một số trong số chúng vẫn nên bị bỏ qua.

nộp inet n - - - - smtpd
  -o syslog_name = postfix / đệ trình
  -o smtpd_tls_security_level = mã hóa
    # Cổng "Gửi" sẽ yêu cầu TLS, thay vì làm tùy chọn
  -o smtpd_sasl_auth_enable = có
    # ... cũng như cho phép người dùng đăng nhập.
# -o smtpd numject_unlisted_recipient = không
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
    # Bốn tùy chọn này có thể được để lại nhận xét; nếu được kích hoạt, họ sẽ
    # mong bạn đặt quy tắc hạn chế tùy chỉnh trong 'main.cf', nhưng
    # những cái mặc định là tốt.
  -o smtpd_recipient_restrictions = allow_sasl_authenticated, từ chối
    # Người nhận mặc định_restrictions kiểm tra địa chỉ IP và
    # $ mydestest. Đối với cổng "Gửi", cho phép mọi thứ miễn là
    # khi người dùng đăng nhập, nhưng từ chối tất cả thư nặc danh.
  -o milter_macro_daemon_name = XUẤT XỨ
    # Nếu sau này bạn quyết định thiết lập proxy DKIM hoặc như vậy, điều này sẽ cho phép
    # nó để phân biệt thư do người dùng gửi đến những người nhận được.
    # Đây là một phần của cấu hình mặc định, do đó cũng được bao gồm ở đây.

Nếu bạn có ứng dụng thư khách yêu cầu cổng "SSL ẩn" kiểu cũ (tcp / 465), bạn có thể bỏ ghi chú các smtpsdòng trong master.cf- nếu bạn làm như vậy, hãy giữ các cài đặt tương tự như các submissioncổng.

8. Cuối cùng, thiết lập bí danh cho tài khoản của bạn, bằng cách chỉnh sửa /etc/aliases. Các postmasterbí danh được về cơ bản yêu cầu; đó là điểm liên lạc nếu có vấn đề với máy chủ thư của bạn. Chỉ rootvà các bí danh tương tự khác là tốt quá.

Định dạng cơ bản được ghi lại trong các bí danh (5):

postmaster: root
admin:      root
root:       diti
kra:        diti

Sử dụng postaliashoặc newaliasesđể cập nhật cơ sở dữ liệu băm /etc/aliases.dbmỗi khi bạn chỉnh sửa tệp này.

Bây giờ, bạn vẫn còn một tài khoản được gọi ditilà Postfix và Dovecot có liên quan, nhưng thư được gửi đến kra@...cũng được chuyển tiếp đến đó. Một số ứng dụng thư khách (ví dụ Thunderbird) hỗ trợ nhiều "danh tính" hoặc "personas" cho một máy chủ thư, do đó bạn có thể chọn giữa các địa chỉ "Từ:" khác nhau.

Đó là về nó. Tôi có thể quay lại với hướng dẫn cho procmail, tên miền ảo, SPF và / hoặc DKIM sau.


1
Điều này thật tuyệt ! Nó thực sự là hướng dẫn đơn giản nhất về tự lưu trữ e-mail. Phần làm tôi ngạc nhiên nhất là ở điểm 1, tôi thực sự có thể đã gửi và nhận e-mail từ / đến máy chủ của mình. Dù sao, tôi sẽ chỉnh sửa tin nhắn của bạn để làm rõ một số điểm quá! Tuy nhiên, tôi không thể quản lý để thiết lập e-mail của mình từ bên ngoài (ý tôi là Thunderbird). Tôi đang sử dụng mail.diti.me(= địa chỉ IP của máy chủ của mình) cho cả IMAP và SMTP, tên miền của tôi đã có bản ghi MX. Tôi đã làm gì sai trong quá trình thiết lập máy chủ của mình hay tôi chỉ gặp sự cố Thunderbird?
Diti

@Diti: Có vẻ như tất cả các cổng có liên quan (ngoại trừ tcp / 25) được tường lửa tại máy chủ của bạn.
grawity

Đầu ra của ps auxw | grep "dovecot"cái gì? Tôi đã so sánh với một trong những thiết lập phức tạp của bạn bè tôi, và anh ấy có dovecot-authimap-logintôi không có. Có thể các cổng thực sự đang mở (tôi không nhớ mình sử dụng tường lửa), nhưng không có trình nền nào được thiết lập để nghe các cổng đó từ bên ngoài, hoặc một cái gì đó? Khi tôi chạy openssl s_client -connect mail.diti.me:993trên máy chủ, nó hoạt động (và nói là Dovecot đã sẵn sàng. Khác), nhưng không có gì từ bên ngoài. Có lẽ tôi nên thử cài đặt tường lửa và cho phép rõ ràng những cổng đó?
Diti

@Diti: Kiến trúc Dovecot đã thay đổi đáng kể giữa v1 và v2, vì vậy bạn sẽ thấy quá trình khác nhau - trong v2, sẽ có dovecot, dovecot/anvil, dovecot/log, và những người khác. Ngoài ra, một số quy trình chỉ được bắt đầu khi ai đó kết nối hoặc chỉ khi xác minh chi tiết xác thực.
grawity

1
@Diti: Không, cả hai trình tiện ích đều nghe trên tất cả các giao diện và tất cả các địa chỉ theo mặc định. Nhưng các kết nối không bị từ chối - thay vào đó, máy chủ lặng lẽ loại bỏ tất cả các nỗ lực kết nối (xem quét nmap mà tôi đã liên kết), đó là dấu hiệu chắc chắn của tường lửa ở đâu đó. Hãy thử sử dụng iptables -n -v -Lđể kiểm tra xem có bất kỳ quy tắc nào để bỏ các gói không.
grawity
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.