라즈파이 "Raspberry Pi 3"에서 HTTP/2 서버를 세워 인터넷에 공짜로 공개하는 절차 (보안 평가 : A +)

1. 개요





Raspberry Pi 3에 최신 Nginx (1.9 계열)를 설치하고 HTTP2 서버 설치, 무료 동적 DNS 서비스 및 서버 인증서를 설정하여 공짜로 그 서버를 인터넷에 공개하는 절차입니다.
「Qualys SSL Report」의 보안 평가가 「A+」가 골.
  • 가정용 LAN에서 동적으로 할당 된 IP 주소에 대한 고정 도메인 이름으로 액세스하기 위해 무료 동적 DNS 서비스 MyDNS를 사용합니다.
  • HTTPS 액세스를 위해 무료 인증서 발급 서비스 Let’s Encrypt를 사용합니다. ※2016/4/12에 베타에서 정식 서비스화

  • 2. 절차



    2.1. 최신 Nginx 도입



    2.1.1. 패키지 다운로드 소스 설정 파일에 Raspbian GNU/Linux 9 (코드명 "stretch") 추가


    sudo su -
    echo "deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi" >> /etc/apt/sources.list
    cat /etc/apt/sources.list
    exit
    

    2.1.2./etc/apt/preferences 파일 작성


    sudo su -
    echo "Package: *" >> /etc/apt/preferences
    echo "Pin: release n=jessie" >> /etc/apt/preferences
    echo "Pin-Priority: 600" >> /etc/apt/preferences
    cat /etc/apt/preferences
    exit
    

    2.1.3. Nginx 도입


    sudo apt-get install -t stretch nginx
    

    2.2. "Dynamic DNS" 설정



    Qiita : 도메인 획득에서 DDNS 설정까지 참조.

    cron 설정



    도메인 및 IP 주소 연결을 정기적으로 업데이트합니다.
    */10 * * * * wget -q -O /dev/null http://(ユーザID):(パスワード)@www.mydns.jp/login.html
    

    2.2. 서버 인증서 얻기



    Let's Encrypt 포털 포털 : 사용법 참조.

    cron 설정



    증명서의 기한은 3개월이므로 1개월에 1회 증명서의 갱신을 실시한다.
    00 00 01 * * /(インストールパス)/letsencrypt/letsencrypt-auto certonly --webroot -w /(公開ディレクトリ)/ -d (ドメイン名)
    

    2.3.Nginx 설정



    도메인명으로 설정 파일을 「/etc/nginx/sites-available」아래에 작성해 「/etc/nginx/sites-enabled」에 심볼릭 링크를 작성한다.
    도메인별 구성 파일의 내용.
    server {
        server_name (ドメイン名) www.(ドメイン名);
        listen 80;
        listen [::]:80;
        return 301 https://$host$request_uri;
    }
    
    server {
        server_name (ドメイン名) www.(ドメイン名);
        listen 443 ssl http2; 
        listen [::]:443 ssl http2;
    
        ssl on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    
        # Specifies the enabled ciphers.
        ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
    
        # Certificate.
        ssl_certificate /etc/letsencrypt/live/(ドメイン名)/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/(ドメイン名)/privkey.pem;
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
        # Enable SSL session resume.
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
    
        # Perfect Forward Security (PFS).
        ssl_prefer_server_ciphers on;
    
        # Online Certificate Status Protocol (OCSP).
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/letsencrypt/live/(ドメイン名)/fullchain.pem;
        resolver 8.8.4.4 8.8.8.8 valid=300s;
        resolver_timeout 10s;
    
        # HTTP Strict Transport Security (HSTS).
        add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    
        # Do not allow this site to be displayed in iframes
        add_header X-Frame-Options DENY;
    
        # Do not permit Content-Type sniffing.
        add_header X-Content-Type-Options nosniff;
    
        # log
        access_log /(ログファイルのパス)/(ドメイン名).access.log;
        error_log /(ログファイルのパス)/(ドメイン名).error.log;
    
        # location
        location / {
            root   /(公開ディレクトリ);
            index  index.html index.htm index.php;
        }
    }
    

    ssl_dhparam 파일은 「openssl dhparam 2048 -out dhparam.pem」으로 작성.

    3. 확인



    3.1.Nginx를 다시 시작하여 도메인에 액세스.





    3.2. htps //w w.bs. 이 m / sl st / 에 액세스해, 보안 평가를 실시.





    자, 준비가 됐다.



    OS 보안/방화벽/모니터링 설정을 잊지 마십시오.

    좋은 웹페이지 즐겨찾기