วิธีตั่งค่า Server MongoDB ให้ปลอดภัยและการทำ Remote Access

คำแนะนำก่อนอ่าน

  • ขณะที่กำลังหากคุณใช้ MongoDB แนะนำให้ไป Backup ฐานข้อมูลก่อนอ่านบทความนี้ต่อ
  • เมื่ออ่านจบก็ให้แน่ใจว่าได้ Backup ข้อมูลแล้วจริงๆ

เรื่องมีอยู่ว่า

หลายวันมานี้เราคงได้เห็นตามหน้า Facebook ที่จะมีคนโพสอะไรประมาณนี้


0704341626asdf group ransom note (via Victor Gerves)

สำหรับใครยังไม่ทราบแนะนำให้ลองอ่านข่าวจากลิ้งพวกนี้ดู Link1 Link2

ซึ่งตอนนี้ฐานข้อมูล MongoDB เรากำลังโดนโจมตีด้วย Hacker กันทั่วโลก ซึ่งส่วนมากที่โดนกันจะเกิดจากการที่ใช้ค่า Default ซึ่งปกติตอนที่เราติดตั่ง MongoDB จะไม่มีการ required authentication อะไรเลย ไม่เหมือน MySql ที่จะมีการให้ตั่งรหัสผ่านก่อนการใช้งานในระหว่างติดตั่งฐานข้อมูล ซึ่งเราจะเชื่อมต่อมกับ MongoDB ได้จาก <ip-addesss>:27017 ซึ่งหมายความใครก็ตามที่รู้ IP ก็สามารถที่จะทำการ Remote access เข้ามาได้ ซึ่งบทความนี้ผมจะมาบอกวิธีการตั่งค่า Firewall และ ตั่งค่า Remote access IP เพื่อป้องกันใครก็ตามเข้ามาต่อกับฐานข้อมูลเรา

 

Firewall setting with IP table

โดยเราจะมีคำสั่งตามนี้นะครับ ให้แทนที่ ip-address ด้วย IP จะ Allow ให้เชื่อมต่อได้นี้คือด้านแรก

หลังจากนั่นก็ อย่าลืมเซฟ เพราะว่าปกติเวลาเราสร้าง iptable rule ใหม่มันจะถูกเก็[ไว้ใน memory ถ้าเรา restart server เมื่อไรมันก็จะหายไปทันทีดังนั่นผมแนะนำให้เซฟด้วย iptables-persistent วิธีก็ด้านล่างเลยครับ

หมายหตุ: วิธีเซฟด้วย iptables-persistent แต่รู้สึกว่ากับ Ubuntu 16.04 และ  iptables-persistent  เวอร์ชันใหม่จะใช้คำสั่งแบบด้านบน ถ้าเป็น Ubuntu 14.04 เหมือนจะเป็นอีกคำสั่งแนะนำว่าให้ลองไปศึกษาต่อดูนะครับ

 

Config bind IP at /etc/mongod.conf, Remote access IP

วิธีนี้เป็นการตั่งค่า bind IP ผ่าน MongoDB configuration ครับ วิธีก็ง่ายมากตามนี้ครับ

ผมเขียนไว้สองท่อนคือถ้าต้องการให้ต่อได้จาก local เท่านั้นเราก็ใส่ IP ไปแค่ 127.0.0.1 ถ้าต้องการให้ต่อมาจาก server อื่นได้ (เดียวมีตัวอย่างด้านล่าง) หรือต่อมาจากคอมที่บ้านก็ใส่เลข IP ลงไป

 

Example

ตัวอย่างเช่น ผมมี Server ดังนี้

  • MongoDB Server 1 ตัว
    • Private IP: 10.130.29.176
  • Application Server 1 ตัว
    • 10.130.29.177

ซึ่งเช็คให้แน่ใจว่าทุกเครื่องอยู่ใน network วงเดียวกันนะครับ ในตัวอย่างผมจำลอง IP ว่าให้อยู่ Private เพื่อง่ายต่อการอธิบาย ดังนี้

จะเห็นได้ว่าผมเอา IP เครื่อง Application มาใส่ ถ้า IP ไม่ตรงกันก็จะโดน Firewall ดักก่อนขั่นแรก ถ้ายังหลุดมาได้อีกตัว MongoDB ก็จะทำการเช็คอีกว่ามัน bind_ip ตรงกันไหม ถ้าหลุดได้อีกก็ตัวใครตัวมันแล้วกันครับ แปลว่า Server รั่วไม่ทางใดก็ทางนึง ทำให้ถูกยึดและเข้าผ่านทาง root และเปลี่ยนตั่งค่าต่างๆ ไปแล้ว หรือถ้าใครทำงานจากที่อื่น เช่น คอมส่วนตัวจากที่บ้าน, ที่ Office ผมก็แนะนำว่าให้ใส่ bind_ip คอมเครื่องนั่นๆ ลงไปด้วย หรือทางที่ดีถ้าไม่จำเป็นต่อกับฐานข้อมูล Production ก็ทำ Migration, Seed DB หรือถ้าจำเป็นต้องใช้ช้อมูลจริงๆ แนะนำให้ Dump มาเพื่อหาสาเหตุแก้บัคแทนดีกว่าครับ ไม่ควรต่อเข้าไปใน Server ตรงๆ ซึ่งจริงไม่มีใครทำแบบนั่นอยู่แล้ว

นอกจากนี้ผมแนะนำให้ตั่ง Username, Password ให้ MongoDB ด้วย ลิ้งของ Office ตามนี้ Link1

อ่านจบแล้วก็รีบไป Backup ก่อนนะครับ ไม่งั่นจะได้เสียเงินกัน 0.1 BC แน่ๆ ครับ ซึ่งบทความดังกล่าวเป็นเพียงการทำให้ปลอดภัยในระดับนึงเท่านั่น ซึ่ง MongoDB เราอาจจะปลอดภัยแต่อาจจะถูก hacker server อาจจะมาจาก non-secure coding หรือ Server ไม่ได้ทำ Security ไว้เลย ซึ่งอย่าลืมทำ Hardening กันด้วยนะครับเพื่อความปลอดภัย นอกจากนี้ยังมีฝรั่งเขียนบทความเกี่ยวกับการ Hack nodejs กับ mongodb ไว้ด้วยครับ link ลองไปอ่านเล่นดู แถมท้ายด้วย Security Checklist ไปทำตามนี้ครับ

 

ที่มา:

https://www.digitalocean.com/community/tutorials/how-to-securely-configure-a-production-mongodb-server

http://unix.stackexchange.com/questions/125833/why-isnt-the-iptables-persistent-service-saving-my-changes

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04

https://docs.mongodb.com/manual/tutorial/configure-linux-iptables-firewall/

https://docs.mongodb.com/manual/administration/security-checklist/?_ga=1.160379898.659443719.1483977014

http://thehackernews.com/2017/01/secure-mongodb-database.html

https://www.bleepingcomputer.com/news/security/number-of-hijacked-mongodb-databases-is-going-up-as-more-hackers-are-flocking-in/

https://www.blognone.com/node/88956

Facebook Comments