วันพุธที่ 21 พฤษภาคม พ.ศ. 2557

Heartbleed ช่องโหว่ด้านความปลอดภัย ของ OpenSSL บน Zimbra 8 และการแก้ไข

มีรายงานมาได้สักพักใหญ่ๆแล้วครับว่า มีช่องโหว่ด้านความปลอดภัย ที่มีชื่อเรียกกันอย่างเป็นทางการว่า Heartbleed บน OpenSSL package version 1.0.1 ซึ่งในชุดติดตั้งของ Zimbra 8 เองก็มี openssl ซึ่งมีช่องโหว่นี้เช่นกัน

อันตรายที่เกิดจากช่องโหว่นี้
โดยทั่วไปแล้ว OpenSSL  เป็น package ที่เกี่ยวข้องกับการเข้ารหัสของข้อมูล ที่ใช้กันบ่อยๆก็คือ https หรือ secure  http  การติดต่อระหว่าง web server และ web browser ที่คุยกันโดยใช้ https protocol นี้ จะทำให้ข้อมูลที่วิ่งผ่านอยู่ใน Internet ถึงแม้จะมีคนดักฟัง(เก็บ)ข้อมูลที่มีการส่งระหว่าง web browser กับ  web server ไว้ได้ ก็ไม่สามารถจะถอดรหัสเพื่อแปลงเป็นข้อมูลที่เอาไปใช้ประโยชน์ได้ พูดง่ายๆ ก็คือ อ่านไม่ออกนั่นเอง

แต่เนื่องจากช่องโหว่นี้ จะทำให้คนทีดักฟังข้อมูล https สามารถถอดรหัสของข้อมูลที่คุยกันอยู่ได้ โดยอาศัยตัวข้อมูลที่มีการคุยกันนั่นเอง และมีรายงานบางกระแสกล่าวว่า hacker สามารถใช้วิธียิงข้อมูลเป็นชุดเพื่อให้ web server ตอบกลับ และนำข้อมูลที่ตอบกลับ มาวิเคราะห์เพื่อใช้ในการเจาะระบบได้ด้วย

บน Zimbra เองในส่วนของ Admin Console และ Web Console  ก็ใช้  https protocol  เช่นกัน ซึ่งทำให้ https บน  Zimbra 8 ไม่ปลอดภัยอีกต่อไป พูดง่ายๆก็คือ ใช้ https แต่เหมือนใช้ http ธรรมดานั่นเอง

OpenSSL กับ Zimbra 
ชุดติดตั้งของ Zimbra จะมีการนำเอา OpenSSL ไปใส่ไว้ด้วย ซึ่ง OpenSSL ส่วนนี้ จะแยกต่างหากจาก OpenSSL ที่ถูกติดตั้งจาก package  ของ Linux  OS เช่น ถ้าเป็น Redhat หรือ CentOS package จะเป็น format rpm  ดังนั้นถึงแม้จะมีการ upgrade openSSL บน Linux แล้ว ก็ยังต้องมีการลงชุด upgrade  OpenSSL หรือ patch  ของ Zimbra ด้วยครับ

แก้ไขโดยการลง Patch จาก Zimbra
ปัญหานี้ เกิดกับ Zimbra 8  เท่านั้นนะครับ ดังนั้น ผู้ที่ดูแล Zimbra 8 อยู่ จะต้องลง patch โดยก่อนจะลง patch  นี้ ทาง Zimbra บอกว่า ต้อง upgrade เป็น Zimbra 8.0.3 ขึ้นไปก่อนนะครับ เพราะ Zimbra 8  ใน version ก่อน 8.0.3 นี้มี bug ตามที่ผมเคยเขียนบทความเรื่อง Zimbra 7 และ Zimbra 8  มีช่องโหว่ถูก hack ได้ไปแล้ว ซึ่ง bug นี้ ส่วนตัวผมคิดว่ารุนแรงกว่า heartbleed นี้อีก และมีหลายๆที่โดนไปแล้ว

การลง patch มีสองวิธีครับ

แบบที่ 1 : เครื่อง Zimbra เชื่อมต่อออกไป  Internet ภายนอกผ่านทาง port 80 ได้
Zimbra Server ต้องเชื่อมต่อกับ internet ผ่านทาง port 80 ได้ และต้อง login หรือ su เป็น root (su - root) ที่  linux ก่อนนะครับ แล้ว ทำตามขั้นตอนนี้ได้เลย

1) wget http://files.zimbra.com/downloads/security/zmopenssl-updater.sh
2) chmod a+rx zmopenssl-updater.sh
3) ./zmopenssl-updater.sh

 ---------------------
 [Generates the following output]
 Downloading patched openssl
 Validating patched openssl: success
 Backing up old openssl: complete
 Installing patched openssl: complete
 OpenSSL patch process complete.
 Please restart Zimbra Collaboration Suite as the Zimbra user via zmcontrol
 restart
 ---------------------
4) su - zimbra
5) zmcontrol restart
ขึ้นตอนสุดท้าย จะเป็นการ restart zimbra นะครับ

หมายเหตุ ในเครื่องจะต้องมีคำสั่ง wget อยู่นะครับ (ขั้นตอนที่ 1)

แบบที่ 2 : เครื่อง Zimbra ต่อออก Internet port 80 ไม่ได้
แบบนี้ ต้อง  download  patch มาลงที่เครื่องเอง ซึ่งต้อง login หรือ su เป็น root (su - root) ที่ Linux ก่อนเช่นกัน

ขึ้นตอนคือ

1) download patch มาลง ตาม URL  อันใดอันหนึ่ง ตามรายการ นี้ครับ โดยต้องเลือก patch  ที่สัมพันธ์กับ  distribution ของ Linux และ version ของ Zimbra  ที่ลงบนเครื่อง zimbra ด้วย รูปแบบคือ

http://files.zimbra.com/downloads/8.0.N_GA/openssl/linux-type/openssl-1.0.1d.tgz

โดยแทนที่ N ใน 8.0.N_GA ตาม  release ของ  zimbra ที่ใช้อยู่ ด้วย 3,4,5,6 หรือ 7

และแทนที่ linux-type ด้วย ชื่อ distribution  และ version ตามรายการนี้
SLES11_64
UBUNTU10_64
UBUNTU12_64
RHEL6_64

ตัวอย่างเช่น ถ้าเป็น Zimbra 8.0.4 บน Ubunto12 64 bit, URL จะเป็น

http://files.zimbra.com/downloads/8.0.4_GA/openssl/UBUNTU12_64/openssl-1.0.1e.tgz

ถ้าเป็น Zimbra 8.0.7  บน Redhat6 (หรือ CentOS6) จะเป็น
http://files.zimbra.com/downloads/8.0.7_GA/openssl/RHEL6_64/openssl-1.0.1d.tgz

เสร้จแล้ว upload ขึ้นไปไว้บน Linux ให้อยู่ใน /tmp

2) login หรือ su เป็น root ที่  Linux
3) cd /opt/zimbra
4) mv openssl-OLDVERSION openssl-OLDVERSION.brokenheart
5) tar xfz /tmp/openssl-NEWVERSION.tgz

6) su - zimbra
7) zmcontrol restart

คำแนะนำสุดท้าย ถ้าเป็นไปได้ ทดลองลง patch ที่เครื่องทดสอบก่อนนะครับ โดยติดตั้ง Zimbra version เดียวกันกับตัวทีใช้งานจริงอยู่ที่เครื่องทดสอบ และลงลง patch  ตามขั้นตอนที่กล่าวมา หลังจากนั้นลอง restart Zimbra ตัวทดสอบนี้ ถ้า Zimbra restart แล้วไม่มีปัญหา ทดลอง login ทั้ง web console หรือ admin console โดยใช้ https ได้ แล้วค่อยทำที่เครื่องจริง ยกเว้นว่าคุณมั่นใจ จะลงที่ Zimbra ที่ใช้งานจริงเลยก็ได้ แต่เกิดอะไรขึ้นมา จะว่าผมไม่เตือนไม่ได้นะครับ

สงสัยตรงจุดไหน สอบถามมาได้ครับ

ที่มา
http://heartbleed.com
https://www.zimbra.com/forums/announcements/70921-critical-security-advisory-patch-openssl-heartbleed-vulnerability.html

Trusted network / วิธีกำหนดให้ Email Client บางเครื่องต้อง Authen เมื่อจะส่ง Email ผ่าน Zimbra Server

โดยปกติ องค์กรที่ใช้ Zimbra เป็น Mail Server  ถ้ามีการใช้ควบคู่ไปกับ Email Client เช่น Outlook หรือ Thunderbird  การส่ง Email ออกไปภายนอก เราจะ config ที่ Email Client โดยระบุให้ Email ที่จะส่งออก ให้ส่งไปยัง  Zimbra เป็นคนส่งต่อให้อีกทอดหนึ่ง (Relay) โดย เราต้องกำหนดที่ Config ของ Email Client  ในส่วนของ  SMTP Server ของ Email Client นั้นๆ

เพื่อความปลอดภัย เราควรจะกำหนดให้ Email Client ที่จะใช้เครื่อง Zimbra ของเรา ส่ง Email ต่อออกไปให้นั้น ต้องทำการ Authentication (ต้องระบุ user และ password ด้วย) โดยใช้ User และ Password ของ account บนเครื่อง Zimbra  การทำแบบนี้  คนภายนอก โดยเฉพาะพวกนักส่ง spam จะไม่สามารถแอบมาใช้เครื่อง zimbra ของเรา ใช้ในการส่ง email  หรือ spam ได้

แต่อย่างไรก็ตาม หลายคนอาจจะมองว่า วิธีนี้จะทำให้เกิดความไม่สดวกกับคนบางกลุ่ม เราควรจะเซตให้เฉพาะ Email Client ที่เชื่อมต่อกับ Zimbra มาจาก network ภายนอกองค์กรจะต้องทำการ Authen เพื่อส่ง Email เท่านั้น ส่วน Email Client ที่เชื่อมต่อมาจาก Network ภายในองค์กร ไม่จำเป็น เพราะมีการรักษาความปลอดภัยดีพออยู่แล้ว

เราเรียก network ที่เครื่องที่อยู่ใน network นั้น ส่ง email ออกไปยัง domain ภายนอก ผ่านทาง Zimbra ได้ โดยไม่ต้อง authentication ว่า trusted network ครับ

เราสามารถกำหนด trusted network ที่ Zimbra ให้ทำตามความต้องการข้างต้นได้ครับ

ขั้นตอนการ setup
เริ่มต้น ก็ต้อง  Login Admin Console (https://.... :7071)  ครับ

   1. จากเมนู เลือก Configure -> Servers -> เลือกชื่อ host ของ Zimbra ของเรา หน้าจอจะมาที่หน้า ตามรูป


   2. เลือก MTA
   3. แก้ไขค่า ในส่วนของ Authentication
       3.1 ) Enable Authentication ให้ติ๊กถูกตรงนี้ เป็นการกำหนดให้ Email Client ที่จะใช้ เครื่อง Zimbra ของเรา ทำการส่ง Email ต่อให้กับ Domain อื่นที่ไม่ได้อยู่ในเครื่อง Zimbra  (Relay Email) ต้องมีการระบุ User และ Password ด้วย
       3.2) TLS Authentication Only  ถ้าต้องการ authen แบบ TLS เท่านั้นคือ ระบุว่า ให้ Email Client ต้องเข้ารหัสข้อมูลที่ใช้ในการ Authen ให้กับเครื่อง Zimbra ทาง SMTP protocol ด้วย
       ถ้าเรากำหนดตรงจุดนี้ เราต้องกำหนดที่ Email Client ให้ Authen โดยใช้  TLS เหมือนกันด้วยนะครับ

หมายเหตุ ถ้า Email Client สามารถ Set up ให้ใช้  TLS Authentication ได้ ผมแนะนำให้กำหนดตรงนี้ด้วย เพราะถ้าไม่ทำ ผู้ไม่หวังดีจะสามารถแอบดู User และ Password ที่คุยกันระหว่าง Email Client และ Zimbra Server โดยดูจากข้อมูลที่วิ่งในระบบ network ได้

   4. MTA trusted network ในส่วนนี้ ใส่เฉพาะ network ที่เราต้องการให้ Email Client ที่อยู่ใน network เหล่านี้ "ไม่ต้อง Authen"  ปกติ default จะเป็น network เดียวกันกับที่ zimbra อยู่  ค่าทีใส่ จะเป็น Network ภายในขององค์กรครับ โดยจากตัวอย่างคือระบุ Network แบบ  CIDR คือ network address/subnet bit
     ถ้าในองค์กรมีหลาย Network ให้ใช้ space เป็นตัวคั่นระหว่าง Network ที่ระบุครับ

หมายเหตุ ค่า default ของ trusted network จะเป็น 127.0.0.1 และ network ที่ Zimbra server เกาะอยู่  อย่าไปเอาออกนะครับ ไม่งั้นจะ save ไม่ได้ ถ้าต้องการเพิ่ม  trusted network เพิ่มจากค่า default ที่มีมาให้ครับ

   5. เสร็จแล้วกด Save

ถ้ากำหนดตามขึ้นตอนข้างต้น Email Client ที่จะส่ง Email ออกไปยัง Email address  ที่อยู่ใน Domain อื่น นอกเครื่อง Zimbra ของเรา ถ้าอยู่ใน Trusted Network ไม่ต้อง Authen ครับ แต่ถ้าอยู่นอก Trusted Network ต้องทำการ Authen

จุดประสงค์ของการทำแบบนี้ เพื่อป้องกันไม่ให้คนอื่นทีไม่มีสิทธิใช้งาน Zimbra Server ของเรา ส่ง Email  ไปที่อื่น ซึ่งปกติคนที่ทำเช่นนี้ ต้องการส่ง spam ครับ ดังนั้น การกำหนดแบบนี้ เป็นการป้องกันมิให้คนภายนอกใช้เครื่อง Zimbra Server ของเราส่ง SPAM ซึ่งวิธีการ ส่ง Spam แบบนี้ เรียกว่า Spam Relay ครับ

ข้อจำกัดของการใช้ trusted network
1) วิธีการนี้ ไม่ป้องกันการส่ง Spam จากเครื่องใน  Trusted Network นะครับ ที่เคยเห็นก็คือ เครื่องใน Trusted Network ติด Virus หรือ Trojan ที่ทำการส่ง Spam ออกไปภายนอก  ซึ่งวิธีการนี้ ป้องกันไม่ได้
2) การใช้ trusted network จะป้องกันในกรณีที่ ใช้ zimbra เราทำ Mail Relay คือส่งต่อไปยัง domain อื่น นอกเหนือกจากที่มีในเครื่อง zimbra ของเราเท่านั้น
แต่ถ้าส่งมายัง domain ที่อยู่ในเครื่อง zimbra ของเราโดยตรง วิธีนี้ไม่ได้กันนะครับ ต้องใช้วิธีอื่น

วันอาทิตย์ที่ 18 พฤษภาคม พ.ศ. 2557

เขียน Email ในรูปแบบ HTML

มีหลายๆท่านที่ติดตาม ThaiZimbra ได้มีคำถามถามมาทำนองว่า จะเขียน Email โดยเปลี่ยนสี ตัวอักษรใน Email ได้อย่างไร หรือ จะเขียน email แล้วให้มี link ในข้อความ ที่ผู้รับปลายทางสามารถกด link ที่ข้อความ เพื่อเปิด web browser ไปยัง link ที่ในใส่ไว้ได้อย่างไร

คำถามประเภทนี้ คำตอบอยู่ที่เดียวกันครับ เราสามารถทำได้โดยการเขียน Email ในรูปแบบ HTML แทนที่จะเป็น text ธรรมดา

การเขียน Email  ในรุปแบบ HTML
โดยปกติแล้วเวลาเราจะเขียน Email ในรูปแบบ text แต่ถ้าเราต้องการเลือกให้เขียน email แบบ html ทำได้ตามขั้นตอนตามนี้ครับ
หลังจาก เราเลือก New Mail เพื่อเขียน Email จะมี Compose Tab เปิดขี้นมา

1)  กดที่ ปุ่ม Options
2)  เลือก Format As HTML

ทำตามนี้ สังเกตุว่าจะมี WYSIWYG toolbar ปรากฏขึ้นมาให้เห็นตามรูปครับ เราสามารถเลือกที่จะใส่ลูกเล่นใน email ของคุณได้ครับ เช่น เปลี่ยนสี  เปลี่ยนขนาด เปลี่ยน font ใส่ link  และ อื่นๆ จาก toolbar นี้ได้

ลองนำไปใช้งานดูนะครับ

วันจันทร์ที่ 12 พฤษภาคม พ.ศ. 2557

update config บน Zimbra โดยใช้ คำสัง flushcache

ผมคิดว่าหลายๆครั้งที่พวกเราเหล่าผู้ดูแลระบบ Zimbra  เคยเจอว่า ทำไมบางทีแก้ไข config ของ  Zimbra แล้วเหมือนไม่มีอะไรเปลี่ยน  restart zimbra แล้วก็ไม่เปลี่ยน ต้องรอสักพัก
ที่เป็นเช่นนี้ สาเหตุก็เพราะ config ของ zimbra บางส่วนถูกเก็บอยู่ใน LDAP ซึ่ง ตัว LDAP เองจะอ่านข้อมูลที่ถูกเก็บไว้ใน cache ของ LDAP ประเด็นคือ เมื่อเรา update config ลงไปที่ LDAP เรียบร้อย แต่ cache ของ LDAP ไม่ได้ถูก update ทันที ต้องรอสักพัก

แล้วจะทำยังไง ถึงจะสั่งให้ cache ของ  LDAP อ่านข้อมูลที่เราเพิ่งจะแก้ไขไป
บน zimbra เราสามารถทำได้ครับ โดยใช้คำสั่งของ zimbra ที่ชื่อ zmprov ครับ

ขั้นตอนมีตามนี้ครับ
1) login Linux ของเครื่อง Zimbra ของเรา โดยสุดท้ายต้องเป็น user ที่ชื่อ zimbra
สำหรับคนที่ยังไม่รู้วิธีการเข้าไปเรียกใช้ คำสั่งของ zimbra ผ่านทาง command line อ่านที่บทความนี้ครับ

2) เรียกใช้คำสั่ง flushcache ตามรูปตัวอย่าง



เท่านี้ก็เรียบร้อยครับ

ที่จริง flushcache ยังมี option อื่นๆ นอกเหนือจาก "all" ครับ ถ้าสนใจ ลองศึกษาเพิ่มเติมดูครับ

หมายเหตุ การแก้ไข config บางอย่าง ต้องการการ restart zimbra นอกเหนือจากการ flushcache นะครับ การ flushcache แต่เพียงอย่างเดียวไม่ได้รับประกันว่า Zimbra จะรับทราบถึง  config ที่เปลี่ยนไปในทุกกรณีนะครับ


ศิวัฒน์ ศิวะบวร