🐷

EC2(AmazonLinux2)内のNginxを1.20.2にバージョンアップする方法

2022/05/09に公開

はじめに

この記事のゴール

EC2(AmazonLinux2)内のNginxを1.20.2にバージョンアップする

amazon-linux-extrasでは、1.20.0が最新版だったため、公式CentOSからインストールします。

[ec2-user@ip-10-0-11-158 yum.repos.d]$ yum --showduplicate list nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
インストール済みパッケージ
nginx.x86_64 1:1.20.0-2.amzn2.0.4 @amzn2extra-nginx1
利用可能なパッケージ
nginx.x86_64 1:1.12.2-2.amzn2.0.2 amzn2extra-nginx1
nginx.x86_64 1:1.16.1-1.amzn2.0.1 amzn2extra-nginx1
nginx.x86_64 1:1.18.0-1.amzn2.0.1 amzn2extra-nginx1
nginx.x86_64 1:1.18.0-1.amzn2.0.2 amzn2extra-nginx1
nginx.x86_64 1:1.20.0-2.amzn2.0.1 amzn2extra-nginx1
nginx.x86_64 1:1.20.0-2.amzn2.0.3 amzn2extra-nginx1
nginx.x86_64 1:1.20.0-2.amzn2.0.4 amzn2extra-nginx1

バージョンアップの背景

現在使っているバージョン(1.20.0)に以下の脆弱性が見つかったためバージョンアップに至りました。

ウェブサーバ「nginx」の開発チームは、脆弱性を修正したアップデートをリリースした。
「nginx」において、名前解決を行うリゾルバに脆弱性「CVE-2021-23017」が明らかとなったもの。設定ファイルで「resolverディレクティブ」を有効化している場合にのみ影響を受けるという。
細工したDNS応答を送りつけられ、脆弱性を悪用されると、「worker」のプロセスがクラッシュしたり、コードを実行されるおそれがある。重要度は4段階中、上から3番目にあたる「中(Medium)」としている。
開発チームでは、「nginx 1.21.0」「同1.20.1」にて修正。あわせてパッチをリリースしている。

環境

  • AWSのEC2(AmazonLinux2)
  • nginx/1.20.0

実践

現状確認

現状確認①

$ nginx -v
nginx version: nginx/1.20.0

現状確認②

[ec2-user@ip-10-0-11-183 ~]$ sudo systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2022-03-27 07:39:55 UTC; 5s ago
  Process: 3455 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 3452 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 3451 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 3458 (nginx)
   CGroup: /system.slice/nginx.service
           ├─3458 nginx: master process /usr/sbin/nginx
           └─3459 nginx: worker process

nginxのレポジトリを追加

sshでEC2内にログインしたあと、下記で権限変更

$ sudo su

※これより先はsudo権限で進めます。

yumインストールする際のNginxリポジトリを作成
/etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/amzn2/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/amzn2/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

※/etc/yum.repos.dは、yumでインストールする際のパッケージの情報を書いておくディレクトリ

mainlineリポジトリを使えるようにする

[root@ip-10-0-10-26 yum.repos.d]# yum-config-manager --enable nginx-mainline
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
======================================================= repo: nginx-mainline ========================================================
[nginx-mainline]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/2
...

デフォルトではstableが有効となっていますので、mainlineを使いたい場合は上のコマンドを実行する必要があります。

amazon-linux-extrasのnginxを無効化する

amazon-linux-extrasのパッケージがyumで優先表示されるため、無効化する

[root@ip-10-0-10-26 yum.repos.d]# amazon-linux-extras disable nginx1
Beware that disabling topics is not supported after they are installed.
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  ...

利用可能なパッケージを表示させる

[root@ip-10-0-10-26 yum.repos.d]# yum info nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                    | 3.7 kB  00:00:00
amzn2extra-docker                                                                                             | 3.0 kB  00:00:00
amzn2extra-kernel-5.10                                                                                        | 3.0 kB  00:00:00
nginx-mainline                                                                                                | 2.9 kB  00:00:00
nginx-stable                                                                                                  | 2.9 kB  00:00:00
nginx-mainline/2/x86_64/primary_db                                                                            |  27 kB  00:00:00
インストール済みパッケージ
名前                : nginx
アーキテクチャー    : x86_64
エポック            : 1
バージョン          : 1.20.0
リリース            : 2.amzn2.0.4
容量                : 1.7 M
リポジトリー        : installed
提供元リポジトリー  : amzn2extra-nginx1
要約                : A high performance web server and reverse proxy server
URL                 : https://nginx.org
ライセンス          : BSD
説明                : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
                    : IMAP protocols, with a strong focus on high concurrency, performance and low
                    : memory usage.

利用可能なパッケージ
名前                : nginx
アーキテクチャー    : x86_64
エポック            : 1
バージョン          : 1.21.6
リリース            : 1.amzn2.ngx
容量                : 796 k
リポジトリー        : nginx-mainline/2/x86_64
要約                : High performance web server
URL                 : https://nginx.org/
ライセンス          : 2-clause BSD-like license
説明                : nginx [engine x] is an HTTP and reverse proxy server, as well as
                    : a mail proxy server.

利用可能なパッケージが増えているためOK

利用可能なバージョンの表示

[root@ip-10-0-10-26 yum.repos.d]# yum --showduplicate list nginx
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
インストール済みパッケージ
nginx.x86_64                                         1:1.20.0-2.amzn2.0.4                                          @amzn2extra-nginx1
利用可能なパッケージ
nginx.x86_64                                         1:1.20.0-1.amzn2.ngx                                          nginx-stable
nginx.x86_64                                         1:1.20.1-1.amzn2.ngx                                          nginx-stable
nginx.x86_64                                         1:1.20.2-1.amzn2.ngx                                          nginx-stable
nginx.x86_64                                         1:1.21.0-1.amzn2.ngx                                          nginx-mainline
nginx.x86_64                                         1:1.21.1-1.amzn2.ngx                                          nginx-mainline
nginx.x86_64                                         1:1.21.2-1.amzn2.ngx                                          nginx-mainline
nginx.x86_64                                         1:1.21.3-1.amzn2.ngx                                          nginx-mainline
nginx.x86_64                                         1:1.21.4-1.amzn2.ngx                                          nginx-mainline
nginx.x86_64                                         1:1.21.5-1.amzn2.ngx                                          nginx-mainline
nginx.x86_64                                         1:1.21.6-1.amzn2.ngx                                          nginx-mainline

1.20.2のバージョンが表示されているためOK

バージョンを指定してインストール

$ yum install nginx-1.20.2 -y
・・・
依存性関連をインストールしました:
  openssl11.x86_64 1:1.1.1g-12.amzn2.0.7

更新:
  nginx.x86_64 1:1.20.2-1.amzn2.ngx

完了しました!

このときバージョンを指定せずinstallすると最新版(1.21.6)が入ってくる

反映させる

設定を再読み込み

sudo systemctl reload nginx
systemctl status nginx

もしこれでできなかったら、以下コマンドで停止から起動する

nginxを起動

systemctl stop nginx
systemctl start nginx
systemctl status nginx

変更後確認

確認①

[root@ip-10-0-10-26 yum.repos.d]# nginx -v
nginx version: nginx/1.20.2

確認②

[root@ip-10-0-11-183 ec2-user]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2022-03-27 07:39:55 UTC; 4min 37s ago
     Docs: http://nginx.org/en/docs/
 Main PID: 3458 (nginx)
   CGroup: /system.slice/nginx.service
           ├─3458 nginx: master process /usr/sbin/nginx
           └─3459 nginx: worker process

参考記事

ありがとうございました。
https://www.security-next.com/126650

Discussion