Cara paling sederhana untuk menyiapkan server email yang aman, IMAP,? [Tutup]

17

Saya ingin menyingkirkan Google sebagai penyedia email, dan mengatur solusi email lengkap di server khusus saya. Masalahnya: Saya berharap pengaturan menjadi sesederhana mungkin, sehingga tidak akan merepotkan untuk mengatur semuanya lagi jika ada masalah.

Prasyarat

  • Hanya satu akun pengguna di mesin.
    • (nama diti; email utama [email protected]; alias lain dialihkan tetapi klien email dapat mengelola alias yang berbeda dan bereaksi sesuai itu)
  • Lebih disukai tidak menggunakan MySQL.
    • (dalam hal cadangan & pemulihan data serta untuk kesederhanaan, lebih baik jika seseorang tidak menginstal & mengamankan MySQL sebelum mendapatkan server e-mail fungsional)
  • E-mail dapat diakses (IMAP dan SMTP) dari luar.
  • Enkripsi SSL / TLS untuk otentikasi IMAP dan SMTP (Saya menggunakan sertifikat CAcert , apakah itu penting?).

Saya percaya bahwa kesederhanaan, akses IMAP / SMTP, dan autentikasi yang aman, adalah fitur "dasar" yang semua orang ingin hengkang dari Google / apa pun yang diinginkan. Jika saya salah dan ada solusi yang lebih sederhana (misalnya, solusi likeCloud-like, dengan semua yang disertakan), saya akan senang mendengarnya.

Saya pikir kombinasi Postfix dan Dovecot akan menjadi jalan yang harus ditempuh. Ngomong-ngomong, saya menjalankan Debian.

Info yang saya temukan sejauh ini

  • Sebuah artikel Perancis menjelaskan dalam sangat panjang Rincian cara mengatur lengkap, solusi aman e-mail. Itu panjang, sulit untuk dirawat, lebih sulit untuk backup & restore, dll. Selain itu, apakah cache DNS diperlukan?
  • Wiki Gentoo ( Complete_Virtual_Mail_Server/SSL_Certificateshalaman) menyebutkan penggunaan sertifikat CAcert, tetapi tidak jelas tentang hal itu (apakah semua SubjectAltNamesubdomain itu diperlukan?), Juga tidak menggunakan Postfix (saya pernah membaca bahwa Kurir lebih sulit).
  • Berbagai tutorial tentang hosting sendiri, semuanya berbeda, jarang menggambarkan apa yang mereka lakukan dan mengapa (email yang dihosting sendiri dengan akses jarak jauh tampaknya rumit untuk disiapkan, jadi mengapa hanya menyediakan daftar perintah tanpa penjelasan untuk "boneka?") .

Saya harap saya telah menanyakan hal yang benar, dan mereka tidak terlalu konyol.

Diti
sumber
1
Adakah gagasan bagaimana pertanyaan ini dapat diulang dan dibuka kembali?
Diti

Jawaban:

19
  • Tidak, tidak perlu membuat cache DNS di server. Server harus menggunakan resolver caching DNS yang ada di suatu tempat di dekatnya, tetapi sebagian besar perusahaan hosting sudah menjalankan resolver mereka sendiri untuk seluruh pusat data dan mengonfigurasi server untuk menggunakannya secara default.

  • Secara default, Postfix dan Dovecot menggunakan akun lokal untuk semuanya. Jika Anda memiliki nama akun Linux diti, Anda dapat masuk ke Dovecot dengannya, dan Anda dapat mengatur Postfix untuk memvalidasi login SMTP terhadap Dovecot .

  • Jika Anda baik-baik saja dengan membuat semua email masuk ke akun yang sama, Anda dapat mengatur alias biasa (seperti dalam, /etc/aliases) untuk mengarahkan ulang surat ke kra@atau postmaster@ke ditiakun.

  • Semua subjectAltNames itu tidak perlu. Satu-satunya yang Anda butuhkan adalah nama domain yang akan Anda gunakan , misalnya mail.diti.meatau glaux.diti.me. Saya tidak yakin apakah Anda perlu memasukkan domain itu sendiri (yaitu diti.me).


Berikut ini mengasumsikan bahwa domain sudah memiliki catatan MX yang dikonfigurasi untuk menunjuk pada server ini. Saya biasanya mencoba untuk menjaga konfigurasi saya cukup jelas, karena saya selalu bertanya-tanya "untuk apa ini" beberapa bulan kemudian.

1. Pertama, instal paket postfixdan dovecot-imapd. Ketika ditanya tentang konfigurasi Postfix, pilih opsi "Situs Internet" dan masukkan diti.mesebagai nama email. Pada titik ini, Anda sudah dapat mengirim dan menerima email sebagai [email protected], dan mungkin bahkan terhubung ke IMAP.

Namun, ia belum memiliki SSL, juga tidak mengizinkan pengiriman surat melalui SMTP dari luar, atau tempat yang waras untuk menyimpan surat (standarnya adalah file mbox /var/mail, yang tidak dapat diandalkan dan memberikan kinerja yang buruk, terutama dengan IMAP).

2. Jika Anda sudah memiliki sertifikat SSL, masukkan /etc/ssl/private/diti.me.pem, dan kunci pribadi /etc/ssl/private/diti.me.key. Lokasi tepatnya sebenarnya tidak penting, tetapi di /etc/ssl/privatesanalah Debian menyimpannya.

Pastikan kedua file dimiliki oleh dan dapat dibaca oleh ssl-certgrup, sehingga Postfix dan Dovecot dapat mengaksesnya. Juga tambahkan akun kedua daemon ke grup itu menggunakan gpasswd -a.

3. Postfix yang dibuat secara otomatis Debian main.cfjuga sedikit berantakan, jadi saya akan memposting versi minimal yang sudah dibersihkan:

# Informasi server
mydomain = diti.me
myorigin = $ mydomain
  # Berbagai parameter lain menggunakan kedua variabel ini sebagai nilai default.

# Layanan SMTP
smtpd_tls_security_level = mei
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # Ini memungkinkan STARTTLS digunakan pada semua koneksi SMTP yang masuk.
  Perhatikan bahwa `postfix` harus ditambahkan ke grup` ssl-cert` untuk dapat
  # untuk mengakses file di / etc / ssl / private.

# Kebijakan
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0.0/10/104
  # Ini mencantumkan alamat IP yang dianggap "tepercaya" dan dapat digunakan
  # server ini untuk mengirim email ke luar (mis. ke domain lain). Oleh
  # default, hanya "localhost" yang diizinkan. Dari orang lain hanya mengirim email ke
  # domain dalam $ mydestination akan diterima.
mydestination = $ mydomain, localhost
  # Daftar domain untuk menerima email, dari alamat IP apa pun. 
# Pengiriman
alias_maps = hash: / etc / aliases
  # Ini membuat alias untuk seluruh sistem. Ada baiknya untuk mengaturnya secara eksplisit karena
  # Nilai defaultnya terkadang termasuk NIS, yang tidak masuk akal.
recipient_delimiter = +
  # Memberitahu postfix untuk membagi bagian lokal dari alamat pada '+' pertama,
  # yang disebut "plus-addressing": surat yang dikirim ke diti + foo @ akan dikirimkan
  # ke diti @ kotak surat.

Untuk Dovecot, Debian hanya menggunakan contoh konfigurasi standar, dan mereka cukup bagus, dengan masing-masing opsi dijelaskan.

Setiap kali Anda mengubah konfigurasi, muat ulang daemon dengan postfix reloaddan / atau doveadm reload.

4. Secara default, Postfix mengirimkan mail ke /var/mail/$USERdalam format mbox , yang cukup sederhana (Anda dapat dengan mudah melihatnya dengan editor teks) tetapi memiliki banyak masalah, terutama dengan IMAP, karena seluruh file harus ditulis ulang setiap kali Anda memindahkan pesan atau bahkan tandai satu sebagai "baca" atau "belum dibaca".

Ubah kedua daemon untuk menggunakan Maildir. (Ada format lain, tetapi mereka cenderung spesifik untuk MTA atau MDA atau server IMAP atau apa pun; Maildir didukung secara luas.)

Di /etc/postfix/main.cf, tambahkan berikut ini ke bagian "Pengiriman":

home_mailbox = Surat /

Konfigurasikan Dovecot untuk menggunakan jalur yang sama, di /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5. Pada titik tertentu, Anda perlu memberi tahu Dovecot untuk menggunakan SSL juga. Pengaturan yang relevan ada di /etc/dovecot/conf.d/10-ssl.conf. Bahkan, paket Debian untuk Dovecot sudah menggunakan SSL, meskipun dengan sertifikat yang ditandatangani sendiri yang sebagian besar tidak berguna. Konfigurasikan untuk menggunakan sertifikat Anda sendiri:

ssl = ya

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

6. Sekarang Anda dapat mengirim email ke luar dan menerimanya. Masih perlu mengkonfigurasi Postfix untuk memungkinkan Anda mengirim dari luar dengan menghubungkan dengan klien email Anda melalui SMTP.

Pertama beri tahu Postfix untuk menggunakan Dovecot untuk memverifikasi login. Instruksi berikut sebagian besar diambil dari wiki Dovecot .

/etc/dovecot/conf.d/10-master.confKebutuhan Dovecot untuk mendengarkan pada soket yang dapat diakses Postfix; konfigurasi default sudah memiliki contoh komentar:

layanan auth {
    ...
    unix_listener / var / spool / postfix / private / auth {
        mode = 0660
        user = postfix
        group = postfix
    }
    ...
}

Dan Postfix perlu menggunakannya - /etc/postfix/main.cflagi:

# Autentikasi
smtpd_sasl_type = dovecot
smtpd_sasl_path = pribadi / auth
  # Jenis lainnya yang mungkin adalah "cyrus", untuk Cyrus SASL 'saslauthd'
  # daemon Saya memilih Dovecot di sini karena berfungsi baik sebagai server SASL, dan
  # lebih mudah untuk membiarkannya menangani otentikasi untuk kedua daemon.

7. Perhatikan bahwa hal di atas tidak diatur di smtpd_sasl_auth_enablemana pun. Konvensi saat ini adalah untuk tidak mengaktifkan SMTP auth secara global, tetapi untuk menjaga tcp / 25 murni sebagai port SMTP "server-ke-server". Sementara itu, pesan baru dari pengguna diterima melalui SMTP pada tcp / 587, port "pengiriman surat", yang memerlukan otentikasi. Beberapa ISP bahkan memblokir tcp / 25 karena spam, tetapi tetap membuka tcp / 587 karena biasanya lebih aman.

Aktifkan port "Submission" /etc/postfix/master.cf, dengan SASL auth. Defaultnya master.cfsudah memiliki baris yang diperlukan yang hanya perlu dihapus komentar, meskipun beberapa dari mereka masih harus ditinggalkan.

penyerahan inet n - - - - smtpd
  -o syslog_name = postfix / submission
  -o smtpd_tls_security_level = enkripsi
    # Port "Submission" akan membutuhkan TLS, alih-alih menjadikannya opsional
  -o smtpd_sasl_auth_enable = ya
    # ... dan juga memungkinkan pengguna untuk masuk.
# -o smtpd_reject_unlisted_recipient = tidak
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
    # Keempat opsi ini dapat dikomentari; jika diaktifkan, mereka akan melakukannya
    # mengharapkan Anda untuk menetapkan aturan pembatasan khusus di 'main.cf', tetapi
    # defaultnya baik-baik saja.
  -o smtpd_recipient_restrictions = permit_sasl_authenticated, tolak
    # Default recipient_restrictions memeriksa alamat IP dan
    # $ mydestination. Untuk port "Submission", izinkan semuanya selama
    # saat pengguna masuk, tetapi tolak semua surat anonim.
  -o milter_macro_daemon_name = ORIGINATING
    # Jika nanti Anda memutuskan untuk membuat proxy DKIM atau semacamnya, ini akan memungkinkan
    # untuk membedakan email yang dikirim pengguna dari yang masuk.
    # Ini bagian dari konfigurasi default, oleh karena itu termasuk di sini juga.

Jika Anda memiliki klien email yang memerlukan port "implisit SSL" gaya lama (tcp / 465), Anda dapat menghapus komentar pada smtpsbaris master.cf- jika Anda melakukannya, pertahankan pengaturan yang serupa dengan submissionport.

8. Akhirnya siapkan alias untuk akun Anda, dengan mengedit /etc/aliases. The postmasteralias pada dasarnya diperlukan; itu adalah titik kontak jika ada masalah dengan server email Anda. Menunjuk rootdan alias serupa lainnya juga bagus.

Format dasar didokumentasikan dalam alias (5):

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

Gunakan postaliasatau newaliasesuntuk memperbarui basis data hash /etc/aliases.dbsetiap kali Anda mengedit file ini.

Sekarang, Anda masih memiliki satu akun ditisejauh Postfix dan Dovecot diperhatikan, tetapi surat yang dikirim kra@...juga diteruskan ke sana. Beberapa klien email (mis. Thunderbird) mendukung banyak "identitas" atau "personas" untuk satu server email, sehingga Anda dapat memilih di antara berbagai alamat "Dari:".

Itu saja. Saya mungkin kembali dengan instruksi untuk procmail, domain virtual, SPF, dan / atau DKIM nanti.

pengguna1686
sumber
1
Ini bagus ! Ini benar-benar adalah tutorial paling sederhana tentang e-mail hosting sendiri. Bagian yang paling membuat saya takjub adalah melihat, pada poin 1, bahwa saya memang sudah bisa mengirim dan menerima email dari / ke server saya. Bagaimanapun, saya akan mengedit pesan Anda untuk mengklarifikasi beberapa poin juga! Namun, saya tidak dapat mengatur setup email saya dari luar (maksud saya Thunderbird). Saya menggunakan mail.diti.me(= alamat IP server saya) untuk IMAP dan SMTP, domain saya sudah memiliki data MX. Apakah saya melakukan sesuatu yang salah selama pengaturan server saya, atau apakah saya hanya memiliki masalah Thunderbird?
Diti
@Diti: Sepertinya semua port yang relevan (kecuali untuk tcp / 25) di- firewall di server Anda.
user1686
Apa yang harus menjadi output ps auxw | grep "dovecot"? Saya membandingkan dengan salah satu pengaturan kompleks teman saya, dan dia memiliki dovecot-authdan imap-loginyang tidak saya miliki. Mungkinkah port benar-benar terbuka (saya tidak ingat sendiri menggunakan firewall), tetapi tanpa daemon yang diatur untuk mendengarkan port-port itu dari luar, atau apa? Ketika saya jalankan openssl s_client -connect mail.diti.me:993di server, ia berfungsi (dan mengatakan "Dovecot ready."), Tetapi tidak ada yang dari luar. Mungkin saya harus mencoba memasang firewall dan secara eksplisit mengizinkan port-port itu?
Diti
@Diti: arsitektur Dovecot berubah jauh antara v1 dan v2, sehingga Anda akan melihat proses yang berbeda - di v2, akan ada dovecot, dovecot/anvil, dovecot/log, dan lain-lain. Juga, beberapa proses hanya dimulai ketika seseorang terhubung, atau hanya ketika memverifikasi detail otentikasi.
user1686
1
@Diti: Tidak, kedua daemon mendengarkan semua antarmuka dan semua alamat secara default. Tetapi koneksi tidak ditolak - sebaliknya, server diam-diam menghentikan semua upaya koneksi (lihat pemindaian nmap yang saya tautkan), yang merupakan tanda pasti firewall di suatu tempat. Coba gunakan iptables -n -v -Luntuk memeriksa apakah ada aturan untuk menjatuhkan paket.
user1686