2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BINDのアップデート方法

Last updated at Posted at 2023-02-21

頻繁にアップデートされるBINDさん。

■(緊急)BIND 9.xの脆弱性(メモリ不足の発生)について(CVE-2022-3094)

パッチバージョンの入手先

BIND 9.18.11
<https://ftp.isc.org/isc/bind9/9.18.11/bind-9.18.11.tar.xz>

BIND 9.16.37
<https://ftp.isc.org/isc/bind9/9.16.37/bind-9.16.37.tar.xz>

肝心のアップデート手順はなし。そこが痺れる、BIND~。というわけで、ないなら作る精神でパッチ適用を試行した。この環境では「BIND 9.16.37」のパッチを適用。

環境

RHEL8、BIND9.xx(9.16未満)

目標

BIND9.16にアップデートする。

事前

root昇格

$ su -
#

confファイル等をバックアップしておく。named.conf.YYYYMMDDができるので確認する。

# cp -p /etc/named.conf ~/named.conf.`date +%Y%m%d`
# ls -l /etc/named*
# ls -l ~

BINDの状態を確認しておく。

# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)・・・bindの状態が表示される。

# ps aux | grep named | grep -v grep
named       1861  0.0  2.2 265548 18884 ?        Ssl  21:27   0:00 /usr/sbin/named -u named -c /etc/named.conf -t

バージョンを確認しておく

# /usr/sbin/named -v

事前にconfファイルをチェックしておく。

# named-checkconf

インストールされているbindを確認しておく。

# dnf list installed | grep bind

BIND9.16へのアップデート

まずはBINDを9.16台に上げる。こちらのリポジトリでは「9.16-32:9.16.23-0.9」が最新だった。
リポジトリの最新版確認方法はこちら。

# dnf --showduplicates search bind
または
# dnf --showduplicates search bind | grep 9.16

表示された最も高いバージョンにするために、インストール済みパッケージの削除してインストールする。削除ではなくアップデートしたかったが、削除後インストールするしか選択肢がなかった(アップデートコマンドだと、--allowerasingオプションつけてインストールせよ、とエラーが出たため)。仕方なくこのインストールを実施している。

# dnf install bind9.16-32:9.16.23-0.9.el8.1.x86_64 --allowerasing

インストール後のBINDの状態確認

# diff /etc/named.conf ~/named.conf.`date +%Y%m%d`
!バックアップしたconfファイルを差分がないことをチェック。
# systemctl status named
!状態確認
# named-checkconf
!confファイルの構文チェック
# /usr/sbin/named -v
!バージョン確認

その他BINDユーティリティやライブラリなども必要に応じバージョンアップする。

# dnf install bind9.16-utils-32:9.16.23-0.9.el8.1.x86_64 --allowerasing
# dnf install python3-bind9.16-32:9.16.23-0.9.el8.1.noarch --allowerasing

パッケージのバージョンが9.16であることを確認する。

# dnf list installed | grep bind
/usr/lib/python3.6/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.10) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)

bind9.16.x86_64                               32:9.16.23-0.9.el8.1                      @rhel-8-appstream-rhui-rpms 
bind9.16-libs.x86_64                          32:9.16.23-0.9.el8.1                      @rhel-8-appstream-rhui-rpms 
bind9.16-license.noarch                       32:9.16.23-0.9.el8.1                      @rhel-8-appstream-rhui-rpms 
bind9.16-utils.x86_64                         32:9.16.23-0.9.el8.1                      @rhel-8-appstream-rhui-rpms 
python3-bind.noarch                           32:9.11.36-3.el8                          @rhel-8-appstream-rhui-rpms 

BIND9.16.37へのアップデート

.37アップデートファイルをダウンロードする。

# wget https://ftp.isc.org/isc/bind9/9.16.37/bind-9.16.37.tar.xz

2023-02-21 21:49:13 (582 KB/s) - ‘bind-9.16.37.tar.xz’ saved [5109440/5109440]

カレントディレクトリに保存されるため、確認する。

# pwd
# ls -l
-rw-r--r--. 1 root root  5109440 Jan 25 21:10 bind-9.16.37.tar.xz

xzを解凍する。

# xz -dv bind-9.16.37.tar.xz
bind-9.16.37.tar.xz (1/1)
  100 %      4,989.7 KiB / 28.9 MiB = 0.169                                    
# ls -l
-rw-r--r--. 1 root root  30269440 Jan 25 21:10 bind-9.16.37.tar

解凍したtarファイルを、/usr/src/に移動する。その後、カレントディレクトリもそこに移動する。

# mv ./bind-9.16.37.tar /usr/src/
# cd /usr/src
[src]# ls -l
total 29560
-rw-r--r--. 1 root root 30269440 Jan 25 21:10 bind-9.16.37.tar
drwxr-xr-x. 2 root root        6 Jun 21  2021 debug
drwxr-xr-x. 2 root root        6 Jun 21  2021 kernels

tarを解凍する。

[src]# tar xfv ./bind-9.16.37.tar

解凍すると、bind-9.16.37ディレクトリができるので、カレントディレクトリをそこに移動する。

[src]# ls -l
total 29564
drwxrwxr-x. 16 root root     4096 Jan 13 07:45 bind-9.16.37
-rw-r--r--.  1 root root 30269440 Jan 25 21:10 bind-9.16.37.tar
drwxr-xr-x.  2 root root        6 Jun 21  2021 debug
drwxr-xr-x.  2 root root        6 Jun 21  2021 kernels
[src]# cd bind-9.16.37
[bind-9.16.37]# pwd
/usr/src/bind-9.16.37

このままconfigureコマンドを実行したいが、大抵他パッケージが足りない等で失敗する。ChatGPT先生の力を借りつつ、不足パッケージをインストールしながら進める。私の環境だと事前に以下パッケージを導入する必要があった。

[bind-9.16.37]# yum group install "Development Tools"
[bind-9.16.37]# dnf install libuv-devel
[bind-9.16.37]# dnf install libressl-devel
[bind-9.16.37]# dnf install libcap-devel

前提パッケージを入れたら、configure,makeする

[bind-9.16.37]# ./configure --sysconfdir=/etc
[bind-9.16.37]# make

インストール前にBINDが止まっていること、または止めてからインストールする。

[bind-9.16.37]# systemctl status named
[bind-9.16.37]# systemctl stop named
[bind-9.16.37]# ps aux | grep named | grep -v grep
ここからインストールする。↓
[bind-9.16.37]# make install

バージョンアップ後の確認

インストールが成功したら、各状態確認を行う。

まず、バックアップしたファイルとconfファイルが変更ない事を確認する。

[bind-9.16.37]# diff /etc/named.conf ~/named.conf.`date +%Y%m%d`

BINDのconfファイルの構文チェック。

[bind-9.16.37]# named-checkconf

BINDの自動起動と、サービス起動を行う。

[bind-9.16.37]# systemctl enable named
[bind-9.16.37]# systemctl start named

プロセス等が起動したことを確認。

[bind-9.16.37]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
・・・
[bind-9.16.37]# ps aux | grep named | grep -v grep
named      47404  0.0  2.5 342580 20628 ?        Ssl  22:04   0:00 /usr/sbin/named -u named -c /etc/named.conf

バージョン確認。

[bind-9.16.37]# rndc
Usage: rndc [-b address] [-c config] [-s server] [-p port]
・・・
・・・
Version: 9.16.37

自分自身にdigして、名前解決できることを確認する。

[bind-9.16.37]# dig +noall +answer @localhost www.yahoo.co.jp
www.yahoo.co.jp.	900	IN	CNAME	edge12.g.yimg.jp.
edge12.g.yimg.jp.	60	IN	A	183.79.219.252

余談

configure,make,make installコマンドを久々に使った。今でこそクラウドでLinuxが簡単に使えるが、一昔前はOSインストールや、Linuxでアプリケーションをインストールするとき、特にyumやdnfで外部のリポジトリが使えない閉域環境、プライベートネットワークに閉じた環境だと、Linuxのインストールメディアをドライブに入れて、パッケージを導入したり。はたまたネットに繋がる端末からパッケージをダウンロードして、それをストレージに入れてサーバ室まで移動して、サーバにつないでからパッケージをインストールしたり、それはもう大変だった。
あの作業は苦痛で仕方なかったが、怪我の功名なのか、いまはどうにかできるようになった(サーバがインターネットにつながる環境というのも大きいが)。ただ、またやりたいかと言われるとキツイ。現代はChatGPTがあるので、エラーが出たらすぐGPT3先生に聞けるからいい、あれでだいぶ効率が上がった。

参考サイト

BINDのアップデートをソースから実施する

CentOS7とbind9.9.4/bind-chroot9.9.4を利用したDNSサーバ構築

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?