Trang chủ Security

Bảo mật trên OpenSSH

Bảo mật trên OpenSSH

SSH (Secure Socket Shell) là giao thức mạng để đăng nhập vào một máy tính từ xa trên một đường truyền an toàn. OpenSSH là một chuẩn SSH được sử dụng ở hầu hết các bản phân phối của Linux, mã hóa tất cả các thông tin trên đường truyền (bao gồm cả mật khẩu) để chống lại các mối nguy hại từ việc nghe trộm, dò mật khẩu và các hình thức tấn công khác.

Sử dụng 6 thiết lập sau đây để đảm bảo an toàn cho máy chủ SSH:

Sử dụng mật khẩu mạnh Thay đổi cổng mặc định SSH Sử dụng các giao thức version 2 Disable tài khoản root Giới hạn số User truy cập Sử dụng key để xác thực.

1) Sử dụng mật khẩu trên OpenSSH đủ mạnh

Mật khẩu là một từ hoặc một chuỗi các ký tự để xác thực người dùng, định danh để cho phép user truy cập vào hệ thống. Ngày nay với sức mạnh tính toán của máy tính, những mật khẩu ngắn và không sử dụng các ký tự đặc biệt trong mật khẩu rất dễ bị dò đoán.

Để tạo một mật khẩu đủ mạnh, cần đảm bảo các tiêu chí sau đây:

- Độ dài tối thiểu 12 ký tự

- Chứa chữ hoa, chữ thường

- Chứa số và ký tự đặc biệt

2) Thay đổi cổng mặc định SSH

Mặc định dịch vụ SSH sử dụng port 22, bạn nên thay đổi cổng mặc định này để tránh các mối nguy hại từ các cuộc tấn công khai thác qua port 22.

Mở file cấu hình ssh:

vim /etc/ssh/sshd_config

Tìm đến dòng

Port 22

và thay đổi nó thành một cổng khác, ví dụ

Port 2009

Cần lưu ý khi cấu hình thay đổi cổng mặc định cần kiểm tra xem cổng đó đã được sử dụng vào dịch vụ khác chưa, câu lệnh kiểm tra như sau :

netstat -ntap | grep 2009

Nếu câu lệnh trên không trả ra kết quả gì điều đó có nghĩa là port 2009 chưa được sử dụng và sẵn sàng cho dịch vụ SSH.

Ảnh 1.

3) Sử dụng các giao thức version 2

SSH có hai version giao thức, giao thức cũ Protocol 1 kém an toàn nên có một giao thức mới giúp tăng khả năng đảm bảo bảo mật trên đường truyền đó là Protocol 2. Chính vì vậy OpenSSH luôn sử dụng Protocol 2 để sử dụng cho các máy chủ SSH để đảm bảo an toàn.

Bảng so sánh mức độ an toàn giữa 2 giao thức:

Các giao thức vận chuyển, kết nối và xác thực tách biệt

Sử dụng một giao thức đơn khối

Sử dụng thuật toán kiểm tra tính toàn vẹn mạnh

Sử dụng CRC-32 để kiểm tra tính toàn vẹn yếu

Hỗ trợ thay đổi mật khẩu

Không hỗ trợ

Sử dụng các phương thức xác thực sau:

public key (DSA, RSA*, OpenPGD) hostbased password

Hỗ trợ nhiều phương thức:

public key (RSA) RhostRSA password TIS Kerberos

Sử dụng thuật toán Diffie-Hellman để phân phối khóa loại bỏ sự phụ thuộc vào một server key

Server key được sử dụng để chuyển tiếp khóa phiên

Hỗ trợ chứng chỉ Public-key

Không hỗ trợ

Trao đổi chứng thực người dùng linh hoạt hơn, cho phép yêu cầu nhiều hình thức xác thực để truy cập

Chỉ cho phép một kiểu xác thực cho mỗi phiên

Thay thế các khóa phiên theo định kỳ

Không hỗ trợ

4) Disable tài khoản root

root là user có quyền cao nhất trong server. Nếu bạn là một quản trị máy chủ web đang sử dụng máy chủ Linux (Centos, Ubuntu …), chắc hẳn bạn sẽ gặp phải trường hợp tài khoản root của mình bị tấn công bruteforce mật khẩu (nôm na là dò mật khẩu) qua SSH. Những cuộc tấn công bruteforce này có thể kéo dài hàng tháng thậm chí tới hàng năm bởi các hệ thống tấn công tự động và rất mạnh mẽ. Nếu tài khoản root không được cài đặt một password đủ mạnh, hacker có thể dễ dàng chiếm được quyền cao nhất của hệ thống.

Vì vậy, tốt hơn hết bạn nên sử dụng một tài khoản riêng khác để đăng nhập SSH vào hệ thống và vô hiệu hóa quyền SSH qua root trên máy chủ.

Hướng dẫn vô hiệu hóa đăng nhập SSH dưới quyền root, mở file config SSH:

vim /etc/ssh/sshd_config

Tìm đến phần có chứa dòng lệnh “PermitRootLogin” :

PermitRootLogin no

Set "PermitRootLogin" sang "no", bạn sẽ không thể đăng nhập SSH dưới quyền root.

5) Giới hạn User đăng nhập

Để giới hạn một số tài khoản được login SSH vào hệ thống, mở file /etc/ssh/sshd_config, tìm sửa hoặc thêm dòng:

AllowUsers hannv hannv1 hannv2

Ở đây chỉ cho phép các user: hannv, hannv1, hannv2 được quyền login vào hệ thống qua SSH.

6) Sử dụng SSH_Key để xác thực 

Mặc định SSH sử dụng mật khẩu để xác thực, OpenSSH cung cấp một cơ chế xác thực mới sử dụng SSH-Key nhằm tránh hoàn toàn khỏi các cuộc tấn công bruteforce.

Trước tiên bạn cần tạo một cặp khóa public-private key trên máy tính client (tức máy dùng để SSH vào server), sử dụng câu lệnh sau:

$ ssh-keygen -t rsa -b 4096

   Generating public/private rsa key pair.                                       

   Enter file in which to save the key (~/.ssh/id_rsa): [Press enter]

Điền file bạn muốn lưu trữ key hoặc ấn enter để sử dụng file mặc định home/<user>/.ssh/id_rsa.

Sau đó bạn cần nhập passphrase (hay mật khẩu) để bảo vệ Private Key, ấn enter nếu không cần đặt passphrase:

Enter passphrase (empty for no passphrase): [Type a passphrase]

Bạn sẽ có 2 file: id_rsa (private key - cần bảo mật file này thật tốt) và id_rsa.pub (public key), gửi public key id_rsa.pub mà vừa khởi tạo lên cho server bằng cách sử dụng câu lệnh sau:

ssh-copy-id -i ~/.ssh/id_rsa.pub hannv@IPserver

Câu lệnh trên sẽ copy public key đến tập tin /home/hannv/.ssh/authorized _keys trên server.

Sau bất kỳ thay đổi nào trong file config SSH, cần thực hiện khởi động lại dịch vụ SSH trên server bằng câu lệnh:

systemctl restart sshd

Thử kết nối tới server với cổng và user đã thay đổi để kiểm tra xác thực bằng SSH_Key:

ssh -p 2009 hannv@IPserver

OpenSSH đảm bảo các kết nối cho việc truy cập từ xa tới các máy chủ Unix, Linux được mã hóa bảo mật, thay thế cho phương thức telnet. Các cấu hình mặc định trên OpenSSH là khá an toàn, tuy nhiên, thực hiện các thiết lập như trên sẽ giúp tăng mức độ bảo mật khi sử dụng SSH.

>> Tham khảo thêm: Brute Force Attack là gì? Phải làm gì để phòng chống?