포트 노크로 문이 열리지 않는 이유
노크가 서버에 전혀 도달하지 않거나, 데몬이 허용하지 않는 형식으로 도달하거나, 현재 사용하지 않는 주소에 대해 문을 엽니다. 목록을 위에서부터 확인하세요. 각 원인이 발생하는 빈도순으로 정렬되어 있습니다.
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재전송된 SYN: TCP 노크가 응답을 받지 못하면 클라이언트 운영 체제는 동일한 SYN을 다시 전송합니다. knockd 0.8은 이러한 반복 전송 시 시퀀스를 재설정합니다. Secret Knock는 각 TCP 노크를 단일 SYN으로 전송하고 즉시 시도를 중단하지만, 다른 클라이언트는 그렇지 않을 수 있습니다.
- 2타이밍: 모든 단계는 순서대로 seq_timeout 내에 도착해야 합니다. 중간의 라우터가 패킷 순서를 바꾼다면 단계 전에 짧은 지연을 추가하세요.
- 3프로토콜: UDP 단계는 UDP로, TCP 단계는 TCP로 전송해야 합니다. 각 단계를 knockd.conf와 비교해 확인하세요.
- 4tcpflags = syn을 설정하면 knockd는 SYN 플래그가 없는 TCP 패킷을 무시합니다. 이 설정이 없으면 같은 포트에 대한 연결의 다른 패킷도 히트로 계산되어 시퀀스를 망가뜨릴 수 있습니다.
4. fwknop: 키, 시계 및 재전송
- 1Rijndael 키와 HMAC 키가 모두 access.conf와 일치해야 하며, HMAC에 사용하는 다이제스트도 같아야 합니다(기본값은 SHA-256).
- 2fwknopd는 MAX_SPA_PACKET_AGE보다 오래된 패킷(기본값 120초)을 거부하므로, 기기 시계가 크게 어긋나면 모든 패킷이 오래된 것으로 보입니다.
- 3각 SPA 패킷은 한 번만 사용할 수 있습니다. fwknopd는 재전송된 패킷을 의도적으로 폐기합니다.
- 4HTTP로 노크하는 경우 해당 포트에서 TCP 연결을 수락하는 항목이 있어야 합니다. 그렇지 않으면 요청이 전송되지 않습니다.
5. 문은 열렸지만 SSH는 계속 실패합니다
- 1규칙 순서: 데몬이 추가하는 규칙은 포트를 폐기하는 규칙보다 앞에 있어야 합니다. iptables -A는 기존 DROP 뒤에 추가되므로 일치하지 않습니다.
- 2시간 창: SSH가 연결되기 전에 cmd_timeout 또는 FW_ACCESS_TIMEOUT에 따라 문이 닫혔습니다. 시간 창 안에 연결하세요. 방화벽이 이미 설정된 연결을 허용한다면 기존 세션은 계속 작동합니다.
- 3노크 후 Secret Knock의 포트 검사는 SSH 인증과 별개로 포트가 응답했는지 여부를 알려 줍니다.
GitHub의 모든 예제 → 이 페이지의 모든 설정을 복사하여 바로 사용할 수 있습니다: github.com/mobilcomm/secretknock-examples (퍼블릭 도메인).
질문
앱이 실제로 무엇을 전송했는지 어떻게 확인하나요?
문의 기록에는 각 노크의 시간, 결과 및 주소 패밀리가 표시되며, 편집기에는 비교를 위해 컴퓨터에서 실행할 수 있는 동일한 노크의 터미널 명령이 표시됩니다.