시놀로지 나스 Let’s Encrypt SSL 와일드카드 인증서 발급/자동재발급 하기

원문 Github https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

시놀로지 나스의 SSH기능을 활성화 해야합니다.
SSH는 보안 위험이 많으므로 작업이 끝난후 반드시 비활성화 해야합니다.
SSH활성화에대한 내용은 다루지 않겠습니다.

우선 ssh 터미널에 접속하여 루트 권한을 획득합니다.

$ sudo su

그리고 다음 명령어를 입력하여 acme.sh 의 마스터파일을 다운받습니다.

wget https://github.com/Neilpang/acme.sh/archive/master.tar.gzCode language: JavaScript (javascript)

다운받은 파일의 압축을 풀어줍니다.

tar xvf master.tar.gzCode language: CSS (css)

압축푼 폴더에서 다음명령어로 acme.sh를 설치합니다.

./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "cloudflare이메일"Code language: JavaScript (javascript)

설치할때 빨간색으로 나오는 경고문은 무시하셔도 됩니다. 마지막에 OK문구가 나오면 설치는 완료되겁니다.

다음 작업에 자신의 클라우드플레어 글로벌키가 필요합니다.
https://dash.cloudflare.com/profile/api-tokens 에서 확인 가능합니다.

스크립트가 설치된 폴더로 이동합니다.

cd /usr/local/share/acme.sh

터미널에 환경변수를 입력해주시면 됩니다.

export CF_Key="글로벌API키"
export CF_Email="이메일"
export CERT_DNS="dns_cf"Code language: JavaScript (javascript)

그후에 인증서를 생성하는 명령어를 입력합니다.

./acme.sh --issue -d '*.도메인' -d '도메인' --dns "$CERT_DNS" --cert-file /usr/syno/etc/certificate/system/default/cert.pem --key-file /usr/syno/etc/certificate/system/default/privkey.pem --fullchain-file /usr/syno/etc/certificate/system/default/fullchain.pem --reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx" --dnssleep 20 --forceCode language: JavaScript (javascript)

정상적으로 실행되면 별다른 오류없이 인증서가 발급됩니다.
오류가 있으면 코드를 다시한번 확인해보고 재시도 해보시기 바랍니다.

이제 시놀로지 기본 인증서가 새로 발급한 인증서로 교체되었습니다.


다음과정은 위의 과정은 제대로 했지만 기본 인증서로 교체되지 않았을때 따라해주시면 됩니다.
만약 인증서가 제대로 교체되었으면 이번 과정은 넘어가셔도 됩니다.

터미널에 아래와같이 순서대로 입력합니다.

export CERT_FOLDER="$(find /usr/syno/etc/certificate/_archive/ -maxdepth 1 -mindepth 1 -type d)"
export CERT_DNS="dns_cf"Code language: JavaScript (javascript)
./acme.sh --issue -d '*.도메인' -d '도메인' --dns "$CERT_DNS" --cert-file "$CERT_FOLDER/cert.pem" --key-file "$CERT_FOLDER/privkey.pem" --fullchain-file "$CERT_FOLDER/fullchain.pem" --capath "$CERT_FOLDER/chain.pem" --reloadcmd "/usr/syno/sbin/synoservicectl --reload nginx" --dnssleep 20 --forceCode language: JavaScript (javascript)

마찬가지로 오류없이 정상적으로 출력되면 끝입니다.

이번 과정을 수행했음에도 인증서가 교체되지 않았으면 브라우저 캐시를 초기화 후 dsm에 재접속 해보시고 그래도 안되면 처음부터 차근차근 다시 따라해보시기 바랍니다.

이제 인증서 발급 과정은 모두 끝났습니다.


이제 인증서가 매달 자동으로 갱신되게 스케줄러를 등록해보도록 하겠습니다.

작업스케줄러에서 생성 -> 예약된작업 -> 사용자 정의 스크립트로 들어갑니다.

일반에는 작업이름을 적어주면 됩니다. 영어로 원하는 이름 아무거나 작성.

다음과 같이 매달 실행되게 스케줄을 설정합니다.

원하는 날짜로 스케줄을 바꿔도 상관없으나 인증서가 제때 갱신이 되도록 해주시기 바랍니다.

아래 코드를 스크립트란에 복사해주시면 됩니다.

CERTDIR="system/default"
#CERTDIR="_archive/AsDFgH"
CERTROOTDIR="/usr/syno/etc/certificate"
PACKAGECERTROOTDIR="/usr/local/etc/certificate"
FULLCERTDIR="$CERTROOTDIR/$CERTDIR"

/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/

PEMFILES=$(find $CERTROOTDIR -name cert.pem)
if [ ! -z "$PEMFILES" ]; then
        for DIR in $PEMFILES; do
                # replace the certificates, but never the ones in the _archive folders as those are all the unique
                # certificates on the system.
                if [[ $DIR != *"/_archive/"* ]]; then
                        rsync -avh "$FULLCERTDIR/" "$(dirname $DIR)/"
                fi
        done
fi

/usr/syno/sbin/synoservicectl --reload nginx

PEMFILES=$(find $PACKAGECERTROOTDIR -name cert.pem)
if [ ! -z "$PEMFILES" ]; then
	for DIR in $PEMFILES; do
              #active directory has it's own certificate so we do not update that package
              if [[ $DIR != *"/ActiveDirectoryServer/"* ]]; then
		rsync -avh "$FULLCERTDIR/" "$(dirname $DIR)/"
		/usr/syno/bin/synopkg restart $(echo $DIR | awk -F/ '{print $6}')
              fi
	done
fiCode language: PHP (php)

스케줄러 등록 후 활성화에 체크가 되어있는지 확인바라며 활성화가 되어있어야 갱신기능이 작동합니다.

우분투 방화벽(ufw) 설정

  • 우분투의 기본적인 방화벽은 “ufw”이다. 이는 iptables를 좀 더 쉽게 설정할 수 있도록 한것
    방화벽 구성에는 문제가 없지만 수준 높은 방화벽 구성에는 iptables룰을 직접 사용해야 한다.

참고: 우분투 ufw help 가이드

UFW 사용법

UFW 기본 설정법에 대하여 알아보자.

UFW활성화 / 비활성화

UFW는 기본 비활성화 상태이기에 이를 활성화 한다.

sudo ufw enable

UFW 비활성화

sudo ufw disable

UFW 상태 확인

sudo ufw status verbose

UFW 기본 룰

UFW에 설정되어 있는 기본 룰은 아래와 같다.

  • 들어오는 패킷에 대해서는 전부 거부(deny)
  • 나가는 패킷에 대해서는 전부 허가(allow)

기본 룰 확인

sudo ufw show raw

기본 정책 차단

sudo ufw default denyCode language: JavaScript (javascript)

기본 정책 허용

sudo ufw default allowCode language: JavaScript (javascript)

UFW 허용과 차단

UFW 허용

sudo ufw allow <port>/<optional: protocal>Code language: HTML, XML (xml)

예) SSH 포트 22번 허용(tcp/udp 22번 포트를 모두 허용)

sudo ufw allow 22

tcp 22번 포트만을 허용 – SSH는 tcp 22번 포트만 허용하는게 정답

sudo ufw allow 22/tcp

udp 22번 포트만을 허용

sudo ufw allow 22/udp

UFW 거부

sudo ufw deny <port>/<optional: protocol>Code language: HTML, XML (xml)

예) ssh 포트 22번 거부(tcp/udp 22번 포트를 모두 거부)

sudo ufw deny 22

tcp 22번 포트만을 거부

sudo ufw deny 22/tcp

udp 22번 포트만을 거부

sudo ufw deny 22/udp

UFW 룰의 삭제

ufw deny 22/tcp 설정이 되어있다고 가정

sudo ufw delete deny 22/tcpCode language: JavaScript (javascript)

service 명을 이용한 설정

/etc/services에 지정되어 있는 서비스명과 포트를 이용해 UFW를 설정할 수 있다.

서비스명 보기

less /etc/services

서비스명으로 허용

sudo ufw allow <service name>Code language: HTML, XML (xml)

예) SSH 서비스

sudo ufw allow ssh
sudo ufw deny ssh

UFW 로그 기록

sudo ufw logging on
sudo ufw logging off

Advanced Syntax

문법을 확장하여 목적지 주소와 포트, 프로토콜등을 지정할 수 있다.

특정한 IP 주소 허가/거부

특정한 IP주소 허용

sudo ufw allow from <ip address>Code language: HTML, XML (xml)

예) 192.168.0.100 주소 허용(IP 주소192.168.0.100 에서만 접속이 가능해진다)

sudo ufw allow from 192.168.0.100Code language: CSS (css)

네트워크 단위로 지정하여 같은 네트워크 상에 있는 컴퓨터들은 접속가능해진다.

sudo ufw allow from 192.168.0.0/24Code language: JavaScript (javascript)

특정 IP 주소와 일치하는 포트 허용

sudo ufw allow from <ip address> to <protocol> port <port number>Code language: HTML, XML (xml)

예) 192.168.0.100 주소와 포트, 프로토콜 허용

sudo ufw allow from 192.168.0.100 to any port 22Code language: CSS (css)

특정 IP 주소와 프로토콜, 포트 허용

$ sudo ufw allow from <ip address> to <protocol> port <port number> proto <protocol name>Code language: HTML, XML (xml)

예) 192.168.0.100 주소와 tcp 프로토콜 22번 포트 허용

sudo ufw allow from 192.168.0.100 to any port 22 proto tcpCode language: CSS (css)

위의 예제들에서 allow 대신 deny를 입력하면 거부가 된다.

ping (icmp) 허용/거부

UFW 기본설정은 ping 요청을 허용하도록 되어있다.

sudo vi /etc/ufw/before.rules
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPTCode language: PHP (php)

위 코드들의 ACCEPT 부분을 모두 DROP으로 변경하거나 삭제하면 ping 요청을 거부하게 된다.


UFW Numbered rules

UFW 룰들에 숫자를 붙여서 볼 수 있다. 이를 이용해 룰에 수정이나 삭제, 추가를 할 수 있다.

UFW Number 보기

sudo ufw status numbered

UFW Numbered 수정

sudo ufw delete 1
sudo ufw insert 1 allow from 192.168.0.100Code language: CSS (css)

추천 방화벽 정책

sudo ufw enable
sudo ufw allow from 192.168.0.3 to any port 22 proto tcp
sudo ufw allow 123/udp
sudo ufw allow 80/tcp
sudo ufw allow 3306/tcp
sudo ufw statusCode language: JavaScript (javascript)

sudo ufw allow from 192.168.0.100 to any port 22 proto tcp
Code language: CSS (css)

Linux IPv6 비활성화 방법

활성화 확인

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0 # 사용중
1 # 사용안함

sysctl.conf 파일수정

$ sudo vi /etc/sysctl.conf

파일 내 아래 내용 붙여넣은 후 저장

# IPv6 Disable
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

적용

$ sudo sysctl -p
$ sudo reboot

활성화 확인

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1 # 활성화 상태 확인에서 사용안함
0 # 활성화 상태 확인에서 사용중

Windows 슬립모드(Sleep Mode) 가 해제될때

윈도우를 전원종료가 아닌 슬립모드로 사용하시는 분들중에 가끔 자동으로 슬립모드가 해제되는 일이 있다.

자동으로 슬립모드가 해제되는 것을 방지하는 방법

방법1

Run Power Troubleshooter:

  • Search ‘Troubleshoot’ from the Start menu and select it.
  • Scroll down and choose ‘Power’.
  • Run the troubleshooter.

방법2

Reset Power Settings to default:

  • Search ‘Power and Sleep’ from the Start menu and choose ‘Power and Sleep settings’.
  • Click on ‘Additional Power Settings’ and select ‘Change Plan Settings’.
  • Select ‘Restore default settings for this plan’.

방법3

Disable Wake Timers:

  • Open Control Panel and categorize it to view by small icons.
  • Click on Power Options and select Change Plan Settings for the power plan that is set.
  • Click on Change Advanced Power Settings and expand Sleep.
  • Expand Allow Wake timers and Disable it.

방법4

Disable Connected Standby:

Note:

레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다.
따라서 이 단계를 신중하게 따르세요. 추가 보호를 위해 레지스트리를 수정하기 전에 백업하세요. 그런 다음 문제가 발생하면 레지스트리를 복원 할 수 있습니다. 레지스트리 키를 백업 및 복원하려면 이 링크 를 참조하세요.

  • Press ‘Windows + R’ keys together on the keyboard to open the Run dialog and type the following into the Run box: REGEDIT
  • Navigate to the following location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power
  • On the right pane, set CSEnabled to ‘0’.
  • Close REGEDIT, reboot the machine and check if the issue is fixed.

If the issue still persists, check for any tasks related to StartMenuExperienceHost.exe in Task Scheduler, and get back to us.