はじめに
そもそもパッケージの依存エラーが出てしまった原因は、毎日不正アクセスを繰り返してくる輩を効率よくfirewallでブロックするためにipset を利用しようとしたところ、契約しているVPSサーバが悪いのかhash:ip オプションが使えなかったため、一旦ipsetパッケージを削除しちまえっ!ってやったことが事の原因です。。
ipsetパッケージをアンインストールしたら、まさかfirewalldまでごっそり削除されるとは思っていませんでした。。
完璧にアウトですね。
流石に焦ったので、急遽iptables-restoreで過去の設定を読み込ませて仮復旧。
削除されたfirewalldをyum install firewalld でインストールしようとしたが、パッケージの依存エラーで何度やっても上手くいかず。。
依存エラーのメッセージ中に表示されているパッケージを複数削除したら、無事パッケージをインストールできました!
その際のメモを簡単ですが、記載します。
yum install firewalld で依存エラーが発生
間違ってfirewalldが削除されてしまったので、急いで yum install firewalld を実行し復旧させようとしましたが、下記の通り依存エラーで上手くいかず。。
# yum install firewalld
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* epel: ftp.jaist.ac.jp
* remi: ftp.riken.jp
* remi-safe: ftp.riken.jp
* rpmforge: mirror.fairway.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ firewalld.noarch 0:0.4.4.4-6.el7 を インストール
--> 依存性の処理をしています: python-firewall = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: firewalld-filesystem = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: ipset のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ firewalld.noarch 0:0.4.4.4-6.el7 を インストール
--> 依存性の処理をしています: python-firewall = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: firewalld-filesystem = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
---> パッケージ ipset.x86_64 0:6.29-1.el7 を インストール
--> 依存性の処理をしています: ipset-libs(x86-64) = 6.29-1.el7 のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_3.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_2.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_1.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3()(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
要求: libipset.so.3(LIBIPSET_3.0)(64bit)
利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
libipset.so.3(LIBIPSET_3.0)(64bit)
インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
~libipset.so.13(LIBIPSET_1.0)(64bit)
~libipset.so.13(LIBIPSET_2.0)(64bit)
~libipset.so.13(LIBIPSET_3.0)(64bit)
~libipset.so.13(LIBIPSET_4.0)(64bit)
~libipset.so.13(LIBIPSET_4.1)(64bit)
~libipset.so.13(LIBIPSET_4.2)(64bit)
~libipset.so.13(LIBIPSET_4.3)(64bit)
~libipset.so.13(LIBIPSET_4.4)(64bit)
~libipset.so.13(LIBIPSET_4.5)(64bit)
~libipset.so.13(LIBIPSET_4.6)(64bit)
~libipset.so.13(LIBIPSET_4.7)(64bit)
~libipset.so.13(LIBIPSET_4.8)(64bit)
~libipset.so.13(LIBIPSET_4.9)(64bit)
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
要求: libipset.so.3(LIBIPSET_1.0)(64bit)
利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
libipset.so.3(LIBIPSET_1.0)(64bit)
インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
~libipset.so.13(LIBIPSET_1.0)(64bit)
~libipset.so.13(LIBIPSET_2.0)(64bit)
~libipset.so.13(LIBIPSET_3.0)(64bit)
~libipset.so.13(LIBIPSET_4.0)(64bit)
~libipset.so.13(LIBIPSET_4.1)(64bit)
~libipset.so.13(LIBIPSET_4.2)(64bit)
~libipset.so.13(LIBIPSET_4.3)(64bit)
~libipset.so.13(LIBIPSET_4.4)(64bit)
~libipset.so.13(LIBIPSET_4.5)(64bit)
~libipset.so.13(LIBIPSET_4.6)(64bit)
~libipset.so.13(LIBIPSET_4.7)(64bit)
~libipset.so.13(LIBIPSET_4.8)(64bit)
~libipset.so.13(LIBIPSET_4.9)(64bit)
エラー: パッケージ: firewalld-0.4.4.4-6.el7.noarch (base)
要求: python-firewall = 0.4.4.4-6.el7
インストール: python-firewall-0.5.3-5.el7.noarch (@/python-firewall-0.5.3-5.el7.noarch)
python-firewall = 0.5.3-5.el7
利用可能: python-firewall-0.4.4.4-6.el7.noarch (base)
python-firewall = 0.4.4.4-6.el7
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
要求: ipset-libs(x86-64) = 6.29-1.el7
インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
ipset-libs(x86-64) = 7.1-1.el7
利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
ipset-libs(x86-64) = 6.29-1.el7
エラー: パッケージ: firewalld-0.4.4.4-6.el7.noarch (base)
要求: firewalld-filesystem = 0.4.4.4-6.el7
インストール: firewalld-filesystem-0.5.3-5.el7.noarch (@/firewalld-filesystem-0.5.3-5.el7.noarch)
firewalld-filesystem = 0.5.3-5.el7
利用可能: firewalld-filesystem-0.4.4.4-6.el7.noarch (base)
firewalld-filesystem = 0.4.4.4-6.el7
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
要求: libipset.so.3(LIBIPSET_2.0)(64bit)
利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
libipset.so.3(LIBIPSET_2.0)(64bit)
インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
~libipset.so.13(LIBIPSET_1.0)(64bit)
~libipset.so.13(LIBIPSET_2.0)(64bit)
~libipset.so.13(LIBIPSET_3.0)(64bit)
~libipset.so.13(LIBIPSET_4.0)(64bit)
~libipset.so.13(LIBIPSET_4.1)(64bit)
~libipset.so.13(LIBIPSET_4.2)(64bit)
~libipset.so.13(LIBIPSET_4.3)(64bit)
~libipset.so.13(LIBIPSET_4.4)(64bit)
~libipset.so.13(LIBIPSET_4.5)(64bit)
~libipset.so.13(LIBIPSET_4.6)(64bit)
~libipset.so.13(LIBIPSET_4.7)(64bit)
~libipset.so.13(LIBIPSET_4.8)(64bit)
~libipset.so.13(LIBIPSET_4.9)(64bit)
エラー: パッケージ: ipset-6.29-1.el7.x86_64 (base)
要求: libipset.so.3()(64bit)
利用可能: ipset-libs-6.29-1.el7.x86_64 (base)
libipset.so.3()(64bit)
インストール: ipset-libs-7.1-1.el7.x86_64 (@base/7)
~libipset.so.13()(64bit)
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
#
–skip-broken や rpm -Va –nofiles –nodigest も実行してみたが事象解消せず。
依存エラーが出たパッケージを削除
上記メッセージ中に表示されていた各パッケージを rpm -qa で grep をかけ、インストール済みでありこれらのパッケージが悪さをしていたので全て削除。
# yum remove ipset-libs-6.29-1.el7.x86_64
# rpm -qa | grep "python-firewall"
# yum remove python-firewall-0.5.3-5.el7.noarch
# yum remove firewalld-filesystem
# rpm -qa | grep "ipset"
# yum remove ipset-libs-7.1-1.el7.x86_64
依存エラーパッケージを全て削除後、再度yum installを実行
# yum install firewalld
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* epel: ftp.jaist.ac.jp
* remi: ftp.riken.jp
* remi-safe: ftp.riken.jp
* rpmforge: mirror.fairway.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ firewalld.noarch 0:0.4.4.4-6.el7 を インストール
--> 依存性の処理をしています: python-firewall = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: firewalld-filesystem = 0.4.4.4-6.el7 のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> 依存性の処理をしています: ipset のパッケージ: firewalld-0.4.4.4-6.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ firewalld-filesystem.noarch 0:0.4.4.4-6.el7 を インストール
---> パッケージ ipset.x86_64 0:6.29-1.el7 を インストール
--> 依存性の処理をしています: ipset-libs(x86-64) = 6.29-1.el7 のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_3.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_2.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3(LIBIPSET_1.0)(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
--> 依存性の処理をしています: libipset.so.3()(64bit) のパッケージ: ipset-6.29-1.el7.x86_64
---> パッケージ python-firewall.noarch 0:0.4.4.4-6.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ ipset-libs.x86_64 0:6.29-1.el7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
===============================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
===============================================================================================================================
インストール中:
firewalld noarch 0.4.4.4-6.el7 base 416 k
依存性関連でのインストールをします:
firewalld-filesystem noarch 0.4.4.4-6.el7 base 47 k
ipset x86_64 6.29-1.el7 base 41 k
ipset-libs x86_64 6.29-1.el7 base 54 k
python-firewall noarch 0.4.4.4-6.el7 base 325 k
トランザクションの要約
===============================================================================================================================
インストール 1 パッケージ (+4 個の依存関係のパッケージ)
総ダウンロード容量: 884 k
インストール容量: 3.9 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): firewalld-filesystem-0.4.4.4-6.el7.noarch.rpm | 47 kB 00:00:00
(2/5): ipset-6.29-1.el7.x86_64.rpm | 41 kB 00:00:00
(3/5): ipset-libs-6.29-1.el7.x86_64.rpm | 54 kB 00:00:00
(4/5): firewalld-0.4.4.4-6.el7.noarch.rpm | 416 kB 00:00:01
(5/5): python-firewall-0.4.4.4-6.el7.noarch.rpm | 325 kB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------
合計 562 kB/s | 884 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : firewalld-filesystem-0.4.4.4-6.el7.noarch 1/5
インストール中 : ipset-libs-6.29-1.el7.x86_64 2/5
インストール中 : ipset-6.29-1.el7.x86_64 3/5
インストール中 : python-firewall-0.4.4.4-6.el7.noarch 4/5
インストール中 : firewalld-0.4.4.4-6.el7.noarch 5/5
検証中 : python-firewall-0.4.4.4-6.el7.noarch 1/5
検証中 : ipset-libs-6.29-1.el7.x86_64 2/5
検証中 : firewalld-0.4.4.4-6.el7.noarch 3/5
検証中 : firewalld-filesystem-0.4.4.4-6.el7.noarch 4/5
検証中 : ipset-6.29-1.el7.x86_64 5/5
インストール:
firewalld.noarch 0:0.4.4.4-6.el7
依存性関連をインストールしました:
firewalld-filesystem.noarch 0:0.4.4.4-6.el7 ipset.x86_64 0:6.29-1.el7 ipset-libs.x86_64 0:6.29-1.el7
python-firewall.noarch 0:0.4.4.4-6.el7
完了しました!
#
やっと上手く解決しました!!
firewalld.serviceを起動
無事、パッケージをインストールできたのでfirewalldを起動します。
# systemctl start firewalld.service
status を確認します。
# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 木 2020-02-20 20:27:16 JST; 7s ago
Docs: man:firewalld(1)
ふむふむ、無事動いていますね。
とりあえず、一安心。
ipsetコマンドで使用できるタイプを確認
続いて、当初からの課題であったipset コマンドのオプションが正しく表示されるかを確認してみます。
私が一番知りたいのは、hash:ip オプションが使えるのかどうかという点です。
確認してみます!
# firewall-cmd --get-ipset-types
あれっ! 一個も表示されていないじゃないですか。
あぁ、まじショック。。
また振り出しですね。。
できないとわかりつつ、下記のコマンドを投入してみました。
# ipset create BLACKLIST_IP hash:ip
ipset v6.29: Cannot open session to kernel.
#
どうしたもんですかねぇ。
ipsetが使えない理由がやっとわかった!
かなりググりまくったのですが、結局のところ私が契約しているVPSサーバがOpenVZであることが原因でした。
どういうことかと言いますと、OpenVZは他のコンテナーとkernelを共有しているため個別に設定変更はできないことがわかりました。
OpenVZは比較的安価で使い勝手はいいのですが、より深いシステムの設定変更(kernelの変更等)はできないようです。
KVMであればipsetも問題なく使えるようなので、新にKVMを契約しました。
なんでこう費用がかさむのかなぁ。。
スキルを身につけるためにがんばります。
コメント