콘텐츠로 건너뛰기
Secret Knock

knockd.conf 예시

knockd는 /etc/knockd.conf를 읽습니다. [options] 섹션과 각 문별 섹션으로 구성됩니다. 각 섹션에는 시퀀스, 시간 제한, 노크하는 주소인 %IP%에 대해 실행할 명령이 있습니다. 직접 선택한 포트를 사용하세요. 예시에 있는 포트를 절대 재사용하지 마세요.

몇 초 동안 SSH 열기

가장 일반적인 설정입니다. 한 번의 노크로 SSH를 열고, knockd가 cmd_timeout 후 다시 닫습니다. 방화벽이 이미 설정된 연결을 허용하면 이미 연 세션은 계속 작동합니다.

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

열기 및 닫기를 위한 별도의 시퀀스

타이머가 없으면 닫기 시퀀스를 노크할 때까지 포트가 열려 있습니다. 편리하지만 잊기 쉬우므로 시간 제한 버전을 권장합니다.

[options]
    UseSyslog

[openSSH]
    sequence    = 7311:tcp,8822:tcp,9133:udp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

[closeSSH]
    sequence    = 9133:udp,8822:tcp,7311:tcp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

일회용 시퀀스

하나의 고정 시퀀스 대신, knockd는 시퀀스 파일을 읽어 각 시퀀스를 한 번만 허용할 수 있으므로 기록된 노크를 다시 보내 재사용할 수 없습니다. Secret Knock는 동일한 목록을 유지하며, 문을 연 노크 후 다음 시퀀스로 이동합니다.

[openSSH]
    one_time_sequences = /etc/knockd/ssh_sequences
    seq_timeout        = 10
    tcpflags           = syn
    start_command      = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout        = 10
    stop_command       = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

# /etc/knockd/ssh_sequences — one sequence per line, each used once
2222:udp,3333:tcp,4444:udp
5555:tcp,6666:udp,7777:tcp
8888:udp,9999:tcp,1111:tcp
/etc/knockd.conf 및 시퀀스 파일

nftables 사용

nftables를 사용하는 시스템에서는 knockd가 시간 제한이 있는 세트에 주소를 추가하도록 하세요. hide-SSH 가이드에서 이에 맞는 nftables 테이블을 확인할 수 있습니다.

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s }
/etc/knockd.conf

편집 후

  1. 1Debian 및 Ubuntu에서는 /etc/default/knockd에서 knockd가 수신할 인터페이스를 설정하고(KNOCKD_OPTS="-i eth0") knockd를 재시작하세요.
  2. 2노크하는 동안 journalctl -u knockd -f로 작동 상황을 확인하세요.
  3. 3Secret Knock에서 + › 파일에서 가져오기를 선택하면 시퀀스가 있는 각 섹션을 문으로 가져옵니다. 일회용 시퀀스 목록은 직접 입력하세요.

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

질문

TCP 또는 UDP 단계를 사용해야 하나요?

둘 다 사용할 수 있습니다. 둘을 혼합하면 포트 스캔으로 시퀀스를 추측하기가 더 어려워집니다. 설정에서 이를 확인하는 경우 UDP 단계는 Secret Knock에서 페이로드를 전달할 수 있습니다.

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