SSH là một giao thức được sử dụng rộng rãi để truy cập các máy chủ Linux một cách bảo mật. Hầu hết người dùng sử dụng kết nối SSH với cài đặt mặc định để kết nối với máy chủ từ xa. Tuy nhiên, các cấu hình mặc định không an toàn cũng tiềm ẩn nhiều rủi ro bảo mật khác nhau.
Tài khoản root của máy chủ có quyền truy cập SSH mở có thể gặp rủi ro. Và đặc biệt nếu bạn đang sử dụng địa chỉ IP public thì việc hack mật khẩu root sẽ dễ dàng hơn rất nhiều. Vì vậy, cần phải có kiến thức về bảo mật SSH.
Đây là cách bạn có thể bảo mật các kết nối máy chủ SSH của mình trên Linux.
1. Vô hiệu hóa thông tin đăng nhập của người dùng root
Trước tiên, hãy vô hiệu hóa quyền truy cập SSH của người dùng root và tạo một người dùng mới có đặc quyền root. Tắt quyền truy cập máy chủ cho người dùng root là một chiến lược phòng thủ ngăn những kẻ tấn công đạt được mục tiêu xâm nhập vào hệ thống. Ví dụ, bạn có thể tạo một người dùng có tên exampleroot như sau:
useradd -m exampleroot
passwd exampleroot
usermod -aG sudo exampleroot
Dưới đây là giải thích ngắn gọn về các lệnh nói trên:
- useradd tạo một người dùng mới và tham số -m tạo một thư mục trong thư mục chính cho người dùng bạn đã tạo.
- Lệnh passwd dùng để gán mật khẩu cho người dùng mới. Hãy nhớ rằng mật khẩu bạn gán cho người dùng phải phức tạp và khó đoán.
- usermod -aG sudo thêm người dùng mới được tạo vào nhóm admin.
Sau quá trình tạo người dùng, cần thực hiện một số thay đổi đối với file sshd_config. Bạn có thể tìm thấy file này tại /etc/ssh/sshd_config. Mở file bằng bất kỳ trình soạn thảo văn bản nào và thực hiện các thay đổi sau:
# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
AllowUsers exampleroot
Dòng PermitRootLogin sẽ ngăn người dùng root truy cập từ xa bằng SSH. Bao gồm exampleroot trong danh sách AllowUsers cấp các quyền cần thiết cho người dùng.
Cuối cùng, khởi động lại service SSH bằng lệnh sau:
sudo systemctl restart ssh
Nếu không thành công và bạn nhận được thông báo lỗi, hãy thử lệnh bên dưới. Điều này có thể khác nhau dựa trên bản phân phối Linux mà bạn sử dụng.
sudo systemctl restart sshd
2. Thay đổi cổng mặc định
Cổng kết nối SSH mặc định là 22. Tất nhiên, tất cả những kẻ tấn công đều biết điều này và do đó, cần thay đổi số cổng mặc định để đảm bảo an toàn cho SSH. Mặc dù kẻ tấn công có thể dễ dàng tìm thấy số cổng mới bằng cách quét Nmap, mục tiêu ở đây là làm cho công việc của kẻ tấn công trở nên khó khăn hơn.
Để thay đổi số cổng, hãy mở /etc/ssh/sshd_config và thực hiện các thay đổi sau đối với file:
Include /etc/ssh/sshd_config.d/*.conf
Port 5922
Sau bước này, khởi động lại service SSH một lần nữa với:
sudo systemctl restart ssh.
Bây giờ, bạn có thể truy cập máy chủ của mình bằng cách sử dụng cổng mà bạn vừa xác định. Nếu đang sử dụng tường lửa, bạn cũng phải thực hiện các thay đổi quy tắc cần thiết ở đó. Khi chạy lệnh netstat -tlpn, bạn có thể thấy rằng số cổng dành cho SSH đã thay đổi.
3. Chặn quyền truy cập cho người dùng có mật khẩu trống
Có thể có những người dùng không có mật khẩu trên hệ thống của bạn mà bạn đã vô tình tạo ra. Để ngăn những người dùng như vậy truy cập vào máy chủ, bạn có thể đặt giá trị dòng PermitEmptyPasswords trong file sshd_config thành no.
PermitEmptyPasswords no
4. Giới hạn nỗ lực đăng nhập/truy cập
Theo mặc định, bạn có thể truy cập máy chủ bằng cách thực hiện bao nhiêu lần nhập mật khẩu tùy thích. Tuy nhiên, những kẻ tấn công có thể sử dụng lỗ hổng này để tấn công máy chủ. Bạn có thể tự động ngắt kết nối SSH sau một số lần thử nhất định bằng cách chỉ định số lần thử mật khẩu được phép.
Để làm điều này, hãy thay đổi giá trị MaxAuthTries trong file sshd_config.
MaxAuthTries 3
5. Sử dụng SSH phiên bản 2
Phiên bản thứ hai của SSH được phát hành do có nhiều lỗ hổng trong phiên bản đầu tiên. Theo mặc định, bạn có thể cho phép máy chủ sử dụng phiên bản thứ hai bằng cách thêm tham số Protocol vào file sshd_config của mình. Bằng cách này, tất cả các kết nối trong tương lai của bạn sẽ sử dụng phiên bản thứ hai của SSH.
Include /etc/ssh/sshd_config.d/*.conf
Protocol 2
6. Tắt chuyển tiếp cổng TCP và chuyển tiếp X11
Những kẻ tấn công có thể cố gắng giành quyền truy cập vào các hệ thống khác của bạn bằng cách chuyển tiếp cổng thông qua những kết nối SSH. Để tránh điều này, bạn có thể tắt tính năng AllowTcpForwarding và X11Forwarding trong file sshd_config.
X11Forwarding no
AllowTcpForwarding no
7. Kết nối bằng SSH key
Một trong những cách an toàn nhất để kết nối với máy chủ của bạn là sử dụng SSH key. Khi sử dụng SSH key, bạn có thể truy cập vào máy chủ mà không cần mật khẩu. Ngoài ra, bạn có thể tắt hoàn toàn mật khẩu truy cập vào máy chủ bằng cách thay đổi các thông số liên quan đến mật khẩu trong file sshd_config.
Khi bạn tạo SSH key, có hai key: Public và Private. Public key được upload lên máy chủ bạn muốn kết nối và private key được lưu trữ trên máy tính mà bạn sẽ thiết lập kết nối.
Tạo khóa SSH bằng lệnh ssh-keygen trên máy tính của bạn. Không để trống trường Passphrase và nhớ mật khẩu bạn đã nhập ở đây. Nếu để trống, bạn sẽ chỉ có thể truy cập nó bằng file SSH key. Tuy nhiên, nếu đặt mật khẩu, bạn có thể ngăn kẻ tấn công với file key truy cập vào nó. Ví dụ, bạn có thể tạo key SSH bằng lệnh sau:
ssh-keygen
8. Hạn chế IP đối với kết nối SSH
Trong hầu hết mọi trường hợp, tường lửa chặn truy cập bằng cách sử dụng các khuôn khổ tiêu chuẩn riêng của nó và nhằm mục đích bảo vệ máy chủ. Tuy nhiên, điều này không phải lúc nào cũng đủ và bạn cần phải tăng cường tiềm năng bảo mật này.
Để thực hiện việc này, hãy mở file /etc/hosts.allow. Với những bổ sung bạn thực hiện cho file này, bạn có thể hạn chế quyền SSH, cho phép một khối IP cụ thể hoặc nhập một IP duy nhất và chặn tất cả các địa chỉ IP còn lại bằng lệnh deny.
Dưới đây bạn sẽ thấy một số cài đặt mẫu. Sau khi thực hiện những việc này, hãy khởi động lại service SSH như bình thường để lưu các thay đổi.
Dữ liệu và các vấn đề bảo mật dữ liệu khá chi tiết và cần được xem xét bởi tất cả các quản trị viên máy chủ. Bảo mật máy chủ là một vấn đề rất nhạy cảm vì trọng tâm chính của các cuộc tấn công là những máy chủ web và chúng chứa hầu hết mọi thông tin về một hệ thống. Vì hầu hết các máy chủ chạy trên cơ sở hạ tầng Linux, điều rất quan trọng là phải làm quen với hệ thống Linux và việc quản trị máy chủ.
Bảo mật SSH chỉ là một trong những cách để bảo vệ máy chủ. Có thể giảm thiểu thiệt hại bạn phải nhận bằng cách dừng, chặn hoặc làm chậm một cuộc tấn công. Ngoài việc cung cấp bảo mật SSH, bạn có thể triển khai nhiều phương pháp khác nhau để bảo mật các máy chủ Linux của mình.