By Arnon Puitrakul - 03 มกราคม 2025
Firewall ถือว่าเป็นเครื่องมือในการป้องกันภัยขั้นพื้นฐานที่ปัจจุบันใคร ๆ ก็ติดตั้งใช้งานกันอยู่แล้ว แต่หากเรากำลังใช้ Ubuntu อยู่ จริง ๆ แล้วเขามี Firewall มาให้เราใช้งานได้เลยนะ มันชื่อว่า UFW วันนี้เราจะมาทำความรู้จัก และทดลองตั้ง Rule สำหรับการดักจับการเชื่อมต่อที่ไม่เกี่ยวข้องกันดีกว่า
UFW ที่ไม่ใช่ UFO ย่อมาจากคำว่า Uncomplicated Firewall หรือก็คือเป็น Firewall ที่ไม่ยุ่งยาก อาจจะ งง ว่า แล้วมันไม่ยุ่งยากยังไง ต้องเข้าใจก่อนว่า ก่อนที่จะมี UFW ใน Ubuntu มันก็มีอะไรที่ทำหน้าที่เป็น Firewall เหมือนกัน ในชื่อ iptables
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
ซึ่งการ Config iptables ให้เป็นไปตามที่เราต้องการนั้นต้องบอกเลยว่า ยุ่งยากมาก ๆ เช่นด้านบนเป็นการสร้าง Rule สำหรับรับ TCP ใน Port 22 หรือก็คือรับ SSH Connection เข้ามานั่นเอง เราจะเห็นได้ว่า การสร้าง Rule ทีเราจะต้องใช้คำสั่งที่ยุ่งยากมาก ๆ มันจะดีกว่ามั้ย ถ้าเราสามารถตั้งค่า Firewall ได้ง่ายขึ้นกว่าเดิม ไม่ต้องยุบยิบกับคำสั่งที่ Argument เยอะไปหมด นี่แหละ คือสิ่งที่ UFW เข้ามาตอบโจทย์การทำงานของเรา
sudo ufw enable
การใช้งาน UFW นั้นไม่ยากเลย เราไม่จำเป็นต้องติดตั้งด้วย เพราะมันมากับ Ubuntu อยู่แล้วในลักษณะของ Service ปกติทั่วไป สิ่งที่เราต้องทำคือ เราจะต้องเปิดใช้งาน Service UFW กันก่อน เพียงแค่ใช้คำสั่งด้านบนก็เป็นอันเรียบร้อย
> sudo ufw status
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
เราสามารถขอดูสถานะของ UFW ได้โดยใช้คำสั่ง Status หากมันเปิดใช้งานอยู่มันจะขึ้นเป็นดังที่เห็นด้านบน
sudo ufw disable
หรือหากเราต้องการปิดการใช้งาน Firewall เราสามารถเรียกคำสั่ง disable เพื่อปิดการใช้งานได้ สำหรับเวลาที่เราอาจจะตั้งค่าผิด หรือต้องทดสอบเรียก Resource บางอย่างที่อยู่หลัง Firewall
สำหรับการตั้งค่า Rule พื้นฐานง่ายมาก เราสามารถเลือกได้ 2 วิธีคือ เราจะ Allow ให้ทุกคนเข้ามา แล้วตั้ง Rule มาเพื่อยกเว้นมันอีกที หรือกลับกันคือ เราห้ามทุกอย่างเข้ามา แต่อนุญาติให้บางอย่างที่ตั้งค่าเข้ามา ขึ้นกับการใช้งานของเรา โดยส่วนตัวเราแนะนำอย่างหลังมากกว่า คือ การปิดให้หมด และจะอนุญาติใคร ก็ให้เลือกเป็นคน ๆ ไป แบบนี้จะมีความปลอดภัยสูงกว่า เช่น ถ้าเป็น Web Server มันก็ควรจะตั้งให้เข้าได้แค่ Port 80 และ 443 ก็เพียงพอแล้ว ที่เหลืออาจจะตั้งค่าให้เข้าได้จาก IP Range ที่อยู่ในวงแบบนั้นก็ได้เหมือนกัน ถือว่าเป็นวิธีนึงที่สามารถป้องกัน การเข้าถึงโดยไม่ได้รับอนุญาติจากระยะไกลได้
sudo ufw default deny incoming
เราสามารถตั้งค่า ให้มัน Block ทุกอย่างที่เข้ามาได้จากคำสั่งด้านบน โดยเราจะเห็นว่า ลักษณะการใช้คำสั่งของมันนั้นง่ายมาก ๆ คือ Default ให้ Deny ไปเลย หากมี Incoming เข้ามา หรือถ้าเราต้องการให้รับทุกอย่างเข้ามา ก็เปลี่ยนจาก deny เป็น allow แค่นั้นเลย
แต่เตือนไว้นิดนึงว่า หากเราเปลี่ยน Default Rule อย่าลืมที่จะเข้าไป Update Rule ที่เหลือให้สอดคล้องกันด้วยนะ เช่น ก่อนหน้านี้เราตั้ง Default ให้เปิดทุกอย่างและ Block ตามรายการ แล้วเราเปลี่ยน Default เป็นปิดทุกอย่าง มันจะกลายเป็นว่า รายการที่เรา Block มันก็จะไม่ได้ผล เพราะมันโดน Default ครอบหมด และกลายเป็น ไม่เปิด Port อะไรให้เข้ามาเลย เป็นหลุมพรางที่เราเจอกันบ่อยมาก ๆ สำหรับคนที่พึ่งหัดใช้
sudo ufw allow ssh
sudo ufw deny 123
การสร้าง Rule พื้นฐานง่ายมาก ๆ เราสามารถใส่ Action เลือกได้เลยว่าจะ Allow หรือ Deny ตามด้วย Port หรือ Service ที่ต้องการเช่น บรรทัดแรกเป็นการสร้าง Rule สำหรับการ Allow SSH ไส้ในมันก็คือ Allow Port 22 นั่นเอง หรือในอีกบรรทัดคือ การ Deny Port 123 หรือ NTP หรือเราสามารถใส่เป็น deny ntp ก็ได้เช่นกัน
sudo ufw allow 8000:8010/tcp
นอกจากที่เราจะกำหนดเป็น Service ได้แล้ว บางครั้ง เรามีหลาย Service ที่ใช้ Port เป็นช่วง เราก็สามารถทำเป็นช่วงได้โดยใช้คำสั่งด้านบน และเรายังสามารถกำหนด TCP หรือ UDP ได้โดยการใส่ /tcp หรือ /udp ตามหลังได้เลย แต่ถ้าเราไม่ใส่ Default ของมันคือการใส่ทั้ง TCP และ UDP ไปเลย
sudo ufw allow from 10.0.23.10
sudo ufw allow from 10.0.23.0/16
หรือถ้าเรายังสามารถกำหนดเป็น IP Address ก็ได้เช่นกัน เช่น ด้านบน เราบอกว่า ให้ Allow เมื่อมันมาจาก IP 10.0.23.10 หรือถ้าเกิดเราต้องการทั้งให้ IP ทั้งวงอย่างสมมุติเป็นฝ่ายบัญชีสามารถเข้าได้ เราก็กำหนดเข้าไปเป็นวงเลยก็ยังได้
sudo ufw allow from 10.0.23.0/16 to any port 22/tcp
เพิ่มความ Advance มันเข้าไปอีกด้วยการที่เรากำหนดมันด้วย IP Address และ Port มันไปเลยสิ จากบรรทัดด้านบน เรากำหนดให้ Allow เมื่อมันมาจากวง 10.0.23.0/16 ไปที่ไหนก็ได้ ที่ Port 22 TCP
> sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 10.0.23.0/16
[ 2] 80 ALLOW IN Anywhere
การลบ Rule ที่สร้างขึ้นสามารถทำได้โคตรง่าย ก่อนอื่น เราจะต้อง List Rule ออกมาก่อนว่า เรามี Rule อะไรที่ตั้งไว้บ้าง จะได้รู้ว่าต้องลบตัวไหนด้วยคำสั่ง status numbered เราจะเห็นได้ว่า ด้านหน้าของแต่ละ Rule มันจะมีตัวเลขกำกับอยู่
sudo ufw delete 2
โดยเราสามารถสั่งลบจากลำดับของ Rule ได้ เช่น คำสั่งด้านบนเป็นการลบ Rule ลำดับที่ 2 ออกไป
sudo ufw delete allow 80
หรือถ้าเราไม่อยากต้องมานั่งหาตัวเลขว่ามันอยู่อันดับที่เท่าไหร่ บางทีมันเยอะจริงเข้าใจ เราสามารถเลือกลบได้จากเงื่อนไขต่าง ๆ เช่นด้านบนเป็นการสั่งลบ Rule ที่ Allow Port 80 เข้ามา ถ้าเทียบกับ Rule ด้านบน มันก็คือการลบ Rule ที่ 2 นั่นเอง
UFW เป็นเครื่องมือที่ทำให้เราสามารถ Config Firewall บน Ubuntu ได้ง่ายกว่าเดิมมาก ๆ เอาเข้าจริง ๆ เท่าที่เราใช้งานมา กับ Web Server ทั่ว ๆ ไป คิดว่าน่าจะแค่ Allow HTTP และ HTTPS รวมไปถึง 3306 ที่เป็น Port ของ MySQL ไว้บาง IP Range สำหรับเข้าถึงภายในองค์กรเท่านั้น ด้วยความง่ายลักษณะนี้ เราว่ามันเลยเหมาะกับการตั้งค่าไว ๆ และ Rule ที่ไม่ซับซ้อนมากเท่าไหร่ ก็ลองเอาไปใช้งานกันดูได้เด้อ
เมื่อหลายวันก่อน เราไปทำงานแล้วใช้ Terminal แบบปีศาจมาก ๆ จนเพื่อนถามว่า เราทำยังไงถึงสามารถสลับ Terminal Session ไปมาได้แบบบ้าคลั่งขนาดนั้น เบื้องหลังของผมน่ะเหรอกัปตัน ผมใช้ tmux ยังไงละ วันนี้เราจะมาแชร์ให้อ่านกันว่า มันเอามาใช้งานจริงได้อย่างไร เป็น Beginner Guide สำหรับคนที่อยากลองละกัน...
Firewall ถือว่าเป็นเครื่องมือในการป้องกันภัยขั้นพื้นฐานที่ปัจจุบันใคร ๆ ก็ติดตั้งใช้งานกันอยู่แล้ว แต่หากเรากำลังใช้ Ubuntu อยู่ จริง ๆ แล้วเขามี Firewall มาให้เราใช้งานได้เลยนะ มันชื่อว่า UFW วันนี้เราจะมาทำความรู้จัก และทดลองตั้ง Rule สำหรับการดักจับการเชื่อมต่อที่ไม่เกี่ยวข้องกันดีกว่า...
Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...
อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...