254.ラズパイ無双[3.セキュリティ]
初回:2022/4/27
Raspberry Pi (ラズベリーパイ、通称"ラズパイ")で何か作ってみようという新シリーズです。今回はラズパイが不正アクセスされないように、セキュリティの設定を行いたいと思います。
P子「必要最低限の設定はしておかないとね」※1
企業内LANにラズパイを接続して利用する場合も、情報システム部門に対してどのような対策を行っているかを説明する必要もありますし、やはり初期設定のままでは乗っ取られるリスクもあります。
≪参考資料≫
http://makezine.jp/blog/2017/09/secure-your-raspberry-pi-against-attackers.html
Raspberry Piを攻撃から守るための手順
≪参考資料≫
https://monoist.atmarkit.co.jp/mn/articles/1909/30/news042.html
あなたのラズパイは穴だらけ? ユーザーが検討すべき脅威への対策 (1/2)
2.Piアカウントを無効化
3.SSHの接続ポートの変更
4.使わないポートを閉じる
5.updateの自動更新
6.アンチウイルスソフトの導入(参考)
7.不要なパッケージの削除(参考)
1.始める前に、sudo update
一連の作業を始める前に、おまじないをしておきたいと思います。社内から接続する場合には、前回の『プロ棋士』設定を行っておいてください。
$ sudo apt update インストール可能なパッケージの「一覧」を更新する
$ sudo apt -y upgrade パッケージ構成を変えない範囲でアップグレードする
更新の設定については『5.updateの自動更新』で、もう一度述べたいと思います。
2.Piアカウントを無効化
1.Piアカウントを無効化する前に、新しくユーザーを作成する必要があります。ここでは、xxx というユーザーを作成することとします。もちろん、xxxを各自のお気に入りのユーザーに置き換えて操作してください。
①新規ユーザーの作成
$ sudo /usr/sbin/useradd --groups sudo -m xxx
②新規ユーザーのパスワードの設定
$ sudo passwd xxx
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
2.ルートのパスワードをリセットするという方法が紹介されている場合もありますが、rootのパスワードは「*」で初期状態ではログイン不可なので変更しない方が安全です。既に変えてしまった場合は/etc/shadowを開き、rootのパスワード($で始まる長い英数字の所)を*にしてしまえばOKです。
3.Piアカウントを残しておくと不正アクセスの可能性が高まります。ここでは、後で、pi ホームディレクトリごとユーザーを削除しますので、アカウントの無効化作業は不要です。
③Piアカウントの無効化(piユーザーは消さない)
$ sudo passwd --lock pi
④デフォルトユーザーのグループを新しいユーザーに付ける
$ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),107(render),109(netdev),999(spi),998(i2c),997(gpio),117(lpadmin)
これらのグループを新しいユーザー(xxx)に設定します
$ sudo usermod -aG adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio,lpadmin xxx
※ 実際、これらのグループは、必要都度付与すればよいと思います。
⑤新しいユーザー(xxx) でログイン
リブートする前に、一旦、自動ログインの設定をOFFにします。
Raspberry Piの設定 ⇒ システム(タブ)
⇒ 自動ログイン 現在のユーザーとしてログインする のチェックをはずす。
$ sudo reboot
その状態で、sudo reboot すると、ラズパイ側でログインパスワードを要求されますので、一旦、新しいユーザー(xxx) でログインしてから、再度、自動ログインの設定を ON にします。セキュリティ的には、毎回ラズパイ側にログインパスワードを要求される方が良いかもしれませんが、そこはお好みにお任せします。
4.Piユーザーをフォルダごと削除する場合、Piユーザーで作成されたファイルなどは、rootでしかアクセスできなくなったり、不明なトラブルに見舞われるかもしれません。ただ、意味不明で動き続けるシステムより、エラーが発生して原因を特定して対処していく方が好みなので、私はフォルダごと削除する方法を取っています。
⑥pi ホームディレクトリごとユーザーを削除
$ sudo userdel -r pi
3.SSHの接続ポートの変更
SSHで接続して設定するのが定番かもしれませんが、VNCやリモートアクセスで操作する方が圧倒的に楽です。なので、SSHは無効にしておきます。
Raspberry Piの設定 ⇒ インターフェース(タブ)
⇒ SSH の無効をチェックします。(デフォルト)
SSHを利用される方は、下記手順に従って、ポートを変更しておきます。
≪参考資料≫
http://www.itmedia.co.jp/enterprise/articles/0704/05/news010.html
SSHのセキュリティを高めるためのハウツー
4.使わないポートを閉じる
iptables というファイアウォールが定番でしたが、ここでは、nftablesを利用します。Debian buster から、 iptables から nftables への置き換えがあったらしく、ここではさらに先の 64bit 正式版(Bullseye) を使っていますから、nftables を使わなければいけません。
≪参考資料≫
https://www.downtown.jp/~soukaku/archives/2019/0728_185332.html
Raspbianをbuster化したら、iptablesでちょっとだけハマる
①nftables のインストール(Bullseyeでは、インストール済み)
$ sudo apt install nftables
実は、nftables の設定方法になれていないので、iptables のルールファイルを、nftables形式に変換してくれるツールを使用することにします。初めて、nftablesを使う人は、一から勉強した方が良いかもしれません。
②ルールファイルの変換ツール(Bullseyeでは、インストール済み)
$ sudo apt install iptables-nftables-compat
1.今のルールを iptables-save で出力する
rules.v4
2.iptables-restore-translate でルールを変換
$ iptables-restore-translate -f /home/xxx/scripts/rules.v4 > /home/xxx/scripts/nftables.conf
3.nft list ruleset の内容を /etc/nftables.conf に保存する
設定ファイルのチェック
$ nft -c -f /home/xxx/scripts/nftables.conf
$ sudo cp /home/xxx/scripts/nftables.conf /etc/nftables.conf
③再起動
/etc/nftables.conf の再読み込み
$ sudo systemctl restart nftables
④自動的に起動する
$ sudo systemctl enable nftables.service
≪参考資料≫
iptables で使っていた rules.v4 と、それを元に変換した nftables.conf
rules.v4
nftables.conf
5.updateの自動更新
自動的にupdateを実行するなら、cronが簡単です。
$ sudo crontab -e
初回初めて登録する場合、エディターを聞いてきます。(nano でよいでしょう)
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
※ 毎日0時0分にアップデートが実行されるように設定します。
0 0 * * * apt update && apt -y upgrade && apt -y autoremove && apt autoclean
※ sudo で crontab を定義しているので、コマンド内に sudo は不要。
折角なので、一連の更新コマンドを整理しておきます。
$ sudo apt -y upgrade パッケージ構成を変えない範囲でアップグレード
$ sudo apt -y dist-upgrade パッケージ構成の変更に追随してアップグレード
$ sudo apt autoremove 不要になったパッケージを削除
$ sudo apt autoclean 不要なパッケージのアーカイブファイルを削除
$ sudo apt remove XXXXX 削除:設定ファイルは残ったままになります
$ sudo apt purge XXXXX パッケージを設定ファイルごと削除
$ sudo reboot 再起動「systemctl reboot」 のシンボリックリンク
$ sudo shutdown -r now リモートから再起動(リブート)
$ sudo poweroff 電源オフ「systemctl poweroff」のシンボリックリンク
$ sudo shutdown -h now シャットダウン(電源オフ)
$ sudo rpi-update Raspberry Piのファームウェア更新(非推奨)
$ sudo apt full-upgrade 最新OSまで、一気に更新(非推奨)
6.アンチウイルスソフトの導入(参考)
私は、アンチウイルスソフトは導入していません。そこまではいいかなというのが実感です。とりあえず参考情報だけアップしておきます。
≪参考資料≫
http://toripiyo.hatenablog.com/entry/2017/07/17/235014
raspberry pi 3にclamavを導入する
1. install clamav
$ sudo apt update
$ sudo apt install clamav clamav-daemon
2. update virus definition database
$ freshclam
3. create script file (hooks.slack.com のURLは適宜変更)
$ cd /root
$ sudo nano virusscan.sh
#!/bin/bash
PATH=/usr/bin:/bin
# virus scan
CLAMSCANTMP=`mktemp`
TIME=`date`
MESSAGE="Virus is detected!!: ${TIME}"
clamdscan /var/www/html/data > $CLAMSCANTMP 2>&1
$ sudo chmod 700 virusscan.sh
4. set cron job
$ crontab -e
00 04 * * * sh /root/virusscan.sh
7.不要なパッケージの削除(参考)
『不要なパッケージの削除』は、気が向いたらやってみてください。
OSのベースが、Bullseye か、それ以前かによっても、初期インストール済みのパッケージが異なります。依存関係で使用しているパッケージもあるので、自己責任です。
現在入っているパッケージの一覧を取得するには dpkg -l コマンドを使用
$ dpkg -l
とりあえず削除できそうなのは triggerhappy ぐらいでしょうか
$ sudo apt purge -y --auto-remove triggerhappy
≪参考資料≫
https://azriton.github.io/2017/03/19/Raspbian-Jessie-Lite%E3%81%9D%E3%81%AE%E4%BB%96%E8%A8%AD%E5%AE%9A/
不要なパッケージの削除
ファイルサイズの大きい順番に、一覧表示してみる。
$ dpkg-query -W -f='${Installed-Size}\t${Package}\n' |sort -n -r | head -20
8.最後に
ラズパイは数多く普及している分、不正アクセスのターゲットになりやすいという思います。デフォルト設定のまま使うのは非常に危険ですので、ここで取り上げた最低限の対策は行っておいた方が良いと思います。
≪参考資料≫
https://www.itmedia.co.jp/news/articles/1906/23/news012.html
NASA、サイバー攻撃で機密データ流出 侵入口は無許可接続の「Raspberry Pi」
2019年06月23日 07時45分 公開 [ITmedia]
ほな、さいなら
======= <<注釈>>=======
※1 P子「必要最低限の設定はしておかないとね」
P子とは、私があこがれているツンデレPythonの仮想女性の心の声です。