Dịch vụ SSH hay còn được gọi là OpenSSH trên Linux, là cách giúp bạn vào hệ thống Linux Server và thực hiện các thao tác quản lý trên đó. Chính vì vậy, việc thực hiện bảo mật SSH, cũng giống như cách bạn đặt khoá, xây tường rào chắn kẻ xấu tấn công vào ngôi nhà của bạn. Bài viết này sẽ hướng dẫn cho bạn 16 Cách bảo mật SSH trên Server của bạn.
Một số file cấu hình của dịch vụ OpenSSH trên Linux mà bạn cần lưu ý:
+ Cổng dịch vụ mặc định SSH : TCP – 22
+ /etc/ssh/sshd_config : file cấu hình dịch vụ OpenSSH Server.
+ /etc/ssh/ssh_config : file cấu hình OpenSSH client
+ ~./ssh/ : thư mục chứa nội dung cấu hình SSH của user trên Linux
+ /etc/nologin : nếu file này tồn tại, thì dịch vụ sẽ từ chối kết nối đăng nhập từ các user khác trên hệ thống ngoại trừ user root. File này thường dùng trong trường hợp khẩn cấp cần cách lý sớm hệ thống.
⚠️ Lưu ý:
+ Có quyền user root để chỉnh sửa file cấu hình SSH Server nhằm thực hiện bảo mật SSH.
+ Bạn sẽ phải thao tác chỉnh sửa file cấu hình dịch vụ SSH /etc/ssh/sshd_config trên Linux cho những nội dung cấu hình bảo mật SSH phía dưới.
![Gdata - [Hướng dẫn] 16 cách bảo mật SSH cho Server Linux trên hệ thống của Gdata](https://gdata.com.vn/wp-content/uploads/2023/06/Gdata-huong-dan-16-cach-bao-mat-SSH-cho-Server-Linux-1.jpg)
1. Chỉ sử dụng giao thức SSH phiên bản 2
Giao thức SSH phiên bản 1 (SSH-1) cho tới bây giờ đã không còn an toàn bởi những lỗ hổng bảo mật SSH như việc bị tấn công “man-in-the-middle” còn tồn tại. Vì vậy hãy chỉ sử dụng giao thức SSH phiên bản 2 để thực hiện việc bảo mật SSH. Hiện tại dịch vụ SSH đã được cài đặt mặc định phiên bản “2”, nhưng trên một số hệ điều hành cũ thì vẫn còn hỗ trợ cả hai phiên bản 1 và 2.
# Protocol 2
2. Không sử dụng mật khẩu rỗng
Bạn cần cấu hình không cho phép các đăng nhập SSH vào hệ thống được sử dụng mật khẩu rỗng, điều này là cực kì nguy hiểm.
# PermitEmptyPasswords no
3. Thay đổi cổng SSH mặc định (port 22)
Dịch vụ SSH mặc định chạy cổng 22 do đây là quy định tiêu chuẩn chung của thế giới. Vì là port phổ biến, nên rất dễ bị kẻ xấu thực hiện các hoạt động dò tìm mật khẩu tự động đăng nhập vào hệ thống của bạn khiến bảo mật SSH bị giảm xuống đáng kể. Vì vậy bạn có thể thay đổi port kết nối SSH đến VPS/Cloud Server của bạn.
# Port 8022
Nếu hệ thống Linux của bạn có nhiều hơn 1 địa chỉ IP thì tốt nhất nên chỉ định rõ địa chỉ IP nào sẽ lắng nghe port dịch vụ SSH lắng nghe kết nối tới. Điều này sẽ giúp bảo mật SSH tốt hơn khi bạn để dịch vụ SSH mở trên toàn bộ địa chỉ IP đang hoạt động của hệ thống.
# ListenAddress 192.168.1.123
4. Không cho đăng nhập bằng user root
Chúng ta sẽ không cho phép đăng nhập bằng user root của hệ thống. Nhiều bạn nghĩ vậy làm sao để sử dụng user root trên Linux qua SSH?! Đơn giản bạn chỉ cần tạo 1 user khác và cấu hình hoạt động “su” hoặc “sudo” để chuyển đổi từ user thường sang user root để sử dụng.
Điều này sẽ giúp hệ thống bảo mật SSH Server tốt hơn. Để cấu hình không cho user root đăng nhập SSH ta làm như sau:
# PermitRootLogin no
5. Tắt chức năng đăng nhập của file ~/.rhosts
Đây là tính năng hỗ trợ đăng nhập “rlogin” qua port 22, hình thức đăng nhập này đã cũ và tồn tại nhiều rủi ro bảo mật. Nếu thông tin host và user được chỉ định cấu hình theo format cụ thể trong file ~/.rhosts thì các user trong file này sẽ được phép đăng nhập vào hệ thống Linux mà không cần phải cung cấp thông tin mật khẩu. Vậy nên hãy tắt chức năng hỗ trợ đăng nhập qua RSH.
# IgnoreRhosts yes
# RhostsRSAAuthentication no
6. Cấu hình thời gian ngắt kết nối SSH nếu user không hoạt động
Bạn có thể quy định thời gian timeout mà một kết nối SSH đến server Linux không nhận được bất kì hoạt động tương tác nào trên terminal SSH. Lúc này nếu quá thời gian quy định thì SSH Server sẽ tự ngắt kết nối SSH từ các user không tương tác SSH giúp làm tăng tính bảo mật SSH lên cao nhất có thể.
# ClientAliveInterval 300
# ClientAliveCountMax 0
7. Sử dụng mật khẩu phức tạp và độ khó cao
Nếu bạn vẫn còn sử dụng phương thức đăng nhập SSH vào Linux bằng mật khẩu, vui lòng tạo 1 chuỗi mật khẩu mạnh và dài trên 8 kí tự nhằm mục đích bảo mật SSH. Bạn nên tránh các mật khẩu dễ tìm, dễ nhớ vì những mật khẩu này có khả năng sẽ nằm trong danh sách các cơ sở dữ liệu từ từ điển mật khẩu khi các hackers tự động thử (brute force) mật khẩu.
Một số tiêu chí đặt mật khẩu có thể kể đến như:
– Mật khẩu có độ dài trên 8 ký tự
– Mật khẩu có ký tự viết hoa, ký tự số, ký tự đặc biệt, cách đặt mật khẩu càng ngẫu nhiên càng tốt.
Một ví dụ về mật khẩu để bảo mật SSH như: “sshbC3yuq57@S”
8. Cấu hình thời gian timeout khi user không đăng nhập thành công
Khi 1 user đăng nhập SSH, nếu không chỉ định thông tin user từ đầu thì chúng ta sẽ gặp 1 prompt hiện ra yêu cầu nhập thông tin user.
Sau đó là phần nhập mật khẩu nếu user đó sử dụng phương thức đăng nhập mật khẩu. Ở phần này, chúng ta sẽ quy định thời gian mà 1 kết nối SSH đợi cho hoạt động đăng nhập user thành công (ví dụ 120 giây), nếu không thành công thì ngắt kết nối SSH tới server.
# LoginGraceTime 120
9. Tắt log đăng nhập lần gần cuối
Log đăng nhập SSH lần gần cuối xuất hiện khi bạn đã đăng nhập SSH thành công vào hệ thống Linux.
Ví dụ :
# ssh user@192.168.1.123
Last login: Tue May 30 10:48:03 2017 from xxx.xxx.xxx.xxx
Vậy nếu bạn muốn tắt dòng log đó, thì chỉ cần thay đổi nội dung cấu hình ở mục “PrintLastLog”
# PrintLastLog no
10. Sử dụng chứng thực SSH Key, tắt chứng thực mật khẩu
Phần cấu hình này rất là được khuyến cáo sử dụng trong việc kết nối bảo mật SSH đến hệ thống Linux VPS/Cloud Server. Mặc định mỗi VPS/Cloud Server bạn sẽ đăng nhập vào bằng username root hoặc user thường 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 hệ thống VPS/Cloud Server nếu để lộ mật khẩu.
– Kẻ xấu có thể sử dụng phương thức tấn công Brute Force để dò tìm mật khẩu.
Do đó, Gdata khuyến khích bạn đọc làm quen với SSH Key để đăng nhập vào VPS/Cloud Server, 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. Vậy hãy tắt cấu hình chứng thực mật khẩu và đảm bảo bật chứng thực SSH Key.
# PubkeyAuthentication yes
# PasswordAuthentication no
11. Cho phép/từ chối kết nối SSH từ 1 user hoặc 1 group
Mặc định SSH Server cho phép tất cả các user có tồn tại trên hệ thống Linux đăng nhập SSH vào server. Nhưng đôi khi chúng ta cũng có nhu cầu chặn không cho đăng nhập SSH đối với 1 số user nhất định hoặc 1 nhóm user cụ thể trên Linux. Vậy để làm được điều này ta chỉ cần sử dụng 1 số cú pháp như phía dưới để cấu hình thêm mới vào file “/etc/ssh/sshd_config”
– Cho phép user hoặc group user được phép đăng nhập SSH
# AllowUsers user1 user2
# AllowGroups group1
– Không cho phép user hoặc group user được phép đăng nhập SSH
# DenyUsers user3 user4
# DenyGroups guest
12. Chế độ “StrictModes”
Với chế độ cấu hình “StrictModes” thì ta sẽ chỉ định dịch vụ SSH phải kiểm tra thông tin quyền (permission) của thư mục $HOME user, thư mục “.ssh” và file “authorized_keys” chứa key SSH nếu bạn sử dụng SSH Key.
Nếu bạn không sử dụng chế độ này (option “no”) thì dịch vụ SSH sẽ không kiểm tra các cấu hình quyền khi bạn đăng nhập vào VPS/Cloud Server. Vì vậy bạn cần chú ý cấu hình đúng các phân quyền (permission) cho thư mục/key dùng để đăng nhập SSH.
# StrictModes yes
13. Số lần tối đa đăng nhập sai
Như chúng ta thường biết hoạt động dò tìm mật khẩu hay còn gọi tấn công Brute Force vào 1 dịch vụ SSH khá là nguy hiểm nếu mật khẩu bạn quá đơn giản. Vậy thì ta nên giới hạn số lần mà 1 user có thể được nhập mật khẩu sai khi cố đăng nhập vào hệ thống Linux để bảo mật SSH.
Hãy dùng câu lệnh dưới đây với số lần bạn mong muốn. Nếu quá số lần quy định (như câu lệnh phía dưới là 3 lần) thì SSH Server sẽ ngắt kết nối của user.
# MaxAuthTries 3
14. Google Authenticator
Phương thức này sử dụng bảo mật SSH hai lớp, thông qua mật khẩu và mã code từ app xác thực của Google. Về nguyên lý hoạt động như sau: SSH trên server sẽ cài thêm service “Google Authenticator” để đồng bộ với app trên Smart Phone.
Mỗi phút sẽ có một mã code được tạo ra trên Smart Phone. Người dùng đăng nhập SSH thông qua mật khẩu sau đó nhập mã xác thực trên Smart Phone thì mới có thể đăng nhập. Cách này có khả năng an toàn hơn vì dễ quản lý và phân quyền cho người dùng.
15. Bảo mật bằng firewall CSF
CSF là một firewall mềm cài trên Server Linux với file cấu hình đơn giản, dễ sử dụng. Không chỉ có chức năng quản lý các cổng vào, ra trên server mà nó còn có cơ chế chống lại việc tấn công như DDoS, DoS,… Tự động chặn các IP có khả năng nguy hiểm với việc đăng nhập sai, dò mật khẩu trong khoảng thời gian cho phép. Giới hạn IP được truy cập vào cổng SSH.
CSF có thể được tích hợp vào các hệ thống quản lý hosting như CPanel, DirectAdmin, CWP,…
16. Fail2ban #
Fail2ban là một app thường được sử dụng chung với Iptables. Có chức năng tự động chặn các IP đang tấn công vào Server. Có khả năng tích hợp vào hệ thống tổng đài như Asterisk, Freeswitch,.. Bảo vệ server khỏi các cuộc tấn công SIP, hoặc là DoS, DDoS,…
Fail2ban dễ dàng tích hợp với các hệ thống server có sẵn.
