Tuesday, January 21, 2025

[Cisco]  SSH trên Cisco IOS

-

Trong bài viết trước, chúng ta đã cùng nhau trao đổi về các thao tác với hoạt động Telnet  trên Cisco IOS. Trong bài viết tuần này, chúng ta sẽ cùng tiếp tục với kỹ thuật truy nhập  từ xa SSH của Cisco IOS. 

Như chúng ta đã biết, Telnet đem lại một cơ chế tiện lợi giúp chúng ta có thể cấu hình  được thiết bị từ xa và thao tác cũng đơn giản, dễ sử dụng. Tuy nhiên, nhược điểm chính  của Telnet là dữ liệu được trao đổi ở dạng clear text, điều này dẫn đến các thông tin trao  đổi qua Telnet có thể bị đọc trộm bởi bên thứ 3. 

Một giải pháp truy nhập từ xa có tính bảo mật cao thường được dùng để thay thế Telnet  trên môi trường mạng không an toàn (ví dụ: Internet) là sử dụng giao thức SSH. SSH  cung cấp một phương thức truy nhập từ xa để cấu hình thiết bị tương tự như Telnet  nhưng thực hiện mã hóa toàn bộ dữ liệu trao đổi giữa SSH client và SSH server. SSH là  một ứng dụng chạy trên nền TCP, sử dụng port 22. 

Bài viết này cùng trao đổi cách thức cấu hình Router Cisco thành một SSH Server để có  thể truy nhập từ xa đến Router bằng SSH. Như thường lệ, chúng ta cùng tìm hiểu vấn đề cần khảo sát thông qua một bài lab ví dụ.

Sơ đồ

Hình 1 – Sơ đồ bài lab ví dụ.

Mô tả 

  • Trên sơ đồ hình 1, trước hết chúng ta cấu hình cơ bản các địa chỉ và chạy định  tuyến để đảm bảo mọi địa chỉ IP trên sơ đồ thấy nhau. Khi các IP đều đã đi đến  nhau được, chúng ta sẽ khảo sát việc telnet qua lại giữa các IP này. 
  • Người viết sử dụng các router Cisco dòng 2811với hệ điều hành là “c2800nm adventerprisek9-mz.124-15.T1.bin” để thực hiện bài viết này.

Thực hiện 

Bước 1: Cấu hình cơ bản 

Trong bước này, ta đặt địa chỉ IP trên các router cũng như cấu hình định tuyến cơ bản để  mọi địa chỉ thấy nhau. 

Trên R1:

R1(config)#interface f0/1 
R1(config-if)#no shutdown 
R1(config-if)#ip address 192.168.12.1 255.255.255.0 
R1(config-if)#exit 
R1(config)#interface f0/0 
R1(config-if)#no shutdown 
R1(config-if)#ip address 192.168.1.1 255.255.255.0 
R1(config-if)#exit 
R1(config)#exit

Trên R2:

R2(config)#interface f0/1 
R2(config-if)#no shutdown 
R2(config-if)#ip address 192.168.12.2 255.255.255.0 
R2(config-if)#exit 
R2(config)#ip route 0.0.0.0 0.0.0.0 192.168.12.1

Tiếp theo, ta thực hiện đặt IP cho PC là 192.168.2.1/24 và chỉ default – gateway về router  R1(hình 2):

Hình 2 – Cấu hình IP trên PC.

Đến đây, mọi địa chỉ đã được cấu hình trên các interface theo quy hoạch IP trên hình 1.  Router R2 và PC đều đã chỉ default – gateway về R1 và vì vậy mọi địa chỉ trên các thiết  bị này đã có thể đi đến nhau được. 

Tiếp theo, ta kiểm tra rằng mọi địa chỉ trên sơ đồ đã thấy được nhau. 

Từ PC ping kiểm tra đến R1 (hình 3):

Hình 3 – PC ping kiểm tra R1.

Từ PC ping kiểm tra đến R2 (hình 4):

Hình 4 – PC ping kiểm tra R2.

R1 ping đi được đến mọi địa chỉ khác trên sơ đồ:

R1#ping 192.168.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/30/52 ms
R1#ping 192.168.12.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/46/96 ms

R2 ping được mọi địa chỉ khác trên sơ đồ:

R2#ping 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/41/56 ms
R2#ping 192.168.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/91/112 ms
R2#ping 192.168.12.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/35/52 ms

Bước 2: Cấu hình SSH trên router 

Các bước cấu hình SSH Server trên Router: 

1. Cấu hình đặt cho Router một Domain – name:

Router(config)#ip domain-name domain_name

2. Cấu hình tài khoản truy nhập bằng SSH:

Router(config)#username user_name password password

3. Cấu hình Router phát sinh key cho việc mã hóa dữ liệu:

Router(config)#crypto key generate rsa

4. Thiết lập line vty hỗ trợ truy nhập bằng SSH:

Router(config)#line vty 0 4 
Router(config-line)#transport input ssh 
Router(config-line)#login local

Ta thực hiện cấu hình SSH Server trên R1:

R1(config)#ip domain-name example.com 
R1(config)#username cisco password cisco 
R1(config)#crypto key generate rsa 
The name for the keys will be: R1.example.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]: 512 
% Generating 512 bit RSA keys, keys will be non-exportable...[OK] 
*Feb 20 08:11:52.703: %SSH-5-ENABLED: SSH 1.99 has been enabled 
R1(config)#line vty 0 4 
R1(config-line)#transport input ssh 
R1(config-line)#login local 
R1(config-line)#exit 
R1(config)#

Ta đã thực hiện các tác vụ như sau trên R1: 

  • Đầu tiên, ta đặt domain – name cho R1 là “example.com”. Tên miền này chỉ định  một miền quản lý mà Router R1 thuộc về. Trong trường hợp này tên miền sẽ được  sử dụng trong tiến trình phát sinh key cho việc mã hóa ở bước 3. 
  • Tiếp theo, ta khai báo một tài khoản cho việc SSH vào R1, tài khoản này có  username là “cisco” và password là “cisco”. 
  • Ở bước 3, ta cấu hình phát sinh key cho việc mã hóa dữ liệu SSH, các key này  được phát sinh theo thuật toán RSA. Trong quá trình phát sinh key, Router sẽ hỏi  chúng ta sử dụng key bao nhiêu bit “How many bits in the modulus [512]:”.  Chúng ta có thể chọn giá trị mặc định (512) bằng cách gõ Enter, hoặc nhập vào  một giá trị chúng ta chọn, giá trị này càng cao, hoạt động mã hóa càng an toàn.∙ Cuối cùng, chúng ta vào cổng VTY chuyển cổng từ chế độ mặc định là Telnet  sang chế độ cho phép truy nhập bằng SSH (lệnh “transport input ssh”). Hình  thức xác thực truy nhập cũng được thay đổi từ chỉ cần khai báo password trên line  sang yêu cầu phải khai báo đầy đủ username và password (lệnh “login local”). 

Bước 3: Kiểm tra 

Sau khi cấu hình xong, ta thử SSH vào R1 từ PC và R2: 

SSH từ PC 

Trên các hệ điều hành Window không tích hợp sẵn chương trình SSH Client nên ta phải  sử dụng chương trình riêng để thực hiện SSH. Một chương trình đơn giản thường được  sử dụng cho mục đích này là chương trình PuTTY. Ta có thể download miễn phí chương  trình này từ trang http://www.putty.org/. PuTTY được chạy trực tiếp luôn mà không cần  phải cài đặt trên Window. 

Giao diện của chương trình PuTTY (hình 5): 

Hình 5 – Giao diện chương trình PuTTY.

Trong ô Host Name (or IP address) (hình 5), ta nhập địa chỉ IP của thiết bị mà ta muốn  SSH đến, trong bài lab này là địa chỉ của R1: 192.168.1.1. Sau khi nhập xong, chúng ta  nhấn “Open” (hình 5), cửa sổ SSH mở ra (hình 6):

Hình 6 – Cửa sổ SSH.

Tại đây, chúng ta được yêu cầu nhập username (Login as:), tiếp theo là Password. Sau  khi nhập đúng thông tin tài khoản, chúng ta có thể truy nhập vào Router và thực hiện cấu  hình cho Router như bình thường.  

Sau khi thực hiện xong các tác vụ cấu hình, chúng ta có thể đóng SSH bằng cách sử dụng  lệnh “exit” 

SSH từ R2 

Cisco IOS có tích hợp sẵn SSH Client nên ta có thể từ một Router SSH sang một Router  đã cấu hình SSH. Câu lệnh thực hiện SSH:

Router#ssh -l username remote_IP 
Password: <- Nhập password SSH tại đây

Thực hiện trên R2:

R2#ssh -l cisco 192.168.12.1  
Password: <- Nhập password SSH tại đây 
R1>

Từ đây ta có thể thực hiện các tác vụ cấu hình trên R1 từ R2 thông quá SSH. Sau khi cấu  hình xong, ta có thể sử dụng lệnh “exit” để giải phóng kết nối SSH và trở về R2 (ta có thể  sử dụng tổ hợp phím “Ctrl – Shift – 6” + “X” để từ R1 trở về R2 mà vẫn giữ kết nối). 

Kiểm tra rằng dữ liệu SSH được mã hóa khi truyền 

Trong phần này, chúng ta sẽ cùng thử bắt gói trong các session Telnet và SSH để kiểm  chứng rằng dữ liệu của SSH thì được mã hóa, còn của Telnet thì không. Việc bắt gói  được thực hiện trên PC khi PC Telnet vào R1 và khi PC SSH vào R1. Phần mềm bắt gói  được sử dụng là một phần mềm rất thông dụng có tên là Wireshark. Ta có thể download  miễn phí phần mềm này từ địa chỉ http://www.wireshark.org/download.html và thực hiện  cài đặt bình thường trên Window. Một lưu ý nhỏ: trong quá trình cài đặt, nếu máy tính  của chúng ta chưa cài WinPcap thì hãy click chọn cài đặt module này khi giao diện cài  đặt hỏi ý kiến của chúng ta về các tùy chọn cài đặt. 

Giao diện của chương trình Wireshark (hình 7):

Hình 7 – Giao diện chương trình Wireshark.

Để kích hoạt bắt gói, chúng ta click vào biểu tượng “Capture Interfaces” ở góc trên bên trái màn hình (xem hình 7). Sau khi chọn biểu tượng này, cửa sổ sau đây hiện ra (hình 8):

Hình 8 – Wireshark: Capture Interfaces.

Ta chọn “Start” để bắt đầu bắt gói cho card mạng của PC (hình 8).
Tiếp theo, ta sửa lại cấu hình của Router R1 để cho phép các line vty của R1 vừa thực hiện được Telnet, vừa thực hiện được SSH:

Ta chọn “Start” để bắt đầu bắt gói cho card mạng của PC (hình 8).
Tiếp theo, ta sửa lại cấu hình của Router R1 để cho phép các line vty của R1 vừa thực
hiện được Telnet, vừa thực hiện được SSH:

Từ PC, chúng ta Telnet vào R1, thực hiện một vài thao tác cấu hình (hình 9):

Hình 9 – Cửa sổ telnet vào R1.

Bây giờ, chúng ta cùng quan sát kết quả bắt gói trên Wireshark, chúng ta chọn một gói Telnet bất kỳ trên màn hình thống kê của Wireshark, click vào dòng hiển thị để dòng hiển thị chuyển qua màu xanh (hình 10):

Hình 10 – Cửa sổ bắt gói của Wireshark.

Tiếp theo, trong phần Menu, ta chọn “Analyze -> Follow TCP Stream” (hình 11):

Hình 11 – Menu phân tích gói.

Kết quả bắt gói cho luồng dữ liệu Telnet hiện ra (hình 12):

Hình 12 – Kết quả bắt gói luồng dữ liệu Telnet.

Từ kết quả bắt gói, ta thấy rằng toàn bộ dữ liệu Telnet đều được phơi ra dưới dạng clear – text, kể cả các password! Điều này cho thấy mức độ bảo mật của Telnet rất kém. 

Ta tiếp tục tiến hành bắt gói tương tự nhưng cho kết nối SSH từ PC lên Router R1: 

Trước hết, ta đóng cửa sổ kết quả bắt gói của Wireshark lại (nhấn “Close”), tiếp theo ta  mở lại việc bắt gói cho kết nối mới trên Wireshark bằng cách chọn lại biểu tượng góc  trên bên trái màn hình (xem hình 7). Khi cửa sổ như hình 8 hiện ra, ta chọn “Stop” rồi  “Start” lại việc bắt gói trên cổng mạng của PC. Một cửa sổ hiện ra hỏi chúng ta có lưu kết  quả bắt gói lần trước lại không, chúng ta chọn “Continue without Saving” (hình 13):

Hình 13 – Có lưu lại kết quả hay không?

Sau khi chọn xong, ta nhấn “Clear” để tiến trình bắt gói bắt đầu lại (hình 14):

Hình 14 – Chọn “Clear” để bắt đầu lại tiến trình bắt gói.

Tiếp theo, từ PC, ta mở kết nối SSH lên R1 bằng cách sử dụng PuTTY như đã thực hiện ơ trên (hình 15):

Hình 15 – SSH vào R1.

Ta cũng thực hiện chọn một gói SSH bất kỳ trên cửa sổ Wireshark, chọn “Analyze -> Follow TCP Stream” như đã làm ở trên và quan sát kết quả bắt gói cho kết nối SSH (hình 16):

Hình 16 – Kết quả bắt gói SSH.

Từ kết quả bắt gói SSH ta thấy, toàn bộ dữ liệu SSH đã được mã hóa. 

Cùng phục vụ chung một mục đích là giúp người dùng truy nhập từ xa nhưng SSH có  tính bảo mật cao hơn hẳn Telnet do có cơ chế mã hóa toàn bộ dữ liệu trao đổi. Vì vậy,  trong môi trường mạng doanh nghiệp ngày nay, SSH được khuyến nghị sử dụng cho việc  truy nhập thiết bị từ xa, đặc biệt khi phải thực hiện truy nhập qua môi trường Internet – một môi trường có nhiều nguy cơ và không an toàn. 

Cảm ơn các bạn! 

Hẹn gặp lại các bạn trong các bài viết tiếp theo!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories