กว่าจะมาเป็นไฟร์วอลล์

แต่ก่อนนั้น ถ้าเราพูดถึงการสร้างอุปกรณ์บางอย่าง เพื่อนำมากั้นการรับส่งข้อมูลระหว่างเน็ตเวิร์กก็คงจะฟังดูเป็นเรื่องไร้สาระ และน่าขบขันในสายตาของหลาย ๆ คนทีเดียว ที่กล่าวเช่นนั้นก็เพราะว่า เมื่อช่วงที่เทคโนโลยีเน็ตเวิร์กนั้นโปร่งใสหรือถ้าอธิบายให้เข้าใจง่ายขึ้นก็คือ ระบบเน็ตเวิร์กต้องไม่สนใจว่า จะรับส่งข้อมูลผ่านโพรโตคอลใดบ้าง แต่จะรองรับการรับ-ส่งข้อมูลผ่านโพรโตคอลได้หลายชนิดที่สุดเท่าที่จะทำได้ เมื่อมาถึงปัจจุบันนี้ เน็ตเวิร์กไม่ได้ต้องการเพียงแค่รับ-ส่งข้อมูลเท่านั้น แต่ยังมีเรื่องของระบบความปลอดภัยเข้ามาเกี่ยวข้องด้วย เทคโนโลยีที่เรียกว่า "ไฟร์วอลล์ (Firewall)" จึงเกิดขึ้น และมีการพัฒนามาเรื่อย ๆ จนในปัจจุบันมีผู้ขายผลิตภัณฑ์ไฟร์วอลล์หลายแห่ง ได้นำเสนอผลิตภัณฑ์ของตนที่ออกแบบมาป้องกันการรับ-ส่ง ข้อมูลเข้าออกระบบเน็ตเวิร์กผ่านโพรโตคอลบางตัว

รูปแบบของไฟร์วอลล์พื้นฐานตัวแรก ๆ เลยก็คือ เราเตอร์ (Router) โดยเราเตอร์จะทำหน้าที่ตรวจสอบแอดเดรสปลายทางของแพ็กเก็ตข้อมูลที่ได้รับมา แล้วส่งต่อไปยังเส้นทางของเน็ตเวิร์ก เพื่อไปสู่ปลายทางที่ระบุไว้ในส่วนหัว (Header) ของแพ็กเก็ตแต่ละตัว อย่างไรก็ตามเราเตอร์ทำได้มากกว่าการส่งต่อแพ็กเก็ตธรรมดาเท่านั้นเนื่องจากมันกรองแพ็กเก็ตได้ด้วย โดยเมื่อมีการนำข้อกำหนด หรือกฎในการกรองแพ็กเก็ตมาใช้ ส่วนหัวของแต่ละแพ็กเก็ตจะถูกคัดลอกเข้ามายังหน่วยความจำของเราเตอร์ ซึ่งตัว CPU ของเราเตอร์สามารถตรวจสอบได้ว่าแพ็กเก็ตนั้นตรงตามข้อกำหนดหรือไม่ เพื่อตัดสินใจว่าจะให้ผ่านเน็ตเวิร์กหรือทิ้งไป ถ้าเราเตอร์ตัดสินใจทิ้งแพ็กเก็ตนั้น ก็จะส่งข้อความแบบ ICMP (Internet Control Message Protocal) ไปยังแหล่งที่ส่งแพ็กเก็ตนั้นมาเพื่อยับยั้ง หรือขัดขวางมิให้ส่งแพ็ตเก็ตเข้ามาอีก

อย่างไรก็ตาม การใช้เราเตอร์กรองแพ็กเก็ตนั้นจะสร้างปัญหาตามมาด้วย ซึ่งเกิดจากการที่เราเตอร์ใช้ CPU ของมันเองในการกรองแพ็กเก็ต แทนที่จะใช้ฮาร์ดแวร์เฉพาะอื่น ๆจึงทำให้ประสิทธิภาพโดยรวมลดลง เพียงแค่เราใส่ข้อกำหนดในการกรองแพ็กเก็ตเข้าไปในเราเตอร์หนึ่งข้อเท่านั้น ก็จะทำให้ประสิทธิภาพของเราเตอร์ที่ออกมาในรุ่นแรก ๆ นั้นตกลงถึง 75 เปอร์เซ็นต์ของประสิทธิภาพสูงสุดเลยทีเดียว นอกจากนี้ยังมีปัญหาอีกข้อหนึ่ง ซึ่งเกิดจากการออกแบบเราเตอร์เอง เนื่องจากข้อมูลการทำงานในเราเตอร์ส่วนมากมักจะเก็บอยู่ในรูปของเราติ้งเทเบิ้ล (Routing Table) โดยเราติ้งเทเบิ้ลจะทำหน้าที่หาเส้นทางติดต่อระหว่างระบบเน็ตเวิร์ก ทำให้ต้องคอยตรวจสอบเส้นทางจึงทำงานช้า เราเตอร์ถูกออกแบบมาให้พิจารณาแพ็กเก็ตแต่ละอันที่ผ่านเข้ามาอย่างอิสระต่อกันโดยไม่สนใจว่าแพ็กเก็ตนั้นอยู่ในชุดข้อมูลที่มีส่วนหัวเหมือนกันหรือไม่ (คือมีแอดเดรสของต้นทาง และปลายทางเหมือนกัน หรือมีแอพพลิเคชันโพรโตคอลเหมือนกันเป็นต้น) ซึ่งการออกแบบในลักษณะนี้ จึงมีปัญหาเกี่ยวกับประสิทธิภาพในการทำงานอย่างแน่นอน ถ้าไม่เชื่อก็ลองนึกดูดี ๆ ว่า ประสิทธิภาพการทำงานจะลดลงขนาดไหน ถ้าเราเตอร์ต้องตัดสินใจซ้ำ ๆ ในการกรองแพ็กเก็ตที่มีส่วนหัวซ้ำกันซ้ำแล้วซ้ำอีก ทั้งที่จริง ๆแล้วควรจะพิจาณาตัดสินใจเพียงครั้งเดียว แต่ที่เป็นเช่นนี้ก็เนื่องจากข้อมูลที่บันทึกไว้ (Logging Information) ของเราเตอร์มีรายละเอียดน้อยเกินไป โดยข้อมูลจะถูกบันทึกในลักษณะของจำนวนแพ็กเก็ตที่มีการรับส่งระหว่างต้นทาง และปลายทาง แทนที่จะบันทึกข้อมูลจำพวกลักษณะของการติดต่อกัน เช่น การใช้แอพพลิเคชันเทลเน็ต (Telnet) หรือการโหลดไฟล์จากอินเทอร์เน็ตเป็นต้น ซึ่งการต้องพิจารณาส่วนหัวของทุกแพ็กเก็ตซ้ำ ๆ กันนั้นต้องใช้การทำงานของเราเตอร์ถึง 30 เปอร์เซ็นต์ และยังทำให้ไม่เหลือหน่วยความจำสำหรับบันทึกสถานะที่ผ่านมา เช่น ข้อมูลบางอย่างที่สามารถใช้ในการคาดเคาเหตุการณ์ในอนาคตอันใกล้ หรือข้อมูลของแพ็กเก็ตที่มีลักษณะคล้ายกับที่เคยผ่านเข้ามายังเราเตอร์

ทางเลือกอื่น

ผู้ขายระบบบางรายใช้วิธีที่ต่างออกไปในการรักษาความปลอดภัยของการใช้งานในโพรโตคอล TCP/IP เช่น ไอบีเอ็ม และดิจิตอลอิควิปเมนต์ เป็นตัวอย่างของบริษัทที่ออกแบบผลิตภัณฑ์ที่เรียกว่า แอพพลิเคชันเกตเวย์ (Application Geteway) ซึ่งใช้ควบคุมการส่งรับข้อมูลเข้า หรือออกจากระบบเน็ตเวิร์ก โดยแอพลิเคชันเกตเวย์แต่ละตัวเรียกว่า พร็อกซี่เซิร์ฟเวอร์ (Proxy Server) ซึ่งที่เราเรียกอย่างนี้ก็เนื่องจากลักษณะการทำงานของมัน ที่แทรกตัวอยู่ตรงกลางระหว่างระบบเน็ตเวิร์กภายในองค์กร และอินเทอร์เน็ตภายนอกองค์กร ไม่ว่าคำร้องขอ (Request) จะมาจากภายนอก หรือจากภายในองค์กรก็ตาม แอพพลิเคชันเกตเวย์ก็จะรันโปรแกรมพร็อกซี่เซิร์ฟเวอร์ขึ้นมาเพื่อตอบสนองคำร้องขอตาง ๆ ่แทนที่จะให้เครื่องจากภายนอกมาติดต่อกับภายในโดยตรง จากลักษณะดังกล่าว ดูเหมือนว่า แอพลิเคชันเกตเวย์จะทำตัวเหมือนเป็นเซิร์ฟเวอร์ที่ตอบสนองต่อคำร้องขอของไคลเอนต์ และ ทำตัวเป็นไคลเอนต์ส่งคำร้องขอไปยังเซิร์ฟเวอร์ที่อยู่ห่างออกไปภายนอกอีกต่อหนึ่ง ซึ่งทำให้ไคลเอนต์ที่ส่งคำร้องขอไม่ได้ติดต่อกับเซิร์ฟเวอร์ภายนอกโดยตรง แต่การที่จะทำเช่นนี้ได้ แอพพลิชันเกตเวย์จะต้องมีความเข้าใจการทำงานและมีโค้นในส่วนการตอบสนองต่อคำร้องขอและการตอบสนองในแอพพลิเคชันโพรโตคอลที่มันรองรับอยู่ด้วย เช่นการใช้โพรโตคอล FTP ตัวไคลเอนต์จะติดต่อกับเซิร์ฟเวอร์โดยใช้คำสั่งง่าย ๆ ไม่ซับซ้อนเป็นภาษาอังกฤษ เช่น USER หรือ PASS แล้วเซิร์ฟเวอร์จะตอบสนองต่อคำสั่งเหล่านี้ด้วยการส่งตัวเลข 3 หลัก คือ 200 เพื่อบอกว่าการทำงานเรียบร้อย โปรแกรมเมอร์ของแอพพลิเคชันเกตเวย์ต้องเขียนโปรแกรม เพื่อให้แอพพลิเคชันเกตเวย์เข้าใจความหมายของคำสั่งจากไคลเอนต์ และการตอบสนองจากเซิร์ฟเวอร์ที่จะทำให้แอพพลิเคชันเกตเวย์ทำหน้าที่ได้ถูกต้องเหมาะสม และแน่นอน แต่วิธีนี้ก็มีทั้งจุดเด่นและด้อย

เรามาดูด้านจุดเด่นกันก่อน แอพพลิเคชันเกตเวย์สามารถควบคุมการใช้งานได้อย่างละเอียดโดยกำหนดได้เลยว่า อนุญาตให้ยูสเซอร์ทำสิ่งไหนได้บ้าง และสิ่งไหนไม่อนุญาตเช่นตัวอย่างการใช้ไฟร์วอลล์ภายในองค์กรของดิจิตอลอิควิบเมนต์นั้น ในระยะเริ่มแรกจะอนุญาตให้ดึงไฟล์ข้อมูลจากภายนอกอย่างอิสระ แต่การส่งข้อมูลนั้น จะถูกกำหนดให้ทำได้ที่ความเร็ว 9,600 บิตต่อวินาที ซึ่งเป็นความเร็วระดับเดียวกับการส่งข้อมูลผ่านโมเด็ม นอกจากนี้เรายังสามารถกำหนดสิทธิลงไปได้เลยว่ายูสเซอร์คนใดสามารถใช้แอพพลิเคชันใดได้และควรจะใช้เมื่อไร เนื่องจากไฟล์ที่เก็บค่าต่าง ๆ (Configuration File) นั้นถูกออกแบบมาให้ควบคุมการใช้งานและกำหนดสิทธิได้อย่างละเอียด ประโยชน์ของแอพพลิเคชันเกตเวย์อีกข้อหนึ่งก็คือ มีการบันทึกข้อมูลการติดต่อ (Logging Information) ที่ยอดเยี่ยมมาก ซึ่งเป็นผลจากการที่มันเข้าใจการใช้งานถึงระดับแอพพลิเคชันโพรโตคอลนั่นเอง จึงสามารถบันทึกได้ละเอียดกระทั่งใช้คำสั่งอะไรหรือขนาดไฟล์เป็นเท่าไร ไม่เหมือนกับการใช้เราเตอร์ ซึ่งจะเข้าใจเพียงส่วนหัวของแพ็กเก็ตเท่านั้น และเนื่องจากแอพลิเคชันเกตเวย์นั้นทำงานอยู่ภายนอกระบบปฏิบัติการ (Operating System) โดยระบบปฏิบัติการจะเป็นส่วนที่จัดการเกี่ยวกับระบบรักษาความปลอดภัย และที่สำคัญก็คือ ป้องกันการรบกวนจากโปรแกรมอื่น ๆ ที่ทำ งานอยู่ด้วยข้อดีอีกข้อก็คือ จะไม่สามารถเห็นแอดเดรสภายในได้ เนื่องจากแอพลิเคชันเกตเวย์เป็นผู้ส่งแพ็กเก็ตหรือคำร้องขอไปยังภายนอกไม่ใช่เครื่องภายใน

อย่างไรก็ตาม แอพพลิเคชันเกตเวย์ก็มีข้อด้อยเหมือนกัน เนื่องจากแอพพลิเคชันเกตเวย์เป็นโปรแกรม จึงจำเป็นต้องมีการใช้ทรัพยากรบางอย่างในการรัน และข้อด้อยอีกอย่างก็คือขณะที่แอพพลิเคชันเกตเวย์ทำงานอยู่ จำเป็นต้องมีการคัดลอกข้อมูลที่ต้องส่งผ่านระบบเน็ตเวิร์กจากหน่วยความจำของระบบปฏิบัติการ (Operating System) เข้ามายังหน่วยความจำของโปรแกรม และเมื่อทำงานเสร็จแล้วก็ต้องคัดลอกกลับ ซึ่งต้องเสียเวลาพอสมควร ส่วนข้อด้อยข้อสุดท้ายที่จะพูดถึงก็คือในปัจจุบันแอพพลิเคชันเกตเวย์สามารถรองรับแอพพลิเคชันโพรโตคอลได้เพียงบางตัวเท่านั้น ซึ่งถ้าต้องการทราบว่ามีอะไรบ้างนั้น ก็สามารถหารายละเอียดเพิ่มเติมได้ที่เว็บไซด์ www.gocsi.com/firewall.htm

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

ทางสายกลาง

บริษัท Checkpoint Software Technologies ผู้ขายผลิตภัณฑ์ไฟร์วอลล์ที่มีส่วนแบ่งตลาดถึง 44 เปอร์เซ็นต์ ตามรายงานผลการวิจัยของ Yankee Group ในเดือนมีนาคม ปี 1997 ซึ่งไฟร์วอลล์ตัวนี้พัฒนาโดยโปรแกรมเมอร์ชาวอิสราเอล 2 คน ด้วยวิธีการที่เรียกว่า Stateful Inspection ซึ่งมีเทคนิคพื้นฐานคือ การกรองแพ็กเก็ต โดยกำจัดข้อเสียที่มีเมื่อใช้กับเราเตอร์ซึ่งหลักการทำงานของมันนั้นก็คือ ส่วนของโปรแกรม Stateful Inspection จะถูกโหลดไปยังระบบปฏิบัติการในส่วน IP Stack เพื่อที่จะสามารถพิจารณาแพ็เก็ตก่อนที่แพ็กเก็ตจะถูกส่งไปถึงชั้น IP ซึ่งในส่วนนั้นมันจะทำงานคล้าย ๆ กับการกรองแพ็เก็ตดังได้กล่าวมาแล้วข้างต้น

อย่างไรก็ตาม แทนที่จะพิจารณาแพ็กเก็ตแต่ละตัวอย่างเป็นอิสระต่อกัน คือไม่สนใจข้อมูลของแพ็กเก็ตที่ส่งมาก่อนหน้าแต่ Stateful Inspection จะเก็บข้อมูลของแพ็กเก็ตในอดีตในช่วยพิจารณาด้วย สมมติว่าเครื่อง A ต้องการติดต่อกับเครื่อง B เครื่อง A จะส่งแพ็กเก็ตมายังเครื่อง B เมื่อแพ็กเก็ตแรกจาก A มาถึงไฟร์วอลล์แบบ Stateful Inspection ไฟร์วอลล์จะพิจารณาดูจากค่าที่ตั้งไว้ว่า จะอนุญาตให้ผ่านหรือไม่ แล้วเก็บผลการพิจารณาไว้ เมื่อแพ็กเก็ตจากเครื่อง A แพ็กเก็ตต่อไปมาถึงไฟร์วอลล์จะไปดูค่าสถานะที่มันบันทึกไว้ช่วยในการตัดสินใจ แทนที่จะตัดสินใจซ้ำอีก ทำให้ทำงานรวดเร็วและมีประสิทธิภาพมากขึ้น

Checkpoint ได้เพิ่มส่วนของโปรแกรมที่พิจารณาข้อมูลภายในแพ็กเก็ตอีกด้วย ซึ่งเป็นการมองระดับแอพพลิเคชันโพรโตคอลลักษณะคล้าย ๆ กับแอพพลิเคชันเกตเวย์ตัวอย่างที่ดีของการทำงานในส่วนนี้ก็คือ การใช้งานแอพพลิเคชันโพรโตคอล FTP ในโหมดที่ต้องมีการติดต่อระหว่างไคล์เอนต์ และเซิร์ฟเวอร์โดยการใช้คำสั่ง PORT FTP ไคลเอนต์จะบอกกับเซิร์ฟเวอร์ว่า มันกำลังรอการเชื่อมต่อข้อมูลทางพอร์ตแอดเดรสเท่าไร ไฟร์วอลล์แบบ Stateful Inspection สามารถมองเห็นการควบคุมผ่านคำสั่งพอร์ตได้ แล้วมันจะตั้งค่าสถานะเป็นอนุญาตให้มีการเชื่อมต่อระหว่างเซิร์ฟเวอร์มายังไคลเอนต์ตามพอร์ตที่ได้กำหนดไว้ ซึ่งเป็นการกรองแพ็กเก็ตในระดับที่ไม่สามารถทำโดยเราเตอร์ได้โดยภาพรวมแล้วไฟร์วอลล์แบบ Stateful Inspection ได้เพิ่มส่วนของโปรแกรมในการทำ Stateful Inspection เพื่อเพิ่มประสิทธิภาพในการทำงานให้สูงขึ้น มีการรักษาความปลอดภัยและมีความยืดหยุ่นในการกรองแพ็กเก็ตมากขึ้น นอกจากนั้นไฟร์วอลล์แบบนี้ยังรองรับการใช้งานแอพพลิเคชันได้มากกว่าแอพพลิเคชันเกตเวย์อีกด้วย

สรุป

โดยทั่วไป การใช้เราเตอร์มาทำหน้าที่เป็นไฟร์วอลล์ไม่เป็นที่นิยมกันถึงแม้เราเตอร์จะสามารถทำหน้าที่ในส่วนรักษาความปลอดภัยภายใน เช่น จำกัดสิทธิในการเข้าถึงพอร์ตของ WAN แต่ก็ยังไม่สามารถทำหน้าที่ในฐานะไฟร์-วอลล์ได้น่าพอใจนัก คือมีประสิทธิภาพในการทำงานด้อยกว่าแบบอื่น ขาดการบันทึกรายละเอียดของการติดต่อกันที่ดีพอ ดังนั้นก็เหลือตัวแรกเป็นแอพพลิเคชันเกตเวย์ และ Stateful Inspection Firewall ซึ่งการพิจารณาระหว่างสองตัวนี้ก็ขึ้นอยู่กับนโยบาย และความต้องการที่แท้จริงของคุณเอง แอพพลิเคชันเกตเวย์มีความสามารถในการควบคุมสิทธิต่าง ๆ ได้ดีกว่า และมีระบบการบันทึกข้อมูลของการติดต่อ (Logging) ที่ดีกว่ามากในขณะที่ Stateful Inspection มีประสิทธิภาพในการทำงานสูง และมีความยืดหยุ่นในการใช้งานมากกว่า


เขียนโดย : ดำรง เลิศพลังสันติ
นิตยสาร BUSINESS COMPUTER MAGAZINE
Last update : 04/03/1999