Dịch vụ SSH còn có tên gọi là OpenSSH trên Linux, là một cách thức giúp bạn đi vào hệ thống Linux Server của bạn và thực hiện các thao tác quản lý hệ thống. Chính vì vậy việc bảo mật cho dịch vụ 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ẽ 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.
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 phía dưới.
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 do tồn tại những lổ hổng bảo mật như bị tấn công “man-in-the-middle”. Vì vậy hãy chỉ sử dụng giao thức SSH phiên bản 2 . Hiện tại mặc định dịch vụ SSH đã kích hoạt phiên bản “2”, nhưng trên 1 số OS cũ thì vẫn còn hỗ trợ cả 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 SSH vào hệ thống của bạn. 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ẽ tốt hơn việc 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 bảo mật hệ thống SSH Server 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.
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 xài phương thức đăng nhập SSH vào Linux bằng mật khẩu, thì xin hãy tạo 1 chuỗi mật khẩu mạnh và dài trên 8 kí tự nhằm mục đích an toàn. Tránh các mật khẩu dễ tìm, dễ nhớ vì sẽ có khả năng nằm trong danh sách các cơ sở dữ liệu từ điển mật khẩu khi bị kẻ xấu tự động thử (brute force) mật khẩu. Tiêu chí của mật khẩu an toàn tối thiểu gồm :
– Độ dài kí tự trên 8 kí tự.
– Có ký tự Hoa, ký tự số, ký tự đặt biệt, và cách đặt password càng ngẫu nhiên càng tốt.
Ví dụ: VltSshct33hZqaXreq
8. Cấu hình thời gian timeout khi user không đăng nhập thành công
Khi mà 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 đó xài phương thức đăng nhập mật khẩu. Thì ở 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 Jul 15 10:48:03 2024 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.
Các 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 đó, khuyến khích các bạn 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 xử 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 SSH vào hệ thống Linux. Hãy cấu hình phần dưới với giá trị bạn mong muốn. Nếu quá số lần quy định 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 2 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.