10 Bước Bảo Mật SSH Cho Server Linux

Thảo luận trong 'Tin Tức Công Nghệ' bắt đầu bởi Nguyễn Hy Long, 20/11/25 lúc 15:51.

  1. Nguyễn Hy Long

    Nguyễn Hy Long New Member
    1/6

    Cổng SSH trên server của bạn đang bị dò mật khẩu không ngừng nghỉ? Checklist Bảo mật SSH với 10 bước chi tiết này sẽ hướng dẫn bạn từ cơ bản đến nâng cao, biến server thành một pháo đài gần như bất khả xâm phạm. Hãy bắt đầu gia cố 'cửa chính' cho server của bạn ngay bây giờ.

    Tại sao bảo mật SSH là việc bắt buộc phải làm?
    Secure Shell (SSH) là giao thức cho phép bạn truy cập và quản lý server từ xa một cách an toàn. Về cơ bản, cổng SSH chính là "cửa chính" dẫn vào ngôi nhà số của bạn. Nếu cánh cửa này không được khóa cẩn thận, kẻ xấu có thể dễ dàng đột nhập.
    Các rủi ro khi không chú trọng bảo mật SSH là rất thực tế:

    • Bị tấn công Brute Force: Hàng ngàn bot tự động trên internet liên tục quét các server đang mở port 22 (port SSH mặc định) và thử hàng triệu mật khẩu phổ biến để cố gắng đăng nhập.
    • Bị chiếm quyền điều khiển: Một khi kẻ tấn công có được quyền truy cập, chúng có thể đánh cắp toàn bộ dữ liệu, cài mã độc đào tiền ảo (làm server của bạn chậm đi và tốn chi phí), hoặc dùng server của bạn làm bàn đạp để tấn công các mục tiêu khác.
    • Mất uy tín và dữ liệu: Đối với các doanh nghiệp, việc server bị xâm nhập có thể dẫn đến rò rỉ thông tin khách hàng, gây thiệt hại nghiêm trọng về tài chính và uy tín.
    Vì vậy, việc dành thời gian để gia cố an ninh cho SSH không phải là một lựa chọn, mà là một yêu cầu bắt buộc đối với bất kỳ ai đang quản trị server.

    [​IMG]



    Bước 1 & 2: Nền tảng cơ bản - Thay đổi Port và Vô hiệu hóa Root Login
    Đây là hai hành động đơn giản nhất nhưng lại mang đến hiệu quả bảo vệ tức thì, giúp bạn loại bỏ hơn 99% các cuộc tấn công tự động.

    Thay đổi Port 22 mặc định
    Hầu hết các bot tấn công đều được lập trình để quét Port 22. Bằng cách chuyển SSH sang một port khác, bạn sẽ khiến server của mình "tàng hình" trước các cuộc tấn công này.

    1. Chọn một port mới: Hãy chọn một số port bất kỳ trong khoảng 1024 đến 65535. Ví dụ: 2222, 3456,...
    2. Mở file cấu hình SSH:
      sudo nano /etc/ssh/sshd_config
    3. Tìm và sửa dòng Port 22:
      Tìm dòng #Port 22 hoặc Port 22. Bỏ dấu # nếu có và thay số 22 bằng port mới bạn đã chọn.

      Port 2222
    4. QUAN TRỌNG: Mở port mới trên Firewall
      Đây là bước nhiều người quên nhất và tự khóa mình khỏi server. Bạn phải cho phép kết nối đến port mới trên tường lửa TRƯỚC KHI khởi động lại SSH.

      Nếu dùng UFW (Ubuntu/Debian):

      sudo ufw allow 2222/tcp
      Nếu dùng Firewalld (CentOS/RHEL):

      sudo firewall-cmd --permanent --add-port=2222/tcp
      sudo firewall-cmd --reload
    5. Khởi động lại dịch vụ SSH:
      sudo systemctl restart sshd
    Từ bây giờ, để đăng nhập, bạn cần chỉ định port mới bằng cờ -p:

    ssh username@your_server_ip -p 2222
    Vô hiệu hóa quyền đăng nhập của tài khoản root
    Tài khoản root là người dùng có quyền lực cao nhất trên hệ thống. Kẻ tấn công luôn biết tên tài khoản này tồn tại, việc của chúng chỉ là dò mật khẩu. Việc vô hiệu hóa đăng nhập root qua SSH buộc kẻ tấn công phải dò cả username và password, tăng độ khó lên gấp nhiều lần.

    1. Tạo người dùng mới (nếu chưa có): Đảm bảo bạn có một tài khoản người dùng thường với quyền sudo.
      # Tạo user mới, ví dụ 'adminuser'
      sudo adduser adminuser
      # Thêm user vào nhóm sudo
      sudo usermod -aG sudo adminuser
    2. Mở file cấu hình SSH:
      sudo nano /etc/ssh/sshd_config
    3. Tìm và sửa dòng PermitRootLogin:
      Thay đổi giá trị của PermitRootLogin từ yes thành no.

      PermitRootLogin no
    4. Khởi động lại dịch vụ SSH:
      sudo systemctl restart sshd
    Bước 3, 4 & 5: Nâng cấp "ổ khóa" với SSH Key
    Sử dụng mật khẩu giống như dùng một ổ khóa thường, có thể bị bẻ khóa. Sử dụng SSH Key giống như nâng cấp lên một ổ khóa sinh trắc học, gần như không thể bị làm giả.

    SSH Key là gì và tại sao an toàn hơn mật khẩu?
    Xác thực bằng SSH Key sử dụng một cặp khóa mã hóa:

    • Private Key (Khóa riêng tư): Giống như chìa khóa vật lý của bạn. File này được lưu an toàn trên máy tính cá nhân và không bao giờ được chia sẻ.
    • Public Key (Khóa công khai): Giống như ổ khóa. File này được bạn đặt trên server. Ổ khóa này chỉ có thể được mở bởi duy nhất chiếc chìa khóa riêng tư tương ứng.
    Kể cả khi ai đó đánh cắp được Public Key, họ cũng không thể làm gì vì không có Private Key. Độ dài của một SSH key thường là 2048 hoặc 4096 bit, khiến việc bẻ khóa bằng phương pháp brute-force là bất khả thi về mặt tính toán.

    Hướng dẫn tạo cặp SSH Key trên máy tính của bạn
    Mở terminal trên máy tính macOS/Linux hoặc PowerShell/Git Bash trên Windows và chạy lệnh:

    ssh-keygen -t rsa -b 4096
    • -t rsa: Chỉ định thuật toán mã hóa RSA.
    • -b 4096: Chỉ định độ dài khóa là 4096 bit cho an toàn tối đa.
    Hệ thống sẽ hỏi bạn một vài câu:

    • Enter file in which to save the key...: Cứ nhấn Enter để lưu ở vị trí mặc định.
    • Enter passphrase...: Đây là một lớp mật khẩu bổ sung để bảo vệ private key của bạn. Bạn nên đặt mật khẩu này. Mỗi lần sử dụng key, bạn sẽ cần nhập passphrase này.
    Sau khi hoàn tất, bạn sẽ có 2 file trong thư mục ~/.ssh/: id_rsa (Private Key) và id_rsa.pub (Public Key).

    Cách đưa Public Key lên Server
    Cách 1: Dùng lệnh ssh-copy-id (khuyên dùng)

    Đây là cách đơn giản và an toàn nhất. Lệnh này sẽ tự động sao chép public key và thiết lập quyền truy cập chính xác trên server.

    ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 adminuser@your_server_ip
    Thay 2222 và adminuser bằng port và username của bạn.

    Cách 2: Sao chép thủ công

    Nếu không có lệnh ssh-copy-id, bạn có thể làm thủ công.

    1. Xem nội dung public key trên máy tính của bạn:
      cat ~/.ssh/id_rsa.pub
    2. Sao chép toàn bộ nội dung hiển thị.
    3. Đăng nhập vào server bằng mật khẩu.
    4. Dán nội dung public key vào cuối file ~/.ssh/authorized_keys:
      echo "nội_dung_public_key_đã_copy" >> ~/.ssh/authorized_keys
    5. Thiết lập quyền chính xác cho thư mục và file:
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys
    Bây giờ, hãy thử đăng xuất và đăng nhập lại. Bạn sẽ được yêu cầu nhập passphrase (nếu có đặt) thay vì mật khẩu của server.

    Vô hiệu hóa hoàn toàn việc đăng nhập bằng mật khẩu
    Sau khi đã xác nhận có thể đăng nhập bằng SSH key thành công, đây là bước cuối cùng để đạt được mức độ bảo mật SSH cao nhất.

    1. Mở file sshd_config trên server:
      sudo nano /etc/ssh/sshd_config
    2. Tìm và sửa các dòng sau:
      PasswordAuthentication no
      PubkeyAuthentication yes
      ChallengeResponseAuthentication no
    3. Khởi động lại dịch vụ SSH:
      sudo systemctl restart sshd
    Từ giờ, không ai có thể đăng nhập vào server của bạn bằng mật khẩu nữa.

    Bước 6 & 7: Xây dựng các lớp phòng thủ bổ sung
    Cài đặt Fail2ban để tự động chặn tấn công Brute Force
    Kể cả khi bạn đã vô hiệu hóa mật khẩu, các bot vẫn có thể tấn công server và làm đầy file log. Fail2ban sẽ tự động chặn các IP có hành vi đáng ngờ này.

    1. Cài đặt Fail2ban:
      • Ubuntu/Debian: sudo apt install fail2ban
      • CentOS/RHEL: sudo yum install fail2ban
    2. Tạo file cấu hình riêng cho SSH:
      sudo nano /etc/fail2ban/jail.local
    3. Dán cấu hình sau vào file. Cấu hình này sẽ ghi đè lên thiết lập mặc định.
      [sshd]
      enabled = true
      port = 2222 # Thay bằng port SSH của bạn
      maxretry = 3 # Chặn sau 3 lần thử sai
      bantime = 1d # Chặn trong 1 ngày
    4. Khởi động lại Fail2ban:
      sudo systemctl restart fail2ban
    Cấu hình Tường lửa (Firewall) chỉ cho phép IP tin cậy
    Nếu bạn có địa chỉ IP tĩnh (ở nhà hoặc công ty), bạn có thể cấu hình tường lửa chỉ cho phép kết nối SSH từ địa chỉ IP đó. Đây là một biện pháp cực kỳ hiệu quả.

    Dùng UFW (Ubuntu/Debian):

    # Xóa quy tắc cho phép cũ (nếu có)
    sudo ufw delete allow 2222/tcp
    # Thêm quy tắc mới chỉ cho phép từ IP của bạn
    sudo ufw allow from YOUR_STATIC_IP to any port 2222 proto tcp
    Dùng Firewalld (CentOS/RHEL):

    sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="YOUR_STATIC_IP"
    port protocol="tcp" port="2222" accept'
    sudo firewall-cmd --reload
    Hãy thay YOUR_STATIC_IP bằng địa chỉ IP tĩnh của bạn.

    Bước 8, 9 & 10: Tinh chỉnh nâng cao
    Giới hạn người dùng được phép đăng nhập SSH
    Nếu server có nhiều người dùng nhưng chỉ một vài người có quyền đăng nhập SSH, bạn có thể chỉ định rõ ràng trong file sshd_config.

    # Chỉ cho phép user 'adminuser' và 'devuser'
    AllowUsers adminuser devuser
    Thiết lập Timeout cho các phiên SSH không hoạt động
    Để tránh các phiên đăng nhập bị "treo" vô thời hạn, bạn có thể thiết lập tự động ngắt kết nối. Thêm các dòng sau vào sshd_config:

    # Gửi tín hiệu kiểm tra sau mỗi 240 giây
    ClientAliveInterval 240
    # Ngắt kết nối nếu không nhận được phản hồi sau 3 lần
    ClientAliveCountMax 3
    Điều này có nghĩa là phiên SSH sẽ bị ngắt sau 240 * 3 = 720 giây (12 phút) không hoạt động.

    Kích hoạt Xác thực 2 yếu tố (2FA) cho SSH
    Đây là lớp bảo mật cao cấp nhất, yêu cầu bạn phải nhập một mã code dùng một lần từ ứng dụng trên điện thoại (như Google Authenticator) sau khi đăng nhập. Quá trình này khá phức tạp, bao gồm việc cài đặt libpam-google-authenticator và chỉnh sửa các file PAM. Đây là một chủ đề nâng cao và cần một bài viết riêng để hướng dẫn chi tiết.
     

Dịch Cài Win Và Cài Đặt Phần Mềm Máy Tính Online

Danh sách các Website diễn đàn rao vặt

: vps

Chia sẻ trang này