0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

7 Mẹo Bảo Mật Quản Lý Khóa SSH Trên Máy Chủ Linux

Đăng vào 6 tháng trước

• 4 phút đọc

Giới thiệu

Nếu bạn là một trưởng nhóm DevOps phụ trách một loạt máy chủ Linux, khóa SSH là "mạch máu" của các hoạt động hàng ngày của bạn. Chúng rất tiện lợi, nhưng một khóa riêng bị rò rỉ có thể mở ra cánh cửa cho toàn bộ hạ tầng của bạn. Hướng dẫn này sẽ đưa bạn qua bảy bước thực tiễn để củng cố quản lý khóa SSH, từ việc tạo khóa đến xoay vòng và kiểm tra.


1. Tạo Khóa Mạnh, Độc Nhất Cho Mỗi Người Dùng

Không bao giờ tái sử dụng cùng một khóa cho nhiều tài khoản hoặc máy chủ. Sử dụng một thuật toán hiện đại và kích thước khóa đủ lớn:

bash Copy
# Tạo khóa Ed25519 (được khuyên dùng) với một bình luận 100 ký tự
ssh-keygen -t ed25519 -a 100 -C "alice@prod-bastion"
  • Tại sao chọn Ed25519? Nó cung cấp bảo mật tương tự như RSA-4096 với kích thước nhỏ hơn nhiều và hoạt động nhanh hơn.
  • Bảo vệ bằng mật khẩu thêm một yếu tố thứ hai. Lưu mật khẩu trong một trình quản lý mật khẩu an toàn, không phải dưới dạng văn bản thuần túy.

2. Tập Trung Các Khóa Riêng Bằng SSH Agent Hoặc Vault

Giữ các khóa riêng phân tán trên các máy trạm là một rủi ro lớn. Hai phương pháp phổ biến là:

  • ssh-agent: Tải khóa một lần cho mỗi phiên và để agent xử lý xác thực.
  • HashiCorp Vault (hoặc tương tự): Lưu trữ khóa riêng trong một backend bí mật đã được niêm phong và truy xuất theo yêu cầu.

Ví dụ về việc thêm một khóa vào agent:

bash Copy
ssh-add ~/.ssh/id_ed25519

Nếu bạn thích Vault, một chính sách tối thiểu có thể trông như sau:

hcl Copy
path "ssh/creds/readonly" {
  capabilities = ["read"]
}

3. Tăng Cường authorized_keys Với Các Tùy Chọn

Tệp authorized_keys có thể áp đặt các ràng buộc cho từng khóa. Thêm các tùy chọn trước khi có dữ liệu khóa:

bash Copy
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/usr/local/bin/readonly-shell" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE... alice@prod-bastion

Các tùy chọn phổ biến:

  • no-pty – ngăn chặn các shell tương tác.
  • restrict – viết tắt cho một tập hợp các mặc định an toàn.
  • from="10.0.0.0/8" – giới hạn dải địa chỉ IP nguồn.

Những ràng buộc này giới hạn những gì kẻ tấn công có thể làm ngay cả khi họ có được một khóa riêng.

4. Triển Khai Một Bastion Host (Jump Box)

Thay vì cho phép SSH trực tiếp đến các máy chủ sản xuất, hãy dẫn tất cả lưu lượng qua một bastion đã được củng cố. Bastion có thể:

  • Thực thi MFA (ví dụ: Duo, Google Authenticator).
  • Ghi lại mọi phiên với auditd hoặc tlog.
  • Áp dụng quy tắc giới hạn tốc độ và phát hiện xâm nhập.

Một sshd_config tối thiểu cho bastion có thể bao gồm:

bash Copy
Port 22
Protocol 2
PermitRootLogin no
PasswordAuthentication no
AllowTcpForwarding no
LogLevel VERBOSE

5. Xoay Vòng Khóa Định Kỳ

Đối xử với khóa SSH như mật khẩu: xoay vòng chúng theo lịch trình (hàng quý là một chuẩn tốt) hoặc ngay lập tức sau bất kỳ thay đổi nhân sự nào. Tự động hóa việc xoay vòng với một kịch bản đơn giản:

bash Copy
#!/usr/bin/env bash
# Xoay vòng khóa của một người dùng và đẩy đến tất cả các máy chủ qua Ansible
USER=alice
NEWKEY=$(ssh-keygen -t ed25519 -a 100 -f /tmp/${USER}_id -N '' -C "${USER}@$(hostname)" && cat /tmp/${USER}_id.pub)
ansible all -m authorized_key -a "user=${USER} key='${NEWKEY}' state=present"

Hãy chắc chắn hủy bỏ khóa cũ (state=absent) sau khi khóa mới đã được xác minh.

6. Sử Dụng Mô-đun Bảo Mật Phần Cứng (HSM) Hoặc YubiKeys

Đối với các tài khoản có giá trị cao, hãy lưu trữ khóa riêng trên một thiết bị phần cứng không bao giờ rời khỏi thiết bị. Quy trình làm việc thay đổi một chút:

bash Copy
# Sử dụng YubiKey như một smartcard cho SSH
ssh-add -K /usr/local/lib/opensc-pkcs11.so

Khóa riêng không bao giờ chạm vào hệ thống tệp, giảm thiểu sự tiếp xúc.

7. Kiểm Tra Và Giám Sát Hoạt Động SSH

Khả năng hiển thị là hàng rào phòng thủ cuối cùng. Bật ghi log chi tiết trên daemon SSH và chuyển tiếp log đến một SIEM tập trung.

bash Copy
# Các bổ sung cho /etc/ssh/sshd_config
LogLevel VERBOSE
# Chuyển tiếp log đến syslog
SyslogFacility AUTH

Thiết lập cảnh báo cho:

  • Gia tăng đăng nhập thất bại (có thể là brute-force).
  • Sử dụng khóa từ các IP không ngờ tới.
  • Thực thi các lệnh bị giới hạn.

Các công cụ như fail2ban có thể tự động cấm các IP vi phạm, trong khi auditd có thể ghi lại chi tiết thực thi lệnh.


Danh Sách Kiểm Tra Nhanh

  • [ ] Tạo khóa Ed25519 độc nhất với mật khẩu.
  • [ ] Lưu trữ khóa riêng trong SSH agent hoặc Vault.
  • [ ] Áp dụng các tùy chọn hạn chế trong authorized_keys.
  • [ ] Định tuyến tất cả SSH qua một bastion host.
  • [ ] Lên lịch xoay vòng khóa hàng quý.
  • [ ] Sử dụng thiết bị phần cứng cho các tài khoản quyền hạn.
  • [ ] Bật ghi log VERBOSE và chuyển tiếp đến SIEM.

Kết luận

Bảo mật quản lý khóa SSH là sự kết hợp giữa quy trình kỷ luật và cấu hình vững chắc. Bằng cách tạo khóa mạnh, tập trung bí mật, siết chặt authorized_keys, dẫn lưu lượng qua một bastion, xoay vòng khóa, tận dụng thiết bị phần cứng và liên tục kiểm tra hoạt động, bạn có thể giảm thiểu diện tích tấn công cho đội ngũ Linux của mình.

Để có thêm các hướng dẫn thực tiễn về việc củng cố hạ tầng và quy trình làm việc tốt nhất, hãy xem thêm tại https://lacidaweb.com.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào