Chuyển tới nội dung chính

Kiểm Tra và Giám Sát Đăng Nhập SSH để Tăng Cường Bảo Mật

Giới Thiệu

SSH (Secure Shell) là giao thức quan trọng cho phép quản trị viên kết nối an toàn với máy chủ Linux từ xa. Tuy nhiên, nếu không được giám sát chặt chẽ, các phiên đăng nhập SSH có thể trở thành điểm yếu bị khai thác. Việc kiểm tra và theo dõi hoạt động đăng nhập SSH là một phần không thể thiếu trong chiến lược bảo mật hư� thống, giúp bạn phát hiện các truy cập trái phép, hành vi đáng ngờ và đảm bảo tuân thủ các quy định bảo mật. Hướng dẫn này sẽ chỉ cho bạn cách cấu hình và sử dụng các công cụ có sẵn để kiểm tra và theo dõi các phiên đăng nhập SSH trên máy chủ của mình.

📋 Thời gian: 20 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 có:

  • Một máy chủ Linux (Ubuntu, CentOS, Debian, RHEL, v.v.).
  • Quyền truy cập sudo hoặc root trên máy chủ.
  • Kiến thức cơ bản về các lệnh Linux và cách làm việc với SSH.

Các Bước Thực Hiện

Bước 1: Kiểm Tra Lịch Sử Đăng Nhập SSH Hiện Tại

Hệ thống Linux tự động ghi lại thông tin về các phiên đăng nhập. Bạn có thể sử dụng các lệnh và file nhật ký có sẵn để xem lại lịch sử này.

# 1. Xem các phiên đăng nhập gần đây của tất cả người dùng
# Lệnh 'last' hiển thị danh sách các lần đăng nhập gần đây nhất của người dùng.
# Tùy chọn -aF hiển thị tên máy chủ đầy đủ và thời gian đăng nhập/đăng xuất chi tiết.
last -aF

# 2. Xem nhật ký xác thực trên các hệ thống dựa trên Debian/Ubuntu
# File /var/log/auth.log chứa thông tin chi tiết về các nỗ lực xác thực.
# Lệnh 'grep' giúp lọc các dòng liên quan đến SSH daemon (sshd).
sudo grep "sshd" /var/log/auth.log | less

# 3. Xem nhật ký xác thực trên các hệ thống dựa trên CentOS/RHEL/Fedora
# File /var/log/secure có chức năng tương tự auth.log trên các bản phân phối này.
sudo grep "sshd" /var/log/secure | less

last cung cấp cái nhìn tổng quan nhanh chóng, trong khi các file nhật ký như auth.log hoặc secure cung cấp chi tiết hơn về từng nỗ lực đăng nhập, bao gồm cả các lần thất bại.

Bước 2: Cấu Hình Ghi Nhật Ký SSH Chi Tiết Hơn

Mức độ ghi nhật ký mặc định của SSHD có thể không đủ chi tiết cho mục đích kiểm tra chuyên sâu. Bạn có thể tăng mức độ ghi nhật ký bằng cách chỉnh sửa file cấu hình sshd_config.

# 1. Mở file cấu hình SSHD bằng trình soạn thảo văn bản (ví dụ: nano)
# File này thường nằm ở /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config

# 2. Tìm hoặc thêm dòng 'LogLevel'
# Thay đổi giá trị thành 'VERBOSE' để có thêm thông tin chi tiết về các phiên đăng nhập,
# bao gồm thông tin về khóa công khai được sử dụng, v.v.
# ⚠️ Cảnh báo: 'LogLevel DEBUG' hoặc 'DEBUG1/2/3' sẽ ghi lại rất nhiều thông tin,
# có thể làm đầy ổ đĩa nhanh chóng và không khuyến khích sử dụng trong môi trường sản phẩm
# trừ khi bạn đang gỡ lỗi cụ thể. 'VERBOSE' thường là lựa chọn tốt nhất cho auditing.
#
# Tìm dòng: #LogLevel INFO
# Thay đổi hoặc thêm:
# LogLevel VERBOSE

# 3. Lưu file và thoát trình soạn thảo.
# (Trong nano: Ctrl+O để lưu, Enter để xác nhận, Ctrl+X để thoát)

# 4. Khởi động lại dịch vụ SSH để áp dụng các thay đổi
sudo systemctl restart sshd
# Hoặc trên các hệ thống cũ hơn không dùng systemd:
# sudo service sshd restart

Sau khi khởi động lại dịch vụ, SSHD sẽ ghi lại nhiều thông tin hơn vào các file nhật ký, giúp bạn có cái nhìn sâu sắc hơn về các sự kiện đăng nhập.

Bước 3: Theo Dõi Hoạt Động SSH Real-time

Để giám sát hoạt động SSH đang diễn ra, bạn có thể sử dụng lệnh tail -f hoặc journalctl để xem nhật ký theo thời gian thực.

# 1. Theo dõi nhật ký xác thực theo thời gian thực (Debian/Ubuntu)
# Lệnh 'tail -f' hiển thị các dòng mới được thêm vào file nhật ký.
# 'grep "sshd"' giúp lọc chỉ những dòng liên quan đến SSH.
sudo tail -f /var/log/auth.log | grep "sshd"

# 2. Theo dõi nhật ký xác thực theo thời gian thực (CentOS/RHEL/Fedora)
sudo tail -f /var/log/secure | grep "sshd"

# 3. Sử dụng journalctl cho các hệ thống dùng systemd (phổ biến trên hầu hết các bản phân phối hiện đại)
# Lệnh này cung cấp cách xem nhật ký của một dịch vụ cụ thể (-u sshd)
# và theo dõi các sự kiện mới nhất (-f).
sudo journalctl -u sshd -f

💡 Tip: Khi theo dõi real-time, bạn có thể thêm các bộ lọc grep khác để tìm kiếm cụ thể người dùng, địa chỉ IP hoặc loại sự kiện (ví dụ: grep "Failed password").

Bước 4: Thiết Lập Hệ Thống Giám Sát Tự Động và Ngăn Chặn (Tùy chọn)

Để tăng cường bảo mật và tự động hóa việc ngăn chặn các cuộc tấn công brute-force, bạn có thể sử dụng các công cụ như Fail2Ban. Đối với việc giám sát và cảnh báo nâng cao, các giải pháp tập trung nhật ký như ELK Stack (Elasticsearch, Logstash, Kibana), Splunk hoặc Graylog là rất hiệu quả.

# Cài đặt Fail2Ban (Ví dụ trên Ubuntu/Debian)
# Fail2Ban sẽ tự động quét các file nhật ký và cấm các địa chỉ IP có hành vi độc hại.
sudo apt update
sudo apt install fail2ban

# Sau khi cài đặt, Fail2Ban thường sẽ tự động khởi động và bảo vệ dịch vụ SSH.
# Để tùy chỉnh cấu hình, bạn nên tạo một file jail.local để ghi đè lên jail.conf mặc định.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Mở file cấu hình tùy chỉnh để chỉnh sửa (ví dụ: nano)
sudo nano /etc/fail2ban/jail.local

# Tìm phần [sshd] và đảm bảo nó được bật (enabled = true).
# Bạn có thể điều chỉnh các tham số như maxretry (số lần thử tối đa) và bantime (thời gian cấm).
# Ví dụ cấu hình cơ bản cho SSH:
# [sshd]
# enabled = true
# port = ssh
# logpath = %(sshd_log)s
# maxretry = 3
# bantime = 1h # Cấm trong 1 giờ
# findtime = 10m # Nếu có 3 lần thử trong 10 phút, sẽ bị cấm

# Lưu và thoát. Sau đó khởi động lại Fail2Ban để áp dụng cấu hình mới.
sudo systemctl restart fail2ban

# Kiểm tra trạng thái của Fail2Ban và các jail đang hoạt động
sudo fail2ban-client status sshd

✅ Success: Fail2Ban là một công cụ mạnh mẽ giúp tự động bảo vệ máy chủ của bạn khỏi các cuộc tấn công brute-force vào SSH. Đối với quy mô lớn hơn, việc tích hợp nhật ký SSH vào một hệ thống SIEM (Security Information and Event Management) hoặc ELK Stack sẽ cung cấp khả năng phân tích, cảnh báo và báo cáo toàn diện.

Bước 5: Kiểm Tra và Giám Sát Đăng Nhập Thành Công và Thất Bại

Việc phân biệt giữa các lần đăng nhập thành công và thất bại là rất quan trọng để phát hiện các nỗ lực xâm nhập.

# 1. Xem các lần đăng nhập thất bại gần đây
# Lệnh 'lastb' (last bad logins) hiển thị danh sách các lần đăng nhập thất bại.
lastb -aF

# 2. Lọc các lần đăng nhập thất bại từ nhật ký (Debian/Ubuntu)
# Tìm kiếm chuỗi "Failed password" để xác định các nỗ lực đăng nhập sai mật khẩu.
sudo grep "Failed password" /var/log/auth.log | less

# 3. Lọc các lần đăng nhập thành công từ nhật ký (Debian/Ubuntu)
# Tìm kiếm chuỗi "Accepted password" hoặc "Accepted publickey" để xác định các lần đăng nhập hợp lệ.
sudo grep "Accepted password" /var/log/auth.log | less
sudo grep "Accepted publickey" /var/log/auth.log | less

# 4. Lọc các lần đăng nhập thất bại và thành công trên CentOS/RHEL/Fedora
sudo grep "Failed password" /var/log/secure | less
sudo grep "Accepted password" /var/log/secure | less
sudo grep "Accepted publickey" /var/log/secure | less

Việc thường xuyên kiểm tra các bản ghi này sẽ giúp bạn nhận biết được các hoạt động bất thường, ví dụ như một IP lạ liên tục cố gắng đăng nhập hoặc một người dùng cụ thể có nhiều lần đăng nhập thất bại.

Troubleshooting

  • Không thấy nhật ký hoặc nhật ký không chi tiết:
    • Kiểm tra lại file /etc/ssh/sshd_config để đảm bảo LogLevel VERBOSE đã được đặt và không bị comment (dấu #).
    • Đả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 quyền truy cập vào file nhật ký (/var/log/auth.log hoặc /var/log/secure).
  • Fail2Ban không hoạt động hoặc không cấm IP:
    • Kiểm tra trạng thái dịch vụ sudo systemctl status fail2ban để đảm bảo nó đang chạy.
    • Kiểm tra file /etc/fail2ban/jail.local (hoặc jail.conf) để đảm bảo enabled = true cho [sshd] và các tham số logpath, maxretry, bantime được cấu hình đúng.
    • Đảm bảo đường dẫn file log trong cấu hình Fail2Ban khớp với file log SSH của hệ thống bạn.
    • Kiểm tra tường lửa (ví dụ: ufw status hoặc firewall-cmd --list-all) để đảm bảo Fail2Ban có thể thêm các quy tắc chặn IP.
  • File log quá lớn và chiếm nhiều dung lượng:
    • Mức độ LogLevel VERBOSE tạo ra nhiều nhật ký hơn. Nếu đây là vấn đề, bạn có thể giảm xuống INFO.
    • Hệ thống Linux thường có logrotate được cấu hình để quản lý kích thước và lưu trữ các file nhật ký. Đảm bảo logrotate đang hoạt động đúng cách cho các file nhật ký SSH của bạn (thường được cấu hình trong /etc/logrotate.d/rsyslog hoặc /etc/logrotate.d/ssh).

Kết Luận

Kiểm tra và giám sát đăng nhập SSH là một phần không thể thiếu trong việc duy trì bảo mật cho máy chủ Linux của bạn. Bằng cách kết hợp các phương pháp như cấu hình ghi nhật ký chi tiết, theo dõi real-time và triển khai các công cụ tự động như Fail2Ban, bạn có thể tăng cường đáng kể khả năng phát hiện và phản ứng với các mối đe dọa bảo mật.

Best Practices bổ sung:

  • Sử dụng khóa SSH thay vì mật khẩu: Khóa SSH an toàn hơn nhiều so với mật khẩu và nên là phương pháp xác thực chính.
  • Tắt đă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 đó, hãy đăng nhập bằng một người dùng thông thường và sử dụng sudo khi cần quyền quản trị.
  • Giới hạn người dùng có thể đăng nhập SSH: Sử dụng AllowUsers hoặc AllowGroups trong sshd_config để chỉ định rõ ràng ai được phép đăng nhập SSH.
  • 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ẽ (defense in depth), việc thay đổi cổng mặc định từ 22 sang một cổng khác ít nhất sẽ giảm bớt các cuộc tấn công dò quét tự động.
  • Cập nhật hệ thống thường xuyên: Luôn giữ cho hệ điều hành và các gói phần mềm, đặc biệt là OpenSSH, được cập nhật để vá các lỗ hổng bảo mật đã biết.

Bằng cách tuân thủ các hướng dẫn này, bạn sẽ có một hệ thống SSH được bảo mật tốt hơn và khả năng giám sát mạnh mẽ hơn.