Giới thiệu
OpenSSH là dịch vụ kết nối đến Server Linux/Unix, nó là cánh cửa quan trọng để chúng ta làm việc với hệ thống server do đó việc cài đặt cấu hình một cách tối ưu cũng thể hiện được việc quản lý tốt nhất trên hệ thống của bạn.
Một số file cấu hình của dịch vụ OpenSSH trên Linux mà cần lưu ý:
Cổng 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 ly hệ thống.
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, do đó để đảm bảo an toàn chúng ta phải chỉ định Protocol 2 trong file cấu hình SSH Server.
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 nên thay đổi port kết nối SSH đến VPS/Cloud Server của bạn.
Port 8022
4. Cấu Hình SSH Lắng Nghe Trên Một Địa Chỉ IP Cố Định
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
5. Không Cho Phép Đă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
6. 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
7. 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
8. 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 thường, ký tự số, ký tự đặt biệt, cách đặt password càng ngẫu nhiên càng tốt.
Ví dụ: “shBcC3yu!q57S”
9. Cấu Hình Thời Gian Timeout Khi User Không Đăng Nhập Thành Công
Khi một 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
10. 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
11. 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. Phải chắc chắn kết nối thành công bằng SSH Key rồi hạy tắt chức năng login bằng mật khẩu.
PubkeyAuthentication yes
PasswordAuthentication no
12. 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 đ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
13. Sử Dụng 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
14. 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 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
15. 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.
16. 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,…
17. 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 trong một khoảng thời gian, các IP đang tấn công vào server sau số lần đăng nhập sai mật khẩu. 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.
18. Cấu hình DNS
Thông thường kết nối SSH rất nhanh từ 5 đến 10 giây. Việc kết nối SSH bị chậm mất khoảng 30s đến 2 phút để có thể đăng nhập hoàn thành vào terminal server Linux.
Sẽ rất khó chịu khi mình sử dụng putty login vào 1 server nào đó mà chờ nó khá lâu. Đó là vì mặc định của ssh UseDNS được enabled.
Option này cho quá trình ssh tới server để thực hiện phân giải DNS trên yêu cầu đến , một hoạt động tốn thời gian. Thường dùng UseDNS để chứng thực hostbase. SSH service tra cứu DNS phân giải nghịch trên kết nối, đối với server không có mục PTR thì điều này tốn 5s.
GSSAPI là viết tắt của Generic Security Services API. GSSAPI là tiêu chuẩn IETF cho việc thực hiện chứng thực được mã hóa mạnh trong các ứng dụng mạng. GSSAPIAuthentication chỉ đơn thuần là một chỉ thị cho phép một tùy chọn xác thực thay thế.
Cũng giống như tên gọi của nó là một API cung cấp một giao diện tiêu chuẩn để giao tiếp với các giao thức khác nhau. Trong trường hợp SSH của nó được thiết kế để nói chuyện với Kerberos.
UseDNS no
GSSAPIAuthentication no
Chúc các bạn thành công!