ทดสอบล็อกอิน pop3 เข้า dovecot บน Fedora 17

หลังจากที่ได้ ติดตั้งและคอนฟิกเบื้องต้น dovecot บน Fedora 17 เป็นที่เรียบร้อยแล้ว เราจะมาคอนฟิกเพิ่มเติมเพื่อให้เครื่องอื่นๆ สามารถที่จะ login ผ่านทาง pop3 เพื่อเข้ามาอ่านเมล์จาก dovecot ได้

คอนฟิก pop3 แบบไม่เข้ารหัส plaintext (ไม่แนะนำ)

ดีฟอลต์การติดตั้ง dovecot จากไฟล์ rpm บน Fedora 17 จะอนุญาตให้ login เข้า pop3 แบบธรรมดา (plaintext) เฉพาะบนตัวเครื่องเมล์เซิร์ฟเวอร์เองเท่านั้น (localhost) แต่ถ้าจากเครื่องอื่นต้องใช้ ssl

สมมติว่าใช้ login เป็น user1 และ password คือ user1 เหมือนกัน

ทดสอบอ่านเมล์ผ่าน pop3 พอร์ต 110 ด้วยคำสั่ง telnet

[root@fc17-64a ~]# telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
+OK Dovecot ready.
USER user1
+OK
PASS user1
+OK Logged in.
QUIT
+OK Logging out.
Connection closed by foreign host.

แต่ถ้า telnet เข้าพอร์ต 110 จากเครื่องอื่น จะขึ้นฟ้องว่าไม่อนุญาตให้ใช้ plaintext

ตัวอย่าง สมมติว่าเมล์เซิร์ฟเวอร์ที่รัน dovecot มี ip เป็น 192.168.7.17

$ telnet 192.168.7.17 110
Trying 192.168.7.17...
Connected to 192.168.7.17.
Escape character is '^]'.
+OK Dovecot ready.
USER user1
-ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
QUIT
+OK Logging out
Connection closed by foreign host.

ถ้าดูในไฟล์ maillog บนเมล์เซิร์ฟเวอร์ก็จะขึ้นฟ้องดังนี้

[root@fc17-64a ~]# tail -f /var/log/maillog
Jul 8 14:33:46 fc17-64a dovecot: pop3-login: Aborted login (tried to use disallowed plaintext auth): user=<>, rip=192.168.7.102, lip=192.168.7.17

โดยดีฟอลต์คอนฟิก dovecot จะไม่อนุญาตเครื่องอื่นให้ล็อกอินเข้าพอร์ต 110 แบบธรรมดา (plaintext) คือไม่มีการเข้ารหัส (SSL/TLS) เพื่อความปลอดภัย ป้องกันการดับจับ (sniff) ชื่อ login, password ได้

แต่ถ้าเรามีความจำเป็นต้องใช้จริงๆ เช่นโปรแกรมอ่านเมล์ไม่รองรับการเข้ารหัส (SSL/TLS) หรืออนุญาตให้ล็อกอิน pop3 แบบธรรมดาจาก network ภายใน ที่ถือว่ามีความปลอดภัย

สามารถทำได้โดยแก้ไขคอนฟิก login_trusted_networks ในไฟล์ dovecot.conf โดยกำหนด network ที่เราอนุญาตให้ล็อกอิน pop3 แบบธรรมดาได้

เช่นอนุญาตให้ client ที่อยู่ใน 192.168.6.0/24 และ 192.168.7.0/24 สามารถล็อกอิน plaintext ได้

[root@fc17-64a ~]# vi /etc/dovecot/dovecot.conf
...
login_trusted_networks = 192.168.6.0/24,192.168.7.0/24
...

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

[root@fc17-64a ~]# systemctl restart dovecot.service

ทดลองล็อกอินเข้าพอร์ต pop3 จากเครื่องที่อยู่ใน network ที่ระบุไว้

$ telnet 192.168.7.17 110
Trying 192.168.7.17...
Connected to 192.168.7.17.
Escape character is '^]'.
+OK [XCLIENT] Dovecot ready.
USER user1
+OK
PASS user1
+OK Logged in.
QUIT
+OK Logging out.
Connection closed by foreign host.

สังเกตว่าจะมีคำว่า XCLIENT แสดงขึ้นมาใน OK บรรทัดแรกด้วย

 

ล็อกอิน pop3s แบบเข้ารหัส ssl ด้วย openssl

เพื่อความปลอดภัยของ login, password แนะนำให้บังคับการใช้ล็อกอิน pop3 ด้วย ssl หรือพอร์ต pop3s

แก้ไขคอนฟิก login_trusted_networks ในไฟล์ dovecot.conf ให้เหมือนเดิม

[root@fc17-64a ~]# vi /etc/dovecot/dovecot.conf
...
#login_trusted_networks =
...

รีสตาร์ตเซอร์วิส

[root@fc17-64a ~]# systemctl restart dovecot.service

สำหรับการทดสอบล็อกอินเข้าพอร์ต pop3s จากเครื่องอื่นๆ ต้องใช้คำสั่ง openssl

ตัวอย่างเช่น ล็อกอินเข้าเมล์เซิร์ฟเวอร์ 192.168.7.17 พอร์ต 955 (pop3s)

$ openssl s_client -connect 192.168.7.17:995
CONNECTED(00000003)
depth=0 /OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
verify error:num=18:self signed certificate
verify return:1
depth=0 /OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
verify return:1
---
Certificate chain
 0 s:/OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
 i:/OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICQzCCAaygAwIBAgIJAN4c90kEbQkDMA0GCSqGSIb3DQEBBQUAMFgxFDASBgNV
BAsTC0lNQVAgc2VydmVyMRkwFwYDVQQDExBpbWFwLmV4YW1wbGUuY29tMSUwIwYJ
...
-----END CERTIFICATE-----
subject=/OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
issuer=/OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
---
No client certificate CA names sent
---
SSL handshake has read 1154 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
 Protocol : TLSv1
 Cipher : DHE-RSA-AES256-SHA
 Session-ID: C001FB132D30F171276B4061AFEFB66EACE48B3E5AC4A8C2002B08A9829BADC8
 Session-ID-ctx:
 Master-Key: 01862D9F4923FB2D7395794E9214E11741E7B551572D000DE4789A48F1011CF8D8821295733505B2E27C100CB8D966D1
 Key-Arg : None
 Start Time: 1341735575
 Timeout : 300 (sec)
 Verify return code: 18 (self signed certificate)
---
+OK Dovecot ready.
USER user1
+OK
PASS user1
+OK Logged in.
QUIT
DONE

ด้านบนจะแสดงข้อมูลเกี่ยวกับ certificate ของ dovecot

บรรทัดด้านล่างจากบรรทัด OK Dovecot ready เราสามารถพิมพ์คำสั่งคุยกับ pop3 ได้เหมือนกับตอนใช้คำสั่ง telnet

สร้าง self-signed certificate สำหรับ dovecot ใหม่

หากต้องการสร้าง certificate ใหม่สามารถทำได้ดังนี้

ลบไฟล์ private และ certificate เดิม

[root@fc17-64a ~]# cd /etc/pki/dovecot
[root@fc17-64a dovecot]# rm -f private/dovecot.pem
[root@fc17-64a dovecot]# rm -f certs/dovecot.pem

แก้ไขไฟล์ dovecot-openssl.cnf สำหรับข้อมูลของ certificate ตามที่ต้องการ ตัวอย่างเช่น

[root@fc17-64a dovecot]# vi /etc/pki/dovecot/dovecot-openssl.cnf
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
# country (2 letter code)
C=TH
# State or Province Name (full name)
ST=Bangkok
# Locality Name (eg. city)
L=Laksi
# Organization (eg. company)
O=Example Company
# Organizational Unit Name (eg. section)
OU=IT
# Common Name (*.example.com is also possible)
CN=pop.example.com
# E-mail contact
emailAddress=postmaster@example.com
[ cert_type ]
nsCertType = server

รันสคริปต์ไฟล์ mkcert.sh เพื่อสร้างไฟล์ private และ certificate ใหม่

[root@fc17-64a dovecot]# /usr/libexec/dovecot/mkcert.sh
Generating a 1024 bit RSA private key
..................++++++
............................++++++
writing new private key to '/etc/pki/dovecot/private/dovecot.pem'
-----
subject= /C=TH/ST=Bangkok/L=Laksi/O=Example Company/OU=IT/CN=pop.example.com/emailAddress=postmaster@example.com
SHA1 Fingerprint=99:BB:33:97:70:22:A1:77:E4:1E:E7:E2:31:8B:03:43:A2:D5:12:68

รีสตาร์ตเซอร์วิสใหม่

[root@fc17-64a dovecot]# systemctl restart dovecot.service

ลองใช้ openssl เชื่อมต่อเข้าพอร์ต pop3s ใหม่ จะเห็นข้อมูล certificate ที่เปลี่ยนไป

$ openssl s_client -connect 192.168.7.17:995
CONNECTED(00000003)
depth=0 /C=TH/ST=Bangkok/L=Laksi/O=Example Company/OU=IT/CN=pop.example.com/emailAddress=postmaster@example.com
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=TH/ST=Bangkok/L=Laksi/O=Example Company/OU=IT/CN=pop.example.com/emailAddress=postmaster@example.com
verify return:1
---
Certificate chain
 0 s:/C=TH/ST=Bangkok/L=Laksi/O=Example Company/OU=IT/CN=pop.example.com/emailAddress=postmaster@example.com
 i:/C=TH/ST=Bangkok/L=Laksi/O=Example Company/OU=IT/CN=pop.example.com/emailAddress=postmaster@example.com
---
Server certificate
-----BEGIN CERTIFICATE-----
...

 

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.