วิธีที่ง่ายที่สุดในการตั้งค่าเซิร์ฟเวอร์ IMAP ที่ปลอดภัยหรือไม่ [ปิด]


17

ฉันต้องการกำจัด Google ในฐานะผู้ให้บริการอีเมลและตั้งค่าโซลูชันอีเมลแบบสมบูรณ์บนเซิร์ฟเวอร์เฉพาะของฉัน ปัญหา: ฉันหวังว่าการตั้งค่าจะง่ายที่สุดเท่าที่จะเป็นไปได้เพื่อที่จะไม่เจ็บปวดในการตั้งค่าทุกอย่างอีกครั้งหากมีปัญหา

ข้อกำหนดเบื้องต้น

  • บัญชีผู้ใช้เดียวเท่านั้นบนเครื่อง
    • (ชื่อditi; อีเมลหลักkra@diti.me; นามแฝงอื่น ๆ จะถูกเปลี่ยนเส้นทาง แต่ไคลเอนต์อีเมลสามารถจัดการนามแฝงที่แตกต่างกันและตอบสนองตาม)
  • ไม่ควรใช้ MySQL
    • (ในกรณีของการสำรองข้อมูล & การคืนค่ารวมทั้งเพื่อความเรียบง่ายมันจะดีกว่าถ้าไม่มีการติดตั้งและการรักษาความปลอดภัยของ MySQL ก่อนรับเซิร์ฟเวอร์อีเมลที่ใช้งานได้)
  • สามารถเข้าถึงอีเมลได้ (IMAP และ SMTP) จากด้านนอก
  • การเข้ารหัส SSL / TLS สำหรับการรับรองความถูกต้องของ IMAP และ SMTP (ฉันใช้ใบรับรองCAcertมันมีความสำคัญหรือไม่?)

ฉันเชื่อว่าความเรียบง่ายการเข้าถึง IMAP / SMTP และรับรองความถูกต้องปลอดภัยเป็นคุณสมบัติ "พื้นฐาน" ที่ทุกคนอยากออกจาก Google / ไม่ว่าจะต้องการอะไร หากฉันเข้าใจผิดและมีวิธีแก้ปัญหาที่ง่ายกว่า (เช่นโซลูชันของ ownCloud ที่มีทุกอย่างรวมอยู่ด้วย) ฉันยินดีที่จะได้ยิน

ฉันคิดว่าการรวมกันของ Postfix และ Dovecot น่าจะเป็นหนทางที่จะไป โดยวิธีการที่ฉันใช้ Debian

ข้อมูลที่ฉันพบมา

  • บทความฝรั่งเศสอธิบายมากรายละเอียดยาววิธีการตั้งค่าที่สมบูรณ์โซลูชันอีเมลที่ปลอดภัย มันยาว, ยากกว่าที่จะรักษา, การสำรองและเรียกคืนยากขึ้นนอกจากนี้แคช DNS จำเป็นหรือไม่
  • Gentoo wiki ( Complete_Virtual_Mail_Server/SSL_Certificatesหน้า) กล่าวถึงการใช้ใบรับรอง CAcert แต่ไม่ชัดเจนเกี่ยวกับมัน (เป็นSubjectAltNameโดเมนย่อยทั้งหมดจำเป็นหรือไม่) และไม่ใช้ Postfix (ฉันอ่าน Courier ยากกว่า)
  • บทเรียนต่าง ๆ เกี่ยวกับการโฮสต์ด้วยตนเองต่างกันทั้งหมดไม่ค่อยอธิบายสิ่งที่พวกเขากำลังทำและทำไม (อีเมลที่โฮสต์ด้วยตนเองที่มีการเข้าถึงระยะไกลดูเหมือนจะซับซ้อนในการตั้งค่าดังนั้นทำไมเพียงแค่แสดงรายการคำสั่งโดยไม่มีคำอธิบายสำหรับ "หุ่น") .

ฉันหวังว่าฉันได้ถามสิ่งที่ถูกต้องและพวกเขาไม่ได้โง่เกินไป


1
แนวคิดใดที่คำถามนี้สามารถนำมาใช้ใหม่และเปิดใหม่ได้?
Diti

คำตอบ:


19
  • ไม่ไม่จำเป็นต้องตั้งค่าแคช DNS บนเซิร์ฟเวอร์ เซิร์ฟเวอร์ควรใช้ตัวแก้ไข DNS แคชซึ่งอยู่ใกล้ ๆ แต่ บริษัท โฮสติ้งส่วนใหญ่ใช้ตัวแก้ไขของตัวเองสำหรับดาต้าเซ็นเตอร์ทั้งหมดแล้วกำหนดค่าเซิร์ฟเวอร์ให้ใช้งานโดยค่าเริ่มต้น

  • ตามค่าเริ่มต้นทั้ง Postfix และ Dovecot จะใช้บัญชีภายในสำหรับทุกสิ่ง หากคุณมีบัญชี Linux ชื่อditiคุณสามารถเข้าสู่ Dovecot กับมันและคุณสามารถตั้งค่า Postfix เพื่อเข้าสู่ระบบการตรวจสอบ SMTP กับ Dovecot

  • หากคุณพอใจกับการส่งจดหมายทั้งหมดไปที่บัญชีเดียวกันคุณสามารถตั้งค่านามแฝงธรรมดา (เหมือนใน/etc/aliases) เพื่อเปลี่ยนเส้นทางอีเมลสำหรับkra@หรือpostmaster@ไปยังditiบัญชี

  • หัวเรื่องทั้งหมดไม่จำเป็นต้องมีชื่อ คนเดียวที่คุณต้องเป็นชื่อโดเมนที่คุณกำลังจะจริงใช้เช่นหรือmail.diti.me glaux.diti.meฉันไม่แน่ใจว่าคุณจะต้องรวมโดเมนของตัวเอง (เช่นditi.me)


ต่อไปนี้จะถือว่าโดเมนมีระเบียน MX ที่กำหนดค่าให้ชี้ไปที่เซิร์ฟเวอร์นี้แล้ว ฉันมักจะพยายามทำให้การกำหนดค่าของฉันชัดเจนพอสมควรเนื่องจากฉันมักจะสงสัยว่า "สิ่งนี้คืออะไรสำหรับ" ไม่กี่เดือนต่อมา

1.ก่อนอื่นให้ติดตั้งpostfixและdovecot-imapdแพ็คเกจ เมื่อได้รับแจ้งเกี่ยวกับการกำหนดค่า Postfix ให้เลือกตัวเลือก "อินเทอร์เน็ตไซต์" และป้อนditi.meเป็นชื่ออีเมล ณ จุดนี้คุณสามารถส่งและรับจดหมายเป็นditi@diti.meและอาจเชื่อมต่อกับ IMAP

อย่างไรก็ตามมันยังไม่มี SSL หรือไม่อนุญาตให้ส่งจดหมายผ่าน SMTP จากภายนอกหรือสถานที่ที่มีเหตุผลในการจัดเก็บจดหมาย (ค่าเริ่มต้นคือไฟล์ mbox /var/mailซึ่งไม่น่าเชื่อถือและให้ประสิทธิภาพที่ไม่ดีโดยเฉพาะกับ IMAP)

2.หากคุณมีใบรับรอง SSL ใส่ไว้ในและที่สำคัญภาคเอกชนใน/etc/ssl/private/diti.me.pem /etc/ssl/private/diti.me.keyตำแหน่งที่แน่นอนนั้นไม่สำคัญ แต่/etc/ssl/privateเป็นที่ที่ Debian เก็บไว้

ตรวจสอบให้แน่ใจว่าทั้งสองไฟล์เป็นของกลุ่มและสามารถอ่านได้โดยssl-certกลุ่มเพื่อให้ Postfix และ Dovecot สามารถเข้าถึงได้ gpasswd -aนอกจากนี้ยังเพิ่มบัญชีทั้งภูตไปยังกลุ่มที่ใช้

3. Postfix ที่สร้างขึ้นโดยอัตโนมัติของ Debian main.cfนั้นค่อนข้างยุ่งเหยิงเช่นกันดังนั้นฉันจะโพสต์เวอร์ชันขั้นต่ำที่ทำความสะอาดแล้ว:

ข้อมูลเซิร์ฟเวอร์ #
mydomain = diti.me
myorigin = $ mydomain
  # พารามิเตอร์อื่น ๆ ที่หลากหลายใช้ตัวแปรทั้งสองนี้เป็นค่าเริ่มต้น

# บริการ SMTP
smtpd_tls_security_level = พฤษภาคม
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # สิ่งนี้อนุญาตให้ STARTTLS ใช้กับการเชื่อมต่อ SMTP ขาเข้าทั้งหมด
  # โปรดทราบว่าต้องเพิ่ม `postfix 'ในกลุ่ม` ssl-cert` เพื่อให้สามารถ
  # เพื่อเข้าถึงไฟล์ใน / etc / ssl / private

# นโยบาย
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0 Same/104
  # รายการนี้แสดงที่อยู่ IP ที่ถือว่า "เชื่อถือได้" และสามารถใช้ได้
  # เซิร์ฟเวอร์นี้เพื่อส่งจดหมายไปยังภายนอก (เช่นไปยังโดเมนอื่น) โดย
  # ค่าเริ่มต้นอนุญาตเฉพาะ "localhost" เท่านั้น จากคนอื่นเท่านั้นที่ส่งถึง
  # โดเมนใน $ mydestination จะได้รับการยอมรับ
mydestination = $ mydomain, localhost
  # รายการโดเมนที่จะรับจดหมายจากที่อยู่ IP ใด ๆ 
# การจัดส่ง
alias_maps = hash: / etc / aliases
  # นี่ทำให้ชื่อแทนทั้งระบบ มันเป็นการดีที่จะตั้งไว้อย่างชัดเจนเพราะ
  # ค่าเริ่มต้นบางครั้งรวม NIS ซึ่งไม่สมเหตุสมผล
ผู้รับ = +
  # บอกทาง postfix เพื่อแยกส่วนที่อยู่ในพื้นที่ที่แรก '+'
  # ที่เรียกว่า "plus-addressing": อีเมลที่ส่งถึง diti + foo @ จะถูกส่ง
  # ไปยังกล่องจดหมาย diti @

สำหรับ Dovecot เดเบียนใช้ตัวอย่างการกำหนดค่าเริ่มต้นและดีพอโดยมีตัวเลือกแต่ละตัวอธิบายไว้

เมื่อใดก็ตามที่คุณเปลี่ยนการตั้งค่า, ภูตโหลดด้วยและpostfix reload / หรือdoveadm reload

4.ตามค่าเริ่มต้น Postfix จะส่งจดหมายไปยัง/var/mail/$USERในรูปแบบmboxซึ่งง่ายพอ (คุณสามารถดูได้ด้วยเครื่องมือแก้ไขข้อความ) แต่มีปัญหามากมายโดยเฉพาะกับ IMAP เนื่องจากไฟล์ทั้งหมดจะต้องถูกเขียนใหม่ทุกครั้งที่คุณย้าย ข้อความหรือทำเครื่องหมายว่า "อ่าน" หรือ "ยังไม่ได้อ่าน"

เปลี่ยน daemons ทั้งสองเพื่อใช้ Maildir (มีรูปแบบอื่น ๆ แต่มีแนวโน้มที่จะเฉพาะกับเซิร์ฟเวอร์ MTA หรือ MDA หรือ IMAP หรืออะไรก็ตาม Maildir ได้รับการสนับสนุนอย่างกว้างขวาง)

ใน/etc/postfix/main.cfเพิ่มสิ่งต่อไปนี้ในส่วน "การจัดส่ง":

home_mailbox = จดหมาย /

กำหนดค่า Dovecot เพื่อใช้เส้นทางเดียวกันใน/etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5.ในบางจุดคุณต้องบอกให้ Dovecot ใช้ SSL ด้วย /etc/dovecot/conf.d/10-ssl.confการตั้งค่าที่เกี่ยวข้องอยู่ใน ที่จริงแล้วแพ็คเกจ Debian สำหรับ Dovecot ใช้ SSL อยู่แล้วแม้ว่าจะมีใบรับรองที่ลงนามเองซึ่งไร้ประโยชน์เป็นส่วนใหญ่ กำหนดค่าให้ใช้ใบรับรองของคุณเอง:

ssl = ใช่

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

6.ตอนนี้คุณสามารถส่งจดหมายไปที่ข้างนอกและรับมันได้ ยังจำเป็นต้องกำหนดค่า Postfix เพื่อให้คุณสามารถส่งจากภายนอกโดยเชื่อมต่อกับไคลเอนต์อีเมลของคุณผ่าน SMTP

ก่อนอื่นบอก Postfix ให้ใช้ Dovecot เพื่อตรวจสอบการเข้าสู่ระบบ คำแนะนำต่อไปนี้จะถูกนำส่วนใหญ่มาจากวิกิพีเดีย Dovecot ของ

/etc/dovecot/conf.d/10-master.confความต้องการของ Dovecot เพื่อฟังบนซ็อกเก็ตที่ Postfix สามารถเข้าถึงได้ การกำหนดค่าเริ่มต้นมีตัวอย่างการแสดงความคิดเห็นแล้ว:

บริการรับรองความถูกต้อง
    ...
    unix_listener / var / spool / postfix / private / auth {
        โหมด = 0660
        user = postfix
        group = postfix
    }
    ...
}

และ Postfix จำเป็นต้องใช้ - /etc/postfix/main.cfอีกครั้ง:

# รับรองความถูกต้อง
smtpd_sasl_type = dovecot
smtpd_sasl_path = ส่วนตัว / รับรองความถูกต้อง
  # ประเภทที่เป็นไปได้อื่น ๆ คือ "cyrus" สำหรับ Cyrus SASL 'saslauthd'
  # daemon ฉันเลือก Dovecot ที่นี่เนื่องจากใช้งานได้ดีกับเซิร์ฟเวอร์ SASL และ
  # มันง่ายกว่าที่จะให้มันจัดการกับการตรวจสอบสิทธิ์สำหรับ daemons ทั้งสอง

7.ขอให้สังเกตว่าข้างต้นไม่ได้ตั้งsmtpd_sasl_auth_enableที่ใดก็ได้ ข้อตกลงปัจจุบันคือไม่เปิดใช้งาน SMTP auth ทั่วโลก แต่เพื่อให้ tcp / 25 เป็นพอร์ต SMTP "ต่อเซิร์ฟเวอร์" โดยแท้ ในขณะเดียวกันข้อความใหม่จากผู้ใช้จะได้รับการยอมรับผ่าน SMTP บน tcp / 587 ซึ่งเป็นพอร์ต "การส่งจดหมาย" ซึ่งต้องมีการตรวจสอบสิทธิ์ ISP บางรายปิดกั้น tcp / 25 เนื่องจากสแปม แต่ให้เปิด tcp / 587 เนื่องจากมันจะปลอดภัยกว่า

เปิดใช้งานพอร์ต "Submission" ใน/etc/postfix/master.cfโดยมี SASL auth ค่าเริ่มต้นmaster.cfมีเส้นที่จำเป็นซึ่งจำเป็นต้องยกเลิกการใส่ความคิดเห็นไว้แล้วแม้ว่าบางบรรทัดก็ควรจะถูกทิ้งไว้

ส่ง inet n - - - - smtpd
  -o syslog_name = postfix / ส่ง
  -o smtpd_tls_security_level = เข้ารหัส
    # พอร์ต "การส่ง" จะต้องใช้ TLS แทนที่จะทำให้เป็นตัวเลือก
  -o smtpd_sasl_auth_enable = ใช่
    # ... รวมถึงอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้
# -o smtpd_reject_unlisted_recipient = no
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
    # ทั้งสี่ตัวเลือกสามารถออกความเห็น; หากเปิดใช้งานพวกเขาจะ
    # คาดหวังให้คุณตั้งกฎการ จำกัด ที่กำหนดเองใน 'main.cf' แต่
    # ค่าเริ่มต้นไม่เป็นไร
  -o smtpd_recipient_restrictions = อนุญาต_sasl_authenticatedปฏิเสธ
    # ค่าเริ่มต้น recipient_restrictions ตรวจสอบที่อยู่ IP และ
    # $ mydestination สำหรับพอร์ต "การส่ง" ให้ทุกอย่างเป็นเวลานาน
    # เป็นผู้ใช้ที่เข้าสู่ระบบ แต่ปฏิเสธเมลที่ไม่ระบุชื่อทั้งหมด
  -o milter_macro_daemon_name = ORIGINATING
    # หากคุณตัดสินใจตั้งค่าพร็อกซี DKIM ในภายหลังหรือสิ่งนี้จะอนุญาต
    # มันเพื่อแยกจดหมายที่ผู้ใช้ส่งมาจากจดหมายขาเข้าที่ได้รับ
    # เป็นส่วนหนึ่งของการกำหนดค่าเริ่มต้นดังนั้นจึงรวมอยู่ที่นี่ด้วย

หากคุณมีไคลเอนต์เมลที่ต้องการพอร์ต "implicit SSL" แบบเก่า (tcp / 465) คุณสามารถยกเลิกการใส่เครื่องหมายsmtpsบรรทัดในmaster.cf- ถ้าคุณทำให้รักษาการตั้งค่าเหมือนกับsubmissionพอร์ต

8./etc/aliasesสุดท้ายตั้งค่านามแฝงสำหรับบัญชีของคุณโดยการแก้ไข postmasterนามแฝงเป็นสิ่งจำเป็นโดยทั่วไป; เป็นจุดติดต่อหากมีปัญหากับเซิร์ฟเวอร์อีเมลของคุณ rootนามแฝงชี้และอื่น ๆ ที่คล้ายกันก็ดีเช่นกัน

รูปแบบพื้นฐานมีการบันทึกไว้ในนามแฝง (5):

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

ใช้postaliasหรือnewaliasesเพื่ออัปเดตฐานข้อมูลที่ถูกแฮช/etc/aliases.dbทุกครั้งที่คุณแก้ไขไฟล์นี้

ตอนนี้คุณยังมีบัญชีหนึ่งชื่อที่เรียกว่าditiPostfix และ Dovecot แต่อีเมลที่ส่งไปkra@...ยังจะถูกส่งต่อไปที่นั่นด้วย โปรแกรมรับส่งเมลบางตัว (เช่น Thunderbird) สนับสนุน "identities" หรือ "personas" หลายตัวสำหรับเซิร์ฟเวอร์อีเมลเดียวดังนั้นคุณสามารถเลือกที่อยู่ "จาก:" ที่แตกต่างกันได้

เกี่ยวกับมัน. ฉันอาจกลับมาพร้อมกับคำแนะนำสำหรับ procmail, โดเมนเสมือน, SPF และ / หรือ DKIM ในภายหลัง


1
มันเยี่ยมมาก ! มันเป็นแบบฝึกหัดที่ง่ายที่สุดเกี่ยวกับการโฮสต์อีเมลด้วยตนเอง ส่วนที่ทำให้ฉันประหลาดใจที่สุดก็คือการดู ณ จุดที่ 1 ที่ฉันสามารถส่งและรับอีเมลจาก / ไปยังเซิร์ฟเวอร์ของฉันได้ อย่างไรก็ตามฉันจะแก้ไขข้อความของคุณเพื่อชี้แจงบางประเด็นเช่นกัน! อย่างไรก็ตามฉันไม่สามารถจัดการการตั้งค่าอีเมลของฉันจากภายนอก (ฉันหมายถึงธันเดอร์เบิร์ด) ฉันกำลังใช้mail.diti.me(= ที่อยู่ IP ของเซิร์ฟเวอร์ของฉัน) สำหรับทั้ง IMAP และ SMTP โดเมนของฉันมีระเบียน MX อยู่แล้ว ฉันทำอะไรผิดพลาดระหว่างการตั้งค่าเซิร์ฟเวอร์ของฉันหรือฉันเพิ่งมีปัญหากับธันเดอร์เบิร์ดหรือไม่?
Diti

@Diti: ดูเหมือนว่าพอร์ตที่เกี่ยวข้องทั้งหมด (ยกเว้น tcp / 25) จะถูกไฟร์วอลล์ที่เซิร์ฟเวอร์ของคุณ
user1686

ผลลัพธ์ของps auxw | grep "dovecot"ควรเป็นอย่างไร ฉันเปรียบเทียบกับหนึ่งในการตั้งค่าที่ซับซ้อนของเพื่อนของฉันและเขามีdovecot-authและimap-loginที่ฉันไม่มี เป็นไปได้ไหมว่าพอร์ตนั้นเปิดจริง (ฉันจำไม่ได้ว่าตัวเองใช้ไฟร์วอลล์) แต่ไม่มี daemon ที่ตั้งค่าให้ฟังพอร์ตเหล่านั้นจากภายนอกหรืออะไรบางอย่าง? เมื่อฉันทำงานopenssl s_client -connect mail.diti.me:993บนเซิร์ฟเวอร์มันใช้งานได้ (และบอกว่า“ Dovecot พร้อม”) แต่ไม่มีอะไรจากภายนอก บางทีฉันควรลองติดตั้งไฟร์วอลล์และอนุญาตพอร์ตเหล่านั้นอย่างชัดเจนหรือไม่
Diti

@Diti: สถาปัตยกรรม Dovecot ของการเปลี่ยนแปลงอย่างมากระหว่าง V1 และ V2 ดังนั้นคุณจะเห็นกระบวนการที่แตกต่าง - ใน v2, จะมีdovecot, dovecot/anvil, dovecot/logและอื่น ๆ นอกจากนี้กระบวนการบางอย่างจะเริ่มต้นเมื่อมีคนเชื่อมต่อหรือเมื่อตรวจสอบรายละเอียดการตรวจสอบความถูกต้องเท่านั้น
user1686

1
@Diti: ไม่ daemons ทั้งสองฟังบนอินเตอร์เฟสและที่อยู่ทั้งหมดตามค่าเริ่มต้น แต่การเชื่อมต่อไม่ได้ถูกปฏิเสธ - แต่เซิร์ฟเวอร์จะลดการพยายามเชื่อมต่อทั้งหมดอย่างเงียบ ๆ (ดูการสแกน nmap ที่ฉันเชื่อมโยง) ซึ่งเป็นสัญญาณที่แน่นอนของไฟร์วอลล์ที่ใดที่หนึ่ง ลองใช้iptables -n -v -Lเพื่อตรวจสอบว่ามีกฎใด ๆ ที่จะวางแพ็กเก็ตหรือไม่
user1686
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.