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

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 root hoặc sudo trê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.

  1. 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.

  2. Kiểm tra và điều chỉnh LogLevel: Mở tệp sshd_config bằng trình soạn thảo văn bản yêu thích của bạn (ví dụ: nano hoặc vi).

    sudo nano /etc/ssh/sshd_config

    Tìm dòng bắt đầu bằng LogLevel. Đảm bảo nó được đặt thành INFO hoặc VERBOSE để 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 ý: VERBOSE có 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.

  3. 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.

  1. Xác định vị trí tệp log:

    • Debian/Ubuntu: /var/log/auth.log
    • CentOS/RHEL/Fedora: /var/log/secure
  2. 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ặc cat/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 sshd

    Lệnh grep sshd giúp lọc chỉ các dòng liên quan đến dịch vụ SSH.

  3. Sử dụng Journalctl (cho hệ thống dùng systemd): journalctl là 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 journalctl với grep để tìm kiếm thông tin cụ thể, ví dụ: journalctl -u sshd | grep "Failed password".

Bước 3: Sử dụng lastlastb để kiểm tra lịch sử đăng nhập

Hệ thống Linux cung cấp các tiện ích lastlastb để xem lịch sử đăng nhập thành công và không thành công.

  1. last - Xem lịch sử đăng nhập thành công: Lệnh last hiể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.

    last

    Kế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
  2. lastb - Xem lịch sử đăng nhập không thành công: Lệnh lastb (hoặc faillog trê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.

    lastb

    Kế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 khi last đọ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ờ.

  1. 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
  2. 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ệp jail.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.local

    Trong 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 = 3

    Lưu tệp và khởi động lại Fail2Ban:

    sudo systemctl restart fail2ban
  3. 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ảo LogLevel được đặt thành INFO hoặc VERBOSE và đã 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ụ rsyslog hoặc systemd-journald (sudo systemctl status rsyslog hoặc sudo systemctl status systemd-journald). Đảm bảo chúng đang chạy và không có lỗi.
  • ⚠️ 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.local của bạn, đặc biệt là enabled = true cho [sshd] và đường dẫn logpath có 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.

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ụng sudo.
  • 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 AllowUsers hoặc AllowGroups trong sshd_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: