SSH tên đầy đủ là Secure SHell là một giao thức mạng mang tính bảo mật, cung cấp cách thức truy cập từ xa vào một thiết bị khác một cách an toàn thông qua các cơ chế mã hóa. Bằng cách sử dụng một số kỹ thuật mã hóa, xác thực mỗi bên với nhau để đảm bảo dữ liệu trao đổi giữa các máy trong phiên làm việc được mã hóa và giải mã nhằm mục đích giữ vững tính toàn vẹn của dữ liệu và bảo vệ an ninh thông tin.
SSH hoạt động theo mô hình client-server để xác thực hai bên và mã hóa dữ liệu giữa chúng. Client sẽ là thành phần tạo phiên kết nối SSH đến thành phần khác, còn Server sẽ cho phép Client mở phiên SSH kết nối vào chính mình.
Để làm được điều này Server sẽ lắng nghe trên một port được chỉ định cho SSH, mặc định là port 22. Mỗi kết nối SSH bao gồm hai việc xác thực: xác thực SSH Server và xác thực SSH Client. Client chịu trách nhiệm khởi tạo quá trình bắt tay TCP với Server, thương lượng kết nối an toàn, xác thực Server và cung cấp thông tin đăng nhập để Server xác thực mình. Còn Server có trách nhiệm thương lượng kết nối an toàn, xác thực bên Client và sinh ra phiên làm việc nếu thông tin đăng nhập được chấp nhận. SSH Client và SSH Server thương lượng với nhau để xác định cơ chế xác thực sẽ sử dụng thậm chí có thể yêu cầu nhiều kiểu xác thực để thiết lập kết nối an toàn trong quá tình trao đổi dữ liệu giữa chúng.
Bước 1.Khi Client khởi tạo 1 kết nối TCP tới port 22 ở Server, sẽ có 2 thông tin được trao đổi:
Nếu phiên bản Protocol của Server phù hợp với Client thì kết nối mới được tiếp tục. Ngay sau khi Client tiếp tục kết nối, Server và Client sẽ chuyển sang sử dụng bộ giao thức Binary Packet Protocol dài 32 bit.
Bước 2. Server sẽ gửi các thông tin quan trọng tới Client, đây là những thông tin nắm vai trò chính trong session hiện tại:
Dựa vào danh sách các phương thức mã hóa mà Server hỗ trợ, Client tạo ra 1 Symmetric Key ngẫu nhiên và gửi cho Server. Key này sẽ được sử dụng để mã hóa và giải mã trong toàn bộ quá trình giao tiếp giữa 2 bên trong session hiện tại, đây còn được gọi là Session Key. Session Key sẽ được mã hóa kép, mã hóa đầu tiên dựa vào RSA Public Key và mã hóa thứ 2 dựa vào Server Key. Việc mã hóa kép đảm bảo cho dù RSA Public Key có bị lộ thì cũng không thể giải mã gói tin do còn 1 lớp mã hóa bằng Session Key được thay đổi theo thời gian.
Cho đến lúc này Client vẫn chưa thể xác thực được Server, nó chỉ biết được định danh của Server dựa vào RSA Public Key. Để xác thực Server thì Client phải chắc chắn Server có khả năng giải mã được Session Key. Bởi vậy sau khi gửi Session Key xong Client sẽ chờ hồi âm từ phía Server. Nếu nhận được thông báo xác nhận Client đã sẵn sàng để xác thực được Server thì quá trình này hoàn tất.
Bước 3. Server xác thực Client: có nhiều phương pháp, trong đó có 2 phương pháp phổ biến nhất:
Lúc này, Client sẽ gửi cho Server 1 yêu cầu chứng thực Public Key và các chi tiết về thuận toán mã hóa nó sử dụng, Server lấy Public Key ứng với Client đang yêu cầu để mã hóa 1 chuỗi 256 bit ngẫu nhiên rồi gửi cho Client. Client nhận chuỗi này, sử dụng Private Key của mình để giải mã, sau khi giải mã, Client dùng kết quả kết hợp với Session Key ở bước 2 để tạo 1 đoạn hash rồi gửi trả lại cho Server. Sau khi Server nhận được đoạn hash, nó sẽ dùng chuỗi 256 bit ban đầu nó tạo ra kết hợp với Session Key để tạo ra 1 đoạn hash và đem so sánh với đoạn nó nhận được, Nếu 2 đoạn hash khớp nhau thì quá trình Server chứng thực Client thành công.
Kể từ giờ kết nối SSH đã sẵn sàng, Client và Server cũng đã có thể gửi các gói tin cho nhau
Tuy nhiên SSH version 1 rất hạn chế trong việc hỗ trợ sử dụng nhiều thuật toán để trao đổi Session Key, Message Authentication Code (MAC), thuật toán nén. Còn đối với SSH version 2 chẵng những cung cấp nhiều lựa chọn cho Client để sử dụng các thuật toán trao đổi Key mà còn có không gian để có thể thêm thuật toán tùy chỉnh riêng của người sử dụng.
Trong hoạt động của SSH version 1, sau khi chọn một thuật toán trong danh sách từ Server hỗ trợ, Client tạo 1 Session Key, mã hóa kép và gửi đến Server, mã hóa lần đầu bởi Public Key, mã hóa lần 2 bởi Server Key. Trong SSH version 2, không có khái niệm Server Key. Thay vào đó, Server cung cấp thêm danh sách các phương thức trao đổi khóa mà nó hỗ trợ, từ đó Client chọn một phương thức. SSH version 2 hoạt động dựa trên phương thức diffie-hellman-group1-sha1 và diffie-hellman-group14-sha1 để trao đổi khóa.
Sự thay đổi thứ hai trong SSH version 2 là một khái niệm gọi là cơ quan cấp chứng chỉ (Certificate Authority - CA), CA sẽ ký vào Public Key được sử dụng trong giao tiếp giữa Client và Server.
Message Authentication Code được sử dụng trong bất kỳ giao tiếp bảo mật nào để xác minh tính toàn vẹn của dữ liệu. Ngay cả phiên bản SSH 1 cũng sử dụng Message Authentication Code được gọi là CRC-32. CRC mặc dù kiểm tra sự thay đổi trong dữ liệu, nhưng không được coi là tốt nhất. SSH version 2 sử dụng Message Authentication Code nâng cao. Một số Message Authentication Code SSH version 2 hỗ trợ như: hmac-md5; hmac-sha1; Hmac-ripemd160
Rekeying Session Key: Trong SSH version 1, chỉ có một Session Key được sử dụng cho toàn bộ session làm việc của SSH. Trong SSH version 2 có bổ sung tính năng Rekeying Session Key cho phép thay đổi Session Key mà không làm mất session làm việc hiện tại.
SSH được sử dụng rất nhiều trong các ứng dụng và được cài đặt, tích hợp vào nhiều hệ thống, hệ điều hành, trên Cisco IOS cũng vậy, nhưng chỉ những phiên bản IOS có kí tự k9 với version từ 12.1 trở về sau thì mới hỗ trợ SSH, đối với IOS phiên bản 12.2 trở về trước thì chỉ hỗ trợ SSH version 1, còn những phiên bản từ 12.3 trở lên sẽ hỗ trợ cả SSH version 2. Có thể dùng lệnh “show version” để xem phiên bản IOS. Ví dụ 1 phiên bản IOS có hỗ trợ SSH: c2800nm-adventerprisek9-mz.124-24.T8.bin. SSH được tích hợp vào Cisco IOS cho phép thiết bị vừa có thể thực hiện SSH đến 1 SSH Server khác vừa có thể làm 1 SSH Server để 1 Client khác kết nối vào. Ngoài ra còn có thể sử dụng kết hợp chứng thực SSH Client thông qua cặp username/password cục bộ hoặc thông qua 1 RADIUS Server hoặc TACACS+ Server.
Các bước để cấu hình SSH trên thiết bị Cisco sử dụng Password Authentication
1. Cấu hình Host name
R1(config)#hostname Router |
tạo cặp username/password cho thiết bị
Router(config)#username cisco password vnpro |
Sau khi cấu hình host name, cần cấu hình lệnh
Router(config)#aaa new-model |
để bật tính năng xác thực bằng cặp username và password trên thiết bị, hoặc có thể thay thế bằng lệnh
Router(config)#line vty 0 4 Router(config-line)#login local |
trong cổng vty
2. Cấu hình domain name cho thiết bị
Router(config)#ip domain-name vnpro.org |
Thiết bị sẽ dùng domain name này để tạo SSH Key
3. Tạo SSH Key để sử dụng
Router(config)#crypto key generate rsa |
sẽ tạo ra 1 Key, nhưng do không chỉ rõ chiều dài của Key nên lúc này thiết bị sẽ hỏi chiều dài của Key muốn tạo, mặc định Cisco IOS sẽ tạo ra 1 Key có chiều dài 512 bit, nếu muốn sử dụng SSH version 2 thì chiều dài của Key phải từ 768 bit trở lên, nếu cấu hình chỉ định rõ chiều dài của Key trong câu lệnh thì
Router(config)#crypto key generate rsa general-keys modulus integer |
Lệnh “Router(config)#crypto key generate rsa”ngoài tạo ra 1 Key còn có tác dụng bật giao thức SSH trên thiết bị.
Có thể kiểm tra Key bằng lệnh
Router#show crypto key mypubkey rsa |
Ngoài ra còn có một số thông số đi kèm như thời gian kết thúc session SSH mặc định 120 giây, số lần nhập sai username/password 3 lần thì phải khởi tạo lại 1 session SSH mới. Có thể hiệu chỉnh các thông số này bằng lệnh
Router(config)#ip ssh {[timeout seconds] | [authentication-retries integer]} |
Bật phương thức truy cập SSH trên cổng vty
Mặc định phương thức truy cập ở cổng vty là Telnet, nếu muốn sử dụng SSH cần cấu hình phương thức truy cập ở cổng vty thành SSH
Router(config-line)#transport input ssh |
Kiểm tra Version SSH hiện tại bằng lệnh
Router#show ip ssh |
Kiểm tra trạng thái các session SSH hiện tại
Router#show ssh |
Kiểm tra tiến trình hoạt động của SSH
Debug ip ssh |