Chuyển đến nội dung
Secret Knock

Vì sao một lần gõ không mở cửa

Lần gõ hoặc không bao giờ đến được máy chủ, hoặc đến dưới dạng mà tiến trình nền không chấp nhận, hoặc mở cửa cho một địa chỉ mà bạn không sử dụng. Hãy lần lượt thực hiện theo danh sách từ trên xuống — danh sách được sắp xếp theo mức độ thường gặp của từng nguyên nhân.

1. Cửa đã mở cho một địa chỉ khác

Tường lửa mở cổng cho địa chỉ nguồn mà máy chủ nhìn thấy. Nếu bạn gõ qua IPv6 nhưng sau đó SSH kết nối qua IPv4 — hoặc ngược lại — cửa sẽ mở cho một địa chỉ mà bạn không sử dụng. Dữ liệu di động, NAT của nhà mạng và VPN cũng thay đổi địa chỉ.

So sánh địa chỉ Secret Knock hiển thị trên màn hình chính ("Bạn gõ từ …") với địa chỉ trong nhật ký của máy chủ, rồi cố định IPv4 hoặc IPv6 cho cửa nếu chúng khác nhau.

2. Các gói không đến được máy chủ

Mạng khách sạn, văn phòng và di động đôi khi chặn các cổng không phổ biến, còn tường lửa đám mây phía trước máy chủ có thể loại bỏ gói trước khi knockd hoặc fwknopd nhìn thấy chúng. Theo dõi lưu lượng trên máy chủ trong khi bạn gõ:

# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f

# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'

# fwknopd in the foreground with verbose output
sudo fwknopd -f -v
Trên máy chủ

3. Trình tự đến không đúng dạng

  1. 1SYN được gửi lại: khi một lần gõ TCP không nhận được phản hồi, hệ điều hành của máy khách sẽ gửi lại cùng SYN đó. knockd 0.8 đặt lại trình tự khi có lần lặp như vậy. Secret Knock gửi mỗi lần gõ TCP dưới dạng một SYN duy nhất và dừng ngay lần thử; các máy khách khác có thể không làm vậy.
  2. 2Thời gian: tất cả các bước phải đến theo đúng thứ tự trong khoảng seq_timeout. Hãy thêm một khoảng trễ ngắn trước một bước nếu bộ định tuyến ở giữa sắp xếp lại các gói.
  3. 3Giao thức: một bước UDP phải được gửi dưới dạng UDP, một bước TCP phải được gửi dưới dạng TCP — hãy kiểm tra từng bước với knockd.conf.
  4. 4tcpflags = syn khiến knockd bỏ qua các gói TCP không có cờ SYN. Nếu không có thiết lập này, các gói khác của một kết nối đến cùng cổng cũng được tính là lần trúng và có thể làm hỏng trình tự.

4. fwknop: khóa, đồng hồ và phát lại

  1. 1Cả hai khóa phải khớp với access.conf: khóa Rijndael và Khóa HMAC, cùng hàm băm (SHA-256 theo mặc định).
  2. 2fwknopd từ chối các gói cũ hơn MAX_SPA_PACKET_AGE (120 giây theo mặc định), vì vậy đồng hồ thiết bị lệch nhiều sẽ khiến mọi gói trông như đã cũ.
  3. 3Mỗi gói SPA chỉ có thể được sử dụng một lần; fwknopd chủ động loại bỏ gói bị phát lại.
  4. 4Nếu bạn gõ qua HTTP, cần có một thành phần chấp nhận kết nối TCP trên cổng đó, nếu không yêu cầu sẽ không bao giờ được gửi.

5. Cửa mở nhưng SSH vẫn không hoạt động

  1. 1Thứ tự quy tắc: quy tắc mà tiến trình nền thêm vào phải đứng trước quy tắc loại bỏ cổng — một lệnh iptables -A sẽ thêm sau một DROP hiện có và sẽ không bao giờ khớp.
  2. 2Khoảng thời gian: cmd_timeout hoặc FW_ACCESS_TIMEOUT đã đóng cửa trước khi SSH kết nối. Hãy kết nối trong khoảng thời gian này; các phiên đã thiết lập vẫn hoạt động nếu tường lửa của bạn chấp nhận các kết nối đã thiết lập.
  3. 3Việc kiểm tra cổng của Secret Knock sau khi gõ cho biết liệu cổng có phản hồi hay không, tách biệt với việc xác thực SSH.

Tất cả ví dụ trên GitHub → Mọi cấu hình trên trang này, sẵn sàng để sao chép: github.com/mobilcomm/secretknock-examples (phạm vi công cộng).

Câu hỏi

Làm cách nào để xem ứng dụng thực sự đã gửi gì?

Lịch sử của cửa hiển thị từng lần gõ cùng thời gian, kết quả và họ địa chỉ; trình sửa cũng hiển thị cùng lần gõ đó dưới dạng lệnh Terminal mà bạn có thể chạy từ máy tính để so sánh.

Hướng dẫn cho thiết lập của bạn