콘텐츠로 건너뛰기
Secret Knock

포트 노킹으로 SSH 숨기기

열려 있는 SSH 포트에는 인터넷 전역에서 로그인 시도가 몰립니다. 포트 노킹은 비밀을 알고 있음을 증명할 때까지 포트를 닫아 두었다가, 몇 초 동안 해당 주소에만 포트를 엽니다.

knockd 및 nftables 사용하기

기본적으로 SSH를 차단하고 시간 제한이 있는 세트의 주소에서만 허용합니다. knockd는 노크한 주소를 해당 세트에 추가하고, nftables는 시간 제한이 끝나면 이를 제거합니다. 이미 설정된 SSH 세션은 계속 작동합니다.

table inet filter {
    set knocked4 {
        type ipv4_addr
        flags timeout
    }
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif "lo" accept
        tcp dport 22 ip saddr @knocked4 accept
    }
}
/etc/nftables.conf (발췌)

세트를 채우는 knockd 섹션:

[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

영구 액세스는 별도로 유지하기

일부 주소를 영구적으로도 허용하는 경우, 시간 제한이 없는 별도의 세트에 유지하세요. 이미 시간 제한 세트에 있는 주소를 추가해도 시간 제한은 재설정되지 않으므로, 두 종류의 항목을 하나의 세트에 섞으면 타이머가 끝날 때 액세스가 차단될 수 있습니다.

또는 fwknop 사용하기

fwknop SPA는 시퀀스보다 강력합니다. 암호화되고 인증되며 재사용할 수 없는 단일 패킷입니다. fwknop 가이드를 참조하세요.

iPhone에서 SSH로

  1. 1황동 노커를 길게 누르세요. Secret Knock이 포트 22의 응답을 확인하고, 열린 상태가 유지되는 시간을 표시합니다.
  2. 2SSH 열기는 서버용 ssh:// 링크로 SSH 앱을 엽니다.
  3. 3‘문 화면이 켜져 있는 동안 열어 두기’는 문이 화면에 표시된 동안 열림 시간이 끝나기 직전에 자동으로 다시 노크합니다.

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

질문

SSH 키를 대체하나요?

아니요. 포트 노킹은 서비스를 숨길 뿐입니다. 강력한 SSH 키를 계속 사용하고 비밀번호 로그인도 비활성화하세요.

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