How to Build and Operate a ZenCash Secure Node – Complete Guide <Translated Kor>


#1

보안노드 기본 요구 사항


보안노드의 기본 요구 사항을 충족하려면 서버는 64비트 프로세서 및 운영체제가 필요합니다. 또한 적절한 갯수의 프로세서 코어와 총 4GB의 메모리에 대한 액세스가 필요합니다. 저장 액세스가 충분히 빠르다면 스왑을 포함 할 수 있습니다.

ZenCash의 보안노드 지불자격을 얻기 위해서는 보안 노드 서버가 5분이나 300초 이내에 챌린지 계산을 수행할 수 있어야 합니다. 서버의 적합성을 입증함과 동시에 하루에 많은 수의 차폐된 거래를 생성하는것을 돕는 챌린지는 차폐된 거래를 생성하여 차폐된 거래의 모든 사용자의 보안을 강화합니다.

일부 서버의 경우는 1GB RAM VPS 패키지 정도면 좋습니다. 다른 제공의 경우에는 4GB의 메모리가 있는 VPS를 임대해야할 필요성이 있습니다.

또한 고유한 IPv4 또는 IPv6 주소가 필요하며 인증기관에서 생성 한 TLS 인증서가 필요합니다. 이것은 당신이 도메인 이름까지 필요하다는 것을 의미합니다. 이 가이드를 통해 당신은 서버에서 스크립트를 실행하여 무료 인증서를 얻는 방법을 알 수 있습니다. 하지만 물론 보안노드에 대한 인증서를 구입하는 것이 더 비용이 들기는 하지만 더 안전합니다.

이 가이드를 통해 Ubuntu 16.04를 사용하여 설치하는 방법을 알 수 있습니다. 리눅스나 유닉스의 다른 버전들 또한 잘 작동할 것입니다. 그리고 이 가이드는 경험이 많은 리눅스 시스템 관리자가 명령어를 빨리 복사하고 붙여넣기 위해 고안된 기본 안내서입니다.


VPS 또는 당신의 고유한 서버에 Linux를 설치하십시오.

Root User로 설치하지 마십시오!

Non-root user를 설정하는 방법과 기본 인증을 구성하는 방법을 모르는 경우 How to Set Up a VPS 에 대한 자습서를 참조하십시오

또한 일반 사용자를 위한 서버를 설정하는 방법을 모르는 경우 Linode에 있는 튜토리얼을 사용하여 방법을 알 수 있습니다:

Getting Started on a Linode VPS


ZenCash 노드 만들기

도움이 필요하면 ZenCash Discord 에 가입하고 #securenodes 채널에 도움을 요청하십시오.

사용 가능한 메모리 및 하드 드라이브 공간을 확인하십시오:

free -h
df -h

기존의 메모리와 스왑을 추가할 때 5GB 이상의 메모리가 있지 않다면 서버에 스왑 공간을 추가하십시오:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

재부팅 후에 스왑을 다시 만드십시오:

sudo su -
cat <<EOF >> /etc/fstab
/swapfile none swap sw 0 0
EOF
exit

아무것도 추가하지 않더라도 이 작업을 수행함으로써 기존 당신의 스왑이 일을 더 잘 수행하게 만들어줍니다. 이 설정은 하드 드라이브를 메모리로 사용하기 전에 메모리가 90% 사용될 때까지 서버를 대기시키도록 만들어줍니다:

sudo su -
cat <<EOF >> /etc/sysctl.conf
vm.swappiness=10
EOF
exit

여유 메모리와 하드디스크 공간을 다시 한 번 확인합니다:

free -h
df -h

옵션 1 - 패키지에서 ZEN을 설치하기 - 더 빠름

이 페이지의 페키지에서 ZEN을 설치하십시오 - https://zencashofficial.github.io/repo/

sudo apt-get update
sudo apt-get install apt-transport-https lsb-release

echo 'deb https://zencashofficial.github.io/repo/ '$(lsb_release -cs)' main' | sudo tee --append /etc/apt/sources.list.d/zen.list
gpg --keyserver ha.pool.sks-keyservers.net --recv 219F55740BBF7A1CE368BA45FB7053CE4991B669
gpg --export 219F55740BBF7A1CE368BA45FB7053CE4991B669 | sudo apt-key add -

sudo apt-get update
sudo apt-get install zen # to install Zen
zen-fetch-params

옵션 1 끝 - 패키지에서 ZEN 설치하기

페이지 하단의 소스에서 빌드 하기 위한 옵션 2를 볼 수 있습니다.


ZEN 구성하기

zend를 한번 실행하고 메시지를 읽으십시오. 그런다음 중지합니다.

zend

새 zen 파일 구성을 시작합니다. 다음 코드를 복사하여 명령줄에 붙여넣어주세요 :

cat <<EOF > ~/.zen/zen.conf
rpcuser=zenuserorsomebettername
rpcpassword=replacethiswithagoodpassword
rpcport=18231
rpcallowip=127.0.0.1
server=1
daemon=1
listen=1
txindex=1
logtimestamps=1
### testnet config
#testnet=1
EOF

Zen 응용 프로그램을 데몬으로 실행하십시오 :

zend

상태를 확인하고 블록이 증가하고 있는 지 확인하십시오 :

zen-cli getinfo


LetsEncrypt 에서 무료 인증서 설치

도메인의 DNS 컨트롤 패널에서 호스트에 대한 A 레코드를 만듭니다.

단어가 <CAPS>인 경우 적절한 값을 입력해야 합니다. 예를 들어, ZenCash 블로그의 서버의 <FQDN>은blog.zensystem.io 입니다.

도메인 이름이 전파되었는지를 확인하고 서버의 공용 IP 주소와 일치하는지 확인하십시오:

ping <FQDN>

인증서 생성을 위해 acme 스크립트를 설치하십시오 :

sudo apt install socat
cd 
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install

인증서를 생성하십시오 :

FQDN=<FQDN>
echo $FQDN
sudo ~/.acme.sh/acme.sh --issue --standalone -d $FQDN 

이 작업은 인증서들이 어디에 있는지 당신에게 알려줍니다. 인증서들은 ~/.acme.sh/<FQDN> 에 있어야합니다.

스크립트의 유효기간을 점검하고 필요한 경우 갱신하는 crontab을 설치하십시오:

sudo crontab -e

crontab 파일의 하단에 이것을 넣으세요:

6 0 * * * "/home/<USER>/.acme.sh"/acme.sh --cron --home "/home/<USER>/.acme.sh" > /dev/null

중간 기관 인증서를 Ubuntu 인증서 저장소로 복사하고 설치하십시오. 이를 수행하는 가장 효율적인 방법은 다음 섹션을 메모장과 같은 텍스트 파일에 복사하여 <USER><FQDN> 필드에 실제 사용자 이름과 FQDN을 대체할 것을 넣은 다음 업데이트 된 텍스트를 복사하여 Linux 명령줄에 붙여 넣는 것입니다. 나머지 가이드를 위해 로그인 한 동안에는 맨 위의 FQDN 행을 한번 이상 복사하여 붙여 넣지 않아도 됩니다. CA 인증서 메뉴를 탐색하려면 tab, space, enter을 사용하십시오:

FQDN=<FQDN>
echo "<USER> is $USER" 
echo "<FQDN> is $FQDN"
sudo cp /home/$USER/.acme.sh/$FQDN/ca.cer /usr/share/ca-certificates/ca.crt
sudo dpkg-reconfigure ca-certificates

ZEN 응용프로그램을 중지시키고 인증서 위치를 구성한 다음에 zend를 다시 시작하십시오:

FQDN=<FQDN>
zen-cli stop
cat <<EOF >> ~/.zen/zen.conf
tlscertpath=/home/$USER/.acme.sh/$FQDN/$FQDN.cer 
tlskeypath=/home/$USER/.acme.sh/$FQDN/$FQDN.key
EOF
zend

TLS 인증서의 상태가 정상인지 확인하십시오. 라인에는 “tls_cert_verified”: true 라고 표시되어야 합니다.

zen-cli getnetworkinfo


보안 노드 요구 사항 구성

Swing 지갑에 새로운 거래 주소를 생성하십시오 - 이 주소에 42 ZEN을 보내십시오. 이것은 담보 주소인 <T_ADDR>입니다. 그리고 ZEN이 그 주소에 여전히 존재하고 있는지 확인하십시오. 존재하지 않는다면 보안 노드가 검사를 통과하지 못합니다.

노드에 이미 차폐 주소가 생성되어있는지 확인하십시오:

zen-cli z_listaddresses

생성되어있지 않다면 새로운 차폐 주소를 Zen 노드에 생성하십시오:

zen-cli z_getnewaddress

이렇게 생성 된 주소를 <Z_ADDR>이라고 합니다. PC 또는 MAC에서 실행 중인 ZenCash 지갑에서 0.1에서 0.25 사이의 4 또는 5 거래를 <Z_ADDR>로 보냅니다. 노드에 자금이 있는지 확인하십시오. ZEN이 1개 이상 준비가 되있어야 합니다:

zen-cli z_gettotalbalance

잔액이 여전히 0이라면 블록체인이 완전히 업데이트 되지 않을 수 있습니다. 명령으로 확인하십시오.

zen-cli getinfo
또는
watch zen-cli getinfo

Tracker 응용 프로그램을 설치하십시오. 만약 Tracker 프로그램을 업그레이드 하는 경우 다음 링크의 업그레이드 지침을 읽으십시오: https://github.com/ZencashOfficial/secnodetracker

npm과 Node.js 를 설치하십시오:

sudo apt -y install npm
sudo npm install -g n
sudo n latest

이 저장소를 복제 한 다음에 노드 모듈을 설치하십시오:

mkdir ~/zencash
cd ~/zencash
git clone https://github.com/ZencashOfficial/secnodetracker.git
cd secnodetracker
npm install

노드 설치 프로그램을 실행하십시오. 알람을 받으려면 <T_ADDR>과 이메일 주소가 필요합니다.

node setup.js

Tracking 프로그램을 실행시키고 정상 동작 하는지 확인해보십시오:

node app.js

보안 노드 트래커 웹 사이트에서 당신의 노드 상태를 확인하십시오:

https://securenodes2.zensystem.io/

제대로 등록 된 것 처럼 보이고 전반적으로 보기 좋다면 ctrl-c를 입력하여 앱을 중지 하십시오. 다음으로 node 프로그램을 프로세스로 실행합니다. 참조는 https://www.zen-solutions.io/using-pm2-to-keep-your-secnodetracker-software-running-when-you-close-the-terminal-session/ 에서 하실 수 있습니다.

cd ~/zencash/secnodetracker/
sudo npm install pm2 -g
pm2 start app.js --name securenodetracker

부팅 시 실행되도록 설정합니다:

pm2 startup

부팅 할 때 pm2가 시작되도록 명령을 복사하여 붙여넣기 해야 합니다.

Zen 노드 응용 프로그램이 실행되도록 monit을 설치하고 구성하십시오. 다음과 같이 monit을 설치합니다:

sudo apt install monit

zend를 실행하기 위한 작은 파일을 만듭니다. 다음과 같이 수정합니다:

nano ~/zen_node.sh
or 
vim ~/zen_node.sh

이것을 파일에 붙여 넣으십시오. 실제 사용자 이름을 <USER>로 대체하십시오.

#!/bin/bash

PID_FILE='/home/<USER>/.zen/zen_node.pid'

start() {
       touch $PID_FILE
       eval "/bin/su <USER> -c '/usr/bin/zend 2>&1 >> /dev/null'"
       PID=$(ps aux | grep zend | grep -v grep | awk '{print $2}')
       echo "Starting zend with PID $PID"
       echo $PID > $PID_FILE
}
stop () {
       pkill zend
       rm $PID_FILE
       echo "Stopping zend"
}

case $1 in
    start)
       start
       ;;
    stop)  
       stop
       ;;
     *)  
       echo "usage: zend {start|stop}" ;;
 esac
 exit 0

도우미 파일을 실행 가능하게 만듭니다:

chmod u+x ~/zen_node.sh

편집을 통해 monitors 구성 하단에 구성 설정을 추가하십시오:

sudo nano /etc/monit/monitrc 
or 
sudo vim /etc/monit/monitrc

이것을 하단의 파일에 붙여 넣으십시오. <USER>에 실제 사용자 이름을 입력하십시오:

### added on setup for zend
set httpd port 2812
use address localhost # only accept connection from localhost 
allow localhost # allow localhost to connect to the server
#
### zend process control
check process zend with pidfile /home/<USER>/.zen/zen_node.pid
start program = "/home/<USER>/zen_node.sh start" with timeout 60 seconds
stop program = "/home/<USER>/zen_node.sh stop"

새로운 구성을 로드합니다:

sudo monit reload

모니터링 서비스가 가능하게 합니다:

sudo monit start zend

다 왔습니다. 위의 작업을 한 번만 수행하면 됩니다. 다음 명령을 사용하여 monit의 상태를 확인 할 수 있습니다:

sudo monit status

이렇게 하면 zend 응용 프로그램이 계속 실행됩니다. 중지해도 다시 시작 될 것입니다. 정말로 중지하고 싶다면 다음을 입력하십시오:

sudo monit stop zend


서버에 기본 보안 추가

방화벽 만들기:

sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow ssh/tcp
sudo ufw limit ssh/tcp
sudo ufw allow http/tcp
sudo ufw allow https/tcp
sudo ufw allow 9033/tcp
sudo ufw logging on

sudo ufw enable

dictionary 공격을 통한 로그인 시도 금지가 가능하게 설치하십시오:

sudo apt -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

rootkit 탐지기를 설치하십시오:

sudo apt -y install rkhunter

메일 구성을 묻는 메시지가 나타나면 인터넷 사이트를 선택하고 다음 페이지에서 당신의 FQDN을 입력하십시오. 당신의 노드를 업그레이드 한 후 rootkit 헌터를 업데이트 하는 업그레이드 스크립트를 만듭니다:

cat <<EOF > ~/upgrade_script.sh
#!/bin/bash
sudo apt update
sudo apt -y dist-upgrade
sudo apt -y autoremove
sudo rkhunter --propupd
EOF

스크립트를 실행 가능하게 하는 권한을 변경합니다:

chmod u+x ~/upgrade_script.sh

노드를 업그레이드 하려면 다음을 입력하여 업그레이드 스크립트를 실행하십시오:

sudo ~/upgrade_script.sh

당신은 이제 ZenCash 보안노드를 실행해야 합니다. 당신이 챌린지 타임을 성공적으로 볼 수 있길 바랍니다.


마지막 테스트

서버를 재부팅 하고 모든 백업들이 정상적으로 로드되는지와 실행되는 지를 다시 확인하십시오:

sudo reboot

리붓이 되면 연결이 다시되고 채크가 시작됩니다:

sudo monit status
pm2 status
zen-cli getinfo
zen-cli getnetworkinfo

이게 기본적인 보안노드의 모든 것입니다. 만약 이 것을 보다 잘, 이것과 다르게, 또는 다른 스타일로 할 수 있는 방법이 있습니까? 그렇다면 가이드에서 당신이 가이드보다 더 잘 한 것에 대하여 댓글을 통해 알려주십시오.


2017. 12. 24일의 업데이트

보안노드를 보다 잘 설정하고 운영하는 방법에 대한 Discord 커뮤니티 회원 PeaStew의 댓글이 있습니다. 제가 기회가 될 때 이 안내서를 검토하고 업데이트 할 것입니다.

지난 달에 블로그를 못들어왔습니다. 마이닝 공장을 400 마이너로 업그레이드하고, 현장 모니터링을 실시하였으며, ZenCash 관련 여행을 해야했습니다. 또한 가족과 즐거운 연휴를 보내기에 충분한 시간을 냈어야했습니다.


PeaStew의 추천 방법입니다.


1. 서버/VPS 사양:

1-1.
4GB의 총 메모리(RAM+Swap) 권장 사항이 잘못 되었으므로 최대 6GB(RAM+Swap)가 필요합니다. 일부는 3-4 스왑으로 2-3GB로 성공했지만 대부분은 실패하였습니다. 최소 용량은 4GB RAM + 2GB 스왑이어야 합니다. 이 초기 명령문은 스왑 지침에도 모순이 있습니다.”기존 Men 및 스왑을 추가할 때 4GB 이상의 메모리가 없는 경우 서버에 스왑 공간을 추가하십시오.”

1-2.
linode에 대한 링크는 도움이 되지 않습니다. 사람들은 챌린지를 수행할 수 없는 1GB linode VPS를 주분하고 있습니다. 4GB 이상의 RAM이 있는 서버(DDoS 보호 기능이 있는 OVH를 비롯한 여러 호스트를 사용할 수 있음)로 링크를 업데이트 하거나 링크를 제거하고 필요한 사항을 업데이트 하십시오.

1-3.
하드드라이브의 최소 사양은 없습니다. 그렇기때문에 사람들이 스왑을 사용해야 할 경우 SSD를 사용하는 것이 더 빠르기 위해서 필수적입니다.


2. zend: 사람들에게 더 명확하게 전달할 수 있는지는 잘 모르겠으나 옵션 1과 옵션 2를 더 잘 설명해야 합니다.

2-1.
두 가지를 다 하는 사람들이 많습니다, 혼란을 정리해야합니다. 옵션2는 가이드의 일부가 아닌 별도의 링크로 이동하는 것이 좋습니다.
2-2.
옵션1은 개별 수준 뿐만 아니라 네트워크 전체에 대해서도 단지 빠른 것 뿐만이 아니라 유지보수가 훨씬 쉽습니다.
2-3.
옵션 2는 느린 것만은 아닙니다. 바이너리가 일반적으로 사전에 적절히 생성 된 것보다 좋지 않으므로 수행중인 작업을 알고 있더라도 거의 이점이 없습니다. dev 브랜치에 대한 테스트의 사용 케이스는 매우 작은 부분이라 메인스트림에서는 무시해도 됩니다.


3. LetsEncrypt: psyrax의 블로그 링크도 포함해주십시오: https://www.zen-solutions.io/loading-lets-encrypt-certificate-chain-to-the-trusted-store-on-centos/ 이 가이드는 Ubuntu 용이지만 다른 가장 일반적인 서버 유형은 CentOS이며 이것은 사람들이 많이 실패하는 이유입니다. 이 링크에서는 CentOS를 다룹니다.


4. The cat <… commands for swap/sysctl/zen.conf etc., while technically sound: //<…swap\sysctl\zen.conf 등 이런 명령

4-1.
당신이 제안하는 것 처럼 명령줄에서 실행하기 보다는 사람들이 파일 전체를 복사하기 때문에 더 많은 문제가 발생합니다. 복사 가능한 명령을 제안하십시오.
4-2.
foreseeable 문제는 (a)pwgen의 귀여운 사용이지만 솔직히 zen daemon은 이미 127.0.0.1에 바인딩 되어 있으므로 로그인/암호 등 세부정보는 문제되지 않습니다. 서버 자체가 안전하지 않은경우(6 참조) 서버 자체가 해킹 당하면 zen.conf가 읽기와 쓰기가 가능하기 때문에 다소 관련이 없습니다.


5. 가이드에는 더 많은 보안이 필요합니다.

5-1.
linux/Mac/windows(Puttygen)에서 SSH를 위한 비공개 및 공개 키를 만드는 방법에 대한 링크는 이와 같은 안내서에서 필수적입니다.
5-2.
(edited) /etc/ssh/sshd_config를 수정하여 루트 로그인을 끄고 비밀번호를 끄는 방법((a) 포함)이 필요합니다.


6. pm2:

6-1.
“부팅할 때 pm2를 시작하기 위해 명령을 복사하여 붙여 넣어야 합니다.”라는 메시지가 도움이 되지 않습니다. Sudo env… 로 시작하는 실제 명령은 강조 표시되지 않았고 90%의 사람들에게 처음으로 포함 된 명령은 누락되었습니다. 명령이 어떻게 생겼는지 지정해주어야합니다.
6-2.
최신 버전의 pm2가 올바르게 설치되지 않아 부팅 할 때 다시 시작됩니다. Psyrax의 링크인 : https://www.zen-solutions.io/latest-version-of-pm2-not-working-properly-with-ubuntu-16-04-lts/(edited) 에 설명 된 대로 버전이 잠겨야 합니다.


7. 테스트넷 단계는 노드 소유자가 해야 할 일을 잘 모르는 경우에 유용하지만 실제로 필수는 아니며 실제로(테스트 네트워크와 주요 블록체인을 동기화 해야 하기 때문에)일반적으로 더 빠르고 확실히 훨씬 빠릅니다. 보통 그 단계를 완전히 건너 뜁니다.


8. 또한 ZEN을 메인노드로 직접 이동하는 노드에 필요한 야을 줄이십시오. 1ZEN이라는 제안은 여러 챌린지 과제와 일을 기준으로 했으므로 이제는 하루에 단 한번만 5*0.03 지급이 3년 지속됩니다. 이는 대부분의 사람들의 경우에 충분합니다.
8-1.
또한 서버 호스트가 개인 키를 덤프하지 않기 때문에(또는 몇 차례 발생한 OS를 다시 설치하기만하면) 서버 호스트가 ZEN을 잃을 위험을 줄일 수 있습니다.
8-2.
사용자가 노드 zen-cli export key “z_addr”의 숨겨진 주소에서 개인 키를 덤프하여 어딘가에 저장하도록 권장하십시오. (a)가 발생할때의 위험을 줄일 수 있습니다.


옵션2 - 소스에서 zen 빌드 - 느림

Zen Node 응용프로그램을 만들고 디렉토리를 만듭니다.

mkdir ~/zencash
cd ~/zencash
git clone https://github.com/ZencashOfficial/zen.git

Zen Node 응용 프로그램에 대한 필수 패키지를 설치하십시오:
sudo apt -y install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake

zk-SNARK 매개변수 다운로드:

cd zen
./zcutil/fetch-params.sh

매개변수 다운로드를 기다립니다. Zen 응용프로그램 컴파일:
./zcutil/build.sh -j$(nproc)

zend가 빌드될 때까지 기다리십시오. 사용자의 바이너리 디렉토리에 zend와 zen-cli를 설치하고 파일 복사를 위해 zend를 한 번 실행하십시오:

sudo cp ~/zencash/zen/src/zend /usr/bin/
sudo cp ~/zencash/zen/src/zen-cli /usr/bin/

옵션2 끝 - 소스로 Zen 빌드하기


#2

Great work @JonghunHong!