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

Bảo mật SSH Tuyệt đối với Single Packet Authorization (SPA) và BPF trên Ubuntu 26.04

30 tháng 5, 2026

1. Đặt vấn đề: Hiểm họa từ việc công khai cổng SSH

Đối với mọi quản trị viên hệ thống, việc duy trì an toàn cho các máy chủ ảo (VPS) là một cuộc chiến không hồi kết. Theo các số liệu thống kê về an ninh mạng, một VPS mới khởi tạo với cổng SSH (mặc định là 22) mở công khai sẽ phải hứng chịu hàng nghìn cú quét (scan) và tấn công dò mật khẩu (Brute Force) từ các botnet chỉ trong vòng vài giờ đầu tiên.

Các giải pháp truyền thống như đổi cổng dịch vụ (như chuyển SSH sang cổng 2222), sử dụng Key-based Authentication, hay cài đặt Fail2ban chỉ mang tính chất giảm thiểu rủi ro hoặc phản ứng sau sự cố. Cổng dịch vụ của bạn thực tế vẫn mở, vẫn phản hồi lại các gói tin TCP SYN, và kẻ tấn công vẫn biết có một dịch vụ đang lắng nghe tại đó. Điều gì sẽ xảy ra nếu một lỗ hổng thực thi mã từ xa (RCE) nghiêm trọng như Log4j hoặc lỗ hổng tương tự xuất hiện trên OpenSSH? Câu trả lời là hệ thống của bạn sẽ bị xâm nhập trước khi bạn kịp vá lỗi.

Để giải quyết triệt để vấn đề này, chúng ta cần một triết lý bảo mật mới: Mạng không tin cậy (Zero Trust Network Access) và nguyên lý "Ẩn mình trước khi xác thực". Đây chính là lúc Single Packet Authorization (SPA) phát huy sức mạnh.

2. Giải pháp Single Packet Authorization (SPA) là gì?

Khái niệm cơ bản

Single Packet Authorization (SPA) là một cơ chế bảo mật nâng cao mã hóa toàn bộ dữ liệu xác thực (bao gồm danh tính, mốc thời gian, lệnh yêu cầu mở cổng) vào trong một gói tin duy nhất (thường là UDP).

Khi triển khai SPA, tường lửa của máy chủ (Netfilter/iptables/nftables) sẽ được cấu hình để DROP (thả/chặn tuyệt đối) mọi gói tin cố gắng kết nối đến cổng SSH. Khi một quản trị viên muốn truy cập, họ sẽ dùng một công cụ client để gửi một gói tin SPA được mã hóa đến máy chủ. Một daemon chạy ngầm trên máy chủ sẽ bắt gói tin này, giải mã, kiểm tra tính hợp lệ, và chỉ mở tường lửa cho đúng địa chỉ IP của client đó trong một khoảng thời gian rất ngắn (ví dụ: 30 giây) để thiết lập phiên SSH. Sau khi kết nối được thiết lập, cổng dịch vụ lập tức đóng lại đối với toàn bộ thế giới bên ngoài.

Sự khác biệt giữa SPA và Port Knocking truyền thống

Nhiều người thường nhầm lẫn SPA với Port Knocking. Tuy nhiên, hai công nghệ này có sự khác biệt rất lớn về độ an toàn:

  • Port Knocking: Đòi hỏi client gửi một chuỗi các gói tin TCP/UDP đến các cổng cụ thể theo một thứ tự định sẵn (ví dụ: gõ cổng 1111, 2222, rồi 3333). Nhược điểm lớn nhất là dễ bị tấn công phát lại (Replay Attack) bằng cách bắt gói tin (packet sniffing) và chuỗi gõ cổng có thể bị phát hiện bởi kẻ tấn công giám sát lưu lượng mạng.
  • SPA (Fwknop): Chỉ sử dụng một gói tin mã hóa đối xứng (AES) hoặc khóa công khai (GnuPG). Mỗi gói tin chứa một mốc thời gian (timestamp) và dữ liệu ngẫu nhiên (nonce), khiến cho việc sao chép hoặc phát lại gói tin trở nên vô dụng. Nó không để lại bất kỳ dấu vết nào về chuỗi cổng trên mạng mạng.

3. Tại sao kết hợp Fwknop với BPF trên Ubuntu 26.04?

Fwknop (FireWall Knock Operator) là phần mềm mã nguồn mở hàng đầu hiện nay triển khai cơ chế SPA. Trên phiên bản hệ điều hành mới nhất Ubuntu 26.04 LTS, việc kết hợp Fwknop với BPF (Berkeley Packet Filter) mang lại hiệu năng và độ bảo mật vượt trội.

Theo cơ chế mặc định, Fwknop sử dụng thư viện libpcap để bắt các gói tin ở tầng ứng dụng. Điều này có nghĩa là gói tin phải đi qua toàn bộ ngăn xếp mạng (network stack) của Linux kernel rồi mới được chuyển lên user-space để Fwknop xử lý. Trong trường hợp bị tấn công từ chối dịch vụ (DoS), việc này sẽ làm tiêu tốn tài nguyên CPU rất lớn.

Bằng cách tích hợp bộ lọc BPF (hoặc eBPF tiến tiến), chúng ta có thể lọc và nhận diện các gói tin SPA hợp lệ ngay tại tầng kernel, loại bỏ hoàn toàn các gói tin rác hoặc gói tin tấn công trước khi chúng kịp tiêu thụ tài nguyên của hệ thống. Sự kết hợp này mang lại cho VPS Ubuntu 26.04 khả năng phòng thủ chủ động, đạt hiệu năng tối đa và miễn nhiễm với các kỹ thuật quét cổng nâng cao.

4. Hướng dẫn cấu hình chi tiết trên VPS Ubuntu 26.04

Dưới đây là quy trình từng bước để thiết lập hệ thống bảo mật ẩn cổng SSH bằng Fwknop và bộ lọc gói tin BPF.

Bước 1: Chuẩn bị hệ thống và cài đặt Fwknop

Trước tiên, cập nhật danh sách gói tin của Ubuntu 26.04 và tiến hành cài đặt các thành phần cần thiết:

sudo apt update && sudo apt upgrade -y
sudo apt install fwknop-server fwknop-client iptables -y

Lưu ý: Mặc dù Ubuntu 26.04 sử dụng nftables làm backend mặc định, fwknop vẫn tương thích rất tốt thông qua các quy tắc iptables-nft.

Bước 2: Cấu hình Fwknop Server

Cấu hình chính của Fwknop Server nằm ở hai tệp tin: /etc/fwknop/fwknopd.conf và /etc/fwknop/access.conf.

Mở tệp /etc/fwknop/fwknopd.conf để cấu hình card mạng và kích hoạt BPF:

sudo nano /etc/fwknop/fwknopd.conf

Chỉnh sửa hoặc thêm vào các tham số sau (thay thế eth0 bằng tên giao tiếp mạng thực tế của VPS):

PCAP_INTF eth0;
ENABLE_IPT_FORWARDING N;
# Kích hoạt bộ lọc BPF tối ưu cho Fwknop để chỉ bắt gói tin UDP cổng 62201
PCAP_FILTER udp port 62201;

Tiếp theo, tạo khóa bảo mật và cấu hình quyền truy cập trong tệp /etc/fwknop/access.conf:

sudo nano /etc/fwknop/access.conf

Thêm đoạn cấu hình mẫu sau vào cuối tệp tin:

SOURCE ANY;
REQUIRE_SOURCE_ADDRESS Y;
KEY_BASE64 vV9bW3pZM1g0eF...[Tự tạo khóa ngẫu nhiên của bạn];
HMAC_KEY_BASE64 dQw4w9WgXcQ...[Tự tạo khóa HMAC của bạn];
FORCE_PORT 22;
FORCE_PROTO tcp;
FW_ACCESS_TIMEOUT 30;

KEY_BASE64 và HMAC_KEY_BASE64 dùng để mã hóa dữ liệu gói tin và xác thực tính toàn vẹn. Bạn có thể tạo các chuỗi này bằng lệnh fwknop --gen-keys.

Bước 3: Thiết lập Tường lửa chặn hoàn toàn SSH

Bây giờ, chúng ta sẽ thiết lập quy tắc tường lửa để block tất cả các kết nối SSH thông thường, ngoại trừ các kết nối đã được thiết lập sẵn (ESTABLISHED):

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

Lúc này, nếu bạn thử dùng một máy tính khác quét cổng 22 của VPS, cổng đó sẽ hiển thị trạng thái filtered hoặc không phản hồi (stealth mode).

Bước 4: Khởi động dịch vụ Fwknop

Kích hoạt và khởi động daemon điều khiển fwknopd:

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

5. Cấu hình phía Client và Kiểm tra kết nối

Trên máy tính cá nhân của bạn (Client), cài đặt fwknop-client. Tiến hành cấu hình tệp tin ~/.fwknoprc với các thông tin khóa KEY_BASE64 và HMAC_KEY_BASE64 trùng khớp với server.

Để thực hiện kết nối SSH vào VPS, bạn chạy lệnh tạo mã SPA sau:

fwknop -A tcp/22 -D [IP_CỦA_VPS] --named-config [Tên_Cấu_Hình]

Khi lệnh này được thực thi, client sẽ gửi một gói tin UDP duy nhất chứa chuỗi dữ liệu đã mã hóa đến cổng 62201 của VPS. Bộ lọc BPF của kernel trên VPS lập tức nhận diện gói tin, chuyển cho Fwknop xử lý. Nếu khóa hợp lệ, Fwknop sẽ tự động thêm một quy tắc iptables tạm thời cho phép IP của bạn truy cập cổng 22 trong vòng 30 giây.

Ngay sau đó, bạn có thể thực hiện lệnh SSH thông thường:

ssh user@IP_CỦA_VPS

6. Kết luận

Bằng việc áp dụng cơ chế Single Packet Authorization (SPA) thông qua Fwknop và tận dụng sức mạnh bộ lọc gói tin tầng thấp BPF trên Ubuntu 26.04, bạn đã nâng cấp hệ thống bảo mật VPS của mình lên một tiêu chuẩn hoàn toàn mới. Máy chủ của bạn giờ đây hoàn toàn "vô hình" trước thế giới ngầm mạng internet, giảm thiểu 99% nguy cơ từ các cuộc quét cổng và tấn công zero-day nhắm vào giao thức SSH. Đây chính là bước đi vững chắc trong việc xây dựng kiến trúc Zero Trust cho hạ tầng doanh nghiệp của bạn.

Bảo mật SSH Tuyệt đối với Single Packet Authorization (SPA) và BPF trên Ubuntu 26.04 | DPTCloud