รับทําเว็บไซต์ รับทําseo
 
รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

Linux Server (CentOS) : เข้ารหัสการส่งอีเมล์ด้วยการคอนฟิก TLS

    หลังจากที่ คอนฟิก postfix เบื้องต้น บน CentOS 6 ในบทความนี้เราจะเพิ่มความปลอดภัยในการส่งเมล์ (SMTP) เข้าเมล์เซิร์ฟเวอร์ที่รัน postfix ด้วยการให้ผู้ส่งเข้ารหัสการส่งเมล์ด้วยการคอนฟิก TLS

     

    ก่อนจะเริ่มคอนฟิกกัน ขอทำความเข้าใจก่อนว่า postfix จะทำหน้าที่เป็น SMTP Server หลักๆ อยู่สองกรณีคือ

      - กรณีแรก รับอีเมล์จากโปรแกรมเมล์ไคลเอ้นต์ เช่น Outlook, Thunderbird หรือโปรแกรมส่งเมล์อื่นๆ ที่ผู้ใช้ระบุ SMTP Server ในกรณีนี้เมื่อ postfix ได้รับอีเมล์แล้วก็จะส่งต่อไปยังเมล์เซิร์ฟเวอร์ปลายทางที่ผู้ส่งระบุ

      - กรณีที่สอง รับอีเมล์จากเมล์เซิร์ฟเวอร์ที่อื่น ที่ผู้ส่งระบุชื่ออีเมล์โดเมนว่าเป็นเครื่องเซิร์ฟเวอร์ของเรา ในกรณีนี้ postfix จะรับอีเมล์มาแล้วเก็บไฟล์ไว้บนเซิร์ฟเวอร์

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

    เนื่องจากมีสองรูปแบบ คือทั้งแบบเข้ารหัสและไม่เข้ารหัส จำเป็นต้องแยกคอนฟิก พอร์ตเดิม TCP 25 จะรองรับอีเมล์จากเมล์เซิร์ฟเวอร์เครื่องอื่น ในส่วนนี้ไม่มีการเปลี่ยนแปลงคอนฟิก

    ส่วนพอร์ตที่จะคอนฟิกเพิ่มและจะใส่คอนฟิกการเข้ารหัสแบบ TLS ด้วย คือพอร์ต TCP 587 มีชื่อเรียกตามมาตรฐานว่า submission เพื่อรองรับการส่งเมล์จากโปรแกรมเมล์ไคลเอ้นต์ โปรแกรมบน iphone, android ก็รองรับการส่งแบบนี้

     

    สร้างไฟล์ private key, certificate สำหรับ postfix

    ก่อนจะคอนฟิก TLS ใน postfix ต้องสร้างไฟล์ private key, certificate สำหรับใช้ใน postfix ก่อน

    cd เข้าไปในไดเร็คทอรี /etc/pki/tls/ แล้วรันคำสั่ง openssl genrsa เพื่อสร้างไฟล์ private key

    [root@cent6 ~]# cd /etc/pki/tls/
    [root@cent6 tls]# openssl genrsa -out postfix.key
    Generating RSA private key, 512 bit long modulus
    ..........................++++++++++++
    ...++++++++++++
    e is 65537 (0x10001)
    
    

    ใช้คำสั่ง openssl req เพื่อสร้าง self-sign certificate จากไฟล์ private key ที่สร้างไว้

    [root@cent6 tls]# openssl req -new -x509 -key postfix.key -out postfix.crt
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:TH
    State or Province Name (full name) []:Bangkok
    Locality Name (eg, city) [Default City]:Bang Na
    Organization Name (eg, company) [Default Company Ltd]:Test Company
    Organizational Unit Name (eg, section) []:IT
    Common Name (eg, your name or your server's hostname) []:smtp.example.com
    Email Address []:
    
    

    ย้ายไฟล์ private และ certificate ที่สร้างไปไว้ในไดเร็คทอรี private/ และ certs/ ตามลำดับ

    [root@cent6 tls]# mv postfix.key private/
    [root@cent6 tls]# mv postfix.crt certs/ 

    แก้ไขไฟล์ /etc/postfix/main.cf ใส่คอนฟิกที่อยู่ของไฟล์ private key และ certificate โดยอาจเพิ่มต่อบรรทัดสุดท้ายของไฟล์นี้

    [root@cent6 ~]# vi /etc/postfix/main.cf
    ...
    smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
    smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.crt 

    แก้ไขไฟล์ /etc/postfix/master.cf โดยการเอาเครื่องหมาย # หน้าบรรทัดคอนฟิกของ submission และส่วนอื่นๆ เพื่อเปิดการใช้ TLS

    [root@cent6 ~]# vi /etc/postfix/master.cf
    ...
    submission inet n - n - - smtpd
     -o smtpd_tls_security_level=encrypt
    # -o smtpd_sasl_auth_enable=yes
    # -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    ...
    
    

    หมายเหตุ ในที่นี้ทดสอบแค่ TLS ก่อน ยังไม่ได้คอนฟิก AUTH เพื่อตรวจสอบ login, password ของผู้ส่งเมล์ (ตอนต่อไป)

    รีสตาร์ตเซอร์วิส postfix เพื่อให้คอนฟิกใหม่มีผล

    [root@cent6 ~]# service postfix restart
    Shutting down postfix:               [ OK ]
    Starting postfix:                    [ OK ]
    
    

    ถ้าใช้คำสั่ง netstat -a ดู จะเห็นชื่อพอร์ต submission หรือ TCP 587 รันขึ้นมา

    [root@cent6 ~]# netstat -a
    Active Internet connections (servers and established)
    Proto  Recv-Q  Send-Q  Local Address     Foreign Address   State
    tcp    0       0       *:submission      *:*               LISTEN
    ...

    หรือทดสอบด้วยคำสั่ง telnet เข้าพอร์ต 587 เพื่อดูว่าพอร์ตนี้มีคอนฟิกรองรับ TLS หรือไม่

    พิมพ์คำสั่ง EHLO ตามด้วยชื่อโดเมน ผลลัพธ์จะแสดงคอนฟิกพอร์ตของเมล์เซิร์ฟเวอร์ ถ้ารองรับ TLS จะขึ้นคำว่า STARTTLS

    [root@cent6 ~]# telnet 127.0.0.1 587
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    220 cent6.example.com ESMTP Postfix
    EHLO example.com
    250-cent6.example.com
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
    QUIT
    221 2.0.0 Bye
    Connection closed by foreign host.
    [root@cent6 ~]#
บทความที่น่าสนใจ

บทความ ล่าสุด

บทความ ความรู้ด้านไอที, คอมพิวเตอร์ Techonlogy, Gadget, ความรู้เกี่ยวกับคอมพิวเตอร์ กับทาง SoftMelt.com