Sunday, May 15, 2011

ทำความรู้จักและตั้งค่า Secure Shell (SSH) บนอุปกรณ์ Cisco IOS

Introduction and configure Secure Shell (SSH) Server on Cisco IOS

secure shell

          ในการเข้าใช้งานในหน้า CLI (Command Line Interface) ของอุปกรณ์ Cisco IOS ในครั้งแรกนั้น เราก็จะต้องใช้งานผ่าน Console port โดยการเสียบสาย Console ไปยังตัวอุปกรณ์โดยตรงใช่มั้ยครับ แต่เมื่อเราทำการตั้งค่าเสร็จเรียบร้อยและนำไปติดตั้งยังสถานที่ติดตั้งแล้ว ซึ่งในบางครั้งก็จะติดตั้งในสถานที่ที่เข้าถึงลำบาก หรือสถานที่ที่อยู่ห่างไกลออกไป เพื่อความสะดวกในการที่เราจะเข้าไปจัดการ หรือดูสถานะต่าง ๆ ของอุปกรณ์ ส่วนมากก็จะใช้วิธีการรีโมต เพื่อเข้าถึงอุปกรณ์โดยไม่ต้องไปเสียบสาย Console เอา ซึ่งจะเพิ่มความสะดวกและความรวดเร็วในการจัดการอุปกรณ์ของเราได้เป็นอย่างดี และโปรโตคอลที่ใช้ในการรีโมต ที่ใช้งานกันโดยส่วนมากก็คือโปรโตคอล Telnet นั่นเอง แต่ในวันนี้ผมจะขอแนะนำอีกหนึ่งโปรโตคอลที่มีการรักษาความปลอดภัยที่เหนือกว่าการใช้งาน Telnet นั่นก็คือโปรโตคอล Secure Shell (SSH) นั่นเองครับ

          โปรโตคอล Telnet นั้นเป็นวิธีการที่ผู้ดูแลระบบนิยมใช้งานในการเข้าไปจัดการอุปกรณ์เครือข่าย แต่การใช้งานโปรโตคอล Telnet นั้นจะไม่มีการรักษาความปลอดภัยในการรับ-ส่งข้อมูลใน Telnet session  โดยจะไม่มีการเข้ารหัสข้อมูลที่ส่งออกไป จะรับ-ส่งข้อมูลกันในรูปแบบที่เรียกว่า Clear Text ซึ่งมีความเสี่ยงต่อการถูกลอบโจมตีได้ด้วยการดักจับ Packet ระหว่างทาง เพื่อล่วงรู้ข้อมูลอันเป็นความลับต่าง ๆ ของอุปกรณ์ของเรา ซึ่งเพื่อน ๆ สามารถทดสอบได้ด้วยการใช้ WireShark ดักจับ Packet ดู จะพบว่าเห็นคำสั่งที่เราพิมพ์เข้าไปหน้า CLI ของอุปกรณ์กันจะ ๆ เลยทีเดียว ซึ่งเราสามารถเพิ่มระดับการรักษาความปลอดภัยในการรีโมตได้ด้วยการใช้งานโปรโตคอล Secure Shell (SSH) ที่จะมีการเข้ารหัสข้อมูลที่รับ-ส่งกันระหว่างเครื่องของผู้ดูแลระบบกับอุปกรณ์ ทำให้ถึงแม้ว่าจะมีการดักจับ Packet ระหว่างทางไปก็ไม่สามารถที่จะรู้ข้อความภายใน Packet ได้ เป็นการป้องกันไม่ให้ผู้ที่ไม่หวังดีมาล่วงรู้ความลับต่าง ๆ ได้นั่นเองครับ

เมื่อทดลองโดยการใช้ Wireshark ดักจับ packet ในขณะที่ใช้งานโปรโตคอล Telnet

telnet session

เมื่อทดลองโดยการใช้ Wireshark ดักจับ packet ในขณะที่ใช้งานโปรโตคอล SSH

ssh session

          เมื่อผู้ดูแลระบบต้องการที่จะเข้าสู่หน้า CLI ของอุปกรณ์เพื่อทำการตั้งค่า, ตรวจสอบการทำงาน หรือแก้ไขปัญหาต่าง ๆ ทาง Cisco ได้แนะนำว่าให้เชื่อมต่อโดยใช้ SSH ซึ่งมีการรักษาความปลอดภัยที่สูงกว่าการใช้งาน Telnet ตามเหตุผลที่ว่ามาข้างต้น ซึ่งระหว่างขั้นตอนในการตั้งค่า SSH บนอุปกรณ์ของเรานั้น จะต้องมีการสร้าง RSA keys เพื่อนำมาใช้ในการเข้ารหัสข้อมูลที่รับ-ส่งกันใน SSH session ของเรา โดยขนาดของ RSA Keys ที่ทาง Cisco แนะนำนั้นคือไม่ควรจะต่ำกว่า 1024 bits ซึ่งเมื่อเราทำการสร้าง RSA Keys แล้ว อุปกรณ์ของเราจะเปิดการทำงานของ SSH ให้โดยอัตโนมัติ (ถ้าอุปกรณ์ในรุ่นนั้น ๆ รองรับ) โดยตั้งแต่ Cisco IOS 12.1(1)T เป็นต้นมาจะรองรับการใช้งาน SSH version 1 และสำหรับ SSH version 2 จะรองรับใน Cisco IOS 12.3(4)T เป็นต้นมา และในการที่จะ enable SSH version 2 ได้นั้น เราจะต้องใช้ RSA Keys ที่มีขนาดอย่างน้อย 768 bits ขึ้นไป

          SSH ทำงานผ่าน TCP หมายเลข Port 22 โดยเมื่อเราทำการตั้งค่าให้ใช้งาน SSH บนอุปกรณ์ของเราแล้ว อุปกรณ์ของเราจะทำงานเป็น SSH Server โดยทางฝั่งผู้ใช้จะต้องใช้งาน SSH Client Software อย่างเช่น Putty หรือ SecureCRT ในการสร้างการเชื่อมต่อมายังอุปกรณ์ ซึ่งขั้นตอนของการตั้งค่า SSH Server บนอุปกรณ์ Cisco IOS มีดังนี้ครับ

  1. ทำการตั้งค่า hostname
  2. ทำการตั้งค่า IP domain name
  3. ทำการตั้งค่า aaa new-model
  4. ทำการตั้งค่า username และ password
  5. ทำการลบ RSA Keys อันเก่าออกไป
  6. ทำการสร้าง RSA Keys อันใหม่ โดยค่าที่ Cisco แนะนำเป็นอย่างต่ำคือ 1024 bits
  7. (ทางเลือก)ทำการตั้งค่า SSH Version ซึ่งโดย default จะสามารถเชื่อมต่อได้ทั้ง version 1 และ version 2 แต่เราสามารถกำหนดว่าจะใช้งาน version ใด version หนึ่งได้ครับ
  8. (ทางเลือก)ทำการตั้งค่าระยะเวลา SSH timeout
  9. (ทางเลือก)ทำการกำหนดจำนวนครั้งในการพิสูจน์ตัวตน
  10. (ทางเลือก)ทำการป้องกันไม่ให้มีการใช้งาน telnet ในการ remote เข้ามาใช้งาน
  11. (ทางเลือก)ทำการกำหนดให้ใช้ SSH ในการ remote เข้ามาใช้งาน

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

ถ้าบนอุปกรณ์ของเรายังไม่ได้ทำการสร้าง RSA Keys เมื่อเราใช้คำสั่ง "show ip ssh" จะปรากฎผลลัพธ์ ดังนี้ครับ

ตัวอย่าง
Running-config#show ip ssh
SSH Disabled - version 1.5
%Please create RSA keys (of atleast 768 bits size) to enable SSH v2.
Authentication timeout: 120 secs; Authentication retries: 3

          SSH จะอยู่ในสถานะ Disabled อยู่ ถ้าเพื่อน ๆ เจอสถานะดังนี้ ก็ให้ไปทำการสร้าง RSA Keys ก่อนนะครับ ซึ่งถ้าต้องการที่จะใช้งาน SSH version 2 ก็จะต้องใช้ RSA Keys ที่มีขนาดอย่างน้อย 768 bits ขึ้นไปนะครับ และเมื่อเพื่อน ๆ ทำการสร้าง RSA Keys แล้ว อุปกรณ์ก็จะไปทำการ Enabled SSH ให้โดยอัตโนมัติครับ

ถ้าการตั้งค่าบนอุปกรณ์ของเรารองรับ SSH Connection ทั้ง version 1 และ version 2 เมื่อเราใช้คำสั่ง "show ip ssh" จะปรากฎผลลัพธ์ ดังนี้ครับ

ตัวอย่าง
Running-config#show ip ssh
SSH Enabled - version 1.99
Authentication timeout: 120 secs; Authentication retries: 3

          จะพบว่า SSH อยู่ในสถานะ Enabled อยู่ โดยเป็นผลลัพธ์มาจากการสร้าง RSA Keys ซึ่งจะไปทำการ Enabled SSH ให้โดยอัตโนมัติ และจะเห็นว่า version ที่แสดงจะเป็น 1.99 ซึ่งหมายถึงรองรับการใช้งานทั้ง SSH Version 1 และ Version 2 ซึ่งเป็นค่าโดย default บนอุปกรณ์ของเราครับ

ถ้าการตั้งค่าบนอุปกรณ์ของเรารองรับ SSH Connection เฉพาะ version 1 เท่านั้น เมื่อเราใช้คำสั่ง "show ip ssh" จะปรากฎผลลัพธ์ ดังนี้ครับ

ตัวอย่าง
Running-config#show ip ssh
SSH Enabled - version 1.5
Authentication timeout: 120 secs; Authentication retries: 3

          จะพบว่า SSH อยู่ในสถานะ Enabled อยู่ โดยเป็นผลลัพธ์มาจากการสร้าง RSA Keys ซึ่งจะไปทำการ Enabled SSH ให้โดยอัตโนมัติ และจะเห็นว่า version ที่แสดงจะเป็น 1.5 ซึ่งหมายถึงรองรับการใช้งานเฉพาะ SSH Version 1 ซึ่งมาจากการใช้คำสั่ง "ip ssh version 1" ใน global configuration mode ครับ

ถ้าการตั้งค่าบนอุปกรณ์ของเรารองรับ SSH Connection เฉพาะ version 2 เท่านั้น เมื่อเราใช้คำสั่ง "show ip ssh" จะปรากฎผลลัพธ์ ดังนี้ครับ

ตัวอย่าง
Running-config#show ip ssh
SSH Enabled - version 2.0
Authentication timeout: 120 secs; Authentication retries: 3

          จะพบว่า SSH อยู่ในสถานะ Enabled อยู่ โดยเป็นผลลัพธ์มาจากการสร้าง RSA Keys ซึ่งจะไปทำการ Enabled SSH ให้โดยอัตโนมัติ และจะเห็นว่า version ที่แสดงจะเป็น 2.0 ซึ่งหมายถึงรองรับการใช้งานเฉพาะ SSH Version 2 ซึ่งมาจากการใช้คำสั่ง "ip ssh version 2" ใน global configuration mode ครับ

          เอาล่ะครับ เรามาเริ่มดูตัวอย่างการตั้งค่ากันเลยดีกว่านะครับ ในขั้นตอนแรกนี้ก็จะเป็นการตั้งชื่อ hostname และ ip domain-name ของอุปกรณ์ครับ ซึ่งทั้งสองสิ่งนี้จะเป็นสิ่งที่จำเป็นสำหรับการสร้าง RSA Keys ครับ

ตัวอย่าง
Router(config)#hostname Running-config
Running-config(config)#ip domain-name blogspot.com

          จากนั้นในขั้นตอนต่อมาจะเป็นการตั้งค่าที่เกี่ยวกับ AAA ครับ และสำหรับเพื่อน ๆ ที่ยังไม่ทราบว่า AAA คืออะไร ก็ขอให้ติดตามบทความ : ทำความรู้จักกับ AAA model กันก่อนนะครับ

ตัวอย่าง
Running-config(config)#aaa new-model
Running-config(config)#aaa authentication login default local-case
Running-config(config)#aaa authorization exec default local
Running-config(config)#username admin privilege 15 secret *****

          จากตัวอย่างด้านบน เป็นการตั้งค่าการเปิดใช้งาน aaa model โดยกำหนดให้ใช้การพิสูจน์ตัวตน และการกำหนดสิทธิการใช้งาน โดยดูข้อมูลผู้ใช้จากบนตัวอุปกรณ์ (local) ครับ ซึ่งเราจะต้องทำการกำหนด username เข้าไปในตัวอุปกรณ์ ด้วยการใช้คำสั่ง username ตามตัวอย่างด้านบนครับ

          จากนั้นจะเป็นการสร้าง RSA Keys เพื่อนำมาใช้สำหรับการเข้ารหัสข้อมูลที่รับ-ส่งกันใน SSH session ครับ แต่ก่อนที่จะทำการสร้าง เพื่อไม่ให้เกิดความซ้ำซ้อน ก็ขอแนะนำให้ใช้คำสั่ง "crypto key zeroize rsa" เพื่อลบค่า RSA Keys อันเก่า ๆ ออกไปก่อนครับ จากนั้นจึงค่อยทำการสร้าง RSA Keys อันใหม่ขึ้นมาครับผม

ตัวอย่าง
Running-config(config)#crypto key zeroize rsa
% All RSA keys will be removed.
% All router certs issued using these keys will also be removed.
Do you really want to remove these keys? [yes/no]: yes

*Mar  1 03:19:11.539: %SSH-5-DISABLED: SSH 2.0 has been disabled

          จากตัวอย่างด้านบน เป็นการลบ RSA Keys ออกจากตัวอุปกรณ์ ซึงเมื่อทำการลบ RSA Keys ออกไปแล้ว จะเป็นการ Disbled SSH ไปด้วย โดยจะมี log แสดงขึ้นมาตามตัวอย่างด้านบน จากนั้นเราจึงค่อยทำการสร้าง RSA Keys อันใหม่ขึ้นมาทดแทนครับผม

ตัวอย่าง
Running-config(config)#crypto key generate rsa
The name for the keys will be: Running-config.blogspot.com
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]: 1024
% Generating 1024 bit RSA keys, keys will be non-exportable...[OK]

*Mar  1 03:41:47.555: %SSH-5-ENABLED: SSH 1.99 has been enabled

          จากตัวอย่างด้านบน เป็นการสร้าง RSA Keys ที่มีขนาด 1024 bits โดยเมื่อสร้าง RSA Keys แล้ว ตัวอุปกรณ์จะไปทำการ Enabled SSH ให้โดยอัตโนมัติครับ

          จากนั้นจะเป็นการตั้งค่า SSH version ซึ่งโดย default อุปกรณ์จะอนุญาตให้เชื่อมต่อมาได้ทั้ง version 1 และ version 2 แต่เราสามารถกำหนดให้ใช้แต่ version ใด version หนึ่งได้ครับ และจากนั้นจะเป็นการปรับตั้งค่า Timeout, การกำหนดจำนวนครั้งที่อนุญาตในการพิสูจน์ตัวตน ซึ่งการตั้งค่าในส่วนนี้จริง ๆ แล้วก็ไม่จำเป็นที่จะต้องทำการตั้งค่าก็ได้ครับ เนื่องจากโดย default ก็จะมีการตั้งค่านี้มาแล้ว (Authentication timeout: 120 secs; Authentication retries: 3)

ตัวอย่าง
Running-config(config)#ip ssh version 2
Running-config(config)#ip ssh time-out 60
Running-config(config)#ip ssh authentication-retries 5

          เพียงเท่านี้ก็จะสามารถใช้งาน SSH เพื่อเข้าสู่หน้า CLI ของอุปกรณ์ของเราได้แล้วครับ ซึ่งโดย default แล้ว โปรโตคอลที่อนุญาตให้ใช้งานผ่าน line vty จะมีดังนี้ครับ lat, pad, telnet, rlogin, lapb-ta, mop, v120, ssh ซึ่งถ้าเราต้องการที่จะอนุญาตให้เข้าใช้งานเฉพาะ SSH ก็สามารถทำได้ ด้วยการใช้คำสั่ง "transport input ssh" ใน line vty ครับ

ตัวอย่าง
Running-config(config)#line vty 0 4
Running-config(config-line)#transport input ssh

          เพียงเท่านี้ ก็จะเป็นการกำหนดให้ใช้งานเฉพาะโปรโตคอล SSH เท่านั้น ในการเชื่อมต่อสู่ line vty ซึ่งในส่วนนี้ ถ้าหากต้องการอนุญาตเฉพาะ SSH กับ Telnet ก็สามารถกำหนดโปรโตคอลดังกล่าวไปด้วย เช่น transport input ssh telnet เป็นต้น

เราสามารถตรวจสอบการทำงานและการตั้งค่าของ ssh และ line vty ได้ด้วยการใช้คำสั่ง ดังนี้ครับ

  • show ssh
  • show ip ssh
  • show crypto key mypubkey rsa
  • show line vty 0

ตัวอย่าง
Running-config#show ssh
Connection Version Mode Encryption  Hmac         State                 Username
0          2.0     IN   aes256-cbc  hmac-sha1    Session started       admin
0          2.0     OUT  aes256-cbc  hmac-sha1    Session started       admin
%No SSHv1 server connections running.

 

Running-config#show ip ssh
SSH Enabled - version 2.0
Authentication timeout: 60 secs; Authentication retries: 5

 

Running-config#show crypto key mypubkey rsa
% Key pair was generated at: 03:41:47 UTC Mar 1 2002
Key name: Running-config.blogspot.com
Usage: General Purpose Key
Key is not exportable.
Key Data:
  30819F30 0D06092A 864886F7 0D010101 05000381 8D003081 89028181 00C8C948
  BF90A643 8D04ED89 311EBF5D 21AC4FA5 98ECDFD5 9436BEEB 6EB3977B BF585E9D
  7C123BD1 B30FD29D 297D35F5 CFC03525 63CDF4C8 8DB92D93 17437870 385E83F9
  1F16FC48 983A2221 1D4A9B55 3C1A31DB 567A4C14 025D721C F9C8D418 B6DB4F90
  E79F04EE F5C5B01E C6EEE6E0 F9B7A293 B8CF300C 48B870F1 10C12114 11020301 0001
% Key pair was generated at: 03:41:48 UTC Mar 1 2002
Key name: Running-config.blogspot.com.server
Usage: Encryption Key
Key is not exportable.
Key Data:
  307C300D 06092A86 4886F70D 01010105 00036B00 30680261 00CB3891 BB086928
  1F875B8F 62C7A149 0669B90B 795C36FC 2DB6B29B 01CBD7F4 856A24F2 7B56AC5A
  B193ADD0 9FF52063 74243CE4 73017006 CDF79DCA 9746E421 D8B0E75B 3A28DF34
  F7FFE7EB 03A76FEB 7CF193FC 74599851 A9596405 15FBEF56 6F020301 0001

 

Running-config#show line vty 0
   Tty Typ     Tx/Rx    A Modem  Roty AccO AccI   Uses   Noise  Overruns   Int
*    98 VTY              -    -      -    -    -      7       0     0/0       -

Line 98, Location: "", Type: "vt100"
Length: 49 lines, Width: 132 columns
Baud rate (TX/RX) is 9600/9600
Status: PSI Enabled, Ready, Active, No Exit Banner, Automore On
  Notify Process
Capabilities: none
Modem state: Ready
Group codes:    0
Special Chars: Escape  Hold  Stop  Start  Disconnect  Activation
                ^^x    none   -     -       none        
Timeouts:      Idle EXEC    Idle Session   Modem Answer  Session   Dispatch
               00:10:00        never                        none     not set
                            Idle Session Disconnect Warning
                              never
                            Login-sequence User Response
                             00:00:30
                            Autoselect Initial Wait
                              not set
Modem type is unknown.
Session limit is not set.
Time since activation: 00:17:22
Editing is enabled.
History is enabled, history size is 20.
DNS resolution in show commands is enabled
Full user help is disabled
Allowed input transports are ssh.
Allowed output transports are lat pad telnet rlogin lapb-ta mop v120 ssh.
Preferred transport is lat.
No output characters are padded
No special data dispatching characters

          โดยเพื่อน ๆ สามารถทำการสร้าง SSH Session จากอุปกรณ์ Cisco ตัวอื่น ๆ (ที่รองรับ SSH) มายัง SSH Server ที่ได้สร้างไว้นี้ ด้วยการใช้คำสั่ง "ssh -l <username> -v <1|2> <ip address>" ใน Privilage Mode ครับ

ตัวอย่าง
Router#ssh -l admin -v 2 11.0.0.1

Password:

Running-config#

No comments:

Post a Comment