Wednesday, May 29, 2013

Intro. Firewall 1/2

Introduction to Firewall (1/2)

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



Firewall คืออะไร
Firewall มีทั้งแบบ Hardware คือเป็นอุปกรณ์ Appliance* หรือเป็นซอฟต์แวร์ลงบนระบบปฎิบัติการ หน้าที่ของมันเอาไว้สำหรับการตรวจสอบข้อมูล ในที่นี้จะเรียกว่า แพ็คเกท’ (Packet) ว่าสามารถผ่านเข้าออกในพื้นที่ๆกำหนดได้หรือไม่ โดยอ้างอิงจากกฎที่มีอยู่ (Rules and Policies) อธิบายตรงนี้อาจจะงงเล็กน้อย เดี๋ยวเอาไว้ดูตัวอย่างที่จะกล่าวต่อไปครับ

Note :
                Appliance คือ Hardware ที่มีการสร้างและบรรจุ Software สำหรับการทำงานเป็นหน้าที่อย่างใดอย่างหนึ่ง หรือหลายอย่างพร้อมๆกัน โดยที่ผู้ใช้งานไม่จำเป็นต้องรู้ว่าข้างในตัว Appliance นั้นมีอะไรบ้าง ยกตัวอย่างเช่น Firewall ของ CISCO ซึ่งก็คือรุ่น CISCO ASA เรารู้แค่ว่ามันทำหน้าที่ Firewall และความสามารถเสริมอื่นๆ ได้ โดยเราไม่สามารถไปดัดแปลงให้มันทำนอกเหนือจากหน้าที่ๆ ถูกกำหนดมาจากโรงงานได้อีก
ต่างจาก Server ก็คือ ตัว Server เนี่ยเป็น Hardware เกือบจะคล้ายกับ PC ธรรมดาที่เราใช้งาน เพียงแต่มีประสิทธิภาพสูงกว่า ทนกว่า อึดกว่า เสถียรกว่า และตัว Server เนี่ยเราสามารถกำหนดหน้าที่การทำงานของมัน ก็แล้วแต่จุดประสงค์ว่าเราจะเอาไปใช้ทำอะไร เช่น พี่ต้องการระบบเก็บฐานข้อมูลบุคลากร สิทธิ์การใช้งานในระบบของบุคลากร พี่ก็เอา Server เปล่าๆเนี่ย ไปลง Windows Server แล้วสร้างระบบ Active Directory (AD) ขึ้นมา หรือวันดีคืนดี พี่ไม่ต้องการระบบนี้แล้ว พี่ก็จะล้างข้อมูลทิ้ง เอาไปทำอย่างอื่นได้อีก ซึ่งตรงนี้เป็นข้อแตกต่างจาก Appliance

ชนิดของ Firewall
ในที่นี้พี่จะขอพูดถึงเฉพาะ Firewall ที่เป็น Hardware-Based หรือ Appliance เท่านั้นนะครับ
คือนิยามชนิดของ Firewall เนี่ยมีหลากหลาย แต่ในที่นี้พี่จะแยกชนิดตามยุคของ Firewall จากอดีตถึงปัจจุบัน จะทำให้น้องๆ เข้าใจกันก่อนนะครับ

First Generation : Packet Filtering (Stateless Firewall)

ยุคแรกของ Firewall ซึ่งหลักการทำงานของมันก็คือ มันตรวจสอบ IP Header ของตัว Packet ที่ถูกส่งผ่านจากที่หนึ่ง ไปยังอีกที่หนึ่ง ว่ามีข้อมูลอะไรบ้าง เช่น Source IP, Destination IP, Port เป็นต้น หลักจากนั้นก็จะพิจารณาว่าข้อมูลนั้น จะอนุญาต (Allow) หรือ ไม่อนุญาต (Deny or Drop) ซึ่งถือว่าเป็นการทำงานอย่างง่ายๆ ไม่มีการติดตามสถานะว่า Packet เข้า-ออก อย่างไร ให้พิจารณาตามตัวอย่างด้านล่างต่อไปนี้

ในภาพรูป Firewall ปกติจะเป็นรูปคล้ายๆ 'กำแพง' นะครับ แต่พอดีพี่ไม่มีขออนุญาตใช้รูปนี้ไปก่อนนะ -/\-
Scenario :
Client (10.0.0.1/24) ต้องการติดต่อกับ WEB-Server (120.0.0.1/24) ซึ่งเป็นการติดต่อแบบ Web HTTP (TCP Port 80)*

*Note : ตรงนี้เป็นพื้นฐานเรื่องของ Well-Known Ports ซึ่งก็จะมีตั้งแต่ 0-1023 ให้น้องๆ ไปศึกษาเพิ่มเติมเกี่ยวกับเลขที่จำเป็นต้องรู้เช่น HTTP = TCP 80, DNS = TCP/UDP 53, FTP = TCP 21 โดยน่าจะมีอยู่ในข้อสอบเนื้อหาบทเรียนของน้องๆเอง และอยู่ในข้อสอบ CCNA ของ Cisco ด้วย

ทันทีที่ Client ทำการ Request ข้อมูลไปหา Web Server สิ่งที่เกิดขึ้นก็คือ Packet วิ่งโดยมี Flow จาก ซ้าย -> ขวา และทันทีที่ Packet วิ่งถึงอุปกรณ์ Firewall หากเป็นธรรมชาติของ Firewall แล้ว (หมายถึงการทำงานโดย Default) ตัว Packet จะถูก Drop พูดง่ายๆคือ Client ไม่สามารถติดต่อกับ Web Server ได้ ซึ่งจะทำให้ติดต่อสื่อสารได้ ต้องมีการสร้างกฎการทำงานขึ้นมาก่อน

Note : โดยปกติพื้นฐานการทำงานของ Router และ Firewall จะสวนทางกันนิดหน่อย ให้เราพิจารณาความหมายของศัพท์ที่ใช้เรียกอุปกรณ์เลยก็คือ
Router –> อุปกรณ์ค้นหา สร้าง เส้นทาง, ซึ่งเมื่อ Router รู้จักเส้นทาง ธรรมชาติของ Router คือจะปล่อยให้ Traffic (หมายถึง Packet, Data บลาๆๆ) ทุกอย่างสามารถวิ่งผ่านได้ โดยไม่มีการ Drop, หากต้องการ Drop ก็ต้องสร้าง Rule ขึ้นมา
Firewall –> กำแพงไฟ -*-a (อย่าแปลตรงตัวเลยขอร้อง เรียก ไฟร์วอลล์ เถอะ) เอาไว้ปิดกั้นการไหลผ่านของข้อมูล ซึ่งจะตรงกันข้ามกับ Router ก็คือ Rule สร้างมาเพื่อให้ Packet วิ่งผ่านได้ ก็ให้น้องๆลองคิดในแง่ที่ว่า หากเริ่มแรก Firewall ปล่อยให้ทุกอย่างวิ่งผ่านตามสบาย แล้วจะปลอดภัยได้ยังไง ?”

วิธีการสร้างกฎ
สำหรับการสร้างกฎในที่นี้ พี่จะอ้างอิงจากอุปกรณ์ Cisco ก่อนนะครับ ซึ่งยี่ห้ออื่นๆ ก็จะคล้ายๆกัน
(เรียกได้
3 อย่างคือ Rule, Access-List หรือ Policy อันนี้แล้วแต่ยี่ห้อครับ แต่ความหมายเหมือนกัน)
ก็จะมี Syntax หรือลำดับข้อมูลสำหรับสร้างกฎประมาณนี้ครับ


Systax :
[permit/deny] [ip/tcp/udp] [Source IP] [Source Wildcard] [Destination IP] [Destination Wildcard] [Port]

จะคล้ายๆการเขียนโปรแกรม แต่อย่าเพิ่งตกใจครับ อันนี้ง่ายกว่าเขียนโปรแกรมเยอะ คือจริงๆ Systax จะยาวกว่านี้ หรือสั้นกว่านี้ ก็ได้ คือตัวอย่างที่จะยกขึ้นมาให้ดู พี่จะทำให้ดูคร่าวๆ ให้น้องเข้าใจก่อน จะคล้ายๆของจริงนะครับ
กรณีที่พี่ต้องการให้ Client ติดต่อไปหา Web Server ได้
permit tcp 10.0.0.0 0.0.0.255 120.0.0.0 0.0.0.255 eq 80

ความหมายโดยละเอียด
อนุญาตให้ Client IP : 10.0.0.0/24 (ก็คือเบอร์ตั้งแต่ 10.0.0.0 – 10.0.0.255) สามารถติดต่อกับ Client หรือ Web Server ที่เบอร์ 120.0.0.0/24 (ก็คือเบอร์ 120.0.0.0 – 120.0.0.255) ผ่านช่องทาง TCP ที่มีเลข Port = 80 (HTTP) ได้
ตรงนี้จะมีส่วนของ Wildcard Mask ที่เกินหลักสูตรการเรียนของน้องๆมานิดหน่อย ซึ่ง Wildcard Mask เอาง่ายๆคือส่วนกลับของ Subnet Mask ในที่นี้ พี่มี Subnet Mask = 24 หรือ 255.255.255.0 พี่ก็จะได้ Wildcard = 0.0.0.255 กลับกันนั่นเอง
และด้านหลังสุดก็จะมี eq ซึ่งย่อมาจาก equal แปลว่า เท่ากับ eq 80 ความหมายก็คือ tcg = port 80 นั่นเองครับ

หลายคนอาจสงสัยว่า แล้วจะมี Wildcard Mask ไปเพื่ออะไร แล้วทำไมไม่ใช้ Subnet Mask อย่างเดียวไปเลย ?
คำตอบคือ เป็นเรื่องของการง่ายในการใช้งาน ในส่วนของการทำ Access-List หรือการทำ Routing ก็จะใช้ Wildcard Mask เป็นหลัก ซึ่งหากน้องๆ ได้มีโอกาสมาทำงาน หรือมีประสบการณ์เกี่ยวกับงานลักษณะนี้ จะพบว่า Wildcard Mask ทำให้การเขียน Rule ง่ายและเร็วขึ้น พอสมควรครับ ;-)

ต่อยอดจากด้านบน สังเกตว่าพี่อนุญาตให้ 10.0.0.0 – 10.0.0.255 ก็คือ Host ทั้งหมด (ซึ่งก็คือ 10.0.0.1 – 10.0.0.254 ; ตรงนี้ 10.0.0.0 และ 10.0.0.255 จะใช้ไม่ได้นะครับ สำหรับเหตุผลเอาไว้เรียนกับ อ.น้ำตาล/.ชัชชัย นะ) สามารถติดต่อกับ Host หรือ Web Server ที่มี IP = 120.0.0.1 – 120.0.0.254 ได้
หากพี่ต้องให้แค่เฉพาะ
10.0.0.1/24 เครื่องเดียวที่สามารถวิ่งไปหา 120.0.0.1/24 ได้ พี่ก็จะสร้างกฎใหม่คือ
permit tcp 10.0.0.1 0.0.0.0 120.0.0.1 0.0.0.0 eq 80
หรือ permit ip host 10.0.0.1 host 120.0.0.1 eq 80
ในที่นี้จะมีคำว่าสังเกตว่า Wildcard Mask = 0.0.0.0 ซึ่งถ้าเป็น Subnet Mask จะได้ 255.255.255.255 หรือ /32 ความหมายของมันก็คือ มันหมายถึงเครื่องที่มี IP นั้นๆ เพียงเครื่องเดียว
บรรทัดที่สอง พี่ใช้ Keyword ‘host’ ซึ่งก็เป็นความหมายเดียวกับ Wildcard Mask = 0.0.0.0 นั่นเอง ซึ่งหากใช้ Keyword ‘host’ แล้วจะตามด้วย IP ของเครื่องครับ ไม่ใช่ ‘10.0.0.1 host’ แต่เป็น ‘host 10.0.0.1’ นั่นเอง

ถึงตรงนี้ พี่ไม่ได้หวังว่าจะให้น้องเข้าใจแจ่มแจ้งนะครับ เอาเป็นว่าให้เราพอเห็นภาพก่อน ว่ามันทำงานประมาณไหน เอาไว้เดี๋ยวเนื้อหาถัดๆไป พี่จะเอาของจริงที่ใช้งานจริง มาให้น้องๆ ดูแล้วศึกษากันครับ
ถึงตรงนี้ก็จะพอเห็นภาพว่า Packet Filtering (Stateless Firewall) ทำงานอย่างไร ซึ่งการทำงานอย่างง่ายๆข้อมันนี่เอง ที่ทำให้เป็นช่องโหว่ในการโจมตีของผู้ไม่ประสงค์ดีได้ง่าย

ข้อเสียของ Stateless Firewall
     ตัว Firewall ไม่มีการติดตามว่า Packet เข้าและออกนั้น ถูกต้องหรือไม่ มีอะไรสอดไส้มารึเปล่า คือตัว Firewall แค่พิจารณาตามกฎว่า อนุญาต หรือ ไม่อนุญาต เท่านั้นครับ (ตรงนี้ที่ทำให้มันถูกเรียกว่า Stateless Firewall
     สมมติพี่อนุญาตให้ใช้งาน TCP Port 80 ได้ ซึ่งหากผู้ไม่ประสงค์ดีแค่ทำการตรวจสอบว่า Port 80 ให้อนุญาตทำงานได้ พวกเค้าเพียงแค่สร้าง Packet ปลอมๆ ขึ้นมาที่เป็น Port 80 แต่เนื้อข้อมูลข้างในสอดไส้เข้ามา ก็จะสามารถโจมตีเครือข่ายของเราได้อย่างง่ายเลยหล่ะครับ

ก็เอาเป็นว่าพักเนื้อหาไว้ตรงนี้ก่อน ในตอนสุดท้าย เราจะมีเรียนรู้เกี่ยวกับ Firewall อีก 2 แบบที่เหลือคือ Stateful Firewall และ Application Firewall ว่ามีหลักการทำงานอย่างไร และสามารถปิดช่องโหว่ หรือข้อเสียของ Stateless Firewall ได้อย่างไร

ประสบการณ์ทำงานเกี่ยวกับอุปกรณ์ Firewall
จริงๆ พี่มาทำงานเป็น Network Engineer มาก็ได้เวลาประมาณ 2 ปี ก็พอจะมีประสบการณ์เกี่ยวกับตัว Firewall ก็ไม่ถือว่าเยอะซักเท่าไหร่ แต่ก็อยากจะมาเล่าประสบการณ์ซึ่งคิดว่าเป็นประโยชน์ ความรู้เสริมเขี้ยวเล็บ สำหรับน้องๆที่คิดว่าจะมาทำงานสายนี้

ตัว Firewall จริงๆแล้วหน้าที่หลักๆของมันมีอยู่ 2 อย่างคือ
  1. ทำหน้าที่ควบคุมการไหลผ่านของ Traffic ว่าจะ Permit (อนุญาต) หรือ Drop/Deny (ไม่อนุญาต) โดยพื้นฐานก็มาจากเนื้อหาที่สอนข้างต้นนั่นแหละครับ
  2. เอาไว้ทำ NAT (Network Address Translation) ซึ่งเป็นการแปลง IP โดยหลักๆของการทำ NAT เอาไว้เพื่อสำหรับการออก Internet และเหตุผลด้านความปลอดภัย โดยเนื้อหา NAT ไว้พี่จะมาสอนเป็นเนื้อหาตอนหลังครับ ว่าทำไมเราจึงต้องทำ NAT, NAT มีแบบไหนบ้าง หลักการยังไง ฯลฯ

คราวนี้ยี่ห้อของ Firewall ในท้องตลาดที่ถือว่าเด่นมากๆในสามโลก ก็มีอยู่ไม่กี่รุ่นครับ เช่น
  • Juniper จะมีอยู่สองรุ่นคือ Netscreen (ตัวเก่า) และ Junos SRX (ตัวใหม่) ความรู้สึกสำหรับพี่คิดว่าเป็นยี่ห้อที่เป็นเจ้าตลาด Number 1 ของ Firewall เลยหล่ะครับ
  • Cisco เจ้าตลาดด้าน Network ของโลกก็มีของตัวเองครับ โดยจะมีชื่อรุ่นคือ PIX (ตัวนี้เก่ามาก เลิกขายแล้ว) และตัวรุ่นถัดมาคือ ASA (ตัวที่มาแทนที่ PIX)
  • Fortinet ตัวนี้มีชื่อรุ่นเป็น Fortigate ถือว่าองค์กรระดับใหญ่ของบ้านเราเลือกใช้กันพอสมควร แต่พี่ไม่ค่อยได้ลงไปคลุกคลีกับตัวนี้เท่าไหร่ เลยจะไม่ทราบรายละเอียดครับ
  • Palo Alto ตัวนี้ค่อนข้างมาแรงครับ
  • Check Point เจ้านี้ก็ใช่ย่อยเหมือนกันครับ

คือเท่าที่สังเกตจากการใช้งาน และเลือกซื้อเพื่อจะนำไปใช้งานขององค์กรต่างๆเนี่ย สิ่งที่จะพิจารณาเพื่อจัดซื้อคือ
  • ราคา อันนี้แน่นอนครับว่าเป็นเรื่องสำคัญ ถ้าเป็น Cisco, Juniper ตัวนี้ราคาจะสูงกว่าชาวบ้าน หากเทียบรุ่นกับยี่ห้ออื่นๆ
  • ความสามารถเสริม นอกจากหน้าที่หลัก 2 ข้อที่กล่าวข้างต้น ก็จะมีความสามารถอื่นๆ ยกตัวอย่างเช่น IPS, Anti-Virus, SSL-VPN etc พวกนี้ถือว่าเป็นสิ่งสำคัญมากเหมือนกันครับ
  • หน้าตาการใช้งาน อุปกรณ์ดี ความสามารถสูง แต่หน้าตาการใช้งานไม่เป็นมิตร ก็จบง่ายๆ เหมือนกันครับ
  • ความเสถียร และระบบเก็บข้อมูล สามารถใช้งานได้ทน ปัญหาน้อย ระบบเก็บข้อมูลการใช้งาน(Log)สามารถตรวจสอบได้ง่าย เป็นต้น
  • ความเชื่อ - นี่ก็ปากต่อปากเลยครับ รุ่นนี้ปัญหาเยอะ ร่วงบ่อยครับหรือ ตัวนี้คนขาย Support ไม่ค่อยดีครับ


ส่งท้ายกันซักนิด
สิ่งที่พี่สอน ก็ไม่ได้หวังว่าน้องๆจะเข้าใจเนื้อหาทั้งหมด อาจงงบ้าง สับสนบ้าง นึกภาพไม่ออก ก็ไม่เป็นไรครับ สิ่งที่พี่หวังก็คือ อยากให้น้องๆเห็นภาพการทำงานของมัน ในรูปแบบที่เข้าใจง่าย ไว้เป็นพื้นฐานให้น้องๆที่สนใจ ไว้ไปต่อยอดได้ง่าย ไม่ต้องไปเริ่มต้นแบบล้มลุกคลุกคลาน ซึ่งสำหรับพี่ชีวิตการทำงานช่วงแรกๆ ค่อนข้างลำบาก ไม่ค่อยมีคนมาคอยสอน คอยชี้แนะ ไม่อยากให้น้องๆ มาเป็นแบบพี่ตอนนั้นครับ ;)


by, p’artz COE#17

1 comment:

  1. อ้าว พี่อาร์ท ผมเข้ามาเจอ Blog พี่ได้ยังไงเนี่ย 555

    ReplyDelete