1. 程式人生 > >解決 Nginx CVE-2018-16843 CVE-2018-16844 CVE-2018-16845 CVE-2017-7529 平滑升級到nginx1.14.1

解決 Nginx CVE-2018-16843 CVE-2018-16844 CVE-2018-16845 CVE-2017-7529 平滑升級到nginx1.14.1

詳細情況請參看:

Nginx敏感資訊洩露漏洞 (CVE-2017-7529) 分析

目前可以修復的方案有三條
  • 1.受影響的版本nginx 0.5.6 - 1.13.2全版本,所以升級到大於1.13.2 就可以解決敏感資訊洩露的問題。
  • 2.臨時解決方案,在nginx.conf 中配置max_ranges 1 ; 對下載大檔案,斷點續傳會有影響,請酌情使用。
  • 3.使用第三方安全軟體進行防禦。
升級到Nginx 1.14.1 穩定版本

nginx 被爆出存在安全問題,有可能會致使 1400 多萬臺伺服器易遭受 DoS 攻擊(CVE-2018-16843,CVE-2018-16844)以及 MP4 模組(CVE-2018-16845)

):

  • Security: 在使用 HTTP/2 時可能導致客戶端記憶體消耗過大 (CVE-2018-16843),CPU 使用率過高 (CVE-2018-16844);
  • Security: 使用 ngx_http_mp4_module 處理特製的 mp4 檔案可能導致工作程序記憶體洩露(CVE-2018-16845);
  • Bugfix: 使用 gRPC 後端可能會導致記憶體過度消耗。

2018/11/06釋出了新的版本,解決上面的問題,所以直接一步到位升級到最新的版本(Nginx 1.14.1 穩定版本)。

安裝詳情(lua-nginx-module )
安裝模組
lua-nginx-module
nginx-module-vts
前期工作

安裝依賴包,避免編譯出錯:

$ yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel gcc g++ gcc-c++ gd-devel

因為現在我安裝是nginx 1.14,所以下載的元件都比較新,舊版本好像有衝突。

下載模組(之前用到的lua依賴需要升級)
$ cd /usr/local/src
$ wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz  #下載LuaJIT
$ wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz  #下載ngx_devle_kit
$ wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz #下載lua_nginx_module $ wget https://nginx.org/download/nginx-1.14.1.tar.gz
解壓並安裝
$ tar xzf LuaJIT-2.0.5.tar.gz
$ tar xzf v0.3.0.tar.gz
$ tar xzf v0.10.13.tar.gz
$ tar -xzf nginx-1.14.1.tar.gz
$ tar -xzf openssl-1.0.2o.tar.gz
$ cd LuaJIT-2.0.5
$ make && make install
$ export LUAJIT_LIB=/usr/local/lib
$ export LUAJIT_INC=/usr/local/include/luajit-2.0
編譯安裝nginx
$ cd nginx-1.14.1
$ make clean
$ ./configure   \
--prefix=/usr/local/nginx --with-pcre \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-ipv6 \
--with-http_realip_module \
--with-pcre-jit \
--with-ld-opt=-ljemalloc \
--with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib \
--add-module=/usr/local/src/nginx114/lua-nginx-module-0.10.13 \
--add-module=/usr/local/src/nginx114/ngx_devel_kit-0.3.0

$ make ##不要make install 不然會覆蓋老版本執行程式
$ mv /usr/local/nginx/sbin/nginx{,_`date +%F`}
$ cp objs/nginx /usr/local/nginx/sbin
$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.1  ##升級成功啦
然後在測試lua:

在/usr/local/nginx/conf/nginx.conf 加入

  lua_shared_dict limit 20m;
  lua_shared_dict jump 20m;
  lua_code_cache on;
驗證是否安裝成功

/usr/local/nginx/conf/nginx.conf 加入以下程式碼

        location /hello_lua {
                default_type 'text/plain';
                content_by_lua 'ngx.say("hello, lua")';
重啟nginx(建議將程序殺死後重啟:)

 /usr/local/nginx/sbin/nginx -s reload
$ curl 10.xxx.xx.xx/hello_lua
hello, lua