보안
어플라이언스는 사용자가 운영하는 하드웨어와 네트워크에서 실행됩니다. IronFlock은 소프트웨어와 그 기본 설정을 제공하지만, 어플라이언스가 얼마나 잘 보호되는지는 선택한 모드, 주변 네트워크, 그리고 어플라이언스가 실행되는 호스트에도 달려 있습니다. 이 페이지는 그 부분을 위한 체크리스트입니다.
모드별 보호 범위
어플라이언스는 HTTPS 및 인증서에서 설명하는 세 가지 모드 중 하나로 실행됩니다. 모드에 따라 암호화되고 검증되는 대상이 다릅니다:
| 일반 HTTP (기본값) | 자체 발급 CA를 사용하는 HTTPS | 회사 인증서를 사용하는 HTTPS | |
|---|---|---|---|
| 브라우저에서 어플라이언스로 | 암호화되지 않음 | HTTPS | HTTPS |
| 로그인 쿠키 | Secure 속성 없음 | Secure 속성 있음 | Secure 속성 있음 |
디바이스 연결 (포트 18080) | 암호화되지 않음 | 암호화되지 않음 | 443에서 HTTPS |
| 디바이스용 앱 이미지 및 에이전트 업데이트 | 암호화되지 않음 | 암호화되지 않음 | 443에서 HTTPS |
| 디바이스의 원격 접근 터널 | 암호화됨, 서버 미검증 | 암호화됨, 서버 미검증 | 암호화 및 검증됨 |
| 패스키 및 보안 키 | 어플라이언스 자체에서만 | 사용 가능 | 사용 가능 |
어플라이언스가 다른 시스템과 네트워크를 공유하는 곳에서는 회사 인증서를 사용하는 HTTPS를 사용하십시오. 연결된 디바이스가 통신 상대를 검증하는 모드는 이것뿐입니다. 나머지 두 모드는 어플라이언스, 그 디바이스, 그리고 운영자만 도달할 수 있는 네트워크 세그먼트에 적합합니다.
암호화되지 않는 트래픽
HTTPS를 사용하더라도 일부 트래픽은 암호화되지 않습니다. 이를 고려하여 네트워크를 계획하십시오:
- 포트
18080의 디바이스 연결은 모든 모드에서 모든 네트워크 인터페이스에 게시됩니다. 어플라이언스 자체의 디바이스 에이전트와 어플라이언스에서 실행되는 앱이 여기에 연결하며, 일반 모드와 자체 발급 CA 모드에서는 연결된 모든 디바이스도 여기에 연결합니다. - 어플라이언스로 향하는 원격 접근 터널(포트
7000)은 일반 모드와 자체 발급 CA 모드에서도 암호화되지만, 디바이스는 어플라이언스의 인증서를 확인할 수 없습니다. 네트워크 경로에 접근할 수 있는 사람이 어플라이언스의 터널 서버를 사칭할 수 있습니다. 이 방식으로 연결하면 디바이스 에이전트가 경고를 로그에 남깁니다. - 데이터베이스 연결과 같은 어플라이언스 내부 서비스 간 연결은 암호화되지 않습니다. 이 연결은 호스트 밖으로 나가지 않습니다.
- 어플라이언스는 저장 데이터를 암호화하지 않습니다. 어플라이언스가 민감한 데이터를 저장하거나 사업장 밖으로 반출될 수 있다면, 호스트 운영체제나 디스크의 암호화 기능을 사용하십시오.
보안 강화 체크리스트
- 네트워크에 맞는 모드를 선택하십시오(모드별 보호 범위 참조).
- 어플라이언스 포트에 도달할 수 있는 대상을 제한하십시오. 설치 프로그램은 방화벽에서 아무것도 열지 않으며, Docker는 호스트 방화벽의 일반적인 입력 규칙(
ufw,firewalld)을 거치지 않고 어플라이언스의 포트를 게시합니다.DOCKER-USER체인이나 네트워크 방화벽에서 필터링하십시오. 설치 프로그램은/opt/ironflock/docker-user-firewall.sh.example에 템플릿을 남겨 둡니다. 디바이스 포트(18080,15001,15002,7000,30000–30049)는 디바이스 네트워크에서만 허용하십시오 — 어플라이언스에 연결하는 디바이스를 참조하십시오. - 호스트 운영체제를 최신 상태로 유지하고, 호스트에 계정을 가진 사람을 제한하십시오. 호스트의 root 권한을 가진 사람은 어플라이언스의 모든 시크릿을 읽을 수 있습니다.
- 호스트에 대한 관리 접근에는 비밀번호 대신 SSH 키를 사용하십시오.
- 시간 동기화를 구성하십시오 — 시간 동기화 (NTP)를 참조하십시오.
- 첫 로그인 후 admin 비밀번호를 변경하고 admin 계정에 이중 인증을 설정하십시오.
- 모든 계정에 이중 인증이 설정되면 모든 사용자에게 이중 인증을 의무화하십시오(계정 및 접근 참조).
- 인스턴스를 소유한 ironflock.com 계정을 이중 인증으로 보호하십시오. 이 계정은 클라우드에서 어플라이언스에 대한 관리자 접근 권한을 가집니다.
- 신뢰할 수 있는 앱만 설치하십시오. 앱은 어플라이언스와 디바이스에서 어플라이언스의 구성 파일을 포함하여 호스트에 대한 광범위한 접근 권한을 가지고 실행됩니다.
- 어플라이언스를 최신 상태로 유지하십시오(업데이트 참조).
계정 및 접근
- admin 계정: 모든 어플라이언스는 설치 시 고유한 admin 비밀번호를 받으며, 설치 프로그램은 이를 한 번만 표시합니다. 분실한 경우 로컬 운영에 설명된 대로 새 비밀번호를 설정하십시오 — 이렇게 하면 모든 admin 세션도 로그아웃됩니다.
- 새 사용자는 어플라이언스의 프로젝트에서 받은 초대가 있어야만 가입할 수 있습니다. 초대가 없으면 소셜 로그인을 통한 가입도 거부됩니다.
- 이중 인증: 사용자는 인증 앱(TOTP), 패스키 또는 보안 키, 복구 코드를 설정할 수 있습니다. 패스키와 보안 키에는 HTTPS가 필요합니다. 정책은 설치 프로그램 옵션
--2fa로 설정하며, 업데이트 후에도 유지됩니다:available— 사용자가 이중 인증을 설정할 수 있지만, 입력을 요구받지는 않습니다.effective(기본값) — 이중 인증을 설정한 사용자는 이를 사용해야 합니다.required— 모든 사용자가 이중 인증을 사용해야 합니다. 먼저 모든 계정에 이중 인증이 설정되어 있는지 확인하십시오. 설정하지 않은 사용자는 더 이상 로그인할 수 없습니다.
- 세션은 24시간 동안 유지됩니다.
- ironflock.com에서의 접근: Instance Key를 생성한 ironflock.com 계정은 어플라이언스의 admin 계정에 연결됩니다. 초대한 사용자는 각자의 ironflock.com 계정을 연결합니다 — 계정 연결을 참조하십시오. 사용자는 언제든지 이 연결을 해제할 수 있습니다.
호스트의 시크릿
설치 프로그램은 설치 시 어플라이언스의 시크릿을 한 번 생성하고, 업데이트 후에도 유지합니다. 시크릿은 /opt/ironflock/ 아래에 있습니다:
| 파일 | 내용 | 접근 권한 |
|---|---|---|
.env | 모든 서비스의 비밀번호와 키, 초기 admin 비밀번호, 프록시 및 SMTP 자격 증명 | root만 (0600) |
license.env | 라이선스 키와 Instance Key | root와 IronFlock 서비스 (0640) |
certs/ | HTTPS 인증서와 키, 자체 발급 CA의 경우 CA의 키도 포함 | 개인 키는 root만 (0600) |
registry-token-certs/ | 앱 이미지 가져오기 토큰에 서명하는 키 | 레지스트리 서비스만 (0600) |
설치 프로그램은 라이선스 키로 Docker를 IronFlock 레지스트리에 로그인시키므로, root의 Docker 구성에도 라이선스 키가 저장됩니다.
이 파일들을 백업에 포함하고, 백업도 어플라이언스 자체와 마찬가지로 보호하십시오.
직접 교체할 수 있는 항목:
- admin 비밀번호: 프로필에서 변경하거나, 로컬 운영의 재설정 명령을 사용합니다.
- HTTPS 인증서:
certs/의 파일을 교체합니다. 어플라이언스가 새 인증서를 자동으로 적용합니다. - 라이선스 키: admin 프로필의 라이선스 섹션에서 변경합니다.
- SMTP 및 프록시 자격 증명:
.env에서 변경한 후sudo systemctl restart ironflock.service로 재시작합니다.
내부 서비스 시크릿에 대해서는 IronFlock 팀에 문의하십시오.
아웃바운드 연결 및 텔레메트리
어플라이언스가 연결하는 대상은 방화벽 구성에 나와 있으며, 이 연결은 모두 암호화됩니다.
- 라이선스 검증 시에는 라이선스 키, 하드웨어 지문, 그리고 온라인 App Store에 대한 어플라이언스 연결의 접근 토큰이 전송됩니다.
- AI 어시스턴트는 자체 게이트웨이를 구성하지 않는 한 IronFlock의 LLM 게이트웨이를 통해 프롬프트를 전송합니다.
- 텔레메트리 없음. 어플라이언스는 사용 분석 데이터를 전송하지 않습니다. 어플라이언스 UI와 서비스 모두 IronFlock이나 제3자에게 사용 현황을 보고하지 않습니다.
- 사용자의 브라우저에서: 지도 타일은 Mapbox에서 로드되며, 음성 입력에는 음성 인식 서비스 Deepgram이 사용됩니다. 이 연결은 어플라이언스가 아니라 브라우저가 만듭니다.
업데이트
- 어플라이언스 업데이트는 admin이 시작합니다(유지 관리 참조). 어플라이언스는 업데이트를 HTTPS로 다운로드하며, 업데이트가 실패하면 자동으로 롤백합니다.
- 디바이스 에이전트 업데이트는 서명되어 있습니다. 모든 에이전트는 업데이트를 적용하기 전에 서명을 확인하고, 새 버전이 시작되지 않으면 롤백합니다 — 디바이스 에이전트 업데이트를 참조하십시오.
- Docker를 포함한 호스트 운영체제는 사용자의 책임입니다.
백업 및 복원
어플라이언스에는 내장 백업 기능이 없습니다. 백업하려면 sudo systemctl stop ironflock.service로 어플라이언스를 중지하고 다음을 복사하십시오:
.env,license.env,certs/,registry-token-certs/를 포함한/opt/ironflock/폴더- 데이터베이스, 파일, local App Store, 사용자 파일이 저장된 어플라이언스의 Docker 볼륨(
docker volume ls)
.env는 같은 시점의 볼륨과 함께 보관하십시오. 볼륨의 암호화된 데이터는 해당 .env에 있는 키로만 읽을 수 있습니다.
폐기
-
어플라이언스가 아직 온라인 상태일 때 라이선스를 이전하거나 해제하십시오 — 새 하드웨어로 라이선스 이전을 참조하십시오.
-
소프트웨어를 제거하십시오:
sudo systemctl disable --now ironflock.service sudo docker compose -f /opt/ironflock/docker-compose.yml \ --env-file /opt/ironflock/.env down -v sudo rm -rf /opt/ironflock설치 프로그램은 라이선스 키로 Docker를 IronFlock 레지스트리에 로그인시켰으므로, 그 로그인도 제거하십시오:
sudo docker logout instance-registry.ironflock.com -
하드웨어가 사업장 밖으로 반출되는 경우 디스크를 완전히 지우십시오 — 위 명령은 파일을 삭제하지만 덮어쓰지는 않습니다.
보안을 약화시키는 설정
일부 설정은 문제 해결 전용입니다. 프로덕션 환경에서는 설정하지 마십시오:
TUNNEL_TLS_INSECURE_SKIP_VERIFY및CLOUD_TUNNEL_TLS_INSECURE_SKIP_VERIFY— 원격 접근 터널의 인증서 확인을 끕니다.AGENT_UPDATE_ALLOW_UNSIGNED— 디바이스 에이전트가 서명되지 않은 업데이트를 적용할 수 있게 합니다.TUNNEL_AUTHZ_ENFORCE=false— 디바이스가 자신의 ID를 증명하지 않고도 터널을 열 수 있게 합니다.SMTP_CONNECTION_URI의?tls.rejectUnauthorized=false— 메일 서버의 모든 인증서를 수락합니다.--2fa available— 이중 인증을 전혀 요구하지 않습니다.