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

Cài Đặt Và Cấu Hình SSH Server Trên Linux

Giới Thiệu

SSH (Secure Shell Protocol) là một giao thức mạng mật mã cho phép hai máy tính giao tiếp an toàn qua một mạng không an toàn. Nó cung cấp một kênh bảo mật để truy cập từ xa vào máy chủ, thực hiện các lệnh, và truyền tải file một cách mã hóa. SSH là công cụ không thể thiếu đối với bất kỳ quản trị viên hệ thường hoặc nhà phát triển nào làm việc với máy chủ Linux.

Tầm quan trọng và Use Cases:

  • Quản trị máy chủ từ xa: Thực thi lệnh, quản lý dịch vụ, cấu hình hệ thống mà không cần truy cập vật lý.
  • Truyền file an toàn: Sử dụng SCP (Secure Copy Protocol) hoặc SFTP (SSH File Transfer Protocol) để sao chép file giữa các máy chủ một cách bảo mật.
  • Tunneling và Port Forwarding: Tạo các kênh bảo mật để truyền tải dữ liệu từ các ứng dụng khác qua SSH, ví dụ như truy cập cơ sở dữ liệu nội bộ từ xa.
  • Hệ thống kiểm soát phiên bản (VCS): Nhiều hệ thống VCS như Git sử dụng SSH để xác thực và truyền tải dữ liệu.

Metadata:

  • Thời gian thực hiện: 15-30 phút
  • Độ khó: Trung bình
  • Yêu cầu: Quyền truy cập sudo trên máy chủ Linux, kết nối internet ổn định.

Yêu Cầu Hệ Thống

Để cài đặt và cấu hình SSH Server, bạn sẽ cần một máy chủ chạy hệ điều hành Linux. Hầu hết các bản phân phối Linux hiện đại đều hỗ trợ OpenSSH Server.

  • Hệ điều hành: Bất kỳ phiên bản Linux phổ biến nào (Ubuntu, Debian, CentOS, RHEL, Fedora, v.v.).
  • Cấu hình tối thiểu:
    • CPU: 1 core
    • RAM: 512MB
    • Dung lượng đĩa: 1GB (để cài đặt OS và SSH)
    • Kết nối mạng.
  • Cấu hình khuyến nghị:
    • Đối với máy chủ sản xuất, cấu hình phần cứng sẽ phụ thuộc vào tải công việc tổng thể của máy chủ, nhưng bản thân SSH Server có yêu cầu tài nguyên rất thấp.
    • Đảm bảo máy chủ có địa chỉ IP tĩnh hoặc có thể truy cập được từ mạng bên ngoài (nếu cần truy cập từ internet).

Các Bước Thực Hiện Chi Tiết

Chúng ta sẽ đi qua từng bước để cài đặt và cấu hình SSH Server (OpenSSH) trên máy chủ Linux. Các lệnh ví dụ sẽ được cung cấp cho cả hệ thống dựa trên Debian/Ubuntu và CentOS/RHEL.

1. Cập Nhật Hệ Thống

Luôn là một thực hành tốt khi cập nhật gói phần mềm của hệ thống trước khi cài đặt các dịch vụ mới. Điều này đảm bảo bạn có các bản vá bảo mật mới nhất và tránh các vấn đề tương thích.

# Đối với hệ thống Debian/Ubuntu
sudo apt update # Cập nhật danh sách gói phần mềm
sudo apt upgrade -y # Nâng cấp các gói đã cài đặt lên phiên bản mới nhất

# Đối với hệ thống CentOS/RHEL/Fedora
sudo yum update -y # Cập nhật các gói đã cài đặt lên phiên bản mới nhất (CentOS 7 trở xuống)
# HOẶC
sudo dnf update -y # Cập nhật các gói đã cài đặt lên phiên bản mới nhất (CentOS 8+, Fedora)

2. Cài Đặt OpenSSH Server

OpenSSH Server là triển khai phổ biến nhất của giao thức SSH.

🔒 Bước 1: Cài đặt gói OpenSSH Server

# Đối với hệ thống Debian/Ubuntu
sudo apt install openssh-server -y

# Đối với hệ thống CentOS/RHEL/Fedora
sudo yum install openssh-server -y
# HOẶC
sudo dnf install openssh-server -y

Sau khi cài đặt, dịch vụ SSH thường sẽ tự động khởi động.

3. Kiểm Tra Trạng Thái Dịch Vụ SSH

Sau khi cài đặt, hãy kiểm tra xem dịch vụ SSH đã chạy đúng cách chưa.

⚙️ Bước 2: Kiểm tra trạng thái dịch vụ SSH

sudo systemctl status ssh

Bạn sẽ thấy output tương tự như sau, cho thấy dịch vụ đang active (running):

● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-26 10:00:00 UTC; 10min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 1137)
Memory: 3.5M
CGroup: /system.slice/ssh.service
└─1234 /usr/sbin/sshd -D

Nếu dịch vụ không chạy, bạn có thể khởi động nó bằng lệnh:

sudo systemctl start ssh
sudo systemctl enable ssh # Đảm bảo dịch vụ khởi động cùng hệ thống

4. Cấu Hình Cơ Bản SSH Server

File cấu hình chính của SSH Server là /etc/ssh/sshd_config. Đây là nơi bạn có thể tùy chỉnh các thiết lập bảo mật và hành vi của SSH.

⚠️ Quan trọng: Luôn sao lưu file cấu hình gốc trước khi thực hiện bất kỳ thay đổi nào.

⚙️ Bước 3: Sao lưu file cấu hình gốc

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

⚙️ Bước 4: Chỉnh sửa file cấu hình sshd_config

Mở file 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 vim):

sudo nano /etc/ssh/sshd_config

Dưới đây là một số cấu hình quan trọng mà bạn nên xem xét thay đổi để tăng cường bảo mật:

  • Port: Thay đổi cổng mặc định từ 22 sang một số cổng khác (ví dụ: 2222, 22000). Điều này giúp giảm thiểu các cuộc tấn công quét cổng tự động.

    -#Port 22
    +Port 2222

    💡 Mẹo: Chọn một cổng lớn hơn 1024 và nhỏ hơn 65535 để tránh xung đột với các dịch vụ đã biết.

  • PermitRootLogin: Vô hiệu hóa quyền đăng nhập trực tiếp bằng tài khoản root. Điều này ngăn chặn kẻ tấn công cố gắng đoán mật khẩu của tài khoản root có đặc quyền cao nhất. Thay vào đó, bạn nên đăng nhập bằng tài khoản người dùng thông thường và sử dụng sudo khi cần quyền root.

    -#PermitRootLogin prohibit-password
    +PermitRootLogin no

    💡 Lưu ý: Trên một số phiên bản Linux, giá trị mặc định có thể là prohibit-password hoặc without-password, vẫn cho phép đăng nhập root với SSH key. Để bảo mật tối đa, hãy đặt thành no.

  • PasswordAuthentication: Vô hiệu hóa xác thực bằng mật khẩu và chỉ cho phép xác thực bằng SSH key. Đây là một biện pháp bảo mật rất mạnh mẽ.

    -#PasswordAuthentication yes
    +PasswordAuthentication no

    ⚠️ Cảnh báo: Đảm bảo bạn đã thiết lập SSH key-based authentication thành công và có thể ưăng nhập bằng key trước khi vô hiệu hóa xác thực bằng mật khẩu. Nếu không, bạn có thể bị khóa khỏi máy chủ của mình.

  • PubkeyAuthentication: Đảm bảo xác thực bằng khóa công khai (public key) được bật.

    -#PubkeyAuthentication yes
    +PubkeyAuthentication yes

    (Thường đã được bật theo mặc định)

  • AllowUsers / DenyUsers: Kiểm soát người dùng nào được phép hoặc không được phép đăng nhập qua SSH.

    +# Chỉ cho phép user1 và user2 đăng nhập
    +AllowUsers user1 user2

    💡 Mẹo: Sử dụng AllowUsers để chỉ định rõ ràng những người dùng được phép truy cập, thay vì DenyUsers (cách tiếp cận whitelist an toàn hơn).

  • LoginGraceTime: Thời gian tối đa (tính bằng giây) mà người dùng có để đăng nhập sau khi kết nối.

    -#LoginGraceTime 2m
    +LoginGraceTime 60
  • MaxAuthTries: Số lần thử xác thực tối đa cho mỗi kết nối.

    -#MaxAuthTries 6
    +MaxAuthTries 3
  • ClientAliveIntervalClientAliveCountMax: Giúp giữ kết nối SSH không bị ngắt quãng bởi firewall hoặc timeout.

    -#ClientAliveInterval 0
    +# Gửi gói tin giữ kết nối mỗi 60 giây
    +ClientAliveInterval 60
    -#ClientAliveCountMax 3
    +# Ngắt kết nối sau 3 lần không nhận được phản hồi
    +ClientAliveCountMax 3
  • Banner: Hiển thị một thông báo chào mừng hoặc cảnh báo bảo mật trước khi người dùng đăng nhập.

    # Tạo file banner
    sudo nano /etc/ssh/ssh_banner.txt

    Nội dung file ssh_banner.txt:

    ***************************************************
    * WARNING: Unauthorized access is prohibited! *
    * This system is for authorized users only. *
    * All activities are monitored and recorded. *
    ****************************************

Xem thêm: