콘텐츠로 건너뛰기
Secret Knock

포트 노크로 문이 열리지 않는 이유

노크가 서버에 전혀 도달하지 않거나, 데몬이 허용하지 않는 형식으로 도달하거나, 현재 사용하지 않는 주소에 대해 문을 엽니다. 목록을 위에서부터 확인하세요. 각 원인이 발생하는 빈도순으로 정렬되어 있습니다.

1. 다른 주소에 대해 문이 열렸습니다

방화벽은 서버가 확인한 소스 주소에 대해 포트를 엽니다. IPv6로 노크한 뒤 SSH가 IPv4로 연결되거나 그 반대의 경우, 현재 사용하지 않는 주소에 대해 문이 열립니다. 모바일 데이터, 통신사 NAT 및 VPN도 주소를 변경합니다.

홈 화면에서 Secret Knock가 표시하는 주소(‘…에서 노크’)를 서버 로그의 주소와 비교하고, 서로 다르면 해당 문에 IPv4 또는 IPv6를 고정하세요.

2. 패킷이 서버에 도달하지 않습니다

호텔, 사무실 및 모바일 네트워크는 때때로 일반적이지 않은 포트를 차단하며, 서버 앞단의 클라우드 방화벽은 knockd 또는 fwknopd가 확인하기 전에 패킷을 폐기할 수 있습니다. 노크하는 동안 서버에서 트래픽을 확인하세요:

# 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
서버에서

3. 시퀀스가 올바른 형식으로 도착하지 않습니다

  1. 1재전송된 SYN: TCP 노크가 응답을 받지 못하면 클라이언트 운영 체제는 동일한 SYN을 다시 전송합니다. knockd 0.8은 이러한 반복 전송 시 시퀀스를 재설정합니다. Secret Knock는 각 TCP 노크를 단일 SYN으로 전송하고 즉시 시도를 중단하지만, 다른 클라이언트는 그렇지 않을 수 있습니다.
  2. 2타이밍: 모든 단계는 순서대로 seq_timeout 내에 도착해야 합니다. 중간의 라우터가 패킷 순서를 바꾼다면 단계 전에 짧은 지연을 추가하세요.
  3. 3프로토콜: UDP 단계는 UDP로, TCP 단계는 TCP로 전송해야 합니다. 각 단계를 knockd.conf와 비교해 확인하세요.
  4. 4tcpflags = syn을 설정하면 knockd는 SYN 플래그가 없는 TCP 패킷을 무시합니다. 이 설정이 없으면 같은 포트에 대한 연결의 다른 패킷도 히트로 계산되어 시퀀스를 망가뜨릴 수 있습니다.

4. fwknop: 키, 시계 및 재전송

  1. 1Rijndael 키와 HMAC 키가 모두 access.conf와 일치해야 하며, HMAC에 사용하는 다이제스트도 같아야 합니다(기본값은 SHA-256).
  2. 2fwknopd는 MAX_SPA_PACKET_AGE보다 오래된 패킷(기본값 120초)을 거부하므로, 기기 시계가 크게 어긋나면 모든 패킷이 오래된 것으로 보입니다.
  3. 3각 SPA 패킷은 한 번만 사용할 수 있습니다. fwknopd는 재전송된 패킷을 의도적으로 폐기합니다.
  4. 4HTTP로 노크하는 경우 해당 포트에서 TCP 연결을 수락하는 항목이 있어야 합니다. 그렇지 않으면 요청이 전송되지 않습니다.

5. 문은 열렸지만 SSH는 계속 실패합니다

  1. 1규칙 순서: 데몬이 추가하는 규칙은 포트를 폐기하는 규칙보다 앞에 있어야 합니다. iptables -A는 기존 DROP 뒤에 추가되므로 일치하지 않습니다.
  2. 2시간 창: SSH가 연결되기 전에 cmd_timeout 또는 FW_ACCESS_TIMEOUT에 따라 문이 닫혔습니다. 시간 창 안에 연결하세요. 방화벽이 이미 설정된 연결을 허용한다면 기존 세션은 계속 작동합니다.
  3. 3노크 후 Secret Knock의 포트 검사는 SSH 인증과 별개로 포트가 응답했는지 여부를 알려 줍니다.

GitHub의 모든 예제 → 이 페이지의 모든 설정을 복사하여 바로 사용할 수 있습니다: github.com/mobilcomm/secretknock-examples (퍼블릭 도메인).

질문

앱이 실제로 무엇을 전송했는지 어떻게 확인하나요?

문의 기록에는 각 노크의 시간, 결과 및 주소 패밀리가 표시되며, 편집기에는 비교를 위해 컴퓨터에서 실행할 수 있는 동일한 노크의 터미널 명령이 표시됩니다.

사용 중인 설정을 위한 가이드