Server Install - Docker Image
Sandfly 서버는 사용자 인터페이스(UI), REST API 및 선택적 데이터베이스를 호스팅합니다. Sandfly가 작동하려면 서버 인스턴스가 항상 설치되고 실행되고 있어야 합니다.
이 지침을 따르면 바로 설치하여 실행할 수 있습니다.
설치 아카이브 다운로드
지원되는 모든 환경에서 Sandfly를 설치하고 실행하는 데 필요한 모든 것이 포함된 설치 패키지는 Sandfly Security의 Github에 있습니다. 최신 버전을 얻려면 아래 링크를 방문하세요:
https://github.com/sandflysecurity/sandfly-setup/releases
sandfly-setup-5.5.0.tgz를 호스트에 다운로드한 다음 Sandfly를 설치하고자 하는 위치에 아카이브를 추출합니다(예시 명령에서는 현재 디렉토리를 사용):
wget https://github.com/sandflysecurity/sandfly-setup/releases/download/v5.5.0/sandfly-setup-5.5.0.tgz
tar -xzvf sandfly-setup-5.5.0.tgz아카이브가 추출되면 sandfly-setup이라는 디렉토리가 생성됩니다. 아래의 모든 작업은 이 위치에서 수행됩니다.
컨테이너 도구 설치
Sandfly는 보안 및 성능상의 이유로 모든 것이 컨테이너 내부에서 실행되므로 Docker 또는 Podman을 사용합니다. OS의 배포판에서 제공하는 최신 지원 버전의 Docker 또는 Podman을 사용하는 것이 중요합니다.
지원되는 Docker 호환 배포가 이미 설치되어 있고 최신 상태라면 Start Docker 단계로 진행하세요. Docker 버전은 다음 명령으로 확인할 수 있습니다:
docker -vPodman 설치
RHEL 8 호환 및 신버전
RedHat Enterprise Linux(RHEL) 8 호환 및 신버전 운영 체제에 기본으로 제공되는 Podman 기반 배포의 경우, 먼저 Run Sandfly with Podman 문서에서 찾을 수 있는 단계를 완료하세요. 그런 다음 이 페이지로 돌아와서 Run Server Setup Script 섹션으로 진행하여 서버 설치를 계속하세요.
Docker 설치
중요: Docker의 대체 / 추가 버전을 설치하지 마세요일부 Linux 배포판(snap과 apt를 사용하는 Ubuntu 등) 또는 수동 docker 설치에서는 경고 없이 두 버전의 docker 패키지가 존재할 수 있습니다. 이는 Sandfly 컨테이너를 시작할 때 문제를 일으킬 수 있습니다. 호스트 OS에 지원되는 버전의 docker가 하나만 설치되어 있는지 확인하세요.
중요: CentOS 리포지토리는 Docker에 너무 오래됨일부 Linux 배포판(CentOS 등)에는 Sandfly와 호환되지 않는 오래된 버전의 Docker가 포함되어 있습니다. 지원되는 버전의 Docker가 사용되도록 제공된 스크립트 중 하나를 통해 설치를 수행하세요.
Docker 기반 배포의 경우, 호스트의 운영 체제와 가장 유사한 아래 스크립트 중 하나를 사용하여 최신 지원 버전을 설치하세요:
CentOS 7 호환
~/sandfly-setup/setup/install_docker_centos7.shUbuntu 18 호환
~/sandfly-setup/setup/install_docker_ubuntu18.shUbuntu 20 호환 및 신버전
~/sandfly-setup/setup/install_docker_ubuntu20.shDebian 9 호환 및 신버전
~/sandfly-setup/setup/install_docker_debian.shDocker 시작
Docker 데몬이 자동으로 시작되도록 하거나 Linux에서 다음 명령으로 수동으로 시작할 수 있습니다:
service docker start서버 설정 스크립트 실행
이 스크립트는 PostgreSQL과 관리 컨테이너를 시작하여 로그인에 필요한 테이블과 사용자 정보로 DB를 초기화합니다. 스크립트는 나중에 서버와 스캐닝 노드를 시작하는 데도 사용할 특별한 디렉토리에 비밀 데이터를 출력합니다.
중요: Sandfly 컨테이너의 포트를 변경하지 마세요보안상의 이유로 Sandfly가 자체 가상 머신(VM) 또는 베어메탈 호스트에서 단독으로 실행되도록 강력히 권장합니다. Sandfly는 자체 포트가 변경되면 작동하지 않습니다. 그래도 동일한 호스트에 다른 애플리케이션을 설치하기로 선택한 경우, Sandfly가 계속 작동하려면 충돌하는 포트를 다른 애플리케이션에서 변경해야 합니다.
setup 디렉토리로 이동합니다.
cd ~/sandfly-setup/setup서버 설치 스크립트를 실행합니다.
./install.sh데이터베이스 및 서버 관리 준비
시작하면 설치 스크립트가 자동으로 컨테이너를 로드하고, 로컬에 없으면 다운로드한 다음 데이터베이스와 서버 관리를 구성합니다.
Installing Sandfly server version 5.5.0.
Copyright (c) Sandfly Security LTD, All Rights Reserved.
Welcome to the Sandfly 5.5.0 server setup.
d8319597d9667e9d10960fc13874bb4ec418272edea9c3f1a554adebabc0471b
Starting Postgres database.
Based on 2 CPUs and 2006060kB total RAM, we will start
Postgres with the following settings:
...
Unable to find image 'postgres:14.9' locally
14.9: Pulling from library/postgres
378acb154839: Pull complete
...
79360c1d4f7a: Pull complete
Digest: sha256:9ace7db0a39444eed9d4ad986afd2b49457608ab17954a2eef806ddec992e01d
Status: Downloaded newer image for postgres:14.9
a6c2ec745f7e5c4fb1f939b540136fb238cda4adc525b9dfee97e58929705d33
******************************************************************************
Setting Up Server
The server install script is now starting.
******************************************************************************이 단계에서 설치 스크립트에 오류가 발생하지 않으면 서버 API 설정으로 자동 진행됩니다.
서버 API 호스트명/IP 주소 추가
API 서버는 UI에 액세스하기 위해 연결하는 메인 서버와 동일합니다. 데이터베이스를 호스팅하는 시스템의 IP 주소 또는 호스트명을 입력하세요.
호스트가 DNS로 해석되지 않는 경우 외부 인터페이스 IP 주소를 입력하세요. 그렇지 않으면 서버의 DNS 해석 가능한 완전한 도메인 이름을 입력하세요.
중요: 서버 주소로 Localhost(127.0.0.1)를 사용하지 마세요애플리케이션이 작동하지 않기 때문에 서버 주소로 localhost(127.0.0.1) 또는 기타 루프백 인터페이스를 입력하지 마세요. 이더넷 IP 주소 또는 시스템이 연결에 사용하는 완전한 도메인 이름과 같은 유효한 외부 인터페이스여야 합니다.
예시:
******************************************************************************
Server API Setup
We're going to setup where the server is located so the user interface and
scanning nodes can connect to it.
The entry should be the server fully qualified domain name (FQDN) or the
server IP address. It is important that the address supplied is reachable by
your web browser for the UI and the scanning nodes.
Do NOT use localhost (127.0.0.1) as the address or the server will not work.
It must be an address that is reachable by the server itself and nodes.
******************************************************************************
Please supply the server API hostname or IP address here (NOT localhost): example.sandflysecurity.com또는 호스트에 DNS를 사용할 수 없는 경우 외부에서 접근 가능한 IP 주소를 입력할 수 있습니다:
...
Please supply the server API hostname or IP address here (NOT localhost): 198.51.100.100스크립트는 초기화되는 데이터베이스와 서버 관리에 대한 많은 데이터를 스크롤하여 보여줄 것입니다. 오류가 발생하면 충분한 리소스가 사용 가능한지 확인하세요. 여전히 오류가 발생하면 전체 프로세스의 출력을 복사하여 Sandfly에 도움을 요청하세요.
SSL 설정
이 설치 스크립트는 스캔 노드와 서버에서 사용할 자체 서명된 SSL 키를 자동으로 생성합니다. 설정이 완료된 후에 서명된 키를 만들 기회가 있습니다.
키를 생성할 때 Diffie Hellman 매개변수도 생성합니다. 시스템 및 기타 요인에 따라 시간이 걸릴 수 있습니다. 화면이 계속 변화하는 한 키가 정상적으로 생성되고 있는 것입니다.
*****************************************************************************
*** Creating SSL Keys for Server
*****************************************************************************
*** Using hostname from environment: 198.51.100.100
*** Server SSL key creation completed.Optional: Generate a Signed SSL Certificate
설치 스크립트의 마지막에 서명된 SSL 인증서를 생성하라는 메시지가 표시됩니다. 이는 권장되지만, 내부 시스템에서 Sandfly를 실행하는 경우 내장 스크립트를 사용하여 이를 수행하는 것이 불가능할 수 있으며 이 단계를 건너뛸 수 있습니다.
시스템이 인터넷에 액세스할 수 있고 포트 80에서 도달할 수 있는 경우, 내장 스크립트를 사용하여 서명된 인증서를 만들 수 있습니다. EFF의 Let's Encrypt 서비스를 사용하여 서버용 서명된 인증서를 생성할 수 있습니다. 이렇게 하면 최신 브라우저로 UI에 연결할 때 SSL 오류가 발생하지 않습니다.
중요: 서명 중에 포트 80이 인터넷에서 보여야 합니다!사용 중인 서버가 인터넷에서 도달 가능하고 올바르게 해결되는 정당한 호스트명을 가지고 있는지 확인하세요. EFF 서버가 호스트를 검증하려면 포트 80이 열려 있어야 합니다.
네, 서버는 HTTP 포트(80)에서 EFF 인증서 생성 프로세스에 의해 도달 가능해야 합니다.
Let's Encrypt로부터 인증서를 받은 후에는 이 포트를 다시 차단할 수 있지만, 생성 과정 중에는 열려 있어야 합니다.
호스트명이 정당하고 포트 80이 인터넷에서 도달 가능한지 확인하세요. Let's Encrypt 서비스는 인터넷에서 도달할 수 없는 서버에 대해서는 어떤 인증서도 서명하지 않습니다.
******************************************************************************
Make Signed SSL Key?
If the Sandfly server is able to be seen on the Internet, we can generate a
signed key using EFF's Let's Encrypt Bot. Answer below if you'd like to do
this.
******************************************************************************
Generate signed SSL keys (type YES)? 서명된 SSL 키를 사용할지 여부를 나타냅니다. 그렇다면 인증서 질문에 답하세요:
****************************************************************************
Signed Certificate Install
EFF's Let's Encrypt bot needs your fully qualified hostname to reach this
host. It must be visible online with TCP port 80 access for this to work.
****************************************************************************
What is your fully qualified hostname for the signed SSL cert? example.sandflysecurity.com다음으로 연락처 이메일을 요청받습니다. 인증서에 대한 보안 경고가 있을 경우를 대비하여 유효한 이메일을 입력하는 것을 권장합니다. EFF 메일링 리스트에 가입하거나 거부할 수 있습니다.
서버를 시작할 때 스크립트는 먼저 서명된 버전을 찾고, 존재하지 않으면 서명되지 않은 버전을 사용하려고 시도합니다.
모든 것이 잘 되면 UI에 연결할 때 브라우저에서 유효하지 않은 인증서에 대한 경고가 나타나지 않습니다.
Sandfly를 호스팅하는 내부 서버를 사용하는 경우 아마도 이 방법을 사용할 수 없을 것입니다. 서버 인증서에 서명을 받는 다른 방법을 찾아야 합니다. 자체 서명된 인증서를 사용하고 브라우저에서 수동으로 수락하도록 알려주는 것으로 충분하다면 이 단계를 건너뛰세요.
자체 CA로 서명된 키를 생성하는 방법이 있는 경우, 인증서와 키를 base64로 인코딩하여 setup_data 아래에 위치한 config.server.json 파일의 필드에 배치하면 됩니다:
- server.ssl.server.cert_signed
- server.ssl.server.private_key_signed
설정 완료
설치 스크립트가 완료되면 다음 출력을 볼 수 있습니다.
******************************************************************************
Setup Complete!
Your setup is complete. Please see below for the path to the admin password to
login.
You will need to go to /root/sandfly-setup/start_scripts and run the following to start the
server:
./start_sandfly.sh
Your randomly generated password for the admin account is located under:
/root/sandfly-setup/setup/setup_data/admin.password.txt
******************************************************************************admin 패스워드는 랜덤으로 생성된 diceware 단어 문자열입니다. 로그인한 후 변경할 수 있으며, 생성된 패스워드는 더 이상 작동하지 않습니다.
cat ~/sandfly-setup/setup/setup_data/admin.password.txt
agentless-proof-hardened-heroic-utility-shells-sandfly서버 시작
이제 서버를 시작할 시간입니다. start_scripts 디렉토리로 이동하여 start_sandfly.sh 스크립트를 실행하세요.
cd ~/sandfly-setup/start_scripts/
./start_sandfly.sh
*** Starting Postgres.
...
*** Starting Sandfly Server.
...
<server is started>설치 후 서버를 시작할 때, 노드 설치 지침에 자세히 설명된 대로 박사하고 삭제할 때까지 노드 구성이 존재합니다. 이 경우 서버를 처음 실행할 때 다음 경고가 나타납니다:
********************************* WARNING *********************************
* *
* The node config data file at: *
* ../setup/setup_data/config.node.json *
* is present on the server. *
* *
* This file must be deleted from the server to fully protect the SSH keys *
* stored in the database. It should only be on the nodes. *
* *
********************************* WARNING *********************************
Are you sure you want to start the server with the node config data present?
Type YES if you're sure. [NO]: YES지금은 YES를 입력하고 엔터를 누르세요. 노드 설치 지침에 따라 구성을 복사한 후 노드 구성 JSON을 삭제하면 더 이상 이 경고가 나타나지 않습니다.
표준 보안 설치 경고 무시
동일한 시스템에서 서버와 노드로 표준 보안 모드를 실행하는 경우 노드 구성 파일이 존재한다는 이 경고를 무시할 수 있습니다.
컨테이너 실행 상태 확인
PostgreSQL과 Sandfly 서버 컨테이너가 실행 중인지 확인하세요:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b24ab50f1c5 quay.io/sandfly/sandfly:5.5.0 "/opt/sandfly/start_…" 4 seconds ago Up 3 seconds 0.0.0.0:80->8000/tcp, :::80->8000/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp sandfly-server
f23041d1b2b4 postgres:14.15 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 5432/tcp sandfly-postgres다음으로, 웹 인터페이스에 로그인할 수 있도록 admin 사용자에 대해 생성된 diceware 패스워드를 복사하세요:
cat ~/sandfly-setup/setup/setup_data/admin.password.txt
agentless-proof-hardened-heroic-utility-shells-sandfly브라우저로 서버 액세스
Sandfly 서버의 새 웹 서버 주소로 이동하세요. 예를 들면:
https://example.sandflysecurity.com/
유효한 인증 기관으로 인증서에 서명하지 않은 경우 경고가 표시됩니다. 테스트하는 동안은 이를 무시할 수 있습니다. 그러나 운영 목적으로는 서명된 인증서를 사용하는 것을 권장합니다.
로그인 화면에서 사용자 이름 admin과 이 과정에서 생성된 diceware 패스워드를 입력하세요. 인증이 성공하면 Sandfly 관리용 사용자 인터페이스가 열립니다.
이제 서버가 준비되었습니다. 다음으로 노드를 로드하고 모든 것을 연결해보겠습니다.
Updated 7 days ago