Quay lại danh sách
Tin tức công nghệ

Bảo mật SSH tối thượng bằng cách triển khai SPA (Single Packet Authorization) với fwknop chặn đứng mọi cuộc quét Port

2 tháng 6, 2026

1. Đặt vấn đề: Khi bảo mật SSH truyền thống không còn đủ an toàn

Đối với mọi quản trị viên hệ thống (Sysadmin) và kỹ sư DevOps, mã hóa mật khẩu, thay đổi cổng mặc định (từ 22 sang một cổng ngẫu nhiên) hay sử dụng SSH Key là những bài học vỡ lòng để bảo vệ máy chủ. Tuy nhiên, trong kỷ nguyên mà các botnet và công cụ quét tự động như Shodan, Masscan hoạt động liên tục 24/7, những giải pháp này chỉ mang tính chất giảm thiểu rủi ro chứ chưa thể giải quyết triệt để gốc rễ của vấn đề.

Khi bạn mở một cổng SSH (dù là cổng 22 hay 2222), bạn đang gián tiếp thừa nhận với thế giới rằng: "Tôi đang chạy dịch vụ ở đây, hãy đến và thử xâm nhập đi". Việc để lộ cổng tạo điều kiện cho các cuộc tấn công Brute Force, khai thác lỗ hổng Zero-day trong OpenSSH (như lỗ hổng regreSSHion gần đây) diễn ra một cách dễ dàng. Để đạt được trạng thái bảo mật tối thượng, chúng ta cần một triết lý mới: Zero Trust Network Architecture — không tin tưởng bất kỳ ai, và ẩn hoàn toàn dịch vụ khỏi internet công cộng.

2. Giải pháp Port Knocking và sự tiến hóa lên SPA (Single Packet Authorization)

Hạn chế của Port Knocking truyền thống

Trước khi SPA ra đời, giải pháp Port Knocking (gõ cửa định kỳ) thường được sử dụng. Cơ chế này yêu cầu client gửi một chuỗi các gói tin TCP/UDP đến các cổng được định sẵn theo một thứ tự cụ thể (ví dụ: gõ cổng 1111 -> 2222 -> 3333) để tường lửa tự động mở cổng SSH. Tuy nhiên, Port Knocking bộc lộ những điểm yếu chí mạng:

  • Dễ bị nghe lén (Replay Attack): Kẻ tấn công trên cùng đường truyền có thể ghi lại chuỗi gói tin và phát lại để mở cổng.
  • Tốc độ chậm và dễ bị phá vỡ: Nếu các gói tin bị đến sai thứ tự do nghẽn mạng, cổng sẽ không mở.
  • Dễ bị phát hiện: Việc gửi liên tiếp nhiều gói tin đến các cổng đóng dễ dàng làm dấy lên cảnh báo trên các hệ thống IDS/IPS.

Sự vượt trội của Single Packet Authorization (SPA)

Single Packet Authorization (SPA) được phát triển để khắc phục hoàn toàn các nhược điểm trên. Thay vì một chuỗi các gói tin, SPA chỉ yêu cầu một gói tin duy nhất được mã hóa cực kỳ nghiêm ngặt bằng thuật toán AES hoặc GnuPG. Gói tin này chứa thông tin định danh, dấu thời gian (timestamp) để chống phát lại, và địa chỉ IP cần được cấp quyền truy cập.

Hệ thống tường lửa phía server sẽ hoạt động ở chế độ Default-Drop (đóng hoàn toàn, không phản hồi bất kỳ gói tin SYN nào). Một daemon chạy ngầm (như fwknopd) sẽ lắng nghe trực tiếp thông qua thư viện pcap (packet capture). Khi nhận được gói tin SPA hợp lệ, tường lửa sẽ mở cổng SSH chỉ riêng cho IP của client đó trong một khoảng thời gian ngắn (ví dụ: 30 giây). Ngay khi kết nối SSH được thiết lập thành công, cổng sẽ lập tức đóng lại với thế giới bên ngoài.

3. Giới thiệu về fwknop (FireWall Knock Operator)

fwknop là phần mềm mã nguồn mở hàng đầu hiện nay hiện thực hóa giao thức SPA. Được phát triển bởi Michael Rash, fwknop sử dụng Netfilter/iptables hoặc firewalld trên Linux để quản lý các quy tắc tường lửa một cách linh hoạt. Điểm mạnh của fwknop bao gồm:

  • Bảo mật phi đối xứng: Hỗ trợ mã hóa GnuPG (gồm khóa công khai và khóa bí mật), đảm bảo ngay cả khi kẻ tấn công biết thuật toán cũng không thể giả mạo gói tin.
  • Chống tấn công phát lại (Replay Attack): Mỗi gói tin SPA chứa một mã băm SHA-256 duy nhất kết hợp với timestamp, fwknopd sẽ từ chối các gói tin trùng lặp hoặc quá hạn.
  • Tàng hình tuyệt đối: Máy chủ không trả về bất kỳ phản hồi nào (kể cả gói ICMP hay TCP RST) đối với các lệnh quét port thông thường. Đối với hacker, máy chủ của bạn giống như không hề tồn tại.

4. Hướng dẫn triển khai chi tiết fwknop trên Linux

Dưới đây là hướng dẫn từng bước để cấu hình SPA bằng fwknop trên hệ điều hành Ubuntu/Debian Server, bảo vệ cổng SSH (mặc định là 22).

Bước 1: Cài đặt fwknop trên Server và Client

Trên Server (máy chủ cần bảo vệ):

sudo apt update
sudo apt install fwknop-server iptables

Trên Client (máy trạm của quản trị viên):

sudo apt install fwknop-client

Bước 2: Tạo khóa cấu hình trên Client

Chúng ta sẽ tạo các khóa đối xứng (Rijndael) để đơn giản hóa quá trình cấu hình ban đầu. Chạy lệnh sau trên máy Client để tạo khóa tự động:

fwknop -A tcp/22 -D 192.168.1.100 --key-gen --use-hmac-file keys.txt
Lưu ý: Thay thế 192.168.1.100 bằng IP Public hoặc IP nội bộ của Server của bạn.

File keys.txt được tạo ra sẽ chứa hai chuỗi mã hóa quan trọng là KEY____VALUE (khóa mã hóa dữ liệu) và HMAC_KEY_VALUE (khóa xác thực gói tin). Sao chép các giá trị này để cấu hình trên Server.

Bước 3: Cấu hình fwknopd trên Server

Mở file cấu hình truy cập trên Server tại đường dẫn /etc/fwknop/access.conf và thêm vào đoạn cấu hình sau:

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          [Điền chuỗi KEY____VALUE từ file keys.txt vào đây]
HMAC_KEY_BASE64     [Điền chuỗi HMAC_KEY_VALUE từ file keys.txt vào đây]
FW_ACCESS_TIMEOUT   30

Tiếp theo, mở file cấu hình chính /etc/fwknop/fwknopd.conf, tìm và kiểm tra giao tiếp mạng (Interface) mà server đang sử dụng (ví dụ: eth0 hoặc enp0s3):

PCAP_INTF           eth0

Bước 4: Thiết lập tường lửa chặn mọi kết nối SSH mặc định

Trước khi khởi động fwknop, chúng ta cần thiết lập iptables để chặn toàn bộ kết nối đến cổng 22, ngoại trừ các kết nối đã được thiết lập trước đó (để tránh bị ngắt kết nối hiện tại):

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

Khởi động và kích hoạt dịch vụ fwknop-server:

sudo systemctl start fwknop-server
sudo systemctl enable fwknop-server

5. Thử nghiệm thực tế: Kiểm tra tính năng "Tàng hình"

Thử nghiệm 1: Quét port từ máy lạ

Sử dụng một máy tính khác không có cấu hình fwknop client và chạy lệnh quét Nmap đến máy chủ:

nmap -p 22 192.168.1.100

Kết quả trả về sẽ là: 22/tcp filtered ssh hoặc cổng hoàn toàn không phản hồi. Kẻ tấn công sẽ kết luận cổng SSH đã bị đóng hoặc không tồn tại dịch vụ.

Thử nghiệm 2: Gửi gói tin SPA từ Client hợp lệ để truy cập SSH

Trên máy Client đã cấu hình, chạy lệnh sau để lưu thông tin cấu hình vào file local nhằm tái sử dụng tiện lợi:

fwknop --save-config -A tcp/22 -D 192.168.1.100 --key-base64 [KEY] --hmac-key-base64 [HMAC_KEY] -n myserver

Bây giờ, mỗi khi muốn kết nối SSH, quản trị viên chỉ cần thực hiện lệnh:

fwknop -n myserver

Lệnh này sẽ gửi đi một gói tin UDP (mặc định đến cổng 62201) chứa dữ liệu SPA mã hóa. Ngay lập tức, fwknopd trên server nhận được, giải mã thành công và thực thi lệnh iptables mở cổng 22 cho IP của client trong 30 giây. Lúc này bạn có thể tự do kết nối:

ssh [email protected]

6. Kết luận và các lưu ý khi vận hành hệ thống SPA

Triển khai Single Packet Authorization (SPA) với fwknop nâng tầm bảo mật hệ thống lên một tiêu chuẩn mới. Nó biến máy chủ của doanh nghiệp thành một "pháo đài tàng hình" thực sự trước mọi thế lực quét port trên Internet. Tuy nhiên, khi vận hành hệ thống này, các kiến trúc sư bảo mật cần lưu ý các điểm sau:

  • Đồng bộ thời gian (NTP): Vì SPA dựa trên timestamp để chống Replay Attack, hãy đảm bảo cả Server và Client đều được đồng bộ thời gian chuẩn xác qua NTP. Nếu lệch quá vài phút, gói tin SPA sẽ bị từ chối.
  • Sao lưu khóa (Backup Keys): Hãy lưu trữ các chuỗi Key và HMAC an toàn. Nếu mất các khóa này và tường lửa đang chặn cổng 22, bạn sẽ mất quyền truy cập vào server từ xa (trừ khi có quyền truy cập vật lý hoặc bảng điều khiển Console của nhà cung cấp Cloud).
  • Tích hợp CI/CD và Automation: fwknop cung cấp các thư viện cho Python, C, giúp dễ dàng tích hợp quy trình gõ cửa tự động vào các đường ống triển khai mã nguồn tự động của doanh nghiệp.

Tóm lại, bảo mật không phải là một giải pháp tĩnh mà là một cuộc đua liên tục. Việc áp dụng SPA là bước đi chiến lược giúp doanh nghiệp đi trước kẻ tấn công một bước, bảo vệ tài nguyên số một cách chủ động và thông minh.

Bảo mật SSH tối thượng bằng cách triển khai SPA (Single Packet Authorization) với fwknop chặn đứng mọi cuộc quét Port | DPTCloud