Nginx 模組擴充 - Debian \ Ubuntu

BUBU 因看到 CentOS 維護周期有重大變動,所以想轉換其他系統服務來繼續穩定運行,目前採用現在很流行的 Debain \ Ubuntu 系統來使用,指令都差不多只是套件名稱會不太一樣,因此本篇會進行修正

Nginx 官方下載 deb 版本,目前的版次


# 安裝必要套件
sudo apt install curl gnupg2 ca-certificates lsb-release

# 想要使用的版本請自己選擇
# 來源庫新增加穩定版 nginx 服務
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

# 來源庫新增加主線 nginx 服務
echo "deb http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

# 導入官方金鑰來確認該套件安全性
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

# 驗證現在的金鑰是否正確
sudo apt-key fingerprint ABF5BD827BD9BF62

# 輸出的指紋如下 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573B FD6B 3D8F BC64 1079  A6AB ABF5 BD82 7BD9 BF62
uid   [ unknown] nginx signing key <[email protected]>

# 安裝 nginx 服務
sudo apt update
sudo apt install nginx

# 啟動及自動啟動服務
systemctl start nginx ; systemctl enable nginx

編譯 Nginx 服務,以下是需要依賴的套件,要先下載


  • Debain \ Ubuntu
sudo apt install git libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev build-essential gnupg2 gcc cmake curl unzip dpkg-dev

Brotli 套件下載


cd ~
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init --recursive

下載 Github 上面的 Nginx 、 OpenSSL 、 Nginx-ct 這三個套件


  • 2019.06.15 OpenSSL 有釋放出新版 openssl-1.1.1c
  • 2019.09.10 OpenSSL 有釋放出新版 openssl-1.1.1d
  • 2020.03.31 OpenSSL 有釋放出新版 openssl-1.1.1f
  • 2020.04.21 OpenSSL 有釋放出新版 openssl-1.1.1g
  • 2020.12.08 OpenSSL 有釋放出新版 openssl-1.1.1i
  • 2021.05.25 OpenSSL 有釋放出新版 openssl-1.1.1k
git clone https://github.com/nginx/nginx.git
git clone https://github.com/openssl/openssl.git (會是安裝當時的測試版本,建議去官方下載正式的版本當時版次是 OpenSSL-1.1.1b 這是正式版的)

wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
解壓
tar -zxvf openssl-1.1.1k.tar.gz
修改名稱
mv openssl-1.1.1k openssl

git clone https://github.com/grahamedgecombe/nginx-ct.git
  • nginx-ct是啟用証書透明度(Certificate Transparency)策略的模組。為了啟用 Certificate Transparency和TLSv1.3,需要額外加入如下編譯參數

備註:這一段是在說怎麼把模組掛到系統裡面不是直接下指令用的

--add-module=../nginx-ct/ --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3
  • 加在官方編譯參數後面,簡單修改編譯參數
auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=../nginx-ct/ --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3 --add-module=../ngx_brotli/
  • 進入 Nginx 目錄裡面,輸入上面所要編譯參數,就會自行編譯
  • 編譯完之後請在輸入 make 指令
  • 查看編譯完成的 Nginx 的版次
./objs/nginx -v

nginx version: nginx/1.XX.XX
  • 備份剛剛安裝好的 Nginx 版本,改成編譯版本
之前目錄改修當時日期
mv /usr/sbin/nginx /usr/sbin/nginx.20190309.official.mainline

將編譯的版本複製剛剛備份的目錄
cp ./objs/nginx /usr/sbin/

修改 Nginx 設定檔內的 ssl_protocolsssl_ciphers 啟用 TLSv1.3


....
ssl_protocols          TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; #可以考慮將 TLSv1 刪除掉不這是安全性很舊了只支援很舊的瀏灠器。
ssl_ciphers            TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:ECDHE+aECDSA+CHACHA20:ECDHE+aRSA+CHACHA20:ECDHE+aECDSA+AESGCM:ECDHE+aRSA+AESGCM:ECDHE+aECDSA+AES256+SHA384:ECDHE+aRSA+AES256+SHA384:ECDHE+aECDSA+AES256+SHA:ECDHE+aRSA+AES256+SHA;
....
  • 重新啟 Nginx 服務,讓剛剛修改設定檔生效
systemctl restart nginx

測試 TLSv1.3 版本是否有生效


  • 使用 testssl 工具,在使用這個工具之前要先下載依賴的套件
apt install dnsutils -y
  • 如果沒有下載此套件的話會出現以下的誤錯訊息

Fatal error: Neither "dig", "host", "drill" or "nslookup" is present

  • 載點如下
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh --help
  • 下命令輸入想要測試的網域
./testssl.sh -p 1234.com
  • 執行完結果如下

image-1552114862664.png

  • 詳細的狀況將小寫的 -p 改成大寫的 -P,測試完結果如下

image-1552115074868.png




參考相關網頁