Audit và Theo Dõi Đăng Nhập SSH để Tăng Cường Bảo Mật
Giới Thiệu
SSH (Secure Shell) là giao thức thiết yếu để truy cập và quản lý máy chủ từ xa. Tuy nhiên, việc quản lý không đúng cách có thể tạo ra lỗ hổng bảo mật nghiêm trọng. Audit và theo dõi các hoạt động đăng nhập SSH là một phần quan trọng của chiến lược bảo mật tổng thể, giúp bạn phát hiện sớm các hành vi truy cập trái phép, tấn công brute-force, và đảm bảo tuân thủ các quy định bảo mật. Bài viết này sẽ hướng dẫn bạn các bước cơ bản để kiểm tra và giám sát các phiên đăng nhập SSH trên hệ thống Linux.
📋 Thời gian: 30 phút | Độ khó: Trung bình
Yêu Cầu
Để thực hiện theo hướng dẫn này, bạn cần:
- Một máy chủ Linux đang chạy (Ubuntu, Debian, CentOS, RHEL, v.v.).
- Quyền truy cập
roothoặcsudotrên máy chủ. - Kiến thức cơ bản về dòng lệnh Linux.
- Dịch vụ SSH đang hoạt động trên máy chủ.
Các Bước Thực Hiện
Bước 1: Kiểm tra và cấu hình Log SSH (sshd_config)
Việc đầu tiên là đảm bảo rằng máy chủ SSH của bạn đang ghi lại đủ thông tin vào log. Tệp cấu hình chính của SSH daemon là sshd_config.
-
Xác định vị trí tệp cấu hình: Tệp cấu hình thường nằm ở
/etc/ssh/sshd_config. -
Kiểm tra và điều chỉnh LogLevel: Mở tệp
sshd_configbằng trình soạn thảo văn bản yêu thích của bạn (ví dụ:nanohoặcvi).sudo nano /etc/ssh/sshd_configTìm dòng bắt đầu bằng
LogLevel. Đảm bảo nó được đặt thànhINFOhoặcVERBOSEđể ghi lại đủ chi tiết.INFO: Ghi lại các sự kiện đăng nhập và đăng xuất thành công.VERBOSE: Ghi lại thêm thông tin gỡ lỗi, bao gồm các nỗ lực xác thực không thành công. Mức này hữu ích cho việc kiểm tra chi tiết hơn.
Nếu dòng này bị comment (bắt đầu bằng
#), hãy bỏ comment và đặt giá trị phù hợp.#LogLevel INFO
LogLevel VERBOSE # Đặt thành VERBOSE để có nhiều thông tin hơn⚠️ Lưu ý:
VERBOSEcó thể tạo ra lượng log lớn hơn, hãy cân nhắc dung lượng lưu trữ của bạn. -
Lưu và khởi động lại dịch vụ SSH: Sau khi thay đổi, bạn cần khởi động lại dịch vụ SSH để áp dụng cấu hình mới.
sudo systemctl restart sshd✅ Dịch vụ SSH của bạn hiện đã được cấu hình để ghi log chi tiết hơn.
Bước 2: Theo dõi Log SSH (auth.log/secure)
Các bản ghi của SSH daemon thường được lưu trữ trong tệp log của hệ thống.
-
Xác định vị trí tệp log:
- Debian/Ubuntu:
/var/log/auth.log - CentOS/RHEL/Fedora:
/var/log/secure
- Debian/Ubuntu:
-
Xem log trực tiếp: Bạn có thể sử dụng
tail -fđể xem các bản ghi mới nhất theo thời gian thực hoặccat/lessđể xem toàn bộ tệp.# Trên Debian/Ubuntu
tail -f /var/log/auth.log | grep sshd
# Trên CentOS/RHEL
tail -f /var/log/secure | grep sshdLệnh
grep sshdgiúp lọc chỉ các dòng liên quan đến dịch vụ SSH. -
Sử dụng Journalctl (cho hệ thống dùng systemd):
journalctllà công cụ mạnh mẽ để xem và lọc log trên các hệ thống dùng systemd.# Xem log của dịch vụ sshd
journalctl -u sshd
# Xem log sshd từ hôm qua
journalctl -u sshd -S "yesterday"
# Xem log sshd trong 10 phút gần đây
journalctl -u sshd --since "10 minutes ago"💡 Mẹo: Bạn có thể kết hợp
journalctlvớigrepđể tìm kiếm thông tin cụ thể, ví dụ:journalctl -u sshd | grep "Failed password".
Bước 3: Sử dụng last và lastb để kiểm tra lịch sử đăng nhập
Hệ thống Linux cung cấp các tiện ích last và lastb để xem lịch sử đăng nhập thành công và không thành công.
-
last- Xem lịch sử đăng nhập thành công: Lệnhlasthiển thị danh sách các phiên đăng nhập gần đây của người dùng, bao gồm thời gian đăng nhập, đăng xuất và địa chỉ IP nguồn.lastKết quả sẽ tương tự như:
user pts/0 192.168.1.100 Thu May 16 10:30 still logged in
root pts/0 192.168.1.101 Thu May 16 09:15 - 09:45 (00:30)
reboot system boot 5.15.0-105-gen Thu May 16 09:10 still running -
lastb- Xem lịch sử đăng nhập không thành công: Lệnhlastb(hoặcfaillogtrên một số hệ thống) hiển thị các nỗ lực đăng nhập không thành công. Đây là một công cụ tuyệt vời để phát hiện các cuộc tấn công brute-force.lastbKết quả sẽ tương tự như:
UNKNOWN ssh:notty 192.168.1.50 Thu May 16 11:05 - 11:05 (00:00)
root ssh:notty 192.168.1.51 Thu May 16 11:01 - 11:01 (00:00)lastbđọc từ tệp/var/log/btmp, trong khilastđọc từ/var/log/wtmp.
Bước 4: Cấu hình hệ thống giám sát và cảnh báo (Fail2Ban)
Để có một hệ thống giám sát chủ động, bạn có thể sử dụng các công cụ như Fail2Ban để tự động chặn các địa chỉ IP có hành vi đáng ngờ.
-
Cài đặt Fail2Ban: Fail2Ban là một công cụ phổ biến giúp quét các tệp log và chặn địa chỉ IP thực hiện nhiều lần đăng nhập không thành công.
# Trên Debian/Ubuntu
sudo apt update
sudo apt install fail2ban
# Trên CentOS/RHEL
sudo yum install epel-release
sudo yum install fail2ban
sudo systemctl enable fail2ban --now -
Cấu hình Fail2Ban (cơ bản): Fail2Ban có một tệp cấu hình mặc định tại
/etc/fail2ban/jail.conf. Tuy nhiên, bạn nên tạo một tệpjail.localđể ghi đè các cài đặt mà không ảnh hưởng đến tệp gốc khi cập nhật.sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localTrong tệp
jail.local, bạn có thể điều chỉnh các thông số nhưbantime(thời gian chặn),findtime(thời gian để tìm số lần thử), vàmaxretry(số lần thử tối đa). Đảm bảo[sshd]jail được bật (enabled = true):[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
# Các cài đặt khác (có thể uncomment hoặc thêm vào)
# bantime = 1h
# findtime = 10m
# maxretry = 3Lưu tệp và khởi động lại Fail2Ban:
sudo systemctl restart fail2ban -
Kiểm tra trạng thái Fail2Ban: Bạn có thể kiểm tra xem Fail2Ban đang theo dõi jail nào và đã chặn những IP nào.
sudo fail2ban-client status
sudo fail2ban-client status sshd✅ Fail2Ban sẽ tự động bảo vệ máy chủ của bạn khỏi các cuộc tấn công brute-force SSH.
Troubleshooting
-
⚠️ Không thấy log SSH:
- Kiểm tra lại tệp
/etc/ssh/sshd_configđể đảm bảoLogLevelđược đặt thànhINFOhoặcVERBOSEvà đã bỏ comment. - Đảm bảo bạn đã khởi động lại dịch vụ SSH sau khi thay đổi cấu hình (
sudo systemctl restart sshd). - Kiểm tra trạng thái của dịch vụ
rsysloghoặcsystemd-journald(sudo systemctl status rsysloghoặcsudo systemctl status systemd-journald). Đảm bảo chúng đang chạy và không có lỗi.
- Kiểm tra lại tệp
-
⚠️ Fail2Ban không chặn IP:
- Kiểm tra trạng thái của Fail2Ban (
sudo systemctl status fail2ban). - Kiểm tra cấu hình
jail.localcủa bạn, đặc biệt làenabled = truecho[sshd]và đường dẫnlogpathcó chính xác không. - Xem log của Fail2Ban (
sudo journalctl -u fail2ban) để tìm lỗi. - Kiểm tra các quy tắc tường lửa (
sudo iptables -L -n) để xem Fail2Ban có đang thêm quy tắc chặn không.
- Kiểm tra trạng thái của Fail2Ban (
Kết Luận
Audit và theo dõi đăng nhập SSH không chỉ là một thực hành tốt mà còn là một yêu cầu bảo mật cơ bản cho bất kỳ máy chủ Linux nào. Bằng cách cấu hình ghi log thích hợp, thường xuyên kiểm tra các bản ghi và sử dụng các công cụ như last, lastb, và Fail2Ban, bạn có thể tăng cường đáng kể khả năng phát hiện và ứng phó với các mối đe dọa bảo mật.
Best practices:
- Sử dụng xác thực bằng khóa SSH: Luôn ưu tiên khóa SSH thay vì mật khẩu để tăng cường bảo mật.
- Vô hiệu hóa đăng nhập root trực tiếp: Không cho phép tài khoản
rootđăng nhập trực tiếp qua SSH. Thay vào đó, đăng nhập bằng tài khoản người dùng thông thường và sử dụngsudo. - Giới hạn người dùng có thể SSH: Chỉ cho phép những người dùng cần thiết truy cập SSH bằng cách sử dụng
AllowUsershoặcAllowGroupstrongsshd_config. - Thay đổi cổng SSH mặc định: Mặc dù không phải là một biện pháp bảo mật mạnh mẽ, việc thay đổi cổng mặc định (22) có thể giảm thiểu tiếng ồn từ các cuộc tấn công quét cổng tự động.
- Thường xuyên xem xét log: Định kỳ kiểm tra các tệp log để phát hiện các hoạt động bất thường.
- Triển khai hệ thống ghi log tập trung: Đối với môi trường lớn, hãy gửi log SSH đến một máy chủ log tập trung để phân tích và lưu trữ dài hạn.
Xem thêm: