unbound Domain block(ubuntu20,python2.7からdebian11,python3.9へ)

2022/10/15:追記
下記追記でunboundコンパイル後の結果を貼り付け忘れでした。
以下 unbound -V で表示された内容です。
Version 1.16.2

Configure line:
LDFLAGS=-L/usr/local/lib/python3.9
--with-pythonmodule=/usr
--prefix=/usr
--sysconfdir=/etc
--disable-static
--with-pidfile=/run/unbound.pid
--with-libevent
--with-ssl
--enable-event-api
--enable-subnet
--with-pyunbound

Linked libs: libevent 2.1.12-stable (it uses epoll), OpenSSL 1.1.1n 15 Mar 2022
Linked modules: dns64 python subnetcache respip validator iterator

BSD licensed, see LICENSE in source package for details.
Report bugs to unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues
latest指定でダウンロードしてるので前回よりバージョンアップしてます。
LDFLAGSは改行入れてます。


2022/07/13:追記
ubuntu21,pythonへのリンク,python2.7インストールなし環境でdebian同様の手順でunbound最新ソースからコンパイル、インストールを確認しました

2022/07/12:追記
ubuntu20,python2.7 unbound-1.15.0 まで問題なかった環境で 最新ソース、1.16.0 をコンパイルすると以下のエラーがでます

checking for python... /usr/bin/python
checking for the sysconfig Python module... yes
checking for Python include path... -I/usr/local/include/python2.7
checking for Python library path... -L/usr/lib -L/usr/lib/python2.7 -L. -lpython2.7
checking for Python site-packages path... /usr/local/lib/python2.7/dist-packages
checking consistency of all components of python development environment... no
configure: error:
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LDFLAGS environment variable.
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
==========================================================
ERROR!
You probably have to install the development version of the Python package
for your distribution. The exact name of this package varies among them.
==========================================================
google検索したなかに python2.7 を python にリンクは推奨しないとあったので pytrhon-is-python3 をインストールして再度コンパイルするとエラーなく終了しますが実行時に以下のエラーがでます(時刻、ホスト名称は削除してます)

unbound: [13238:0] error: pythonmod: cannot initialize core module: unboundmodule.py
unbound: [13238:0] error: module init for module python failed
unbound: [13238:0] fatal error: failed to setup modules
==========================================================
2時間調べても進展なしなので潔く debain11(non-free,net-install)を新規インストールして python3.9 に環境を変更しました
debian11 は python3 のみ環境が理由です,以下のコマンドで追加設定をします

apt install python3.9
apt install python-is-python3
apt install python3-pip
apt install python3-unbound
pip3 install --upgrade pip
LDFLAGS は python3.9 の環境にあわせてください

python3 なのでスクリプト字下げにタブを使ってる場合はスペース置き換えしておきます
以上の作業でとりあえず、登録ドメインのアドレス変更、問い合わせログ出力、は動作してます
2022/07/12:追記ここまで

2020/11/7:追記
ubuntu20へのインストールで必要な作業概要です。
1.python2.7インストール
python2.7 インストールは /etc/apt/sources.list に ubuntu18(bionic) の追記が必要です
また python-wheel は別途 ubuntu18.04.4 のパッケージを展開する必要があります
2.unboundコンパイル
unbound config -LDFLAGS に python2.7 のインストール先を追記する必要があります
3.動作確認環境
unbound.conf は module-config: "validator python iterator" の順で動作してます
自分の場合unbound設定作業以外でもsystemd関連で時間をとられてしまいました、特にDNSスタブとresolv.confの関連に気づくのに半日かかりました。基礎知識不足は恐ろしい。

2020/11/4:追記
ubuntu20でのunboundコンパイル、unbound-python動作確認中です。
なんとかmake,installできるようになりました、キモはpython2.7の「追加インストール」です。動作環境では起動中のsystemdを充分確認し、timerサービス含む、自分の環境にあわせることかと。具体的なスクリプトは整理でき次第案内します。ちなみにubuntu16から18へのアップグレード環境でもほぼ同じ設定でできるかと。

2020/jul/12:追記
Debian9(stretch)でも同じスクリプトでインストールできました。今回はpi-Holeアンインストール(dnsmasq,lighttpはapt purge)、create_ap アンインストール後の環境でした。最初にbusterで失敗したのはpython(site-packages)リンクなしとconfigureパラメータ不足が原因かもしれません。時間確保できれば検証して追記します。

2020/jul/06:追記
2.インストールスクリプトをgoogle drive 共有フォルダへアップロードしました。実行属性なしのテキストです。
setup4.sh はunboundコンパイル環境セットアップ、ただしPCREパッケージインストールとしたためここはコメントアウトになってます。
setup5.sh がunboundコンパイルとインストール
になります。
1.VM仮想環境でのインストールと動作確認できました、前回(7/2)同様インストールイメージはネットワークインストール(debian-10.3.0-amd64-netinst.iso)です。

2020/jul/02:追記
15:35 追記
各モジュールコンパイルログとunboundのみmake check結果をアップロードしました。閲覧用google drive リンクは https://drive.google.com/drive/folders/1v4Z1lpNz2qEVpnZP_fZ-ntom5WEVIXLj?usp=sharing になります。

結局ScapyでのDNSクエリ解析は中断しました、NGN情報取得コーディングが動作しなかったのは内緒です。
いつも参考にしてるlinuxfromscratch.com Version 2020-06-29 にunbound-1.10.1 での導入手順が更新されていたので手持ちのスモールPCにDebian10(Buster)をインストールして再挑戦してみました。前回失敗環境から少し環境を変えてみました。結果なんとか動作してるようです。
変更点は以下の3点です。
1.python2.7/site-packages ディレクトリを python2.7/dist-packages のリンクとして追加。
2.SWING コンパイル要求の PCRE をパッケージインストール(apt install)に変更。
3.unbound configure オプションを --with-pythonmodule=/usr と変更。
数日中にgoogle drive へ資料アップ予定です、セットアップスクリプトとunbound コンパイル後の make check ログなどを予定してます。

2020/mai/30:追記
Scapy/ipv4で動作確認できました。ネット上のサンプルにローカルIPアドレス変更リストを追加しての動作確認です。とりあえず「使えそう」ということは確認できました、がtcpdumpを使う上での問題解決、応答時間チューニングとipv6処理追加が課題です。間違いなく今後おせっかいなプッシュ送信サイト、情報収集サイトは増えます、膨大な照合テーブルを常時リスト保存、照合するつもりは毛頭なく特定のドメイン(CNAME?)に対応する照合テーブルを外部DBから読み込みリスト入れ替えが目標です。同時に自宅ネットワークの利用目的別VLAN化も検討中です。進捗あり次第追記します。

2020/5/28:追記
約1週間考えた結果メンテナンス終了のPython2.xを使い続けるよりPython3.xに乗り換えが妥当と判断しました。そのうちpython-unboundもpython3.x対応になるでしょうからそれまでのつなぎと割り切りNetfilter、scapyなど物色中です。ネット上サンプルがあるのはscapyのようなので試してみます、ただこの種のツールはtcpdumpを使ってるようなので色々対策は必要かも。

2020/5/22:追記:
どうも5月にPython2.7インストール環境が変わったのか新規インストールでPythonモジュール初期化エラーがでてます、現在調査中です解決方法がわかれば追記します。

別記事にVm環境下ファイウォールインストールを書きましたが、ある程度融通のきくドメインブロックを実行したくて色々調べてみました。現在の自分のスキルで確実に構築できる案としてunbound+MySQL+Python がいいかなと思い試してみました。

まず、unbound を選んだ理由ですがブロック対象サイトを指定アドレス置き換え応答ができること、Pythonプラグインが実装できることで選びました。後は広告ブロックサイトとして公開されているドメイン一覧を読み込んでブロックする。ここまでならunbound標準機能で充分です、あとは追加で公開されているサイト以外の任意サイトを正規表現で指定するためにPythonで処理を追加する。

アクセス記録をDB記録してブロック漏れがないか確認できるようにunboundログを先のPythonプラグインにDBテーブル追加処理を組み込む、以上をESXi(VM環境)に構築しました。試験稼働3日めですがメタル環境とそんなに性能は変わりません、テキストログとの比較でアクセス記録、ブロック一覧も記録できているようです。OSSでここまでできるのでメーカー製アプライアンスは、少なくとも個人環境では、メリットがないように思います。

5/18:追記です、unbound python連携ですが、現在syslog転送とblockしたドメイン一覧をmysqlテーブル登録まで完了しました。それにしてもyahooとgoogleのしぶといこと、正規表現で引っ掛けてないとブロック漏れが多発しどうです。5G時代に備えて情報収集目的のドメイン一覧の制度を上げたいと考えています。個人のアクセス情報はそれ自体個人特定情報を含んでなくても様々な情報を活用して個人特定情報につながると考えて間違いないと思います。電子マネー支払いなんて一番危ないと思いますよ、こんな時代にありえないポイント還元率の出どころはどこなんでしょうか。怪しいですよね、自分は現状ではどんなに還元率が高くても利用しません。

2020/3/10 追記です。
困ったことにubuntu18,debian8以降 python2.7/site-packages がパッケージインストールだけでは利用できなくなってる、そもそも site-packages が存在しないようです。
NLnet Labs からソースを取得して自力コンパイル,configure,make,make install 後若干の修正、先のsite-packages ディレクトリ追加など、でとりあえずサービスとして動いている状態なで確認できました。3/9までに動作確認できた環境は、
Debian10(Buster) ESXi 仮想マシン unbound-1.10.0, Python2.7, BLFS Systemd ユニット などです。

site-packages に必要なファイルは Beyond Linux From Scratch というタイトルのHPの Contents セクションに Installed Library:libunbound.so and (optional)  /usr/lib/python2.7/site-packages/_unbound.so と明記されてるので間違いないと思います。

python2.7 にしがみつくのもどうかとは思いますがサポート切れからある程度時間がたたないと python3 への移行は難しいかもしれません。
単にドメインブロックしたいだけなら現行使ってる piHole+dnsmasq で充分ですが任意のログが欲しい場合はどうしてもOSSでは unbound+python が候補になります。コンパイル、環境設定スクリプトはまとまり次第 GoogleDrive共有リンクを貼り付けます。
3/10 20:05
以下のリンクにコンパイルスクリプトとコンソールメッセージ抜粋とpythonモジュールから吐き出したメッセージの一部を保存しておきます。
https://drive.google.com/drive/folders/1uVknKJ29k208EPaPNMwt-H69BLKQkbDR?usp=sharing

3/12:追記 残念ながら今回の設定変更でubuntu16時代と全く同じ機能は実現できないようです。pythonスクリプト内でmysql操作がエラーとなります。コンソール上でのスクリプトは動作します、想像ですがsite-packageがらみではと思ってます。現状mysqlにunbound内で処理するメリットも感じないので同様の処理はcronで実現することにしました。