Armadilloフォーラム

Armadillo Base OSの更新後も追加したパッケージを保持できますか

stiffshoulder

2023年9月27日 12時02分

お世話になっております。橋本と申します。

Armadillo-IoT G4で
persist_file -a add "package名"
で追加したパッケージがArmadillo Base OSの更新
swupdate -d '-u https://armadillo.atmark-techno.com/files/downloads/{url-product-dir}/image/baseos-x2-[VERSION].swu'
を行うと無くなってしまうのようなのですが、追加したパッケージを保持する方法はありますでしょうか?

コメント

at_dominique.m…

2023年9月27日 12時19分

橋本さん

マルティネです。

> Armadillo-IoT G4で
> persist_file -a add "package名"
> で追加したパッケージがArmadillo Base OSの更新
> swupdate -d '-u https://armadillo.atmark-techno.com/files/downloads/{url-product-dir}/image/baseos-x2-[VERSION].swu'
> を行うと無くなってしまうのようなのですが、追加したパッケージを保持する方法はありますでしょうか?

ありません。
パッケージのファイルを確認して swupdate_preserve_files で保存させることは一応可能ですが、依存しているライブラリが更新されて起動できなくなる可能性がありますのでいずれ後悔することになります。

どうしてもパッケージの追加が必要な場合は https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g4… の「Alpine Linuxルートファイルシステムビルドツール」にパッケージを追加して自分でアップデートを生成するしかないですが、基本的には Armadillo Base OS ではなく、コンテナで実行していただけたらと思います。

コンテナに任意のパッケージをインストールできますし、アップデートも自分で管理しているのでそういう問題がありません。

具体的なパッケージや用途を教えていただければ相談できます。

よろしくお願いします。

マルティネさん

橋本です。

G4のSSHサーバーへの接続に制限をかけるためにsshguardの使用を検討しております。
そのため
・sshguard
・nftables
・rsyslog
をBaseOSにインストールしております。

この場合 Base OSの更新を行った後は、上記3つのインストール&設定ファイルの配置・書き換えを実行する必要があるということですね。
そうではなく、コンテナでsshguard(または類似の機能)を実施する方法はありますでしょうか?
ありましたら、簡単で構いませんので方法をご教示いただければ幸いです。

以上、よろしくお願いいたします。

at_dominique.m…

2023年9月29日 14時40分

橋本さん、

マルティネです。

> G4のSSHサーバーへの接続に制限をかけるためにsshguardの使用を検討しております。
> そのため
> ・sshguard
> ・nftables
> ・rsyslog
> をBaseOSにインストールしております。

なるほど、確かに BaseOS で使った方が自然ですね…

たりないかもしれませんが、BaseOS に iptables がインストールされていて永続化のサービスもありますので、個人的にはこういうルールを使っています:

# iptables
-N conntrack_new
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate NEW,UNTRACKED -j conntrack_new
# limitされてないポートをここに conntrack_new に追加
-A conntrack_new -m hashlimit --hashlimit-above 5/min --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name new_limit --hashlimit-htable-expire 1200000 --hashlimit-srcmask 28 -j REJECT --reject-with icmp-host-prohibited
-A conntrack_new -p tcp -m tcp --dport 22 -j RETURN
# 他にリミットするポートの追加
-A conntrack_new -j REJECT --reject-with icmp-host-prohibited
 
# ip6tables
-N conntrack_new
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate NEW,UNTRACKED -j conntrack_new
#同じくリミットのないサービス
-A conntrack_new -m hashlimit --hashlimit-above 5/min --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name new_limit --hashlimit-htable-expire 1200000 --hashlimit-srcmask 48 -j REJECT --reject-with icmp6-adm-prohibited
-A conntrack_new -p tcp -m tcp --dport 22 -j RETURN
-A conntrack_new -j REJECT --reject-with icmp6-adm-prohibited

パスワード無しだけが設定されていれば、cpu の節約だけなので細かいルールがなくてもいいと考えています、どうでしょうか。

> この場合 Base OSの更新を行った後は、上記3つのインストール&設定ファイルの配置・書き換えを実行する必要があるということですね。
> そうではなく、コンテナでsshguard(または類似の機能)を実施する方法はありますでしょうか?
> ありましたら、簡単で構いませんので方法をご教示いただければ幸いです。

確認までしてませんが、できると思います。

まずは、rsyslog は sshguard のためだけに使うなら、完全に不要だと思います:デフォルトの busybox syslog で、sshguard が /var/log/messages を読み取れば必要なメッセージが取得できると思いますが、あってますか?
rsyslog を別の目標(例えばネットワークにログの配信)に使うなら、「ログコンテナ」で /dev/log を volume として使えばできるかもしれませんが、あまりおすすめしたくないですね…

sshguard の方は、コンテナを set_network host (podman の --network=host) と add_args --cap-add=NET_ADMIN で起動すれば、firewall の管理はできます。
ログは普通のボリュームで読み取れますので、「add_volumes /var/log:/var/abos-log:ro」などでコンテナにマウントしてその /var/abos-log/messages を読み取るように設定すれば使えそうです。

回りくどい使い方で申し訳ございません、
そこまでするならパッケージを追加してアップデートを自分で用意した方がいいかもしれません。

よろしくお願いします。

マルティネさん

橋本です。
お忙しいところご回答ありがとうございました。いろいろ検討させていただきます。

以下は小話です。

> まずは、rsyslog は sshguard のためだけに使うなら、完全に不要だと思います:デフォルトの busybox syslog で、sshguard が /var/log/messages を読み取れば必要なメッセージが取得できると思いますが、あってますか?
はい、そのとおりです。
ただ、 sshguardが見るログが増えるのでsshguardの負担が増えるかな...ということで入れております。

at_dominique.m…

2023年10月17日 12時41分

橋本さん

詳細の追加ありがとうございます。

> > まずは、rsyslog は sshguard のためだけに使うなら、完全に不要だと思います:デフォルトの busybox syslog で、sshguard が /var/log/messages を読み取れば必要なメッセージが取得できると思いますが、あってますか?
> はい、そのとおりです。
> ただ、 sshguardが見るログが増えるのでsshguardの負担が増えるかな...ということで入れております。

なるほど、sshのログだけを別のファイルにして、処理を最適化したい気持ちが分かりました。
G4 の性能であればその心配は不要だと思います。
確認のため sshguard を実行して「cat largefile | logger -t test」で(3秒で、15MBの)100k行のログを何回か出力してみたが、syslog が一つの cpu を 100% 使っていたに対して sshg-parser は 10-20% ぐらいで効率よくログを監視できてました。優秀ですね、普通のログのペースでは他のプロセスの邪魔をしなさそうです。

rsyslog を使うと logrotate の設定も必要になりますので、ネットワークログの機能が必要ない限りは busybox syslog のままがいいと考えています。

他のポイントの検討も、お手数ですが引き続きよろしくお願いします。