configuration site to site ipsec vpn pre-shared key authentication on cisco asa firewall
สวัสดีครับเพื่อน ๆ หลังจากที่ได้เคยแนะนำการตั้งค่า IPSec VPN บน Cisco IOS Router กันไปบ้างแล้ว ในวันนี้ผมจะขอแนะนำการตั้งค่า IPSec VPN บนอุปกรณ์ Cisco ASA Firewall กันบ้างนะครับ โดย IPSec VPN ที่จะมาแนะนำให้เพื่อน ๆ ในวันนี้นั้นก็คือ IPSec VPN แบบ Site to Site โดยใช้ Pre-shared Authentication นะครับ ยังไงก็เชิญติดตามบทความนี้ได้เลยครับ
ในตัวอย่างการตั้งค่าในวันนี้นั้น เป็นการตั้งค่า IPSec VPN แบบ Site to Site โดยใช้การพิสูจน์ตัวตนของอุปกรณ์ที่ใช้ในการทำ VPN แบบ Pre-shared Key โดย Pre-shared Key นี้ก็เป็นเสมือน password ที่เราทำการกำหนดไว้ในขั้นตอนการตั้งค่า IPSec VPN นะครับ ซึ่งเป็นการตั้งค่าแบบที่ง่ายและนิยมใช้งานมากที่สุด เหมาะสำหรับนำไปใช้กับเครือข่ายที่มีขนาดไม่ใหญ่มากครับ และสำหรับเพื่อน ๆ ที่ยังไม่รู้จักกับ IPSec VPN ก็ลองอ่านบทความ ทำความรู้จักกับ IPSec VPN (ภาคทฤษฎี) ก่อนนะครับ
ขั้นตอนในการตั้งค่า Site to Site IPSec VPN โดยใช้ Pre-shared Authentication บน Cisco ASA Firewall
- ตรวจสอบการเชื่อมต่อของระบบเครือข่าย ว่าสามารถทำการติดต่อสื่อสารระหว่างอุปกรณ์ที่จะใช้ในการทำ IPSec VPN ได้อย่างปกติ
- ทำการออกแบบรูปแบบและรายละเอียดที่จะใช้ในการการรักษาความปลอดภัยของข้อมูล เช่น โปรโตคอลที่จะใช้ในการเข้ารหัส, Hash Algorithm ที่จะใช้งาน เป็นต้น
- ทำการเปิดการทำงานของ ISAKMP บนอินเทอร์เฟสที่ใช้ติดต่อสื่อสารกับอุปกรณ์ IPSec VPN ฝั่งตรงข้าม
- ตั้งค่า ISAKMP Policy Set เพื่อใช้ในการสร้าง ISAKMP SA โดยจะต้องทำการกำหนดค่าให้ตรงกันระหว่างอุปกรณ์ที่ใช้ในการทำ IPSec VPN ซึ่งจะมีค่าที่ต้องทำการกำหนด ดังต่อไปนี้
- Authentication กำหนดวิธีการที่จะใช้ในการพิสูจน์ตัวตน ซึ่งเราจะใช้ Pre-shared Key
- Encryption เลือก algorithm ที่จะใช้ในการเข้ารหัสข้อมูล โดยตัวเลือกที่เรียงตามระดับการรักษาความปลอดภัย มีดังนี้ DES, 3DES, AES
- Hash เลือก algorithm ที่จะใช้ในการตรวจสอบความถูกต้องของข้อมูล โดยจะมีตัวเลือกเรียงตามระดับความปลอดภัย ดังนี้ MD5, SHA
- DH Group เลือกขนาดของจำนวนเฉพาะที่จะนำมาใช้ในการแลกเปลี่ยน Key ระหว่างอุปกรณ์ โดยจะมีตัวเลือก เรียงตามระดับการรักษาความปลอดภัย ดังนี้ group 1(768 bit), group 2 (1024 bit), group 5 (1536 bit) และ group 7 (Eliptical Curve field size:163 bit)
- Life Time ทำการกำหนดช่างเวลาที่จะใช้ ISAKMP SA นี้ โดยเมือหมดช่วงเวลานี้ลงไป จะต้องทำการสร้าง ISAKMP SA ใหม่ขึ้นมาทดแทน
- หมายเหตุ ในการเลือกใช้งาน algorithm ในรูปแบบต่าง ๆ ถ้าเลือกที่จะใช้งานระดับการรักษาความปลอดภัยที่สูงจนเกินไป ก็อาจจะส่งผลให้ทำงานได้ช้าลง จึงควรที่จะเลือกระดับการรักษาความปลอดภัยที่เหมาะสมกับการใช้งานของแต่ละองค์กรเอง ว่าต้องการระดับความปลอดภัยที่สูง หรือต้องการใช้งานได้รวดเร็ว
- ทำการสร้าง Tunnel-group หรือรายการของแต่ละ Connection (หรือแต่ละ Peer) สำหรับกำหนดรูปแบบการใช้งาน IPSec VPN ของแต่ละ Connection
- ทำการกำหนด Pre-Shared Key ที่ใช้ในการพิสูจน์ตัวตนของอุปกรณ์ที่ใช้ในการทำ IPSec VPN
- ทำการสร้าง Access-list ที่จะใช้สำหรับคัดเลือกทราฟิกที่ต้องการให้ใช้งาน IPSec VPN และทำการสร้าง Access-list เพื่อใช้สำหรับการยกเว้นไม่ให้ทราฟิกที่จะใช้งาน IPSec VPN นั้นทำการ NAT
- ทำการตั้งค่า NAT เพื่อการใช้งานที่สะดวกในการใช้งาน จึงควรที่จะทำการยกเว้นไม่ให้ทำการ NAT ทราฟิกที่จะใช้งานบน IPSec VPN เพื่อที่เครื่องผู้ใช้ในแต่ละฝั่งจะได้สามารถติดต่อกันผ่าน IP Address ของอีกฝ่ายตรง ๆ ได้เลย แต่สำหรับทราฟิกอื่น ๆ ที่ไม่ได้ใช้งาน IPSec VPN เช่นการใช้งาน web server ของผู้ให้บริการต่าง ๆ ก็อาจจะให้ทำการ NAT เป็นปกติ
- ตั้งค่า IPSec transform Set เพื่อนำมาสร้าง IPSec SA โดยจะต้องทำการกำหนดค่าให้ตรงกันระหว่างอุปกรณ์ที่ใช้ในการทำ IPSec VPN ซึ่งจะมีค่าที่ต้องทำการกำหนด ดังต่อไปนี้
- Encryption ทำการเลือก algorithm ที่จะนำมาใช้ในการเข้ารหัสข้อมูลที่จะส่งไปใน IPSec Tunnel โดยทั่วไปจะมีตัวเลือกเรียงตามระดับการรักษาความปลอดภัย ดังนี้ esp-des, esp-3des, esp-aes เป็นต้น
- Authentication ทำการเลือก algorithm ที่จะนำมาใช้ในการตรวจสอบความถูกต้องของข้อมูลว่าไม่มีการเปลี่ยนแปลง โดยทั่วไปจะมีตัวเลือกเรียงตามระดับการรักษาความปลอดภัย ดังนี้ esp-md5-hmac, esp-sha-hmac
- Mode(ทางเลือก) โดย defautl บนอุปกรณ์ Cisco ASA Firewall จะใช้งาน Tunnel mode แต่สามารถที่จะเปลี่ยนไปใช้ Transport Mode ได้ ด้วยการใช้คำสั่ง "crypto ipsec transform-set <name> mode transport"
- ทำการสร้าง Crypto Map ซึ่งโดยทั่วไปจะทำการกำหนดรายละเอียดต่าง ๆ ดังนี้
- ระบุหมายเลข IP Address ของ Peer หรืออุปกรณ์ที่ใช้ในการทำ IPSec VPN ฝั่งตรงข้าม
- ระบุ IPSec Transform Set ที่จะนำมาใช้งาน
- ระบุ Access-list ที่ได้สร้างขึ้นมาเพื่อคัดเลือกทราฟิกที่อนุญาตให้ใช้งาน IPSec VPN
- นำ Crypto Maps ที่สร้างขึ้นมาไปประกาศใช้งานบนอินเทอร์เฟสที่ใช้ติดต่อสื่อสารกับอุปกรณ์ IPSec VPN ฝั่งตรงข้าม
- ตรวจสอบการทำงาน
สำหรับตัวอย่างการตั้งค่าในวันนี้ จะเป็นการทำ Site to Site IPSec VPN โดยมีรายละเอียดตามรูปด้านล่างเลยครับ คือจะมีระบบเครือข่ายของสำนักงานใหญ่(Headquarter) และสำนักงานสาขา(Branch) โดยในแต่ละสำนักงาน ก็มีการเชื่อมต่อไปยังเครือข่ายอินเทอร์เน็ตโดยตรง และมีความต้องการที่จะใช้งาน IPSec VPN เพื่อให้สามารถทำการติดต่อสื่อสารระหว่างเครือข่ายภายในของแต่ละสำนักงานได้ โดยใช้ Cisco ASA Firewall ในการทำเป็น IPSec VPN Server ครับ
ในขั้นตอนแรกนั้นก็จะเป็นการทดสอบการเชื่อมต่อระหว่างอุปกรณ์ที่ใช้ในการทำ IPSec VPN นะครับ เพื่อให้แน่ใจว่าอุปกรณ์ทั้งสองสามารถติดต่อสื่อสารกันได้ จากนั้นก็จะเป็นการออกแบบและรวบรวมรายละเอียดที่จะใช้ในการตั้งค่า เพื่อรักษาความปลอดภัยของข้อมูลที่ใช้ IPSec VPN นะครับ โดยรายละเอียดก็เช่น โปรโตคอลที่จะใช้ในการรักษาความปลอดภัยต่าง ๆ หรือหมายเลข IP Address ของอุปกรณ์ต่าง ๆ เป็นต้นครับ
ตัวอย่าง
Headquarter
Wan IP Address : 100.0.0.1
Local Subnet : 172.16.10.0/24
Branch
Wan IP Address : 11.0.0.1
Local Subnet : 172.16.20.0/24
ISAKMP SA
Encryption : AES
Hash : SHA
DH-Group : 5 (1536 bit)
lifetime : 24 Hours
Authentication : Pre-shared-key (cisco123)
IPSec SA
Encryption : 3DES
Hash : MD5
จากนั้นก็ให้ทำการเปิดการทำงานของ ISAKMP บนอินเทอร์เฟสที่จะใช้ในการติดต่อสื่อสารไปยังอุปกรณ์ IPSec VPN ฝั่งตรงข้ามนะครับ ซึ่งตามตัวอย่างด้านล่างนี้จะใช้อินเทอร์เฟสที่มีชื่อว่า "outside" ครับ (ต้องไปทำการตั้งค่า nameif บน physical interface ก่อน) จากนั้นจึงทำการตั้งค่า ISAKMP Policy Set ตามที่ได้ออกแบบไว้ในขั้นตอนที่ผ่านมาบนอุปกรณ์ทั้งสองฝั่ง เพื่อที่จะนำมาใช้ในการสร้าง ISAKMP SA ระหว่างอุปกรณ์ครับ
ตัวอย่าง
Headquarter
Headquarter(config)# crypto isakmp enable outside
Headquarter(config)# crypto isakmp policy 10
Headquarter(config-isakmp-policy)# encryption aes
Headquarter(config-isakmp-policy)# hash sha
Headquarter(config-isakmp-policy)# authentication pre-share
Headquarter(config-isakmp-policy)# group 5
Headquarter(config-isakmp-policy)# lifetime 86400
Headquarter(config-isakmp-policy)# exit
Branch
Branch(config)# crypto isakmp enable outside
Branch(config)# crypto isakmp policy 100
Branch(config-isakmp-policy)# encryption aes
Branch(config-isakmp-policy)# hash sha
Branch(config-isakmp-policy)# authentication pre-share
Branch(config-isakmp-policy)# group 5
Branch(config-isakmp-policy)# lifetime 86400
Branch(config-isakmp-policy)# exit
ซึ่งการตั้งค่า ISAKMP Policy Set นี้ จะต้องทำการตั้งค่าบนอุปกรณ์ทั้งสองฝั่งให้มีค่าที่ตรงกัน (ยกเว้นค่า lifetime ที่ไม่ต้องตรงกันก็ได้) เพื่อที่จะสามารถทำการสร้าง ISAKMP SA ได้นั่นเองครับ
ในขั้นตอนต่อมาจะเป็นการกำหนดรูปแบบ IPSec VPN ที่จะใช้งาน ว่าจะใช้เป็น Site-to-Site, Client-to-Site หรือ Web VPN ซึ่งในตัวอย่างวันนี้นั้น จะทำการตั้งค่า Site-to-Site IPSec VPN นะครับ โดยจะต้องไปทำการสร้าง Tunnel-group เพื่อที่จะกำหนดรูปแบบการใช้งานของแต่ละ Connection ด้วยการใช้คำสั่ง "tunnel-group <name> type <ipsec-type>" ครับ
และจากนั้นก็จะเป็นการกำหนด Pre-shared-key ที่จะใช้ในการพิสูจน์ตัวตนของอุปกรณ์ที่ใช้ในการทำ IPSec VPN ซึ่งจะมีการใช้คำสั่งที่แตกต่างกับบน Cisco IOS Router โดยจะต้องไปทำการกำหนดค่า pre-shared-key ใน ipsec-attributes ของแต่ละ Tunnel-group ครับ
ตัวอย่าง
Headquarter
Headquarter(config)# tunnel-group 11.0.0.1 type ipsec-l2l
Headquarter(config)# tunnel-group 11.0.0.1 ipsec-attributes
Headquarter(config-tunnel-ipsec)# pre-shared-key cisco123
Headquarter(config-tunnel-ipsec)# exit
Branch
Branch(config)# tunnel-group 100.0.0.1 type ipsec-l2l
Branch(config)# tunnel-group 100.0.0.1 ipsec-attributes
Branch(config-tunnel-ipsec)# pre-shared-key cisco123
Branch(config-tunnel-ipsec)# exit
จากตัวอย่างด้านบน เป็นการสร้าง Tunnel-group โดยในฝั่ง Headquarter จะใช้ชื่อว่า “11.0.0.1” ส่วนในฝั่ง Branch จะใช้ชื่อว่า “100.0.0.1” นะครับ(ตั้งชื่อตาม IP Address ของอุปกรณ์ฝั่งตรงข้าม เพื่อสะดวกในการใช้งาน) โดยระบุชนิดของ Tunnel เป็น IPSec Site-to-Site (ipsec-l2l) และจากนั้นก็ทำการกำหนด pre-shared-key ที่จะใช้ในการพิสูจน์ตัวตนระหว่างอุปกรณ์เป็น "cisco123" ครับ
เมื่อทำการกำหนด pre-shared-key เสร็จเรียบร้อยแล้ว ในขั้นตอนต่อมาจะเป็นการคัดเลือกทราฟิกที่อนุญาตที่ต้องการให้ใช้งาน IPSec VPN ครับ ซึ่งจะต้องนำ Access-list มาใช้ในการคัดเลือกทราฟิกที่ต้องการนะครับ โดยในตัวอย่างนี้นั้นจะอนุญาตให้สามารถทำการติดต่อสื่อสารระหว่างทุก ๆ เครื่องของเครือข่ายภายในทั้งสองฝั่งได้ครับ
ตัวอย่าง
Headquarter
Headquarter(config)# access-list hq-to-br permit ip 172.16.10.0 255.255.255.0 172.16.20.0.0 255.255.255.0
Branch
Branch(config)# access-list br-to-hq permit ip 172.16.20.0 255.255.255.0 172.16.10.0 255.255.255.0
จากนั้นก็จะเป็นการตั้งค่าไม่ให้ทราฟิกที่ใช้งาน IPSec VPN นั้นถูกทำการ NAT ออกไปนะครับ เพื่อความสะดวกในการติดต่อสื่อสารระหว่างเครือข่ายภายในทั้งสองฝั่ง จะได้สามารถติดต่อสื่อสารผ่าน IP Address ของแต่ละเครื่องตรง ๆ ได้เลยครับ ซึ่งตัวอย่างการตั้งค่าในวันนี้นั้นจะมีทั้งการตั้งค่าใน ASA Version 8.2 ลงไป และ ASA Version 8.3 เป็นต้นมา โดยเพื่อน ๆ ใช้งาน ASA ใน Version ใด ก็เลือกดูตัวอย่างการตั้งค่าใน Version นั้น ๆ ได้เลยครับ
ตัวอย่าง
สำหรับ ASA Version 8.2 ลงไป
Headquarter
Headquarter(config)# access-list no-nat permit ip 172.16.10.0 255.255.255.0 172.16.20.0 255.255.255.0
Headquarter(config)# nat (inside) 0 access-list no-nat
Branch
Branch(config)# access-list no-nat permit ip 172.16.20.0 255.255.255.0 172.16.10.0 255.255.255.0
Branch(config)# nat (inside) 0 access-list no-nat
สำหรับ ASA Version 8.3 เป็นต้นมา
Headquarter
Headquarter(config)# object network hq-network
Headquarter(config-network-object)# subnet 172.16.10.0 255.255.255.0
Headquarter(config-network-object)# exit
Headquarter(config)# object network br-network
Headquarter(config-network-object)# subnet 172.16.20.0 255.255.255.0
Headquarter(config-network-object)# exit
Headquarter(config)# nat (inside,outside) 1 source static hq-network hq-network destination static br-network br-network
Branch
Branch(config)# object network hq-network
Branch(config-network-object)# subnet 172.16.10.0 255.255.255.0
Branch(config-network-object)# exit
Branch(config)# object network br-network
Branch(config-network-object)# subnet 172.16.20.0 255.255.255.0
Branch(config-network-object)# exit
Branch(config)# nat (inside,outside) 1 source static br-network br-network destination static hq-network hq-network
จากนั้นจะเป็นการตั้งค่า IPSec Transform Set โดยใช้ค่าที่ได้ทำการกำหนดไว้ ในขั้นตอนแรก เพื่อที่จะนำมาใช้ในการสร้าง IPSec SA เพื่อใช้ในการรักษาความปลอดภัยของข้อมูลที่เครื่องผู้ใช้ทำการส่งออกไป ซึ่งจะต้องทำการตั้งค่าบนอุปกรณ์ทั้งสองฝั่งให้มีค่าที่ตรงกันครับ
ตัวอย่าง
Headquarter
Headquarter(config)# crypto ipsec transform-set set-01 esp-3des esp-md5-hma
Branch
Branch(config)# crypto ipsec transform-set set-01 esp-3des esp-md5-hma
จากตัวอย่างด้านบน เป็นการตั้งค่า IPSec Transform ที่มีชื่อว่า "set-01" โดยใช้การเข้ารหัสข้อมูลแบบ 3DES และใช้ Hash Algorithm แบบ MD5 ตามที่ได้ออกแบบเอาไว้นะครับ
เมื่อทำการตั้งค่า IPSec Transform Set เสร็จเรียบร้อยแล้ว จากนั้นก็จะเป็นการสร้าง crypto map เพื่อทำการรวบรวมการกำหนดค่าต่าง ๆ ที่จะใช้งานเข้าไว้ด้วยกัน ซึ่งค่าต่าง ๆ ที่ควรกำหนดนั้น ได้แก่ access-list ที่ระบุทราฟิกที่อนุญาตให้ใช้งาน IPSec VPN Tunnel, หมายเลข IP Address ของอุปกรณ์ที่ใช้ในการทำ IPSec VPN ฝั่งตรงข้าม และ IPSec Transform Set ที่จะใช้งานในการรักษาความปลอดภัยของข้อมูลนะครับ และเมื่อทำการสร้าง crypto map เรียบร้อยแล้ว ก็ถึงขั้นตอนสุดท้าย นั่นก็คือ การนำ crypto map ที่สร้างขึ้นมานี้ ไปประกาศใช้งานบนอินเทอร์เฟสที่ใช้เชื่อมต่อไปยังอุปกรณ์ฝั่งตรงข้ามนะครับ
ตัวอย่าง
Headquarter
Headquarter(config)# crypto map l2l-hq 200 match address hq-to-br
Headquarter(config)# crypto map l2l-hq 200 set peer 11.0.0.1
Headquarter(config)# crypto map l2l-hq 200 set transform-set set-01
Headquarter(config)# crypto map l2l-hq interface outside
Branch
Branch(config)# crypto map l2l-br 200 match address br-to-hq
Branch(config)# crypto map l2l-br 200 set peer 100.0.0.1
Branch(config)# crypto map l2l-br 200 set transform-set set-01
Branch(config)# crypto map l2l-br interface outside
จากตัวอย่างด้านบน เป็นการตั้งค่า crypto map โดยในฝั่ง headquarter จะใช้ชื่อว่า l2l-hq และในฝั่ง Branch จะใช้ชื่อว่า l2l-br ครับ โดยกำหนดค่า priority เท่ากับ 200 และทำการกำหนดค่ารายละเอียดอื่น ๆ ตามรายละเอียดที่ได้สร้างขึ้นในขั้นตอนที่ผ่าน ๆ มาครับ และจากนั้นก็นำ crypto map ทั้งสองไปประกาศใช้งานในอินเทอร์เฟสที่ใช้เชื่อมต่อไปยังอุปกรณ์ฝั่งตรงข้าม ซึ่งจากตัวอย่างนี้ก็คืออินเทอร์เฟสที่มีชื่อว่า "outside" นั่นเองครับ
เพียงเท่านี้ก็เสร็จสิ้นการตั้งค่า Site to Site IPSec VPN แบบใช้ Pre-shared Key บน Cisco ASA Firewall แล้วครับ ต่อมาก็จะเป็นการแนะนำคำสั่งที่ใช้ในการตรวจสอบการทำงานกันนะครับ คำสั่งหลัก ๆ ที่ใช้ในการตรวจสอบการทำงานของ IPSec VPN ก็ได้แก่
- show crypto isakmp sa เป็นการตรวจสอบ isakmp sa ว่าอยู่ในสถานะใด
- show crypto ipsec sa เป็นการตรวจสอบการทำงานของ ipsec sa รวมถึงสถิติการใช้งานต่าง ๆ
ขอบคุณมากคับ แต่ยังไม่เคยคอนฟิก ASA จริงๆเลย ถ้ามีโอกาศทำจะมาแชร์ให้บ้างคับ
ReplyDelete