SSH 보안 강화
SSH 보안은 호스트 로그인 기록, 실패 횟수, 지역 및 CIDR 규칙을 바탕으로 차단 목록을 관리합니다. 호스트의 SSH 진입점을 보호하는 기능이며 fn-knock의 HTTP 인증을 보호하거나 SSH 키, 취약한 비밀번호 로그인 비활성화 및 시스템 업데이트를 대신하지는 않습니다.
이 기능은 호스트의 SSH 로그를 읽고 방화벽을 관리합니다. 현재 전체 기능은 fnOS 네이티브 FPK에서만 제공합니다. OpenWrt 런타임에서는 명시적으로 비활성화되어 있으며 Docker, 일반 Linux, Synology DSM 7 SPK 및 Windows x86_64도 전체 기능을 제공하지 않습니다. 페이지에 “현재 환경에서 사용할 수 없음”이 표시되면 호스트나 상위 방화벽에서 SSH 보호를 설정합니다.
활성화하기 전에 사용할 수 있는 로컬 콘솔이나 신뢰할 수 있는 네트워크 복구 경로를 확보해 현재 관리 접속 경로가 차단되는 상황에 대비합니다.
기능 스위치 및 페이지 메뉴
시스템 설정 → 기능에서 “SSH 보안” 메뉴를 활성화합니다.SSH 보안을 열고 요약에 표시된 사용 가능 상태, 감지된 SSH 포트, 허용 CIDR 수 및 활성 차단 수를 확인합니다.- “SSH 보안 설정”을 펼쳐 규칙을 저장합니다. 저장에 성공하면 즉시 적용됩니다. SSH 포트나 호스트 방화벽 상태가 바뀐 경우 “방화벽 동기화”로 규칙을 다시 구성합니다.
기능 메뉴 스위치는 페이지와 백엔드 기능의 활성화 여부를 제어합니다. 설정 카드의 “SSH 보안 활성화”는 로그, 지역 및 임계값을 기준으로 보호 기능을 실행할지 결정합니다. 설정을 저장하면 허용 CIDR과 활성 차단이 감지된 SSH 포트에 즉시 적용됩니다. “방화벽 동기화”는 포트, 규칙 체인 또는 다른 방화벽 상태가 바뀐 뒤 다시 적용할 때 사용합니다.
설정 필드
| 필드 | 기본값 및 범위 | 역할 |
|---|---|---|
| SSH 보안 활성화 | 기본적으로 꺼짐 | SSH 로그인 로그를 감시하고 임계값이나 출발지 범위에 따라 차단 관리 |
| 집계 시간 | 기본 10분, 1~1440분 | 같은 출발지의 실패 횟수를 해당 시간 범위에서 집계 |
| 실패 임계값 | 기본 5회, 1~1000회 | 임계값에 도달하면 차단 목록에 추가 |
| 차단 기간 | 기본 1일, 값 1~365 | 분, 시간 또는 일을 단위로 선택하며 만료 후 자동 해제 |
| SSH 접근 허용 지역 | 기본적으로 비어 있음 | 비어 있으면 지역을 제한하지 않으며 값이 있으면 선택한 지역, 사용자 지정 CIDR 및 기본 로컬 출발지만 허용 |
| 사용자 지정 CIDR | 기본적으로 비어 있으며 한 줄에 하나 | 비표준 VPN, 사무실 공인 인터넷 출구 또는 다른 고정 IPv4/IPv6 네트워크 대역 추가 |
지역은 광역 지역, 기초 지역 및 통신사별로 선택할 수 있습니다. China Telecom, China Unicom 또는 China Mobile별 CIDR 세분화에는 CIDR 주소 데이터베이스 0.1.3 이상이 필요합니다. 지역 목록을 불러올 수 없다면 확인하지 않은 제한 범위를 저장하지 말고 우선 고정 CIDR만 사용합니다.
사용자 지정 CIDR은 페이지에서 검증하며 형식 오류가 있으면 저장할 수 없습니다. 지역 제한을 추가하기 전에 현재 신뢰하는 인터넷 출구와 예비 관리 네트워크를 사용자 지정 CIDR에 먼저 추가합니다.
기본 로컬 출발지에는 loopback, RFC 1918 사설 네트워크, IPv4 링크 로컬, Tailscale의 100.64.0.0/10, IPv6 ULA/링크 로컬 주소가 포함됩니다. 이러한 출발지에는 지역 제한과 로그인 실패 횟수 차단이 적용되지 않으므로 Tailscale 접근은 계속 Tailnet ACL로 제어해야 합니다. Headscale, WireGuard, ZeroTier 등이 다른 주소 풀을 사용하면 실제 출발지 네트워크를 사용자 지정 CIDR에 추가합니다.
방화벽 동기화 및 지우기
“방화벽 동기화”는 SSH 포트를 다시 감지하고 현재 허용 CIDR과 활성 차단을 fn-knock가 관리하는 방화벽 규칙에 기록합니다. 성공 알림에는 다음 항목이 표시됩니다.
- 적용된 허용 CIDR 수
- 다시 동기화된 활성 차단 수
- 감지되어 규칙이 적용된 SSH 포트
SSH 서비스의 포트를 바꾸었거나 시스템 방화벽을 다시 불러왔거나 규칙 상태가 페이지와 일치하지 않으면 동기화를 다시 실행합니다.
“SSH 방화벽 지우기”는 FN-KNOCK-SSH 규칙 체인을 삭제하고 현재 활성 차단을 해제된 상태로 표시합니다. 저장된 지역, CIDR, 임계값 및 기간 설정은 삭제하지 않습니다. 나중에 다시 동기화하면 저장된 설정에 따라 규칙을 다시 만듭니다.
로그인 로그
“로그인 로그” 탭에서는 IP, 사용자 또는 원시 로그를 검색하고 전체, 성공 또는 실패 기준으로 필터링할 수 있습니다. 각 레코드에는 다음 정보가 포함됩니다.
- 시각 및 로그인 결과
- 사용자 이름과 로그인 실패 시 잘못된 사용자 표시
- 출발지 IP 및 위치
- 인증 방식 및 SSH 포트
- 검색과 문제 해결에 사용하는 원시 로그 정보
페이지에 장기간 레코드가 없다면 배포 플랫폼에서 이 기능을 지원하는지, SSH 서비스가 시스템 로그를 기록하고 있는지 먼저 확인하고 fn-knock 서비스에 로그 읽기 권한이 있는지도 점검합니다.
차단 목록
“차단 목록”에는 출발지 IP, 위치, 차단 시각, 만료 시각, 사유, 실패 횟수 및 당시 임계값이 표시됩니다. 차단 사유는 다음과 같습니다.
- 출발지가 허용 지역 또는 사용자 지정 CIDR에 포함되지 않음
- 집계 시간 안에 로그인 실패 횟수가 임계값에 도달함
페이지에서 검색, 페이지 이동, 개별 차단 해제 및 일괄 차단 해제를 지원합니다. 차단을 해제하면 이 기능이 관리하는 방화벽 규칙에서 IP가 제거됩니다. 같은 출발지가 이후 규칙을 다시 위반하면 재차 차단됩니다.
권장 설정 순서
- 지역 제한은 비워 두고 여유 있는 실패 임계값과 차단 기간만 설정합니다.
- 저장 후 신뢰할 수 있는 네트워크와 테스트 네트워크에서 각각 SSH 로그인을 확인합니다.
- 로그인 로그가 사용자, 출발지 IP, 인증 방식 및 포트를 올바르게 식별하는지 확인합니다.
- 고정 VPN, 사무실 인터넷 출구 및 예비 네트워크를 사용자 지정 CIDR에 추가합니다.
- 그다음 지역 제한을 추가해 저장하고 허용되는 출발지와 허용되지 않는 출발지에서 각각 확인합니다.
- 차단, 만료 후 해제, 수동 해제 및 재차 차단이 모두 예상대로 작동하는지 확인합니다.
지역과 CIDR은 보조 판단 수단일 뿐입니다. 모바일 네트워크, 기업 인터넷 출구 및 VPN의 위치는 바뀔 수 있습니다. 관리 진입점에는 SSH 키, 비밀번호 로그인 비활성화, 최소 허용 CIDR, 별도 VPN 경로 및 상위 방화벽 제한이 더 안정적입니다.
자주 묻는 문제
저장 후 규칙 상태가 페이지와 일치하지 않음
“방화벽 동기화”를 실행하고 성공 알림의 SSH 포트를 확인합니다. 호스트의 다른 방화벽 관리자가 규칙을 덮어쓴다면 해당 방화벽을 다시 불러온 뒤 재동기화합니다.
관리 접속 경로가 잘못 차단됨
먼저 로컬 콘솔에서 시스템에 접속해 차단 목록에서 해당 IP의 차단을 해제합니다. 페이지에 들어갈 수 없다면 FN-KNOCK-SSH 규칙 체인을 정리하거나 이 기능을 비활성화한 뒤 신뢰할 수 있는 CIDR을 추가하고 다시 동기화합니다.
지역이 실제 위치와 일치하지 않음
IP 위치 서비스와 CIDR 주소 데이터베이스 버전을 확인합니다. 프록시, VPN, CGNAT 및 통신사의 주소 할당 방식 때문에 출발지 위치가 실제 위치와 다를 수 있습니다.
