SSH là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo mật an toàn giúp mã hóa những thông tin quan trọng trên trường truyền giữa server và client. Tên trong tiếng anh là Secure Shell. Hiểu một cách đơn giản nó là chương trình giúp bạn mã hóa thông tin khi truy cập vào VPS/Server của bạn để không bị lấy cắp thông tin và hack server. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP. Các công cụ SSH cung cấp cho người dùng cách thức để thiết lập kết nối mạng được mã hóa để tạo một kênh kết nối riêng tư. Hơn nữa tính năng tunneling của các công cụ này cho phép chuyển tải các giao vận theo các giao thức khác. Do vậy có thể thấy khi xây dựng một hệ thống mạng dựa trên SSH, chúng ta sẽ có một hệ thống mạng riêng ảo VPN đơn giản. Do đó, để tránh bị lấy cắp thôg tin khi kết nối tới Server, VPS của bạn thì chúng ta sẽ sử dụng những phần mềm kết nối tới VPS/Server sử dụng giao thức SSH. Các chương trình trước đây: Telnet, rlogin không sử dụng phương pháp mã hóa cho nên bất kỳ ai cũng có thể nghe trộm thậm chí đọc được toàn bộ nội dung của phiên làm việc bằng cách sử dụng một số công cụ đơn giản. Sử dụng SSH là biện pháp hữu hiệu bảo mật dữ liệu trên đường truyền từ hệ thống này đến hệ thống khác. Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hóa nó. Khi dữ liệu được nhận vào, SSH tự động giải mã nó. Kết quả là việc mã hóa được thực hiện trong suốt: Người dùng có thể làm việc bình thường, không biết rằng việc truyền thông của họ đã được mã hóa an toàn trên mạng. Cách thức làm việc của SSH SSH làm việc thông qua 3 bước đơn giản: Định danh host - xác định định danh của hệ thống tham gia phiên làm việc SSH. Mã hóa - thiết lập kênh làm việc mã hóa. Chứng thực - xác thực người sử dụng có quyền đăng nhập hệ thống. Một SSH thường có dạng như sau: IP / Host User Pass. Ví dụ: 192.168.123.255 Admin Admin hoặc abc.com Root Root Định danh host Việc định danh host được thực hiện qua việc trao đổi khóa. Mỗi máy tính có hỗ trợ kiểu truyền thông SSH có một khóa định danh duy nhất. Khóa này gồm hai thành phần: Khóa riêng và khóa công cộng. Khóa công cộng được sử dụng khi cần trao đổi giữa các máy chủ với nhau trong phiên làm việc SSH, dữ liệu sẽ được mã hóa bằng khóa công khai và chỉ có thể giải mã bằng khóa riêng. Khi có sự thay đổi về cấu hình trên máy chủ: Thay đổi chương trình SSH, thay đổi cơ bản trong hệ điều hành, khóa định danh cũng sẽ thay đổi. Khi đó mọi người sử dụng SSH để đăng nhập vào máy chủ này đều được cảnh báo về sự thay đổi này. Khi hai hệ thống bắt đầu một phiên làm việc SSH, máy chủ sẽ gửi khóa công cộng của nó cho máy khách. Máy khách sinh ra một khóa phiên ngẫu nhiên và mã hóa khóa này bằng khóa công cộng của máy chủ, sau đó gửi lại cho máy chủ. Máy chủ sẽ giải mã khóa phiên này bằng khóa riêng của mình và nhận được khóa phiên. Khóa phiên này sẽ là khóa sử dụng để trao đổi dữ liệu giữa hai máy. Quá trình này được xem như các bước nhận diện máy chủ và máy khách. Mã hóa Sau khi hoàn tất việc thiết lập phiên làm việc bảo mật (trao đổi khóa, định danh), quá trình trao đổi dữ liệu diễn ra thông qua một bước trung gian đó là mã hóa/giải mã. Điều đó có nghĩa là dữ liệu gửi/nhận trên đường truyền đều được mã hóa và giải mã theo cơ chế đã thỏa thuận trước giữa máy chủ và máy khách. Việc lựa chọn cơ chế mã hóa thường do máy khách quyết định. Các cơ chế mã hóa thường được chọn bao gồm: 3DES, IDEA, và Blowfish. Khi cơ chế mã hóa được lựa chọn, máy chủ và máy khách trao đổi khóa mã hóa cho nhau. Việc trao đổi này cũng được bảo mật dựa trên đinh danh bí mật của các máy. Kẻ tấn công khó có thể nghe trộm thông tin trao đổi trên đường truyền vì không biết được khóa mã hóa. Các thuật toán mã hóa khác nhau và các ưu, nhược điểm của từng loại: 3DES hay còn được biết như Triple-DES - phương pháp mã hóa mặc định cho SSH. IDEA - Nhanh hơn 3DES, nhưng chậm hơn Arcfour và Blowfish. Arcfour - Nhanh, nhưng các vấn đề bảo mật đã được phát hiện. Blowfish - Nhanh và bảo mật, nhưng các phương pháp mã hóa đang được cải tiến. Chứng thực Việc chứng thực là bước cuối cùng trong ba bước, và là bước đa dạng nhất. Tại thời điểm này, kênh trao đổi bản thân nó đã được bảo mật. Mỗi định danh và truy nhập của người sử dụng có thể được cung cấp theo rất nhiều cách khác nhau. Chẳng hạn, kiểu chứng thực rhosts có thể được sử dụng, nhưng không phải là mặc định; nó đơn giản chỉ kiểm tra định danh của máy khách được liệt kê trong file rhost (theo DNS và địa chỉ IP). Việc chứng thực mật khẩu là một cách rất thông dụng để định danh người sử dụng, nhưng ngoài ra cũng có các cách khác: Chứng thực RSA, sử dụng ssh-keygen và ssh-agent để chứng thực các cặp khóa. Hướng dẫn sử dụng SSH:
Hướng dẫn cấu hình cho dịch vụ SSH. 1. Cấu hình chỉ cho shh bằng key Việc truy cập ssh bằng mật khẩu rất nguy hiểm, nên đôi khi người quản trị chỉ muốn cho phép ssh bằng key. Để làm việc này cần mở file /etc/ssh/sshd_config hãy đảm bảo rằng có 2 dòng sau PubKeyAuthentication yes AuthorizedkeysFile .ssh/authorized_keys Sau đó tìm dòng: PasswordAuthentication yes Và đổi yes thành no. Sau đó restart lại dịch vụ /etc/init.d/ssh restart Chú ý: nên để = yes, sau khi cấu hình SSH public key và private key thành công thì chuyển lại về thành = no 2. Cấu hình chỉ cho phép một số người dùng được quyền ssh Vì lí do bảo mật bạn có thể không cho user root có quyền ssh bằng cách mở file /etc/ssh/sshd_config tìm dòng sau và đổi yes thành no. PermitRootLogin yes Nếu muốn cho user bất kì nào đó có quyền ssh thì chỉ cần thêm 1 dòng AllowUsers user1 user2 Sau đó restart lại dịch vụ /etc/init.d/ssh restart 3. Cấu hình thay đổi port SSH Mặc định SSH sử dụng cổng 22 để kết nối, các hacker có thể lợi dụng điều này để tấn công vào server. Vì thế khách hàng có thể bảo mật server của mình hơn bằng cách thay đổi port ssh. Mở file /etc/ssh/sshd_config và tìm dòng có ghi: Port 22 Thay đổi số cổng và khởi động lại dịch vụ SSH bằng lệnh: /etc/init.d/ssh restart 4. Cấu hình chỉ cho phép kết nối ssh từ một số host nhất định. Danh sách các host bị cấm ssh được lưu trong file /etc/host.deny. Giả sử chúng ta có file /etc/host.deny có nội dung như sau: sshd: ALL Và file /etc/host.allow sshd: 192.168.1.2 Chỉ có host 192.168.1.2 mới có quyền truy cập ssh còn các host còn lại sẽ bị cấm truy cập.
Hướng dẫn sử dụng SSH Key Một trong các phương thức đăng nhập vào VPS khá an toàn đó là việc sử dụng SSH Key để thay thế cho mật khẩu. Mặc định mỗi VPS bạn sẽ đăng nhập vào bằng username root và mật khẩu root mà nhà cung cấp đã gửi cho bạn lúc thuê VPS, tuy nhiên việc sử dụng mật khẩu luôn có 2 nguy cơ lớn là: Bạn sẽ mất hoàn toàn nếu lộ mật khẩu. Các attacker có thể sử dụng Brute Force Attack để dò tìm mật khẩu. Do đó, mình khuyến khích các bạn làm quen với SSH Key để đăng nhập vào VPS, cũng như sử dụng nó để xác thực các kết nối từ bên ngoài vào cho an toàn hơn. Cách thức hoạt động của SSH Key SSH Key là một phương thức chứng thực người dùng truy cập bằng cách đối chiếu giữa một key cá nhân - Private Key và key công khai - Public Key. Private key và Public key luôn có liên hệ chặt chẽ với nhau để nó có thể nhận diện lẫn nhau. Mình nói vậy cho bạn dễ hình dung nhé, khi tạo một SSH Key thì bạn sẽ có cả 2 loại key này. Sau đó bạn mang cái public key bỏ lên máy chủ của bạn, còn cái private key bạn sẽ lưu ở máy và khi đăng nhập vào server, bạn sẽ gửi yêu cầu đăng nhập kèm theo cái Private Key này để gửi tín hiệu đến server, server sẽ kiểm tra xem cái Private key của bạn có khớp với Public key có trên server hay không, nếu có thì bạn sẽ đăng nhập được. Nội dung giữa Private Key và Public Key hoàn toàn khác nhau, nhưng nó vẫn sẽ nhận diện được với nhau thông qua một thuật toán riêng của nó. Bạn cứ hình dung Private Key là chìa khóa, còn Public Key là ổ khóa. Một khi chìa khóa mà vừa khít với ổ khóa thì cửa sẽ được mở, thế thôi. Thành phần chính của một SSH Key Khi tạo ra một SSH Key, bạn cần biết sẽ có 3 thành phần quan trọng như sau: Public Key (dạng file và string) – Bạn sẽ copy ký tự key này sẽ bỏ vào file ~/.ssh/authorized_keys trên server của bạn. Private Key (dạng file và string) – Bạn sẽ lưu file này vào máy tính, sau đó sẽ thiết lập cho PuTTY, WinSCP, MobaXterm,..để có thể login. Keypharse (dạng string, cần ghi nhớ) – Mật khẩu để mở private key, khi đăng nhập vào server nó sẽ hỏi cái này. Và một SSH Key bạn có thể sử dụng cho nhiều server khác nhau. I. Cách tạo SSH Key 1.1) Đối với Windows Nếu bạn sử dụng Windows thì sẽ dùng phần mềm PuTTY-Gen để tạo SSH, bạn có thể tải PuTTY-Gen tại đây. Tải xong bạn mở ra, bạn chọn các tùy chọn như trong ảnh dưới rồi ấn Generate. Trong lúc tạo, bạn hãy rê chuột vòng vòng màn hình cho đến khi nó tạo xong. Sau khi tạo xong, bạn sẽ thấy nó hiện ra thế này. Bây giờ hãy đặt keypharse cho nó bằng cách điền keypharse ở trên. Sau đó ấn Save Private Key và lưu nó trên một nơi thật an toàn, tốt nhất nên đưa 1 bản lên Dropbox nếu bạn có sử dụng. Còn cái public key là cái dãy loằng ngoằng ở trên, nó bắt đầu bằng từ khóa ssh-rsa-XXXXXX. Đây sẽ là cái đoạn mà bạn sẽ copy bỏ vào server. Bạn có thể lưu lại vào 1 file text hoặc không cần vì sau này nếu cần lấy public key, bạn chỉ cần ấn nút Load trong phần mềm PuTTYGen rồi mở file private key lên là nó tự hiện ra public key. Đối với Linux (Mac/Ubuntu/LinuxMint,..) Nếu bạn đang sử dụng Linux thì không cần phần mềm mà sẽ sử dụng Terminal để tạo. Hãy mở Terminal lên và gõ: ssh-keygen -t rsa Nó sẽ hỏi bạn muốn lưu private key này vào đâu, mặc định nó sẽ lưu vào /home/user/.ssh. Bạn có thể để trống và Enter. Tiếp tục nó sẽ hỏi bạn có muốn thiết lập keypharse không, nếu muốn thì nhập keypharse cần thiết lập vào rồi Enter. Trong đó bạn có thể thấy nó có ghi đường dẫn lưu file private key (id_rsa) và file public key (id_rsa.pub). Để xem được public key, bạn cứ mở file đó lên mà đọc nhé. II. Thêm public key vào VPS Bây giờ hãy đăng nhập vào VPS với user mà bạn cần thêm key (thường thì là root, nhưng nếu VPS bạn có nhiều user thì sẽ cần thêm key cho tất cả user đó). Sau đó gõ các lệnh dưới đây để tạo thư mục .ssh/ và file authorized_keys trong thư mục đó: Mã: mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys Sau đó mở file authorized_keys trong thư mục .ssh ở thư mục gốc của user và copy toàn bộ ký tự của public key vào. Lưu ý: SSH Key sẽ không thể hoạt động nếu bạn đang bật SELinux. Hãy tắt SELinux đi bằng cách mở file /etc/selinux/config, tìm SELINUX=enforcing và thay bằng SELINUX=disabled. Sau đó gõ lệnh reboot để khởi động lại server. Nếu dùng Centminmod thì không cần vì nó đã tắt SELinux rồi. Để kiểm tra xem nó đã hoạt động chưa, hãy đăng nhập lại vào SSH với tài khoản vừa thêm SSH Key. Nếu bạn đăng nhập bằng Linux thì nó sẽ tự hỏi keypharse của bạn, còn nếu bạn đăng nhập ở Windows thông qua các phần mềm khác như PuTTY thì khi đăng nhập, bạn phải trỏ file private key vào để nó chứng thực. Nếu bạn dùng MobaXterm thì gắn trong phần Advanced SSH Settings nhé, phần Use private key. Bây giờ bạn đăng nhập và nó sẽ hỏi keypharse nếu bạn có đặt keypharse, còn không đặt là nó dẫn bạn vô thẳng server. Tắt chức năng sử dụng mật khẩu Sau khi kiểm tra, nếu bạn thấy đã có thể đăng nhập vào server bằng SSH Key thì có thể tắt chức năng sử dụng mật khẩu đi vì nếu không tắt, các attacker vẫn brute force attack như thường và bạn vẫn bị mất dữ liệu nếu lộ mật khẩu. Để tắt chức năng sử dụng mật khẩu, bạn mở file /etc/ssh/sshd_config, và tìm rồi sửa các giá trị của các tham số như ở dưới: PasswordAuthentication no UsePAM no