[Case Study]-เข้าถึง AWS Lightsail เมื่อเผลอเปิด UFW แล้วลืม Allow SSH

Pao Payungsak Klinchampa
PAOCLOUD CO., LTD.
Published in
2 min readMay 16, 2021

--

เรื่องนี้เป็นอีก Case Study ที่ผมเจอมา เมื่อต้อง Support การ Deploy App ให้ลูกค้า ซึ่งทางลูกค้าเเจ้งว่าต้องการ Run Node.JS ให้ผมช่วยทำ NGINX Revers Proxy ให้หน่อยซิ ผมก็ SSH เข้า Server Ubuntu ที่รันบน AWS Lightsail ตามปกติ

แต่ว่า ผมกลับเข้าไม่ได้ !!

แน่นอนว่า เมื่อเข้าไม่ได้ จิตวิญญาณของ DevOps ก็เข้าสิง ชั้นจะเเก้ปัญหานี้ยังไงว้ะ เพราะลูกค้าก็ไม่ได้เปิด Automatic Snapshot ไว้ด้วย จะทำยังไงดี

ผมจัดการสำรวจว่า Port ใดที่พอจะเข้าไปได้บ้าง ก็พบว่า HTTP , HTTPS ก็ไม่ตอบสนอง จะเข้าหน้า Console ผ่านหน้าเว็บก็ไม่ได้

ผมตรวจสอบ Metric ว่า CPU มีการใช้งานสูงไปรึเปล่า เเต่เท่าที่ดู โล่งๆมากครับ 555

แน่นอนว่าผมยังไม่หมดหนทาง พยายามไล่เช็ค Network ตัวเอง ลอง VPN เพื่อให้ใช้ Network ของที่อื่น ก็ยังไม่ได้

ลองสร้าง Lightsail Instance แล้วเข้าผ่าน Private Network ก็ไม่ได้

จะทำยังไงดีล้ะ ??

ผมเลยลองสร้าง Snapshot เพื่อที่จะลองเอาไป Provision เป็น Instance ตัวใหม่ดู แต่วิธีนี้ก็ไม่ได้ผลครับ ไม่สามารถติดต่อ Server ได้เลย

เอาล้ะ ผมต้องกลับมาคิดว่า AWS ทำอะไรได้บ้าง

สิ่งนึงที่ผมคิดได้คือ AWS EC2 มีเครื่องมือให้ใช้เยอะกว่ามากๆ และผมก็รู้ดีว่า Snapshot จาก Lightsail เอาไปสร้างเป็น AMI เพื่อเอาไป Provision EC2 Instance ใหม่ได้ ไม่รอช้า ผมก็ลองทันที

เมื่อ Lightsail Snapshot โผล่ไปอยู่บน EC2 AMI ผมก็จัดการ Provision EC2 ขึ้นมาทันที และก็ยังคงไม่สามารถ SSH เข้าไปได้เหมือนเดิม ผมตรวจสอบ Instance Status ก็ขึ้นสีเขียวทั้ง 2 Level

ผมเริ่มจะคิดล้ะ ว่ามีใครวางยาอะไรไว้ มี Config ผิดพลาดรึเปล่า หรือโดน Hack กันเเน่ ????

แน่นอนว่าผมยังไม่ยอมเเพ้ จะต้องหาสาเหตุให้เจอ เมื่อเรา SSH เข้าไปไม่ได้ ก็ต้องใช้วิธีอื่น นั่นคือ EC2 Console ครับ

ผมจัดการเปิดความสามารถนี้ เเละทดลองเชื่อมต่อเข้าไป และมันก็เข้าไม่ได้ครับ หน้าจอสีดำ พร้อมความว่างเปล่า

ผมเริ่มเครียด เหงื่อเเตกพราก จะทำยังไงดี จะช่วยลูกค้าได้มั๊ยนะ

ผมเริ่มคิดว่าต้องทำยังไง และเเน่นอนว่า ผมยังมีท่าไม้ตายสุดท้าย

ผมเรียกขั้นตอนนี้ว่า “การถอดประกอบ” ครับ

สมัยผมยังเรียนอยู่มัธยม ก่อนจะมาเป็น AWS Consult ในทุกๆวันนี้ อาชีพผมคือ ช่างคอมครับ 555555 ช่วงเย็นหลังกลับบ้าน ผมมักจะหิ้ว Notebook ของเพื่อน หรือของครูมาซ่อมให้เสมอ

และเมื่อมีปัญหา ไม่สามารถ Boot เครื่องเพื่อเข้าไปเอาข้อมูลได้ สิ่งที่ผมทำคือ ถอด Harddrive ไปต่อกับเครื่องที่ยังใช้ได้ เเล้วใช้เครื่องนั้นในการดึงข้อมูลออกมาครับ

และเเน่นอนว่า Idea นี้ เอามาใช้บน AWS ได้ครับ

ผมจัดการ Provision EC2 ขึ้นมาใหม่อีกเครื่อง

จัดการ Stop Instance ก่อนหน้าที่ผมสร้างมาจาก Lightsail Snapshot และจัดการ “ถอด EBS” ออกจากเครื่องนั้นๆ (Force detach volume)

และเอา EBS ที่ถอดออกมา เสียบเข้าไปใน EC2 เครื่องใหม่ที่สร้างขึ้น (Attach Volume)

จากนั้น จัดการ SSH เข้าไปยังเครื่องใหม่ เเละสั่ง Mount Drive เเละในที่สุด ผมก็สามารถเข้าถึง file ได้ครับ !!!

ผมไม่รอช้าที่จะตรวจสอบ Log ที่เกิดขึ้นภายในเครื่อง เริ่มเเรก ผมเช็ค auth.log ก่อน

เเต่ก็พบว่า มันปกติดีนี่ 555 มีเเค่ IP ของเครื่องผม เเละ IP เครื่อง VPN Router เท่านั้นที่เข้าถึงได้ การจะมีผู้บุกรุก Shell เข้ามา คงไม่ใช่ล่ะ เพราะ Security Group ที่ผมกำหนดไว้ ยอมเฉพาะ IP ของผมเองกับ VPN Server ที่ทำให้ลูกค้าใช้ครับ

ผมจัดการตรวจสอบ Log ของ UFW เพราะผมรู้สึกว่า มันเป็นอาการราวกับว่า Firewall สั่ง Drop ทุกอย่างทิ้งหมด เเละเป็นไปตามคาดครับ UFW สั่ง Drop SSH , HTTPS , HTTP และ Port อื่นๆที่ใช้หมดเลย มี Log ขึ้นมาเต็มไปหมด 555+

ผมจัดการตรวจสอบ Config ของ UFW ใน /etc/ufw/ ก็พบเรื่องที่น่าตกใจ เพราะพบว่าค่า ENABLE มีค่าเป็น yes ซึ่งหมายความว่า มีการเปิดใช้ UFW นั่นเอง ซึ่งถ้าเราไม่ Allow Port ที่ใช้ มันก็ block หมดนะซิครับ 555+

ผมจัดการเเก้ค่าเป็น no เเล้ว save file ให้เรียบร้อย

จากนั้น ก็สั่ง Unmount EBSออกไป

แล้วเอา EBS ไปสร้างเป็น AMI เพื่อสร้าง EC2 เครื่องใหม่

และเมื่อสร้าง EC2 เครื่องใหม่ ผมก็สามารถ SSH เข้าไปได้เเล้วครับ เย้

ความพยายามของผมสำเร็จ

ผมจัดการตรวจสอบ Service และ File ต่างๆ เเละเเจ้งให้ลูกค้าดึงข้อมูลออกมา

แต่ก็มีเรื่องที่ต้องเหนื่อยอีก ก็คือ EC2 เครื่องนี้ ผมย้ายไปรันบน Lightsail ไม่ได้นี่ซิ

แต่ก็ไม่ใช่ปัญหาร้ายเเรง ผมสร้างเครื่องใหม่ก็ได้ ลง NGINX , PHP-FPM . Node.js , Docker และอะไรอย่างอื่นใหม่ก็ได้ ไม่ใช่ปัญหา เพราะทำมาไม่รู้กี่รอบเเล้ว

เมื่อสร้าง Lightsail เครื่องใหม่ จัดการย้ายข้อมูลเข้ามา ทุกอย่างก็กลับเข้าสู่ภาวะปกติครับ เล่นเอาซะเหนื่อยเลย

จากนั้นก็จัดการ Clean Up ลบ EC2 , EBS , Snapshot , AMI ที่ไม่ใช้เเล้วทิ้ง

ผมได้คุยกับลูกค้า ก็ได้คำตอบมาว่า คงเป็นทางฝั่งลูกค้าเองครับ ที่ไป Config เล่นซะผมเครียดเลย 555+

และเพื่อเป็นการป้องกันเคสเเบบนี้ ผมก็ขอเเนะนำทุกท่านว่า เปิด Automatic Snapshot ก็ดีนะครับ

สุดท้ายนี้ท่านใดเจอปัญหา ก็สอบถามเข้ามาได้ครับ ถ้าช่วยได้ ผมก็ช่วย แต่ช่วงนี้รู้สึกจะเจอเเต่เคสยากๆ เป็นลมแป๊บครับ TT งานก็ยุ่งซะเหลือเกิน

--

--