ยินดีต้อนรับสู่ show running-config ครับ

บล็อก show running-config นี้สร้างไว้เพื่อเป็นแหล่งรวบรวมเทคนิคการตั้งค่าอุปกรณ์เครือข่าย Cisco ไม่ว่าจะเป็น Cisco IOS Router, Cisco Catalyst Swtich, Cisco ASA Firewall, Cisco Mars เป็นต้น รวมทั้งอาจจะมีเทคนิคการตั้งค่าอุปกรณ์ในยี่ห้ออื่น ๆ บ้างเล็กน้อยครับ

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

Thursday, November 25, 2010

การตั้งค่า NAT(Network Address Translation) บน Cisco IOS

Basic NAT Configuraition on Cisco IOS

nat cisco ios

          การติดต่อสื่อสารระหว่างเครื่องคอมพิวเตอร์นั้น จำเป็นที่จะต้องมี IP Address(IP ย่อมาจาก Internet Protocol) ซึ่งเป็นหมายเลขขนาด 32 bit ที่ไม่ซ้ำกัน สำหรับใช้ในการระบุถึงสถานที่ตั้งของเครื่องคอมพิวเตอร์ภายในระบบเครือข่าย เพื่อที่จะสามารถทำการส่งข้อมูลไปยังเครื่องคอมพิวเตอร์แต่ละเครื่องได้ เมื่อครั้งตอนทำการออกแบบ IP Address ใน Version 4 หรือที่เรียกว่า IPv4 นั้น ผู้ออกแบบคิดว่าปริมาณของหมายเลข IP Address ของ IPv4 นั้นมีจำนวนมากเกินความต้องการ เนื่องจากในทางทฤษฎีแล้ว IPv4 สามารถที่จำนวนหมายเลข IP Address ที่ไม่ซ้ำกันได้ถึง 4,294,967,296 หมายเลข (แต่สามารถใช้งานได้ประมาณ 3.2 ถึง 3.3 พันล้านหมายเลข เนื่องจากบาง IP Address ได้ถูกสำรองไว้ใช้งานอื่น ๆ เช่น multicasting, broadcast เป็นต้น) แต่เนื่องจากในปัจจุบันมีการใช้งานอินเทอร์เน็ตอย่างแพ่รหลายมากขึ้น จนเกินความคาดหมายของผู้ออกแบบ IPv4 ทำให้ IP Address ที่สามารถนำมาใช้งานได้ในปัจจุบันกำลังจะหมดลงไป ในการใช้งาน IPv4 ในปัจจุบันนี้จึงต้องมีการใช้งานอย่างประหยัดมากขึ้น และการทำ NAT ก็เป็นวิธีการหนึ่งที่จะช่วยในการประหยัดการใช้งาน IP Address ได้

          องค์กร IANA(Internet Assigned Nubbers Authority) ได้ทำการกำหนดช่วงของ IP Address สำหรับการใช้งานในเครือข่ายภายในเอาไว้หรือที่เรียกว่า Private IP Address ซึ่งเป็น IP Address แบบ Unregistered โดยจะไม่สามารถใช้งาน IP Address เหล่านี้ในเครือข่ายสาธารณะหรือเครือข่ายอินเทอร์เน็ตได้ แต่สร้างขึ้นมาเพื่อใช้งานสำหรับเครือข่ายภายในองค์กรเท่านั้น ซึ่งในแต่ละองค์กรก็อาจจที่จะใช้ IP Address ในช่วงเดียวกันหรือซ้ำกันก็ได้ ยกตัวอย่างเช่น IP Address ในชุด 192.168.x.x ที่มีการใช้งานอย่าแพร่หลาย แต่เมื่อมีเครื่องในเครือข่ายภายในแต่ละองค์กรต้องการที่จะติดต่อกับเครือข่ายอินเทอร์เน็ต ก็จะถูกทำการ NAT IP Address แบบ Private IP Address เหล่านี้ไปเป็น IP Address แบบ Public IP Address หรือ IP Address แบบ Registered ได้

IP Address ที่ถูกกำหนดให้ใช้งานเป็น Private IP Address มีดังนี้

  • ช่วงที่ 1 สำหรับ class A : 10.0.0.0 ถึง 10.255.255.255
  • ช่วงที่ 2 สำหรับ class B : 172.16.0.0 ถึง 172.31.255.255
  • ช่วงที่ 3 สำหรับ class C : 192.168.0.0 ถึง 192.168.255.255

          NAT(Network Address Translation) ถูกออกแบบมาเพื่อช่วยในการประหยัดการใช้งาน IP Address โดยทำให้สามารถใช้งานอุปกรณ์เพียงอุปกรณ์เดียว เช่น เราเตอร์ ในการเป็นตัวแทนในการติดต่อสื่อสารระหว่างเครือข่ายภายในกับเครือข่ายอินเทอร์เน็ต ซึ่งหมายความว่าเมื่อมีเครื่องภายในเครือข่าย Lan ต้องการติดต่อไปยังอินเทอร์เน็ต มันก็จะใช้ IP Address ของเราเตอร์เป็นตัวแทนในการติดต่อสื่อสาร ซึ่งเครื่องในเครือข่าย Lan หลาย ๆ เครื่องที่ต้องการใช้งานอินเทอร์เน็ตในเวลาเดียวกันนั้น อาจจะใช้เพียง IP Address ของเราเตอร์ IP Address เดียวเท่านั้นสำหรับการเป็นตัวแทนในการติดต่อสื่อสารกับเครือข่ายอินเทอร์เน็ต อีกทั้งการทำ NAT ยังช่วยในการรักษาความปลอดภัยให้แก่เครือข่ายภายในอีกด้วย คือสามารถใช้การทำ NAT สำหรับการซ่อน IP Address ของเครือข่ายแต่ละส่วนไว้ได้อีกด้วย

          ตัวอย่างในการทำ NAT ก็ขอให้เพื่อน ๆ ลองเปิดดู IP Address ของเครื่องที่เพื่อน ๆ ใช้งานอยู่ในปัจจุบันนี้ดูก็ได้ครับ ผมคิดว่าน่าจะต้องอยู่ในช่วงใดช่วงหนึ่งของ Private IP Address ด้านบนนี้ใช่มั้ยครับ(โดยเฉพาะ 192.168.x.x) ซึ่งเมื่อเพื่อน ๆ ติดต่อไปยังอินเทอร์เน็ต IP Address ของเครื่องเพื่อน ๆ ก็จะถูกทำ NAT ออกไปเป็น IP Address แบบ Public IP Address โดยเราเตอร์นั่นเองครับ ซึ่งเพื่อน ๆ สามารถเข้าไปที่เวปไซต์ http://www.ip-adress.com เพื่อตรวจสอบได้ว่า IP Address ของเครื่องเพื่อน ๆ ที่ถูกทำการ NAT ออกไปนั้นเป็น IP Address อะไรได้ครับ

การทำ NAT มีรูปแบบการทำงาน ดังนี้

  • Static NAT เป็นการแปลงหมายเลข IP Address แบบ one to one คือ IP Address ของเครื่องภายในหนึ่งหมายเลขจะทำการแปลงไปเป็น IP Address ของเครือข่ายภายนอกหนึ่งหมายเลข ส่วนมากจะใช้งานกับเครื่อง Server ที่อยู่ในเครือข่ายภายใน ที่ต้องการเข้าใช้งานจากเครือข่ายภายนอก

static nat

    • จากรูป จะเห็นว่าการทำ Static NAT เป็น การจับคู่ IP Address แบบ Private เข้ากับ IP Address แบบ Public แบบ one to one เช่น IP Address 192.168.1.10 จะถูกแปลงไปเป็น 212.122.34.50 และ 192.168.1.11 จะถูกแปลงไปเป็น 212.122.34.51 เสมอ เป็นต้น
  • Dynamic NAT เป็นการแปลงหมายเลข IP Address แบบ many to many คือ IP Address ของเครื่องภายในเครือข่ายหลาย ๆ เครื่องจะทำการแปลงไปเป็น IP Address ของเครือข่ายภายนอกหลาย ๆ หมายเลข โดยการแปลงหมายเลข IP Address นั้นจะทำตามลำดับ คือ IP Address ของเครื่องในเครือข่ายภายในที่มาก่อนก็จะทำการแปลงเป็น IP Address ของเครือข่ายภายนอกในอันดับต้น ๆ ก่อน โดยถ้ามี IP Address ของเครือข่ายภายนอก 3 IP Address เครื่องในเครือข่ายภายในก็จะสามารถติดต่อสื่อสารได้เพียง 3 เครื่องในเวลาหนึ่ง ๆ เท่านั้น

dynamic nat

    • จากรูปจะเป็นว่าการทำ Dynamic NAT จะเป็นการจับคู่ IP Address แบบ Private เข้ากับ IP Address แบบ Public แบบ Many to Many คือ IP Address แบบ Private ที่ใช้งานก่อนจะถูกแปลงไปเป็น IP Address แบบ Public ที่ว่างอยู่เป็นอันดับแรกในช่วงที่กำหนดไว้ เช่น IP Address 192.168.1.17 ได้เข้าใช้งานเป็นอันดับแรก จึงได้ถูกแปลงไปเป็น IP Address แบบ Public ที่ว่างเป็นอันดับแรกของช่วงที่กำหนดไว้ นั่นก็คือ 212.122.34.50 และเมื่อใช้งานเสร็จแล้ว IP Address 212.122.34.50 นี้ก็อาจจะจับคู่กับ Private IP Address อื่น ๆ แทนก็ได้
  • PAT(Port Address Translation) หรือที่เรียกว่า Overloading เป็นการแปลงหมายเลข IP Address แบบ many to one คือ IP Address ของเครื่องภายในเครือข่ายหลาย ๆ เครื่องจะทำการแปลงไปเป็น IP Address ของเครือข่ายภายนอกเพียง IP Address เดียวเท่านั้น โดยในการแปลงหมายเลข IP Address จะทำการแปลงหมายเลข Port ต้นทางไปด้วย

PAT

    • จากรูปจะเห็นว่าการทำ PAT นั้นจะทำการแปลง Private IP Address ไปเป็น Public IP Address เพียง IP Address เดียวเท่านั้น แต่จะแตกต่างกันที่หมายเลข Port ที่ใช้ เช่น Private IP Address 192.168.1.11 อาจจะถูกแปลงไปเป็น 212.122.34.50 port 1022 เป็นต้น ซึ่งเมื่อใช้งานเสร็จแล้ว หมายเลข port 1022 นี้ก็อาจจะถูกจับคู่กับ Private IP Address อื่น ๆ แทนก็ได้
  • Static PAT เป็นการแปลงหมายเลข IP Address แบบ one to one คล้าย ๆ กับการทำ Static NAT แต่จะมีการระบุหมายเลขพอร์ตไปด้วย static pat
    • จากรูปจะเห็นว่าการทำ Static PAT นั้นจะเป็นการจับคู่ระหว่าง Private IP Address และ Port เข้ากับ Public IP Address และ Port โดยจะคล้ายกับการทำ PAT แต่เราจะทำการกำหนด Port ด้วยตนเอง เช่น Private IP Address 192.168.1.11 port 80 จะถูกแปลงเป็น 212.122.34.50 port 80 เสมอ เป็นต้น

          เอาล่ะครับ เรามาดูตัวอย่างการตั้งค่า NAT ในรูปแบบต่าง ๆ กันดูดีกว่าครับ แต่ก่อนที่ทำการตั้งค่าการ NAT แบบต่าง ๆ นั้น เราจะต้องมาทำการกำหนดอินเทอร์เฟสของเราเตอร์ว่าฝั่งใด คือฝั่ง inside (Private Network) และ ฝั่งใดคือฝั่ง outside (Public Network) กันก่อนครับ ซึ่งสามารถทำได้โดยการใช้คำสั่ง “ip nat inside” และ “ip nat outside” ใน interface configuration mode ครับ

ตัวอย่าง
Router(config)#int fa0/0
Router(config-if)#description # Private Network #
Router(config-if)#ip nat inside
Router(config-if)#exi
Router(config)#int fa0/1
Router(config-if)#description # Public Network #
Router(config-if)#ip nat outside
Router(config-if)#exi

          เมื่อทำการกำหนดว่าอินเทอร์เฟสใดเป็น inside และอินเทอร์เฟสใดเป็น outside เรียบร้อยแล้ว เราก็จะมาทำการตั้งค่า NAT กันครับ ในรูปแบบต่าง ๆ ตามตัวอย่างด้านล่างกันครับ

Static NAT
ในตัวอย่างด้านล่างนี้ เป็นการทำ Static NAT โดยกำหนดให้

  • Private IP Address 192.168.1.10 แปลงไปเป็น 212.122.34.50
  • Private IP Address 192.168.1.11 แปลงไปเป็น 212.122.34.51
  • Private IP Address 192.168.1.12 แปลงไปเป็น 212.122.34.52

และเมื่อทำการตั้งค่าเสร็จแล้ว สามารถตรวจสอบได้โดยการใช้คำสั่ง "show ip nat translation" ครับ

ตัวอย่าง
Router(config)#ip nat inside source static 192.168.1.10 212.122.34.50
Router(config)#ip nat inside source static 192.168.1.11 212.122.34.51
Router(config)#ip nat inside source static 192.168.1.12 212.122.34.52

Router#show ip nat translations
Pro  Inside global     Inside local       Outside local      Outside global
icmp 212.122.34.50:1   192.168.1.10:1     4.2.2.2:1          4.2.2.2:1
icmp 212.122.34.51:1   192.168.1.11:1     4.2.2.2:1          4.2.2.2:1
icmp 212.122.34.52:1   192.168.1.12:1     4.2.2.2:1          4.2.2.2:1
---  212.122.34.50     192.168.1.10       ---                ---
---  212.122.34.51     192.168.1.11       ---                ---
---  212.122.34.52     192.168.1.12       ---                ---

          การทำ Static NAT นี้ ส่วนมาก ก็จะนำไปใช้กับ Server ในเครือข่ายภายในที่ต้องมีการเรียกใช้จากเครือข่ายภายนอก เช่น web server หรือ mail server เป็นต้นครับ

Dynamic NAT
          ในตัวอย่างด้านล่างนี้เป็นการตั้งค่า Dynamic NAT โดยในการตั้งค่า Dynamic NAT จะต้องมีการสร้าง access-list เพื่อที่จะกำหนดถึง Private IP Address ภายในที่อนุญาตให้ทำการ NAT ออกไป และจะต้องมีการสร้าง Pool เพื่อที่จะใช้เป็น Public IP Address ที่จะใช้ในการแปลง Private IP Address ครับ

          จากตัวอย่างด้านล่าง เป็นการสร้าง access-list 1 เพื่อใช้ในการกำหนดถึง Private IP Address ภายในที่อนุญาตให้ทำ NAT ออกไปครับ และมีการสร้าง Pool ที่ชื่อว่า ip-pool โดยกำหนด Public Address ในช่วง 212.122.34.50 ถึง 212.122.34.80 เอาไว้สำหรับการแปลง Private IP Address ออกไปครับ ซึ่งเพื่อน ๆ จะเห็นว่าจำนวนของ Private IP Address นั้นจะมีจำนวนมากกว่า Public IP Address คือมี Private IP Address จำนวน 254 หมายเลข แต่มี Public IP Address เพียง 31 หมายเลข ในกรณีนี้ การใช้งานก็จะสามารถใช้งานได้พร้อมกันสูงสุดได้เพียง 31 หมายเลขพร้อมกันเท่านั้น ถ้ามีการใช้งานหมายเลขที่ 32 เพิ่มมา จะไม่สามารถใช้งานได้ครับ

ตัวอย่าง
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Router(config)#ip nat pool ip-pool 212.122.34.50 212.122.34.80 netmask 255.255.255.0
Router(config)#ip nat inside source list 1 pool ip-pool

Router#show ip nat translations
Pro  Inside global     Inside local       Outside local      Outside global
icmp 212.122.34.52:8   192.168.1.10:8     4.2.2.2:8          4.2.2.2:8
icmp 212.122.34.51:8   192.168.1.14:8     4.2.2.2:8          4.2.2.2:8
icmp 212.122.34.50:8   192.168.1.17:8     4.2.2.2:8          4.2.2.2:8

PAT
          ในตัวอย่างด้านล่างนี้จะเป็นการตั้งค่า PAT หรือที่รู้จักกันว่า overloading ซึ่งจะสามารถใช้งาน Public IP Address เดียวในการเป็นตัวแทนการในการติดต่อสื่อสารระหว่าง เครื่องในเครือข่ายภายในกับเครือข่ายภายนอกได้ เช่นในตัวอย่างด้านล่างนี้ เครื่องในเครือข่ายภายในที่มีการใช้ Private IP Address เท่ากับ 192.168.1.0/24 เมื่อทำการติดต่อสื่อสารกับเครือข่ายภายนอกจะถูกแปลงมาใช้ Public IP Address ซึ่งเป็น IP Address ของอินเทอร์เฟส FastEthernet 0/1 ของเราเตอร์เพียงหมายเลขเดียว

ตัวอย่าง
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Router(config)#ip nat inside source list 1 interface FastEthernet 0/1 overload

Router#show ip nat translations
Pro  Inside global               Inside local         Outside local      Outside global
icmp 212.122.34.50:1026  192.168.1.10:14    4.2.2.2:14         4.2.2.2:1026
icmp 212.122.34.50:1030  192.168.1.11:16    4.2.2.2:16         4.2.2.2:1030
icmp 212.122.34.50:1025  192.168.1.12:13    4.2.2.2:13         4.2.2.2:1025

Static PAT
          ในตัวอย่างด้านล่างเป็นการตั้งค่า Static PAT ซึ่งจะทำการจับคู่ Private IP Address และ port เข้ากับ Public IP Address และ Port ซึ่งส่วนมาจะนำไปใช้งานกับ Server ในเครือข่ายภายในที่ต้องมีการเรียกใช้จากเครือข่ายภายนอก เช่น web server หรือ mail server เหมือนกับการตั้งค่า Static NAT แต่จะแตกต่างตรงที่มีการระบุหมายเลข Port ลงไปด้วยครับ

          จากตัวอย่างด้านล่างนี้เป็นการตั้งค่า Static PAT โดยจะทำการแปลง 192.168.1.10 port 80 ไปเป็น 212.122.34.50 port 80 ครับ

ตัวอย่าง
Router(config)#ip nat inside source static tcp 192.168.1.10 80 212.122.34.50 80

Router#show ip nat translations
Pro  Inside global     Inside local       Outside local      Outside global
tcp 212.122.34.50:80   192.168.1.10:80    ---                ---
tcp 212.122.34.50:80   192.168.1.10:80    112.32.45.15:1025  112.32.45.15:1025
tcp 212.122.34.50:80   192.168.1.10:80    112.32.45.15:1026  112.32.45.15:1026

          การตั้งค่าการ NAT นั้นยังมีรูปแบบการตั้งค่าในแบบอื่น ๆ ที่หลากหลาย เช่น nat outside เป็นต้น ที่นำมาแนะนำให้เพื่อน ๆ ในวันนี้ก็เป็นเพียงพื้นฐานการตั้งค่า NAT บนอุปกรณ์ Cisco IOS เท่านั้น ไว้ในโอกาสหน้าจะมาแนะนำการตั้งค่า NAT ในรูปแบบอื่น ๆ กันต่อนะครับ สวัสดีครับ

Sunday, November 21, 2010

การตั้งเวลาเพื่อให้อุปกรณ์ reload โดยอัตโนมัติ

reload eem

           ในบางครั้งที่เราใช้งานอุปกรณ์เครือข่าย เมื่อเกิดมีปัญหาขึ้นมา สิ่งที่หลาย ๆ คนเลือกที่จะทำ(รวมทั้งผมด้วย) ก็คือการทดลอง reload อุปกรณ์นั้น ๆ ดูก่อน เพื่อเป็นการล้างค่าต่าง ๆ บนตัวอุปกรณ์ ซึ่งก็เป็นวิธีการในการแก้ไขปัญหาเฉพาะหน้าที่ดีวิธีนึงใช่มั้ยครับ 

          ยกตัวอย่างเช่น ในไซต์ลูกค้าของผมไซต์นึง ทางลูกค้าพบปัญหาคือ อุปกรณ์ในรุ่นที่ลูกค้าใช้งานอยู่นั้นเป็นรุ่นเล็กจนไม่เพียงพอต่อการใช้งานขององค์กร ซึ่งเมื่อเปิดใช้งานไว้หลาย ๆ วัน จะทำให้มีการใช้ memory ในปริมาณที่สูงมาก จนทำให้การใช้งานของผู้ใช้ช้าลงจนเห็นได้ชัด และด้วยเหตุผลบางประการ ทางลูกค้าก็ไม่สามารถที่จะ upgrade ไปใช้งานอุปกรณ์ในรุ่นอื่นได้ จึงต้องทำการแก้ไขปัญหาเฉพาะหน้าด้วยการ reload เราเตอร์ทุก ๆ วันในช่วงที่ไม่มีการใช้งานโดยการใช้คำสั่ง "reload at 00.00" เพื่อให้เราเตอร์ทำการ reload ตัวเองในเวลาเที่ยงคืน ซึ่งก็ต้องมาทำการตั้งคำสั่งนี้ด้วยตัวเองทุก ๆ วัน ทางลูกค้าจึงได้มาปรึกษาผมว่า มีวิธีใดบ้างที่จะทำให้เราเตอร์ reload ตัวเองโดยอัตโนมัติ โดยไม่ต้องตั้งค่าทุก ๆ วันบ้าง ซึ่งทางผมก็ได้ไปค้นหาวิธีการมาจนได้ ในวันนี้จึงอยากที่จะมาแนะนำเพื่อน ๆ เผื่อได้นำไปใช้งานกันครับ

          สำหรับวิธีการที่จะแนะนำในวันนี้ก็คือการใช้ Embedded Event Manager (EEM) ร่วมกับการใช้ cron ซึ่งสำหรับเพื่อน ๆ ที่เคยใช้งาน unix หรือ linux มาก็คงเคยผ่านตาการใช้ cron กันมาบ้างใช่มั้ยครับ แต่สำหรับเพื่อน ๆ ที่ไม่เคยรู้จักการใช้งาน cron ในวันนี้ผมก็จะมาแนะนำวิธีการใช้งาน cron สั้น ๆ กันก่อนนะครับ

          cron เป็นการสั่งให้ทำการใช้คำสั่ง หรือใช้ script ต่าง ๆ ตามช่วงเวลาที่กำหนดไว้ ในการใช้งาน cron จะต้องมีการกำหนดเวลาเอาไว้ โดยมีรูปแบบเป็น 6 fields ดังนี้

#  .------------- minute (0 - 59)
#  |    .---------- hour (0 - 23)
#  |    |   .-------- day of month (1 - 31)
#  |    |   |   .------ month (1 - 12) OR jan,feb,mar,apr ...
#  |    |   |   |  .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#  |    |   |   |  |
#  *   *   *  *  *  command to be executed

*ในส่วนนี้ขอขอบคุณ wikipedia นะครับ เนื่องจากเห็นว่าอธิบายไว้ได้ง่ายและชัดเจนดีครับ

ตัวอย่างการใช้ cron
ใช้คำสั่งบางอย่างในทุก ๆ เดือน ก็จะต้องทำการตั้งค่า cron ดังนี้
0 0 1 * *
ใช้คำสั่งบางอย่างในทุก ๆ วันจันทร์ถึงวันพุธทุก ๆ 6 โมงเช้า ก็จะต้องทำการตั้งค่า cron ดังนี้
0 6 * * 1-3

          ทั้งนี้ในการใช้งาน cron ได้มีการกำหนดค่าต่าง ๆ ที่มีการใช้งานเป็นประจำเอาไว้เป็นคำสั่ง เพื่อให้สะดวกต่อการนำไปใช้ เช่น เราต้องการให้ใช้คำสั่งบางอย่างในทุก ๆ ชั่วโมง แทนที่จะต้องใช้คำสั่งว่า “0 * * * *” ก็สามารถใช้คำสั่งว่า @hourly แทนได้ โดยคำสั่งที่มีการกำหนดไว้มีดังนี้

คำสั่ง

อธิบาย

มีค่าเท่ากับ

@yearly (หรือ @annually) ทำทุกปี 0 0 1 1 *
@monthly ทำทุกเดือน 0 0 1 * *
@weekly ทำทุกสัปดาห์ 0 0 * * 0
@daily (หรือ @midnight) ทำทุกวัน 0 0 * * *
@hourly ทำทุกชั่วโมง 0 * * * *
@reboot ทำเมื่อเริ่ม boot ใหม่  

          เอาล่ะครับ เมื่อเพื่อน ๆ ทำความรู้จักกับการใช้งาน cron กันแล้ว เราก็จะมาเริ่มทำการตั้งค่า EEM และ cron เพื่อกำหนดเวลาให้ทำการ reload กันครับ สำหรับขั้นตอนในการตั้งค่าก็มีดังนี้

  1. ทำการตั้งค่าวันและเวลาให้ตรงกับเวลาในปัจจุบัน
  2. เข้าสู่โหมด appler configuration mode ด้วยการใช้คำสั่ง "event manager applet <applet-name>"
  3. ทำการกำหนดเวลาโดยใช้ cron ด้วยคำสั่ง "event timer cron name <name> cron-entry <cron-entry>"
  4. ทำการกำหนด action ว่าให้ทำการ reload เมื่อถึงเวลาที่กำหนด

          ในอันดับแรกเราก็ควรที่จะทำการตั้งวันและเวลาของอุปกรณ์เราให้ตรงกับปัจจุบันกันก่อนนะครับ แนะนำว่าควรที่จะทำการเทียบเวลากับ ntp server นะครับ
ตัวอย่าง
Router(config)#ntp server 203.185.69.59 prefer
Router(config)#ntp server 203.185.69.60
Router(config)#clock timezone ICT +7
Router(config)#do show clock
10:11:47.662 ICT Sun Nov 21 2010

          จากนั้นขั้นตอนต่อมา เราก็จะมาเริ่มทำการตั้งค่า EEM กันครับ โดยจากตัวอย่างนี้จะกำหนดให้ทำการ reload ในทุก ๆ นาทีที่ 0 และชั่วโมงที่ 0 ของทุก ๆ วัน หรือก็คือในทุก ๆ เที่ยงคืนนั่นเองครับ ซึ่งการใช้คำสั่ง "0 0 * * *" นั้นสามารถใช้คำสั่งว่า "@midnight" แทนก็ได้ครับ
ตัวอย่าง
Router(config)#event manager applet reload@midnight
Router(config-applet)#event timer cron name midnight cron-entry "0 0 * * *"
Router(config-applet)#action 1.0 reload
Router(config-applet)#exit

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

Thursday, November 18, 2010

การตั้งค่าให้ Backup Config ทุกครั้งเมื่อมีการ save configuration

backup-config

           สวัสดีครับเพื่อน ๆ ในเวลาที่เพื่อน ๆ ทำการตั้งค่าอุปกรณ์ Cisco นั้น เคยได้ทำการ backup ค่า configuration ที่ได้ทำการตั้งค่าเอาไว้กันบ้างมั้ยครับ ถ้ายังไม่เคยได้ทำ ผมก็ขออนุญาตแนะนำให้ทำการ backup ค่า configuration เก็บเอาไว้กันบ้างนะครับ เพราะว่าเราก็ไม่ทราบใช่มั้ยครับ ว่าอุปกรณ์ของเราที่ใช้งานกันอยู่ทุกวันเนี่ย วันไหนมันจะเดี้ยงขึ้นมา ถ้าเกิดใช้งานไปแล้วอยู่ดี ๆ วันนึงมันเกิดใช้งานไม่ได้ขึ้นมาซะงั้น อย่างน้อยเราก็ยังมีค่า configuration ล่าสุด เก็บเอาไว้เพื่อนำไปใช้กับอุปกรณ์สำรองของเราได้ใช่มั้ยครับ ซึ่งการ backup ค่า configuration ก็สามารถทำได้โดยการ show startup-config และทำการ copy มาเก็บเอาไว้ แต่วันนี้ผมจะมาแนะนำวิธีการที่ดีกว่านั้นครับ นั่นก็คือให้อุปกรณ์ทำการส่งค่า configuration มาให้โดยอัตโนมัติในทุกครั้งที่มีการใช้คำสั่ง "write memory" หรือ "copy running-config startup-config" ครับ

          การตั้งค่าให้อุปกรณ์ทำการ backup ค่า configuration ไปยัง Server ในทุก ๆ ครั้งที่มีการบันทึกค่า running-config ไปยัง startup-config ด้วยการใช้คำสั่ง “write memory” หรือ “copy running-config startup-config” นั้น สามารถที่จะทำได้โดยการใช้คำสั่ง “archive” ซึ่งคำสั่งนี้สามารถใช้งานได้ ตั้งแต่ Cisco IOS Release 12.3(4)T ครับ โดยการใช้คำสั่ง archive นี้ ยังสามารถนำไปใช้ในการตั้งค่าให้อุปกรณ์ทำการเก็บ log การตั้งค่าต่าง ๆ บนตัวมันเก็บเอาไว้ด้วยอีกนะครับ(บทความ:การเก็บ log การตั้งค่าต่าง ๆ บนอุปกรณ์ด้วยการใช้คำสั่ง archive)

เรามาเริ่มดูตัวอย่างการตั้งค่ากันเลยดีกว่าครับ สำหรับขั้นตอนการตั้งค่าที่ใช้งานในบทความนี้ก็มีดังนี้ครับ

  1. เข้าสู่ global configuration mode
  2. ใช้คำสั่ง archive เพื่อเข้าสู่โหมด archive configuration mode
  3. ใช้คำสั่ง path เพื่อเลือก รูปแบบและที่เก็บค่า configuration file
  4. ใช้คำสั่ง write-memory เพื่อให้ทำการ backup ค่า configuration ทุกครั้งที่มีการใช้คำสั่ง write memory หรือ copy running-config startup-config
  5. (ทางเลือก)ใช้คำสั่ง time-period เพื่อตั้งเวลาให้อุปกรณ์ทำการ backup ค่า configuration ตามเวลาที่กำหนด

ตัวอย่าง
Router(config)#archive
Router(config-archive)#path tftp://192.168.1.3/Router-config
Router(config-archive)#write-memory
Router(config-archive)#time-period 1440

          ในตัวอย่างนี้ เป็นการตั้งค่าให้อุปกรณ์ทำการส่งค่า configuration มาเก็บไว้ โดยใช้โปรโตคอล tftp ซึ่งในส่วนนี้สามารถที่จะเลือกใช้โปรโตคอลในรูปแบบอื่น ๆ ได้หลากหลาย เช่น ftp, http, https เป็นต้น จากนั้นก็ทำการตั้งค่าให้ทำการ backup ค่า configuration ในทุกครั้งที่มีการ save ค่า configuration ไปยัง startup-config โดยการใช้คำสั่ง write-memory เพียงเท่านี้ก็จะทำให้เรามีค่า configuration ที่ใหม่ล่าสุดอยู่เสมอแล้ว แต่ในตัวอย่างนี้ยังจะมีการตั้งค่าให้ทำการ backup ค่า configuration ในทุก ๆ หนึ่งวัน (1440 นาที) อีกด้วย แต่โดยส่วนตัวแล้ว ผมจะใช้แค่เพียงคำสั่ง write-memory เท่านั้น จะไม่ใช้งานคำสั่ง time-period เนื่องจากจะทำให้มีค่า configuration ที่เก็บไว้เยอะจนเกินไปครับ

          จากนั้นเราก็มาทำการตั้งค่าใน tfpt ของเรากันนะครับ ซึ่งในวันนี้ผมจะใช้โปรแกรม Tftpd32 มาใช้งานกันครับ ซึ่งเพื่อน ๆ ก็น่าจะเคยใช้งานกันมาบ้างแล้วใช่มั้ยครับ สำหรับเพื่อน ๆ ที่ยังไม่มีโปรแกรมนี้สามารถดาวน์โหลดได้ที่หน้าดาวน์โหลด หรือคลิ้กที่นี่เลยครับ:Tftpd32 standard edition v.3.51

17-11-2553 23-37-33

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

Sunday, November 14, 2010

การตั้งค่า Cisco ASA Firewall ขั้นพื้นฐาน(Basic Configuration Cisco ASA Firewall)

basic asa config           สวัสดีครับเพื่อน ๆ ในวันนี้ผมจะมาแนะนำการใช้งาน Cisco ASA Firewall เบื้องต้นกันครับ สำหรับใครที่ยังไม่รู้จักว่า Cisco ASA คืออะไรนะครับ Cisco ASA ก็คือ Firewall ของ Cisco ที่ทำงานในลักษณะ Stateful Packet Filtering คือจะมีการเก็บค่าสถานะของแต่ละ Connection เก็บเอาไว้ เพื่อที่จะนำไปใช้ในการตรวจสอบการทำงานในแต่ละ Connection ว่าตรงตามขั้นตอนหรือไม่ เช่น TCP Connection นั้นมีการรับ-ส่งข้อมูลถุกต้องตามหลัก Three-way handshake หรือไม่ เป็นต้น และจะนำข้อมูลใน Connection ที่เก็บไว้นี้ไปใช้ในการอนุญาตทราฟิกในฝั่งขากลับให้โดยอัตโนมัติโดยไม่ต้องมีการสร้าง ACL ในฝั่งขากลับอีกด้วย

          ในการส่งทราฟิกข้ามระหว่างแต่ละอินเทอร์เฟสของ ASA นั้นจะต้องมีการทำ NAT (Network Address Translation) โดยมีจุดประสงค์เพื่อที่จะซ่อน ip address ของเครือข่ายภายในไว้จากเครือข่ายภายนอก และเพื่อเป็นการประหยัดการใช้งาน ip address เพราะภายในเครือข่ายจะใช้งาน ip address แบบไม่ลงทะเบียน (Private ip address) จากนั้นจึงใช้การทำ NAT เพื่อแปลง ip address แบบไม่ลงทะเบียน (Private ip address) เหล่านี้ไปเป็น ip address แบบลงทะเบียน (Public ip address) ในฝั่งภายนอกได้

ค่าต่าง ๆ ที่ควรทำความรู้จักก่อนการตั้งค่า ASA

  • Security level : คือค่าความน่าเชื่อถือของแต่ละ Zone ที่อินเทอร์เฟสนั้น ๆ เชื่อมต่ออยู่ จะมีค่าตั้งแต่ 0-100 โดย Zone ที่มีความน่าเชื่อถือสูงก็จะมี Security level ที่สูง ส่วน Zone ที่มีความน่าเชื่อถือต่ำก็จะมี Security level ที่ต่ำ (โดยทั่วไป Zone inside จะมี security เท่ากับ 100 ส่วน Zone outside จะมี Security level เท่ากับ 0)
  • การติดต่อสื่อสารจะมี 2 ทิศทาง คือ inbound และ outbound โดยมีรายละเอียด ดังนี้
    • inbound : คือการติดต่อสื่อสารจาก Zone ที่มี Security level ต่ำไปยัง Zone ที่มี Security level สูง
    • outbound : คือการติดต่อสื่อสารจาก Zone ที่มี Security level สูงไปยัง Zone ที่มี Security level ต่ำ
  • DMZ (Demilitarized Zone) เป็น Zone ที่มีการใช้งานจากทั้งเครือข่ายภายในและเครือข่ายภายนอก คือ หลักในการใช้งาน Firewall นั้น ต้องการที่จะป้องกันเครือข่ายภายในเอาไว้ โดยไม่ต้องการให้มีการติดต่อสื่อสาร ที่มีต้นทางมาจากเครือข่ายภายนอกนั้น สามารถที่จะติดต่อสื่อสารกับเครือข่ายภายในโดยตรงได้ จึงมีการทำ DMZ ขึ้นมาเพื่อใช้สำหรับโฮสต์ที่ต้องมีการติดต่อสื่อสารจากต้นทางทั้งเครือข่ายภายในและเครือข่ายภายนอก เช่น Web Server หรือ Mail Server เป็นต้น ซึ่งถ้าในเครือข่ายของเพื่อน ๆ ไม่มีการใช้งาน Server ประเภทนี้ หรือมีเหตุผลอื่น ๆ ก็ไม่จำเป็นที่จะต้องสร้าง Zone นี้ก็ได้ครับ

          การสร้าง policy เพื่อควบคุมทราฟิกที่ต้องการอนุญาตหรือไม่อนุญาตให้ใช้งานในแต่ละ Zone นั้น สามารถทำได้โดยการใช้ access-list ซึ่งจะทำการระบุถึงรูปแบบของทราฟิกเอาไว้ และเมื่อมี่ทราฟิกเข้ามา ASA จะนำ header ของทราฟิกนั้นมาเปรียบเทียบกับ access-list ที่ได้กำหนดไว้ในแต่ละอินเทอร์เฟส เพื่อทำการควบคุมการเข้าใช้งานต่าง ๆ อีกทั้งยังสามารถเฝ้าดูกิจกรรมต่าง ๆ ที่เกิดขึ้นบนระบบเครือข่ายได้

          ในการสร้าง access-list เพื่อที่จะนำไปใช้กับแต่ละอินเทอร์เฟสนั้น จะต้องทำการระบุทิศทางของทราฟิกที่ต้องการตรวจสอบสำหรับแต่ละอินเทอร์เฟสด้วย โดยจะมีอยู่ 2 ทิศทางคือ in และ out ซึ่งจะมีการตรวจสอบทราฟิกที่แตกต่างกันคือ

  • in : ทำการตรวจสอบ เมื่อทราฟิกเดินทางเข้ามายังอินเทอร์เฟสนั้น ๆ โดยที่ยังไม่ผ่านการ Route
  • out : ทำการตรวจสอบ เมื่อทราฟิกเดินทางออกจากอินเทอร์เฟสนั้น ๆ โดยที่ผ่านการ Route มาแล้ว

ในการใช้งานนั้นสามารถที่จะระบุได้เพียง access-list เดียวต่อทิศทางเท่านั้น และโดยทั่วไปจะใช้เฉพาะ in เท่านั้น

asa policy direction

ข้อกำหนดของการตั้งค่า ASA

  1. ในแต่ละอินเทอร์เฟสที่เชื่อมต่อไปยังในแต่ละ Zone จะต้องทำการตั้งชื่อของอินเทอร์เฟสนั้น ๆ เช่น inside, outside, dmz เพราะในการตั้งค่าต่าง ๆ บน ASA จะไม่มีการอ้างถึง physical interface แต่จะอ้างตามชื่อที่ได้กำหนดไว้เหล่านี้  
  2. โดย default ถ้ายังไม่มีการสร้าง policy ใด ๆ ในแต่ละอินเทอร์เฟส จะสามารถที่ทำการติดต่อสื่อสารจาก Zone ต้นทางที่มี Security-level สูงกว่าไปยัง Zone ปลายทางที่มี Security ต่ำกว่าได้ (outbound permit by default) แต่จะไม่สามารถที่จะทำการติดต่อสื่อสารจาก Zone  ต้นทางที่มีค่า Security-level ต่ำกว่าไปยัง Zone ปลายทางที่มี Security level สูงกว่าได้ (inbound deny by default)
  3. ในการสร้าง policy บนอินเทอร์เฟสใด ๆ จะมีข้อกำหนด ดังนี้
    • ถ้าทำการอนุญาตทราฟิกประเภท TCP หรือ UDP ในอินเทอร์เฟสฝั่งขาไปแล้ว ก็ไม่จำเป็นที่จะต้องอนุญาตทราฟิกในอินเทอร์เฟสฝั่งขากลับ เนื่องจาก ASA สามารถทำงานเป็น Stateful Firewall โดยจะมีการเก็บค่า Session ของ TCP และ UDP เอาไว้
    • ถ้าทำการอนุญาตทราฟิกประเภท ICMP (เช่น ping) ในอินเทอร์เฟสฝั่งขาไปแล้ว จะต้องทำการอนุญาตทราฟิกในอินเทอร์เฟสฝั่งขากลับด้วย
    • สำหรับ ASA Version 7.0 ถึง 8.2 การสร้าง access-list สำหรับนำไปใช้ในแต่ละ Zone จะต้องใช้ ip address ที่แปลงค่าแล้วใน Zone นั้น ๆ เช่น มีการทำ static nat จาก 10.0.0.10 ในฝั่ง dmz มาเป็น 2.2.2.10 ในฝั่ง outside และเมื่อมีการสร้าง access-list ที่จะนำไปใช้ในฝั่ง outside ก็จะต้องอ้างถึง ip address 2.2.2.10 แต่ถ้ามีการสร้าง acces-list ที่จะนำไปใช้ในฝั่ง dmz ก็จะต้องอ้างถึง ip address 10.0.0.10 เป็นต้น
    • สำหรับ ASA Version 8.3 เป็นต้นมา การสร้าง access-list สามารถใช้ ip address จริง ๆ ของโฮสต์นั้น ๆ ได้เลยไม่ว่าจะใช้ใน Zone ใด เช่น มีการทำ static nat จาก 10.0.0.10 ในฝั่ง dmz มาเป็น 2.2.2.10 ในฝั่ง outside และเมื่อมีการสร้าง access-list ที่จะนำไปใช้ในฝั่ง outside จะสามารถอ้างถึง ip address 10.0.0.10 ได้เลย และถ้ามีการสร้าง acces-list ที่จะนำไปใช้ในฝั่ง dmz ก็สามารถอ้างถึง ip address 10.0.0.10 ได้เช่นเดิม และใน Version นี้ยังมีการเพิ่มคำสั่ง global ขึ้นมา โดย access-list ที่นำมาใช้กับ global นี้จะนำไปใช้กับทุก ๆ อินเทอร์เฟสของ ASA

สำหรับขั้นตอนในการตั้งค่า ASA Firewall ในขั้นพื้นฐาน(Basic Configuration Cisco ASA Firewall)ก็มีดังนี้ครับ

  1. ทำการกำหนดชื่อของไฟร์วอลล์
  2. ทำการกำหนดค่าพารามิเตอร์ต่าง ๆ ให้กับแต่ละอินเทอร์เฟส
    • กำหนด nameif
    • กำหนด security-level
    • กำหนด ip address
    • เปิดใช้งานอินเทอร์เฟสนั้น ๆ
  3. ทำการตั้งค่าการ NAT ระหว่าง Zone ต่าง ๆ ของ Firewall
    • จาก inside ไป outside
    • จาก inside ไป dmz
    • จาก dmz ไป outside
  4. ทำการตั้งค่า Routing
  5. ทำการตั้งค่าการ management ต่าง ๆ
    • การสร้าง user
    • กำหนดการเข้าถึงอุปกรณ์ด้วยวิธีการต่าง ๆ เช่น http, telnet, ssh
    • การตั้งค่าวันและเวลา
    • การตั้งค่า management อื่น ๆ
  6. ทำการตั้งค่า Policy สำหรับ Zone ต่าง ๆ

Basic ASA

          สำหรับตัวอย่างในวันนี้จะทำการแบ่งระบบเครือข่ายออกเป็น 3 Zone คือ inside, outside, dmz โดยจะมีการใช้งาน ip address ในแต่ละ Zone ตามภาพเลยครับ คือในฝั่ง outside นั้นผมสมมุติว่าได้รับ public ip address จาก ISP มาเป็น 2.2.2.0/28 ซึ่งสามารถใช้งานได้ตั้งแต่ 2.2.2.1-2.2.2.14 ก็คือ 14 หมายเลข ip address นะครับ และในฝั่ง dmz จะมีการใช้งาน mail server อยู่ โดยมี ip address เป็น 10.10.10.10. ครับ ส่วนในฝั่ง inside นั้นจะใช้ private ip address ใน subnet 192.168.10.0/24 ครับ สำหรับโซน dmz นั้น ไม่จำเป็นที่จะต้องมีก็ได้ครับ

          เอาล่ะครับ เรามาเริ่มดูตัวอย่างการตั้งค่ากันเลยดีกว่านะครับ สำหรับการตั้งค่า Cisco ASA นั้นก็จะมีรูปแบบของคำสั่งที่คล้ายกับการตั้งค่า Cisco IOS Router ทั่วไปครับ แต่ก็จะมีบางคำสั่งที่แตกต่างกันบ้างครับ ในการเริ่มต้นการตั้งค่านั้น ก็ควรที่จะทำการตั้งชื่อให้กับ ASA ของเราซะก่อนครับ ในตัวอย่างนี้ผมจะใช้ชื่อว่า Running-config-FW นะครับ

ตัวอย่าง
ciscoasa(config)# hostname Running-config-FW

          จากนั้นก็เข้าไปทำการตั้งค่าในแต่ละอินเทอร์เฟสกันครับ ในตัวอย่างนี้ผมจะให้อินเทอร์เฟส Gi0/0 เป็น outside, Gi0/1 เป็น inside, Gi0/2 เป็น dmz ครับ และการกำหนด Security level นั้นผมจะให้ inside = 100. outside = 0 และ dmz = 50 ครับ สำหรับการใช้งาน ip address ก็ตามภาพด้านบนเลยครับ

ตัวอย่าง
Running-config-FW(config)# interface GigabitEthernet 0/0
Running-config-FW(config-if)# nameif outside
INFO: Security level for "outside" set to 0 by default.
Running-config-FW(config-if)# ip address 2.2.2.1 255.255.255.240
Running-config-FW(config-if)# no shut
Running-config-FW(config-if)# exit

Running-config-FW(config)# interface GigabitEthernet 0/1
Running-config-FW(config-if)# nameif inside
INFO: Security level for "inside" set to 100 by default.
Running-config-FW(config-if)# ip address 192.168.10.1 255.255.255.0
Running-config-FW(config-if)# no shut
Running-config-FW(config-if)# exit

*ในส่วนนี้ถ้าไม่มีการใช้งาน dmz ก็ข้ามไปก่อนก็ได้ครับ
Running-config-FW(config)# interface GigabitEthernet 0/2
Running-config-FW(config-if)# nameif dmz
INFO: Security level for "dmz" set to 0 by default.
Running-config-FW(config-if)# security-level 50
Running-config-FW(config-if)# ip address 10.10.10.1 255.255.255.0
Running-config-FW(config-if)# no shut
Running-config-FW(config-if)# exit

จากนั้นเราก็จะมาทำการตั้งค่าการ NAT กันครับ โดยในการติดต่อสื่อสารระหว่าง Zone จะมีการทำ NAT ดังนี้ครับ

  • จาก inside ไปยัง outside จะใช้ PAT(port address translation) โดยจะใช้ ip address ของอินเทอร์เฟส outside ของ ASA ในการติดต่อสื่อสารกับเครือข่ายภายนอกครับ
  • จาก inside ไปยัง dmz จะไม่ทำการ NAT โดยจะใช้ ip address จริงของเครือข่ายภายใน ในการติดต่อสื่อสารกับเครือข่าย dmz ครับ
  • จาก dmz ไปยัง outside ในส่วนนี้ Server ที่อยู่ใน Zone dmz จะต้องมีการเข้าใช้จากเครือข่ายภายนอกด้วย เพราะฉนั้นจึงต้องทำ Static NAT ให้กับแต่ละ Server ของเครือข่าย dmz ครับ

ตัวอย่าง
สำหรับ ASA Version 7.0 ถึง 8.2
Running-config-FW(config)# nat (inside) 1 192.168.10.0 255.255.255.0
Running-config-FW(config)# global (outside) 1 interface
INFO: outside interface address added to PAT pool

*ในส่วนนี้ถ้าไม่มีการใช้งาน dmz ก็ข้ามไปก่อนก็ได้ครับ
Running-config-FW(config)# access-list no-nat permit ip 192.168.10.0 255.255.255.0 10.10.10.0 255.255.255.0
Running-config-FW(config)# nat (inside) 0 access-list no-nat
Running-config-FW(config)# static (dmz,outside) 2.2.2.10 10.10.10.10

และสำหรับ ASA Version 8.3
Running-config-FW(config)# object network inside-obj
Running-config-FW(config-network-object)# subnet 192.168.10.0 255.255.255.0
Running-config-FW(config-network-object)# nat (inside,outside) dynamic interface
Running-config-FW(config-network-object)# exit

*ในส่วนนี้ถ้าไม่มีการใช้งาน dmz ก็ข้ามไปก่อนก็ได้ครับ
Running-config-FW(config)# object network dmz-obj
Running-config-FW(config-network-object)# subnet 10.10.10.0 255.255.255.0
Running-config-FW(config-network-object)# exit
Running-config-FW(config)# nat (inside,dmz) source static inside-obj inside-obj destination static dmz-obj dmz-obj
Running-config-FW(config)# object network mail-server
Running-config-FW(config-network-object)# host 10.10.10.10
Running-config-FW(config-network-object)# nat (dmz,outside) static 2.2.2.10
Running-config-FW(config-network-object)# exit

          เมื่อทำการตั้งค่าการ NAT เสร็จแล้ว เราก็จะมาทำการตั้งค่า Routing กันครับ ซึ่งในตัวอย่างนี้ก็ไม่มีอะไรมากครับ ใช้แค่เพียง default route ชี้ไปยังเราเตอร์ที่ใช้สำหรับเชื่อมต่ออินเทอร์เน็ตก็เรียบร้อยแล้วครับ แต่ถ้าในเครือข่ายของเพื่อน ๆ มีการใช้งานที่ซับซ้อนกว่านี้ก็สามารถทำการตั้งค่าในแบบอื่น ๆ ได้ครับ ซึ่ง ASA นี้สามารถรองรับ Dynamic Routing Protocol ที่หลากหลายอยู่ครับ

ตัวอย่าง
Running-config-FW(config)# route outside 0.0.0.0 0.0.0.0 2.2.2.2

          เมื่อเสร็จในขั้นตอนนี้ ASA ของเราก็สามารถที่จะใช้งานได้แล้วครับ โดยจะสามารถทำการติดต่อสื่อสารจากต้นทางเครือข่ายภายในไปยังปลายทางเครือข่ายภายนอกได้แล้ว แต่จะยังไม่สามารถทำการติดต่อสื่อสารจากต้นทางเครือข่ายภายนอกเข้ามาได้ ตามกฎ outbound permit by default และ inbound deny by default ครับ

          ถึงแม้ว่า ASA ของเราจะสามารถใช้งานได้แล้ว แต่เรายังไม่ได้ทำการตั้งค่าการ Management ต่าง ๆ กันเลยใช่มั้ยครับ ในตัวอย่างต่อไปนี้จะเป็นการตั้งค่าที่เกี่ยวข้องกับการ Management ต่าง ๆ ซึ่งตามตัวอย่างนี้ก็จะเป็นการตั้งค่า enable password, การตั้งค่า username, การอนุญาตโปรโตคอลรวมถึงเครือข่ายที่ใช้ในการ management ในรูปแบบต่าง ๆ , การอนุญาตให้สามารถทำการ ping มาที่ ASA Firewall ได้ และการตั้งค่าวันและเวลาครับ

ตัวอย่าง
Running-config-FW(config)# enable password cisco
Running-config-FW(config)# username cisco password cisco privilege 15

Running-config-FW(config)# http server enable
Running-config-FW(config)# http 192.168.10.0 255.255.255.0 inside
Running-config-FW(config)# http 192.168.1.0 255.255.255.0 management

Running-config-FW(config)# telnet 192.168.10.0 255.255.255.0 inside
Running-config-FW(config)# telnet 192.168.1.0 255.255.255.0 management

Running-config-FW(config)# crypto key generate rsa
INFO: The name for the keys will be: <Default-RSA-Key>
Keypair generation process begin. Please wait...
Running-config-FW(config)# ssh version 2
Running-config-FW(config)# ssh 192.168.10.0 255.255.255.0 inside
Running-config-FW(config)# ssh 192.168.1.0 255.255.255.0 management  

Running-config-FW(config)# aaa authentication http console LOCAL
Running-config-FW(config)# aaa authentication telnet console LOCAL   
Running-config-FW(config)# aaa authentication ssh console LOCAL

Running-config-FW(config)# icmp permit any inside
Running-config-FW(config)# icmp permit any outside
Running-config-FW(config)# icmp permit any dmz

Running-config-FW(config)# ntp server 192.168.10.2 prefer
Running-config-FW(config)# clock timezone ICT +7
Running-config-FW(config)# show clock
17:05:05.578 ICT Sat Nov 13 2010

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

          ในการสร้าง access-list เพื่อนำไปใช้ควบคุมทราฟิกในแต่ละเครือข่ายนั้นผมก็ขอแนะนำว่า ควรที่จะวางกฎข้อที่เฉพาะเจาะจงมากที่สุดไว้บรรทัดบนสุด และวางกฎข้อที่เฉพาะเจาะจงน้อยกว่าไว้บรรทัดล่างลงมาตามลำดับ เนื่องจาก access-list นั้นจะถูกพิจารณาจากบรรทัดบนลงมา ซึ่งถ้านำกฎที่ระบุแบบกว้าง ๆ ไว้บรรทัดบน กฎที่เฉพาะเจาะจงในบรรทัดล่างก็อาจจะไม่ได้นำมาพิจารณา

ตัวอย่างการใช้ access-litst ที่ผิดลำดับนะครับ
access-list policy01 permit ip 192.168.10.0 255.255.255.0 any
access-list policy01 deny tcp 192.168.10.0 255.255.255.0 host 2.2.2.2 eq telnet

          ถ้าเขียน access-list ตามตัวอย่างด้านบนนี้ เมื่อมีแพ็กเก็ตที่ตรงกับเงื่อนไขในบรรทัดที่ 2 เข้ามา ซึ่งเราต้องการที่จะ deny แพ็กเก็ตนี้ไป แต่เนื่องจาก access-list ในบรรทัดบนนั้นได้อนุญาตแพ็กเก็ตนี้ไปแล้ว ทำให้เงื่อนไขในบรรทัดที่ 2 นั้นไม่ได้รับการพิจารณา และจะไม่สามารถ deny ทราฟิกในบรรทัดที่ 2 ได้

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

  1. สร้าง access-list สำหรับอินเทอร์เฟส inside ชื่อว่า inside-acl โดยมีรายละเอียดดังนี้
    • ทำการอนุญาตให้ต้นทางจาก subnet ของเครือข่ายภายในสามารถติดต่อไปยัง mail server โดยใช้ TCP พอร์ต 110(pop3) กับ 25(smtp) ได้
    • ทำการอนุญาตให้ต้นทางจาก subnet ของเครือข่ายภายในสามารถติดต่อไปที่ใดก็ได้(any) โดยใช้ TCP พอร์ต 80(http) เท่านั้น
    • ทำการอนุญาตให้ใช้งาน icmp ได้จากทุกเครือข่าย
  2. สร้าง access-list สำหรับอินเทอร์เฟส outside ชื่อว่า outside-acl โดยมีรายละเอียดดังนี้
    • ทำการอนุญาตให้ต้นทางจากที่ใดก็ได้สามารถติดต่อมายัง Mail Server โดยใช้ TCP พอร์ต 110(pop3) กับ 25(smtp) ได้ ซึ่งถ้าใช้ ASA version 7.0 ถึง 8.2 นั้นจะต้องอ้างถึง ip address ของ Mail Server ที่ทำการ NAT แล้ว แต่ถ้าใช้งาน ASA Version 8.3 นั้นจะสามารถอ้างถึง ip address จริงของ Mail Server ได้โดยตรง
    • ทำการอนุญาตให้ใช้งาน icmp ได้จากทุกเครือข่าย
  3. สร้าง access-list สำหรับอินเทอร์เฟส dmz ชื่อว่า dmz-acl โดยมีรายละเอียดดังนี้
    • ทำการอนุญาตให้ใช้งาน icmp ได้จากทุกเครือข่าย

ตัวอย่าง
สำหรับ ASA Version 7.0 ถึง 8.2
Running-config-FW(config)#access-list inside-acl permit tcp 192.168.10.0 255.255.255.0 host 10.10.10.10 eq 110
Running-config-FW(config)#access-list inside-acl permit tcp 192.168.10.0 255.255.255.0 host 10.10.10.10 eq 25
Running-config-FW(config)#access-list inside-acl permit tcp 192.168.10.0 255.255.255.0 any eq 80
Running-config-FW(config)#access-list inside-acl permit icmp any any

Running-config-FW(config)#access-list outside-acl extended permit tcp any host 2.2.2.10 eq 110
Running-config-FW(config)#access-list outside-acl extended permit tcp any host 2.2.2.10 eq 25
Running-config-FW(config)#access-list outside-acl extended permit icmp any any

Running-config-FW(config)#access-list dmz-acl extended permit icmp any any

Running-config-FW(config)# access-group inside-acl in interface inside
Running-config-FW(config)# access-group outside-acl in interface outside
Running-config-FW(config)# access-group dmz-acl in interface dmz

สำหรับ ASA Version 8.3
Running-config-FW(config)#access-list inside-acl permit tcp 192.168.10.0 255.255.255.0 host 10.10.10.10 eq 110
Running-config-FW(config)#access-list inside-acl permit tcp 192.168.10.0 255.255.255.0 host 10.10.10.10 eq 25
Running-config-FW(config)#access-list inside-acl permit tcp 192.168.10.0 255.255.255.0 any eq 80

Running-config-FW(config)#access-list outside-acl extended permit tcp any host 10.10.10.10 eq 110
Running-config-FW(config)#access-list outside-acl extended permit tcp any host 10.10.10.10 eq 25

Running-config-FW(config)#access-list global-acl extended permit icmp any any

Running-config-FW(config)# access-group inside-acl in interface inside
Running-config-FW(config)# access-group outside-acl in interface outside
Running-config-FW(config)# access-group global-acl global

           จากตัวอย่างด้านบนจะเห็นว่า ใน ASA Version 7.0 ถึง 8.2 นั้น access-list ที่นำไปใช้กับแต่ละอินเทอร์เฟส ในบรรทัดสุดท้ายจะทำการอนุญาต icmp any any เหมือนกัน ซึ่งถ้าใช้งาน ASA Version 8.3 จะสามารถนำ access-list นี้ไปใช้กับ global เลย ไม่ต้องแยกเขียน access-list แยกแต่ละอินเทอร์เฟส

         นี่ก็เป็นเพียงตัวอย่างการเขียน access-list เพื่อนำไปใช้งานกับแต่ละอินเทอร์เฟสเท่านั้นนะครับ สำหรับในการใช้งานจริงนั้น การตั้งค่า policy ต่าง ๆ ก็อาจที่จะมีความละเอียดซับซ้อนมากกว่านี้ ก็อยากจะแนะนำให้เพื่อน ๆ ลองเส่นลองทดสอบกันดูเองนะครับ เพื่อความเข้าใจที่มากขึ้น

          บทความนี้อาจจะยาวไปหน่อยนะครับ แต่ก็เป็นเรื่องที่ควรทราบเมื่อทำการตั้งค่า ASA ทั้งสิ้น เหมาะสำหรับเพื่อน ๆ ที่กำลังเริ่มต้นทำการตั้งค่า ASA นะครับ สำหรับเพื่อน ๆ ที่อยากจะทดสองทำ lab ดู สามารถที่จะใช้ GNS3 ในการ simulation ได้ครับ สำหรับเทคนิคการตั้งค่า Cisco ASA Firewall ในเรื่องอื่น ๆ นั้น ก็สามารถติดตามได้ในบทความด่อ ๆ ไปครับ

Friday, November 12, 2010

การเก็บ log การตั้งค่าต่าง ๆ บนอุปกรณ์ Cisco ด้วยการใช้ Archive

log config           ในการใช้งานอุปกรณ์ Cisco นั้น เมื่อเพื่อน ๆ ตั้งค่าให้เราเตอร์ทำการเก็บ log แล้ว แต่โดยปกติ log บนอุปกรณ์นั้นจะไม่มีการจัดเก็บถึงคำสั่งที่มีการใช้งานบนอุปกรณ์ คือเราจะไม่สามารถทราบได้เลยว่ามีใคร remote เข้ามาแก้ไขคำสั่งใด ๆ บนอุปกรณ์ของเราหรือไม่ ซึ่งเป็นเรื่องที่ไม่ดีแน่ ๆ ใช่มั้ยครับเพื่อน ๆ เพราะอาจจะทำให้เรางานเข้า(อย่างมาก)ได้ สำหรับใครที่สนใจอยากรู้รายละเอียดก็ขอเชิญติดตามได้ในบทความนี้เลยครับ

          การตั้งค่าการเก็บ log ของคำสั่งที่มีการใช้งานบนอุปกรณ์นั้นสามารถทำได้ด้วยการใช้คำสั่ง Archive ครับ ซึ่งคำสั่งนี้รองรับมาตั้งแต่ Cisco IOS Release 12.3(4)T ครับ

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

  1. ทำการตั้งค่า NTP บนอุปกรณ์
  2. ทำการการเก็บ logging บนอุปกรณ์
  3. เข้าสู่โหมด Archive Configuration Mode
  4. ใช้คำสั่ง log config เพื่อเปิดการจัดเก็บ log การ config

          เอาล่ะครับ ขั้นตอนในการตั้งค่าก็ไม่ได้มากมายอะไร เรามาเริ่มดูตัวอย่างการตั้งค่าในขั้นตอนแรกกันเลยดีกว่าครับ อันดับแรกเราก็มาทำการตั้งค่า ntp กันก่อนเลยครับ เพื่อที่เวลาจัดเก็บ log แล้ว เวลาบน log นั้นจะได้ตรงกับเหตุการณ์ที่เกิดขึ้นครับ โดยให้ทำการตั้งค่า ntp server และ ทำการตั้ง timezone ตามตัวอย่างด้านล่างเลยครับ

ตัวอย่าง
Router(config)#ntp server 10.100.100.123
Router(config)#clock timezone ICT +7
Router(config)#do show clock
10:21:25.506 ICT Fri Nov 12 2010

          ขั้นตอนต่อมาก็ทำการตั้งค่า logging บนตัวอุปกรณ์ครับ โดยในตัวอย่างนี้จะทำการจัดเก็บ logging ไว้ใน buffer ของอุปกรณ์และก็จะทำการส่ง log มายัง Syslog Server ด้วยครับ จากนั้นจึงทำการตั้งค่าให้วันเวลาที่ปรากฏบน log นั้น เป็นไปตามที่เราต้องการครับ ซึ่งรายละเอียดตรงส่วนนี้ ก็ขอให้เพื่อน ๆ ลองเล่น ปรับเปลี่ยนค่าต่าง ๆ ดูกันนะครับ

ตัวอย่าง
Router(config)#logging buffered 10000 informational
Router(config)#logging trap informational
Router(config)#logging host 10.100.100.10  
Router(config)#service timestamps log datetime localtime show-timezone msec

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

ตัวอย่าง
Router(config)#archive
Router(config-archive)#log config
Router(config-archive-log-cfg)#logging enable //ทำการเปิดการใช้งานการเก็บ log ค่า config
Router(config-archive-log-cfg)#notify syslog //ทำการส่ง log ค่า config ไปยัง syslog
Router(config-archive-log-cfg)#hidekeys //ใช้คำสั่งนี้เพื่อให้ซ่อน key หรือ password ต่าง ๆ บน log

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

ตัวอย่าง
Router#show logging
Syslog logging: enabled (12 messages dropped, 1 messages rate-limited,
                0 flushes, 0 overruns, xml disabled, filtering disabled)
    Console logging: level debugging, 54 messages logged, xml disabled,
                     filtering disabled
    Monitor logging: level debugging, 0 messages logged, xml disabled,
                     filtering disabled
    Buffer logging: level informational, 38 messages logged, xml disabled,
                    filtering disabled
    Logging Exception size (4096 bytes)
    Count and timestamp logging messages: disabled

No active filter modules.

ESM: 0 messages dropped

    Trap logging: level informational, 58 message lines logged
        Logging to 10.100.100.10(global) (udp port 514, audit disabled, link up), 44 message lines logged, xml disabled,
               filtering disabled
Log Buffer (10000 bytes):

*Mar  1 00:41:46.127: %SYS-5-CONFIG_I: Configured from console by cisco on console
Nov 12 03:20:45.839: %SYS-6-CLOCKUPDATE: System clock has been updated from 03:20:45 UTC Fri Nov 12 2010 to 10:20:45 ICT Fri Nov 12 2010, configured from console by cisco on console.
Nov 12 10:31:10.561 ICT: %PARSER-5-CFGLOG_LOGGEDCMD: User:cisco  logged command:notify syslog
Nov 12 10:31:15.737 ICT: %PARSER-5-CFGLOG_LOGGEDCMD: User:cisco  logged command:hidekeys
Nov 12 10:31:18.525 ICT: %PARSER-5-CFGLOG_LOGGEDCMD: User:cisco  logged command:exit
Nov 12 10:51:10.136 ICT: %PARSER-5-CFGLOG_LOGGEDCMD: User:cisco  logged command:interface FastEthernet0/1
Nov 12 10:51:13.008 ICT: %PARSER-5-CFGLOG_LOGGEDCMD: User:cisco  logged command:shutdown

Nov 12 10:51:15.000 ICT: %LINK-5-CHANGED: Interface FastEthernet0/1, changed state to administratively down
Nov 12 10:51:16.000 ICT: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down
Nov 12 10:51:16.540 ICT: %PARSER-5-CFGLOG_LOGGEDCMD: User:cisco  logged command:no shutdown
Nov 12 10:51:18.520 ICT: %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to up
Nov 12 10:51:19.520 ICT: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up

Wednesday, November 10, 2010

รวมเครื่องมือเพื่อพัฒนาเทคนิคการตั้งค่าอุปกรณ์ Cisco ของคุณ

          ในส่วนนี้จะขอเป็นพื้นที่สำหรับให้เพื่อน ๆ สามารถ download เครื่องมือรวมทั้ง lab ต่าง ๆ ที่สามารถนำไปพัฒนาเทคนิคในการ configure อุปกรณ์เครือข่าย Cisco ของเพื่อน ๆ นะครับ

Network Simulation Application
Download : Packet Tracer v5.3.3 For Window
Download : Packet Tracer v5.3.3 For Linux Ubuntu
Download : Packet Tracer v5.3.3 For Linux Fedora
Download : GNS3 v0.7.2 For Window

Packet Tracer LAB
Download : การตั้งค่า DHCP Server บนอุปกรณ์ Cisco IOS
Download : การตั้งค่า Site to Site IPSec VPN แบบ Pre-shared Key Authentication
Download : การตั้งค่า Port Security บน Cisco Catalyst Switch

Software อื่น ๆ

Download : Tftpd32 standard edition v.3.51

Cisco IOS Software
          สำหรับการ Download Cisco IOS Software นั้น ๆ สำหรับเพื่อน ๆ ที่มี CCO ก็สามารถ Download ได้ที่ Cisco.com ได้เลยครับ ส่วนใครที่ไม่มี CCO นั้น คงต้องหา Download จาก google เอาล่ะครับ แต่ผมก็ขอแนะนำเทคนิคการหา Cisco IOS บน google เพื่อมาใช้ในการทำ lab ไว้ให้เพื่อน ๆ กันนะครับ

          สมมุติว่าเพื่อน ๆ ต้องการหา IOS ของเราเตอร์ในรุ่น 1700 ก็ลองใช้ คำค้นหาว่า "index.of c1700*.bin -site:cisco.com" ดูครับ และถ้าเพื่อน ๆ ต้องการ Cisco IOS ในรุ่นอื่นก็ลองเปลี่ยนค่าจาก 1700 ไปเป็นรุ่นอื่น ๆ แทนนะครับ

การทำ Inter Vlan Routing ด้วย Switch Layer 3

vlan copy

          พอดีมีเพื่อน ๆ ถามเข้ามาถึงการทำ Vlan และ Inter Vlan ในวันนี้ก็เลยจะมาแนะนำเรื่องราวให้เพื่อน ๆ ที่ยังไม่รู้จักการทำงานของ Vlan ให้ทราบกันครับ เรามาเริ่มกันเลยนะครับ โดยปกติถ้าเพื่อน ๆ มีการใช้งานเครือข่าย Lan อยู่สองเครือข่าย แยกจากกัน ถ้าเพื่อน ๆ ต้องการที่จะทำให้ Lan ทั้งสองวงสามารถติดต่อสื่อสารกันได้จะต้องทำอย่างไรครับ แน่นอนว่าจะต้องใช้อุปกรณ์ใน Layer 3 มาช่วยในการทำ Routing ให้ใช่มั้ยครับ การแบ่ง Vlan นั้นก็เสมือนกับการแยกวงของเครือข่ายออกจากกัน จะทำให้โฮสต์จะสามารถติดต่อสื่อสารกับโฮสต์อื่น ๆ ใน Vlan เดียวกันได้เท่านั้น แต่การที่จะทำให้โฮสต์สามารถติดต่อสื่อสารกับโฮสต์ใน Vlan อื่น ๆ ได้นั้น ก็จะต้องใช้วิธีการที่เรียกว่า Inter Vlan Routing ครับ ซึ่งก็คือการใช้อุปกรณ์ Layer 3 มาช่วยในการทำ Routing ระหว่าง Vlan ให้นั่นเองครับ

          การทำ Virtual Lan นั้นจะเป็นการแบ่ง Broadcast Domain ของเครือข่ายออกจากกัน สำหรับใครที่สงสัยว่า Broadcast Domain นี้คืออะไรนะครับ ผมก็จะขออธิบายให้ฟัง แต่ก่อนที่จะทำความรู้จักกับ Broadcast Domain นั้น ขอแนะนำให้รู้จักกับการทำงานของ Collision Domain กันก่อนครับ

  • Collision Domain คือ ขอบเขตการชนกันของข้อมูลที่เกิดบน Layer 1 หรือ Physical Layer นั้นเอง ซึ่งก็คือการที่สัญญาณไฟฟ้าที่ส่งไปในสายเส้นเดียวกันในเวลาเดียวกันจากหลาย ๆ เครื่องนั้น เกิดการชนกันขึ้น ก็จะทำให้ข้อมูลนั้นได้รับความเสียหาย และไม่สามารถนำไปใช้งานต่อได้ โดยจะเกิดขึ้นกับอุปกรณ์ที่ทำงานบน Layer 1 อย่างเช่น hub(ในปัจจุบันหาใช้ยากกว่าสวิตซ์อีก) เป็นต้น และเนื่องจาก Collision นี้จะเกิดขึ้นบน Layer 1 การป้องกันการเกิด Collision จึงต้องนำอุปกรณ์ที่ทำงานในระดับ Layer 2 มาป้องกัน ซึ่งก็ Switch นั่นเอง ด้วยเหตุนี้ Switch จึงสามารถแยก Collision Domain ได้
  • Broadcast Domain คือ ขอบเขตการกระจายข้อมูล ซึ่งจะเกิดบน Layer 2 เพื่อให้เห็นภาพการทำงานขอให้เพื่อน ๆ นึกถึงห้องประชุมใหญ่ ๆ ที่มีคนมาประชุมกันอยู่ โดยมีชื่อห้องว่า Vlan 10 นะครับ การพูดคุยต่าง ๆ ภายในห้องประชุมนี้ก็จะกระจายอยู่ภายในห้องใช่มั้ยครับ สำหรับรูปแบบการกระจายข้อมูลภายในเครือข่ายนั้นจะมีอยู่ 3 รูปแบบ ดังนี้
    • Broadcast เป็นการแพร่กระจายข้อมูลไปยังทุกเครื่องภายในเครือข่าย เพื่อให้เห็นภาพ ก็ขอให้นึกถึงห้องประชุมห้องเดิมนะครับ เมื่อมีใครซักคนนึงภายในห้องนี้พูดขึ้นมาว่า “ทุกคน โปรดฟังทางนี้” นี่ก็คือการ Broadcast ครับ คือกระจายข้อมูลไปยังทุก ๆ โฮสต์ใน Vlan นั้น ๆ
    • Multicast จะแตกต่างกับ Broadcast อยู่นิดหน่อย ถ้าเป็น Multicast ขอให้เพื่อน ๆ นึกถึงห้องประชุมห้องเดียวกันนี้ มีคนพูดขึ้นมาเหมือนกัน แต่ไม่ได้พูดว่า “ทุกคน” แต่อาจจะพูดว่า “กลุ่มสีน้ำเงิน โปรดฟังทางนี้” ซึ่งถึงแม้ว่าทุกคนภายในห้องนี้จะได้ยินข้อความนี้ แต่จะมีเพียงกลุ่มสีน้ำเงินเท่านั้นที่นำข้อมูลนี้มาใช้ประโยชน์
    • Unicast ก็ขอให้เพื่อน ๆ นึกถึงห้องประชุมห้องเดิมต่อนะครับ เมื่อเราอยู่ในห้องประชุมนี้ เราต้องการที่จะคุยกับ นาย A แต่ในตอนแรกเราจะไม่ทราบใช่มั้ยครับว่าคนไหนกันแน่คือนาย A เมื่อเราต้องการที่จะคุยกับนาย A ในครั้งแรกนั้น เราก็จะต้องถามไปก่อนว่าคนไหนคือนาย A โดยการพูดว่า “นาย A โปรดฟังทางนี้” ซึ่งทุกคนภายในห้องประชุมนี้จะได้ยิน แต่จะมีเพียงนาย A เท่านั้นที่ตอบรับกลับมา แต่ในการติดต่อสื่อสารครั้งต่อไป เราก็จะรู้แล้วว่าคนไหนคือนาย A เราก็สามารถที่จะเข้าไปคุยกับนาย A ได้โดยตรงทันที เปรียบเสมือนกับในเครือข่าย Lan ที่เมื่อต้องการส่งข้อมูลไปยังปลายทางในครั้งแรก จะต้องมีการส่ง ARP โดยการ Broadcast ไปถามก่อน ว่า IP Address นี้มี Mac Address เป็นอะไร แต่เมื่อทราบค่า ARP แล้วเราก็จะสามารถติดต่อกับเครื่องนั้น ได้โดยตรงทันที

          ในการแบ่ง Vlan ก็ขอให้เพื่อน ๆ นึกถึงห้องประชุมห้องเดิมนี้ เพียงแต่ว่าจะมีการกั้นห้องขึ้นมาตรงกลางห้อง เพื่อแบ่งห้องประชุมออกเป็น 2 ห้อง และอาจจะตั้งชื่อว่าห้อง Vlan 10 กับห้อง Vlan 20 การพูดคุยก็จะกระจายตามรูปแบบการส่งข้อมูลทั้ง 3 รูปแบบ อยู่ภายในห้องของตัวเอง

          ทีนี้เมื่อคุยกันไปมาภายในห้องของตัวเองจนเบื่อแล้ว หรือมีใครซักคนในห้องที่ต้องการที่จะคุยกับคนที่อยู่ในอีกห้องนึงขึ้นมา ก็จะต้องเดินไปยังประตูทางออกของห้อง (Gateway) จากนั้นจึงไปหาป้ายเพื่อบอกทาง(การทำ Routing) เพื่อหาทางไปยังอีกห้องนึงได้อย่างถูกต้องนั่นเอง ซึ่งก็เปรียบเสมือนกับการแบ่ง Vlan และใช้อุปกรณ์ Layer 3 มาช่วยในการทำ Routing ให้นั่นเอง

          และก่อนที่จะเข้าสู่ขั้นตอนในการตั้งค่า ผมก็จะขอแนะนำให้เพื่อน ๆ รู้จักกับ รูแปบบของพอร์ตที่มีการตั้งค่าเพื่อใช้งานกันก่อนนะครับ โดยจะมีอยู่ 2 รูปแบบ คือ Access Port และ Trunk Port ครับ

  • Access Port คือพอร์ตที่สามารถรับส่งข้อมูลได้เพียง Vlan เดียว ซึ่งโดยปกติจะใช้กับพอร์ตที่เชื่อมต่อไปยังโฮสต์ เพราะเครื่องของผู้ใช้แต่ละเครื่องส่วนมากก็จะถูกกำหนดให้อยู่ใน Vlan ใด Vlan หนึ่งเพียง Vlan เดียวเท่านั้น
  • Trunk Port คือพอร์ตที่สามารถรับส่งข้อมูลได้หลาย Vlan โดยปกติจะใช้กับพอร์ตที่เชื่อมต่อระหว่าง Switch ด้วยกัน เพื่อที่จะสามารถส่งข้อมูลในหลาย ๆ Vlan ไปยัง Switch ตัวอื่น ๆ ได้ โดยใช้เพียงพอร์ตเดียวเท่านั้นได้ 

          ขอเข้าสู่ขั้นตอนในการตั้งค่ากันเลยดีกว่าครับ สำหรับขั้นตอนการตั้งค่า Vlan และ Inter Vlan ด้วย Switch Layer 3 ก็มีดังนี้

  1. ทำการสร้าง Vlan ลงบนสวิตซ์ทุกตัวที่ Vlan นั้น ๆ ใช้เป็นเส้นทางในการส่งข้อมูล
  2. ทำการกำหนดพอร์ตบนสวิตซ์ที่เชื่อมต่อไปยังเครื่องผู้ใช้ให้เป็นสมาชิกของ Vlan ที่ต้องการ
  3. ทำการกำหนดพอร์ตบนสวิตซ์ที่เชื่อมต่อไปยังสวิตซ์ตัวอื่น ๆ ให้เป็น Trunk port
  4. ทำการสร้าง Interface Vlan บนสวิตซ์ Layer 3 เพื่อใช้เป็น gateway ของแต่ละ Vlan

topology

          เอาล่ะครับเรามาดูตัวอย่างการตั้งค่าในขั้นตอนที่ 1 กันเลยดีกว่านะครับ ในขั้นตอนนี้จะเป็นการสร้าง Vlan ขึ้นมาบน Switch ก่อนครับ

ตัวอย่าง
access-sw02(config)#vlan 10
access-sw02(config-vlan)#name SALE
access-sw02(config-vlan)#exit
access-sw02(config)#vlan 20
access-sw02(config-vlan)#name ENGINEER
access-sw02(config-vlan)#exit   
access-sw02(config)#do show vlan bri

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/1, Fa0/2, Fa0/3, Fa0/4
                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9, Fa0/10, Fa0/11, Fa0/12
                                                Fa0/13, Fa0/14, Fa0/15, Fa0/16
                                                Fa0/17, Fa0/18, Fa0/19, Fa0/20
                                                Fa0/21, Fa0/22, Fa0/23, Fa0/24
                                                Gig1/1, Gig1/2
10   SALE                             active   
20   ENGINEER                         active   
1002 fddi-default                     active   
1003 token-ring-default               active   
1004 fddinet-default                  active   
1005 trnet-default                    active
   

          จากตัวอย่าง เมื่อเราทำการสร้าง Vlan ด้วยคำสั่ง vlan ใน global configuration mode เสร็จแล้ว เราสามารถตรวจสอบการตั้งค่าได้โดยการใช้คำสั่ง show vlan ได้ ซึ่งจะเห็นว่ามี vlan 10 และ vlan 20 ขึ้นมาแล้ว แต่จะยังไม่มีพอร์ตใดบนสวิตซ์ที่เป็นสมาชิกอยู่ ซึ่งโดย default จากโรงงาน ทุก ๆ พอร์ตบน Switch จะเป็นสมาชิกของ Vlan 1 อยู่

          เมื่อทำขั้นตอนที่ 1 บนสวิตซ์ทุกตัวที่ต้องการใช้งาน Vlan นั้นแล้ว ก็จะเข้าสู่ขั้นตอนที่ 2 คือการกำหนดพอร์ตเข้าเป็นสมาชิกของแต่ละ Vlan

ตัวอย่าง
access-sw02(config)#int fa0/1
access-sw02(config-if)#switchport mode access
access-sw02(config-if)#switchport access vlan 10
access-sw02(config-if)#exit
access-sw02(config)#int fa0/2
access-sw02(config-if)#switchport mode access
access-sw02(config-if)#switchport access vlan 20
access-sw02(config-if)#exit

          จากตัวอย่างนี้ เป็นการกำหนดพอร์ตบนสวิตซ์ access-sw02 โดยทำการกำหนดให้ interface FastEthernet0/1 นั้นเป็นสมาชิกของ Vlan 10 และ interface FastEthernet0/2 นั้นเป็นสมาชิกของ Vlan 20

          จากนั้นก็เข้าสู่ขั้นตอนต่อไปกันเลยครับ นั่นก็คือการกำหนดพอร์ตที่เชื่อมต่อระหว่างสวิตซ์ให้เป็น trunk port ครับ ซึ่งสามารถทำได้โดยการใช้คำสั่ง “switchport mode trunk” และจะต้องทำการตั้งค่าทั้งบนสวิตซ์ทั้งสองฝั่งของ link นั้นนะครับ เช่นจากในรูปก็จะต้องตั้งค่าทั้งในฝั่ง Access Switch และ Layer3 Switch ครับ และในสวิตซ์บางรุ่นจะต้องใช้คำสั่ง “switchport trunk encapsulation dot1q” ก่อนนะครับจึงจะทำการตั้งค่าให้พอร์ตนั้นเป็น trunk ได้

ตัวอย่าง
access-sw01(config)#interface gigabitEthernet 1/1
access-sw01(config-if)#switchport mode trunk

Layer3-SW(config)#interface range gigabitEthernet 0/1-2
Layer3-SW(config-if-range)#switchport
Layer3-SW(config-if-range)#switchport trunk encapsulation dot1q
Layer3-SW(config-if-range)#switchport mode trunk

          เมื่อทำการตั้งค่าเสร็จแล้ว สามารถตรวจสอบได้ โดยการใช้คำสั่ง “show interfaces trunk” นะครับ

ตัวอย่าง
Layer3-SW#show interfaces trunk
Port        Mode         Encapsulation  Status        Native vlan
Gig0/1      on           802.1q         trunking      1
Gig0/2      on           802.1q         trunking      1

Port        Vlans allowed on trunk
Gig0/1      1-1005
Gig0/2      1-1005

Port        Vlans allowed and active in management domain
Gig0/1      1,10,20
Gig0/2      1,10,20

Port        Vlans in spanning tree forwarding state and not pruned
Gig0/1      1,10,20
Gig0/2      1,10,20

          เอาล่ะครับ เมื่อเสร็จขั้นตอนนี้ เครื่องโฮสต์ใน vlan เดียวกัน บนสวิตซ์แต่ละตัวจะสามารถติดต่อกันได้แล้วนะครับ แต่จะยังไม่สามารถติดต่อสื่อสารข้ามระหว่าง vlan ได้ ซึ่งจะต้องทำขั้นตอนต่อไปก่อนครับ นั่นก็คือการสร้าง gateway ให้กับแต่ละ vlan ครับ แต่ก่อนที่จะทำการสร้าง gateway ให้กับแต่ละ vlan ได้ เราจะต้องทำการ enable คุณสมบัติ routing ให้กับสวิตซ์ Layer 3 ของเรากันก่อนนะครับ ซึ่งก็คือการใช้คำสั่ง “ip routing” นั่นเองครับ

ตัวอย่าง
Layer3-SW(config)#ip routing
Layer3-SW(config)#interface vlan 10
Layer3-SW(config-if)#ip add 10.0.10.1 255.255.255.0
Layer3-SW(config-if)#no shut
Layer3-SW(config-if)#exit

Layer3-SW(config)#int vlan 20
Layer3-SW(config-if)#ip add 10.0.20.1 255.255.255.0
Layer3-SW(config-if)#no shut
Layer3-SW(config-if)#exit

          จากนั้นก็ไปทำการตั้งค่าบนเครื่องโฮสต์ให้ชี้ gateway มาที่ ip address นี้ครับ เท่านี้ก็สามารถที่จะติดต่อสื่อสารกันข้าม vlan ได้แล้วครับ

          ถ้าเพื่อน ๆ อยากจะทดสอบวิธีการตั้งค่า สามารถดาวน์โหลด lap ซึ่งใช้กับโปรแกรม packet tracer ไปทดลองทำกันดูได้ครับ สามารถดาวน์โหลดได้ตาม link ด้านล่างเลยครับ

packet tracer lab : Inter Vlan Lab

Tuesday, November 9, 2010

มาทำ VPN แบบง่าย ๆ บน Cisco IOS กับ GRE Tunnel กันเถอะ

GRE Tunnel

           สวัสดีครับเพื่อน ๆ ในวันนี้ผมจะขอแนะนำให้เพื่อน ๆ รู้จักกับการทำ VPN(Virtual Private Network) กันครับ โดยเทคโนโลยี VPN ในปัจจุบันได้เข้ามาเป็นอีกทางเลือกหนึ่ง ในการส่งข้อมูลระหว่างเครือข่าย ผ่านเครือข่ายสาธารณะ โดยใช้การสร้าง Tunnel ระหว่างต้นทางและปลายทาง ทำให้สามารถรับ-ส่งข้อมูลได้ เสมือนว่าเป็นเครือข่ายเดียวกัน โดย VPN ที่จะแนะนำให้เพื่อน ๆ รู้จักกันในวันนี้ นั้นสามารถตั้งค่าได้อย่างง่ายดาย รับรองว่าเพื่อน ๆ ทำการตั้งค่าไม่เกิน 3 นาทีก็สามารถใช้งาน VPN ได้ทันที ซึ่งก็คือการทำ VPN แบบ GRE Tunnel นั่นเองครับ

          การใช้งานโปรโตคอล GRE (Generic Routing Encapsulation) นั้นเป็นการทำ VPN โดยใช้การสร้าง Tunnel ขึ้นมาระหว่าง ต้นทางและปลายทาง ซึ่งจะไม่มีการตรวจสอบข้อมูลและรักษาความปลอดภัยใด ๆ ให้กับแพ็กเก็ต (ถ้าไม่มีการใช้ IPSec ในการทำงานร่วมด้วย) จุดเด่นของ GRE Tunnel ก็คือ มันสามารถที่จะทำงานร่วมกับ Dynamic Routing Protocol ได้ ซึ่งการใช้ IPSec VPN แบบธรรมดาจะไม่สามารถที่จะทำได้ และสามารถที่จะส่งข้อมูลได้ด้วยความรวดเร็วที่มากกว่าการใช้ IPSec VPN ครับ

          GRE ใช้โปรโตคอล IP หมายเลข 47 ลักษณะของแพ็กเก็ตของ GRE นั้น จะใช้การเพิ่ม GRE Header เข้าไปในไอพีแพ็กเก็ตในระดับ Layer 3 ทำให้แพ็กเก็ตที่ถูกห่อหุ้มด้วย GRE นั้นจะมีขนาดเพิ่มขึ้นอีก 24 bytes โดยจะประกอบไปด้วย IP Header ชุดใหม่ 20 bytes และ GRE Header 4 bytes

Packet

ขั้นตอนการตั้งค่า GRE Tunnel

  1. ทำการสร้างอินเทอร์เฟส Tunnel
  2. ตั้งค่าที่อยู่ของต้นทาง Tunnel
  3. ตั้งค่าที่อยู่ของปลายทาง Tunnel
  4. เปิดใช้งานอินเทอร์เฟส
  5. (option)ตั้งค่า routing

diagram

ตัวอย่างคอนฟิกบนเราเตอร์ Running-config-01
Running-config-01(config)#interface tunnel 0
Running-config-01(config-if)#ip address 172.16.10.253 255.255.255.252
Running-config-01(config-if)#tunnel source fastEthernet 0/0  //ใส่อินเทอร์เฟสที่เชื่อมต่อสู่ wan
Running-config-01(config-if)#tunnel destination 89.53.127.65 //ใส่ ip add ของเราเตอร์อีกฝั่ง
Running-config-01(config-if)#no shut
Running-config-01(config-if)#exit
Running-config-01(config)#router ospf 1
Running-config-01(config-router)#network 172.16.10.0 0.0.0.255 area 0
Running-config-01(config-router)#network 10.0.0.0 0.255.255.255 area 0
Running-config-01(config-router)#exit
Running-config-01(config)#exit

ตัวอย่างคอนฟิกบนเราเตอร์ Running-config-02
Running-config-02(config)#interface tunnel 0
Running-config-02(config-if)#ip address 172.16.10.254 255.255.255.252
Running-config-02(config-if)#tunnel source fa0/0
Running-config-02(config-if)#tunnel destination 115.121.34.129
Running-config-02(config-if)#no shut
Running-config-02(config-if)#exit
Running-config-02(config)#router ospf 1
Running-config-02(config-router)#network 172.16.10.0 0.0.0.255 area 0
Running-config-02(config-router)#network 10.0.0.0 0.255.255.255 area 0
Running-config-02(config-router)#exit
Running-config-02(config)#exi

การ show ip route บนเราเตอร์ Running-config-01 เมื่อทำการตั้งค่าเสร็จแล้ว
Running-config-01#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 115.121.34.130 to network 0.0.0.0

     115.0.0.0/30 is subnetted, 1 subnets
C       115.121.34.128 is directly connected, FastEthernet0/0
     172.16.0.0/30 is subnetted, 1 subnets
C       172.16.10.252 is directly connected, Tunnel0
     10.0.0.0/24 is subnetted, 2 subnets
C       10.75.10.0 is directly connected, FastEthernet0/1
O       10.75.20.0 [110/11121] via 172.16.10.254, 00:00:08, Tunnel0
S*   0.0.0.0/0 [1/0] via 115.121.34.130

การ show ip route บนเราเตอร์ Running-config-02 เมื่อทำการตั้งค่าเสร็จแล้ว
Running-config-02#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 89.53.127.66 to network 0.0.0.0

     172.16.0.0/30 is subnetted, 1 subnets
C       172.16.10.252 is directly connected, Tunnel0
     10.0.0.0/24 is subnetted, 2 subnets
O       10.75.10.0 [110/11121] via 172.16.10.253, 00:00:06, Tunnel0
C       10.75.20.0 is directly connected, FastEthernet0/1
     89.0.0.0/30 is subnetted, 1 subnets
C       89.53.127.64 is directly connected, FastEthernet0/0
S*   0.0.0.0/0 [1/0] via 89.53.127.66

wireshark

           เป็นไงครับ เพียงทำการตั้งค่าเท่านี้ เราก็สามารถใช้งาน VPN ได้แล้วนะครับ แต่เป็น VPN แบบที่ไม่มีการรักษาความปลอดภัยของข้อมูลนะครับ แต่มีข้อดีก็คือความรวดเร็วในการส่งข้อมูลครับ เหมาะสำหรับการใช้งานกับข้อมูลที่ไม่ได้ให้ความสำคัญกับการรักษาความปลอดภัยมากนัก แต่มุ่งเน้นไปที่ความรวดเร็วในการส่งข้อมูลมากกว่าครับ

Friday, November 5, 2010

ใช้การพิสูจน์ตัวตนบนอุปกรณ์ร่วมกับ AAA Server

aaa authen

           สวัสดีครับเพื่อน ๆ ในวันนี้ผมก็มีเทคนิคมาแบ่งบันกันเช่นเคยครับ สำหรับผมในการเก็บ username และ password ที่ใช้งานกับอุปกรณ์เครือข่าย ในสมัยก่อนผมก็จะเก็บรายชื่อไว้บนแต่ละตัวอุปกรณ์ (Local) ซึ่งจะต้องทำการตั้งค่า username และ password บนอุปกรณ์ทุก ๆ ตัว มันก็สามารถทำงานได้อยู่ครับเพียงแต่ ถ้าวันนึงเราต้องการที่จะแก้ไขรายระเอียดต่าง ๆ เช่น ต้องการเพิ่ม user เข้าไป หรือต้องการเปลี่ยน password ของผู้ใช้ ก็จะต้องไปแก้ไขการตั้งค่าบนตัวอุปกรณ์ทุก ๆ ตัวใช่มั้ยครับ (ในกรณีที่ไม่มีการใช้ CiscoWork) ซึ่งจะเสียเวลาในการทำงานเป็นอย่างมากในกรณีที่มีอุปกรณ์เครือข่ายเป็นจำนวนมาก ในวันนี้ผมจึงอยากที่จะแนะนำวิธีการที่จะใช้ในการจัดเก็บรายชื่อผู้ใช้อีกวิธีนึงครับ ซึ่งก็คือการใช้งาน AAA Server นั่นเองครับ

           เมื่อเราตั้งค่าการพิสูจน์ตัวตนบนอุปกรณ์เครือข่ายไปใช้ AAA Server แล้ว ทีนี้การจัดการ username และ password ก็จะสามารถทำได้จากศูนย์กลางได้ครับ ถ้าต้องการที่จะแก้ไขรายละเอียดต่าง ๆ ของผู้ใช้ เราก็เข้าไปแก้บน AAA Server ที่เดียว ซึ่งทำให้สะดวกต่อการจัดการมากยิ่งขึ้นใช่มั้ยครับ

          สำหรับ AAA Server ที่ผมใช้ก็คือ Cisco ACS Server (บทความ:เริ่มต้นใช้งาน ACS Server For Window) ซึ่งรองรับการใช้โปรโตคอลทั้ง Radius และ Tacacs+ ครับ แต่เพื่อน ๆ ก็สามารถใช้งานร่วมกับ Radius Server หรือ Tacacs+ Server ในแบบอื่น ๆ ก็ได้นะครับ ไม่จำเป็นจะต้องใน Cisco ACS เสมอไป

         ในการตั้งค่าการพิสูจน์ตัวตนบนอุปกณ์เครือข่ายร่วมกับ AAA Server นั้น สามารถที่จะนำไปใช้ได้หลายรูปแบบ เช่นใช้กับผู้ใช้ของ Cisco VPN Client to Site, ใช้กับการพิสูจน์ตัวตนบนบน point-to-point เช่น pap หรือ chap, ใช้ร่วมกับการตั้งค่า 802.1x, ใช้ในการพิสูจน์ตัวตนผู้ใช้เมื่อต้องการเข้าถึงตัวอุปกรณ์เครือข่าย เป็นต้น แต่ตัวอย่างในวันนี้จะเป็นการใช้งาน AAA Server กับการพิสูจน์ตัวตนผู้ใช้เมื่อต้องการเข้าถึงตัวอุปกรณ์ครับ

          เอาล่ะครับเรามาเริ่มกันเลยดีกว่านะครับ สำหรับในขั้นแรก เราก็ต้องเปิดการทำงานของ AAA โดยใช้คำสั่ง “aaa new-model” ในอุปกรณ์ของเราก่อนนะครับ จากนั้นจึงทำการระบุรายละเอียดของ AAA Server ที่จะใช้ครับ ซึ่งในตัวอย่างนี้ผมจะใช้เป็น Radius นะครับ

ตัวอย่าง

Router(config)#aaa new-model
Router(config)#radius-server host 192.168.1.10 auth-port 1812 acct-port 1813 key cisco123

          ในตัวอย่างนี้ผมใช้ radius server ที่มี ip address เป็น 192.168.1.10 ส่วนการตั้งค่าหมายเลขพอร์ต radius ที่จะใช้งานนั้น โดย default บนอุปกรณ์จะใช้พอร์ต UDP 1645 และ 1646 ในการทำงาน ซึ่งเป็นหมายเลขพอร์ตของ radius server แบบไม่เป็นทางการ (อ้างอิง:en.wikipedia.org/wiki/RADIUS) ซึ่งแบบที่เป็นทางการนั้นจะใช้หมายเลขพอร์ต UDP 1812 และ 1813 ตามตัวอย่างการตั้งค่า จากนั้นก็ทำการกำหนด key ที่จะใช้ในการติดต่อสื่อสารกับ Server โดยที่บน Server ก็จะต้องทำการตั้งค่า key ให้ตรงกันด้วย

          ในขั้นตอนต่อมา เราก็มาทำการสร้าง authentication method list และ authorization method list กันครับ ซึ่งจะใช้ในการอ้างอิงครับว่าเราจะใช้การพิสูจน์ตัวตนและการกำหนดสิทธิการใช้งานของผู้ใช้ในรูปแบบใด

ตัวอย่าง

Router(config)#aaa authentication login remote group radius local
Router(config)#aaa authorization exec remote group radius local
Router(config)#aaa authorization console

          จากตัวอย่าง เป็นการสร้าง authentication และ authorization method list โดยกำหนดให้ค้นหา database ของผู้ใช้จาก radius server ก่อน ถ้าไม่พบจึงใช้ database บนตัวมัน (local)

          ในขั้นตอนต่อมา ก็ต้องไปทำการตั้งค่าใน ACS Server โดยจะต้องเข้าไปทำการตั้งค่ารายละเอียดเกี่ยวกับ AAA Server โดยไปที่ Network Configuration > AAA Server และคลิ้กที่ AAA Server ทีต้องการ จากนั้นทำการตั้งค่า IP Address ของ Server และทำการกำหนด key (ใช้ในการติดต่อสื่อสารกับ AAA Server ตัวอื่น ๆ ) จากนั้น ในตัวอย่างนี้จะเลือกใช้โปรโตคอล Radius ในการทำงาน จึงจะทำการเลือก AAA Server Type เป็น Radius Server และทำการกำหนดให้ใช้หมายเลขพอร์ตตามที่เราตั้งค่าไว้บนอุปกรณ์ (1812 และ 1813) จากนั้นให้คลิ้กที่ Submit+Apply

5-11-2553 13-45-02

          จากนั้นให้ทำการ เพิ่มอุปกรณ์ AAA Client ซึ่งก็คืออุปกรณ์ที่ต้องการร้องขอการพิสูจน์ตัวตนหรือก็คืออุปกรณ์เครือข่ายของเราเข้าไป โดยคลิ้กที่ Add Entry ในส่วนของ AAA Client จากนั้นทำการกำหนดรายระเอียดของอุปกรณ์ คือ ทำการกำหนดชื่อและหมายเลข IP Address ของอุปกรณ์ และทำการใส่ key ที่ได้ทำการตั้งค่าเอาไว้ จากนั้นเลือกวิธีการพิสูจน์ตัวตนเป็น Radius (Cisco IOS/PIX 6.0) และคลิ้กที่ Submit+Apply

5-11-2553 13-54-54           จากนั้นก็ทำการสร้าง group ของผู้ใช้งาน เพื่อที่จะกำหนดกลุ่มของผู้ใช้ที่มีสิทธิในการใช้งานบนอุปกรณ์ที่ต่างกัน เช่น มีระดับ privilege level ที่ต่างกัน (บทความ:ทำความรู้จักกับ Privilege level) ซึ่งในส่วนนี้จะเป็นเพียง option เท่านั้น ไม่ต้องทำก็ได้ แต่อยากให้รู้ไว้ว่าสามารถที่จะทำได้ครับ

          ในการกำหนดระดับ privilege level ให้กับแต่ละ group ของผู้ใช้ สามารถทำได้โดยไปที่ group setup และทำการเลือก group อะไรก็ได้ขึ้นมา และก็ควรที่จะทำการตั้งชื่อ group ของเราซะหน่อยครับ โดยคลิ้กที่ Rename Group นะครับ และเมื่อตั้งชื่อเรียบร้อยแล้ว จากนั้นก็เข้าไปทำการกำหนดรายละเอียดของ group กันครับ โดยเลือก group ที่ต้องการและคลิ้กที่ Edit Settings ครับ ในการที่จะกำหนดระดับ privilege level ให้ group นั้น มีขั้นตอนการตั้งค่า ดังนี้ครับ

1.ในช่อง jump to ด้านบนให้เลือกที่ Radius (Cisco IOS/PIX 6.0) หรือจะเลื่อนลงมาเรื่อย ๆ จนกว่าจะเจอก็ได้ครับ

2.ให้ทำเครื่องหมายถูกในช่อง [009\001] cisco-av-pair และทำการใส่ค่า “shell:priv-lvl=<0-15>” ลงไปครับ เช่นถ้าต้องการให้ group นี้มีค่า privilege level เท่ากับ 7 ก็ให้ใส่ “shell:priv-lvl=7” ครับ

5-11-2553 14-40-07

          จากนั้นก็ทำการเพิ่ม User เข้าไปใน group ที่เราสร้างขึ้นมาครับ โดยไปที่ User Setup และทำการใส่ Username และคลิ้กที่ Add/Edit แล้วไปที่ tab User Setup จากนั้นทำการกำหนด password และกำหนด group ของผู้ใช้ โดยเลือก group ที่ต้องการในช่อง Group to which the user is assigned: ครับ

5-11-2553 14-46-16          จากนั้นก็ไปทำการตั้งค่าบนอุปกรณ์เครือข่ายของเรากันต่อ โดยไปทำการตั้งค่าในการเข้าถึงอุปกรณ์ไม่ว่าจะผ่าน Console หรือ Vertual Terminal line เช่น telnet หรือ ssh ว่าให้ใช้ authentication และ authorization method list ที่เราสร้างขึ้นมาครับ

ตัวอย่าง

Router(config)#line console 0
Router(config-line)#login authentication remote
Router(config-line)#authorization exec remote
Router(config-line)#exit
Router(config)#line vty 0 15
Router(config-line)#login authentication remote
Router(config-line)#authorization exec remote
Router(config-line)#transport input telnet ssh
Router(config-line)#exit

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

Router#debug aaa authentication
Router#debug aaa authorization
Router#debug radius authentication

          และสามารถทดสอบการทำงานของ AAA ได้ โดยการใช้คำสั่ง “test aaa” ครับ

ตัวอย่าง

Router#debug radius authentication              

Router#test aaa group radius admin ******* legacy
Attempting authentication test to server-group radius using radius
User was successfully authenticated.

Router#
*Mar  1 02:59:58.643: AAA: parse name=<no string> idb type=-1 tty=-1
*Mar  1 02:59:58.647: AAA/MEMORY: create_user (0x66B78980) user='admin' ruser='NULL' ds0=0 port='' rem_addr='NULL' authen_type=ASCII service=LOGIN priv=1 initial_task_id='0', vrf= (id=0)
*Mar  1 02:59:58.655: RADIUS: Pick NAS IP for u=0x66B78980 tableid=0 cfg_addr=0.0.0.0
*Mar  1 02:59:58.655: RADIUS: ustruct sharecount=1
*Mar  1 02:59:58.659: Radius: radius_port_info() success=0 radius_nas_port=1
*Mar  1 02:59:58.663: RADIUS/ENCODE: Best Local IP-Address 192.168.1.2 for Radius-Server 192.168.1.10
*Mar  1 02:59:58.671: RADIUS(00000000): Send Access-Request to 192.168.1.10:1812 id 1645/17, len 57
*Mar  1 02:59:58.675: RADIUS:  authenticator 05 73 3B A4 A1 E4 1D 12 - CA F4 48 53 00 D7 9A F5
*Mar  1 02:59:58.679: RADIUS:  NAS-IP-Address      [4]   6   192.168.1.2              
*Mar  1 02:59:58.679: RADIUS:  NAS-Port-Type       [61]  6   Async                     [0]
*Mar  1 02:59:58.683: RADIUS:  User-Name           [1]   7   "admin"
*Mar  1 02:59:58.687: RADIUS:  User-Password       [2]   18  *
*Mar  1 02:59:59.243: RADIUS: Received from id 1645/17 192.168.1.10:1812, Access-Accept, len 77
*Mar  1 02:59:59.243: RADIUS:  authenticator 0C B2 B5 D8 AA 66 46 8E - EC F6 F6 EC 39 12 E6 9E
*Mar  1 02:59:59.247: RADIUS:  Vendor, Cisco       [26]  25 
*Mar  1 02:59:59.247: RADIUS:   Cisco AVpair       [1]   19  "shell:priv-lvl=15"
*Mar  1 02:59:59.251: RADIUS:  Framed-IP-Address   [8]   6   255.255.255.255          
*Mar  1 02:59:59.255: RADIUS:  Class               [25]  26 
*Mar  1 02:59:59.259: RADIUS:   43 41 43 53 3A 30 2F 35 35 2F 63 30 61 38 30 31  [CACS:0/55/c0a801]
*Mar  1 02:59:59.263: RADIUS:   30 32 2F 61 64 6D 69 6E                          [02/admin]
*Mar  1 02:59:59.271: RADIUS: saved authorization data for user 66B78980 at 66B78C10
*Mar  1 02:59:59.275: AAA/MEMORY: free_user (0x66B78980) user='admin' ruser='NULL' port='' rem_addr='NULL' authen_type=ASCII service=LOGIN priv=1 vr

*เพื่อน ๆ สามารถทดลองทำ lab โดยการดาวน์โหลด Lab ในเรื่องนี้ไปทดสอบการทำงานได้ครับ

Packet Tracer Lab:การพิสูจน์ตัวตนเมื่อต้องการเข้าถึงอุปกรณ์ โดยใช้ AAA Server