気の向くままに辿るIT/ICT/IoT
ハードウェア

Raspbian Jessieで各種サーバを設定

ホーム前へ次へ
Raspberry Piって?

Raspbian Jessieで各種サーバを設定

Raspbian Jessieで各種サーバを設定

2016/04/21

 今回、Raspberry Pi(Raspberry Pi 2 Model B)を導入するにあたっての想定としては、ファイルサーバ(NAS)、メディアサーバ(UPnP/DLNA)、他には漠然とDNSサーバーやNTPサーバーも盛り込んでもいいのかな?

 また、あまり使うことはないもののプリンタやスキャナ、更にイレギュラーではありますが、グラフィカルなメーラーの共有もしたいと考えています。

 尚、RAIDは見送りつつ、外付けHDDにせよ何にせよ、デバイスやパーティションを柔軟に追加・調整できるLVMは使おうと思います。

 ただ、よく考えると前者2つについては、同一LAN上の他のクライアントマシンが1台以上起動している時にRaspberry Piも起動していれば良いですが、後者、DNSサーバやNTPサーバは、実質、常時起動している必要がある?

 ファイルサーバとして外付けHDDを接続することを考えると常時起動しておくのは外付けHDDの分、無駄に思えてきて、やるなら別サーバを立てた方がよいかと思うに至りました。

 ちなみに外付けHDDの電源を必要に応じてON/OFFしたい場合には、次の点に注意が必要そうです。

 というのもLVMを使うと使用する物理ボリュームに割り当てられたパーティションやそれ全体が外付けHDDに含まれる場合、少なくともラズパイと同時に起動しないと、後から外付けHDDの電源を入れたり、USB接続したりしても/dev/VG/LVデバイスをマウントできなくなるからです。

 そうなるとLVMに限らず、/etc/fstabに書かれたデバイスが外付けHDDである場合、これを接続しないで、かつ少なくともエラー時のオプションを付与せずに/etc/fstabに書いてあるとラズパイ(サーバマシン)にSSH接続すらできなくなってしまう...。

 よって外付けHDDだけ起動したりしなかったりするというのは運用上、微妙なことになる為、このラズパイと外付けHDDはセットで起動が前提となります。(そもそもそのつもりだったので別に構いませんが。)

 他に必要なものが思い浮かぶまでは、先の前者2つを運用するものとし、このページでは、これらのインストールと設定を行ないます。

Raspbian JessieとRaspbian Jessie Lite

 今回、できるだけ最小限の構成にしたい為、標準版のRaspbian Jessie(zip圧縮時1.3GB/展開後3.5GB程度)ではなく、敢えてRaspbian Jessie Lite版(zip圧縮時284MB/展開後1.3GB程度)を使っています。

 前者はログイン後、startxすればLXDEが起動しますが、Lite版はグラフィカルを望むならCLIベースで新たに構成する必要があります(Lite版には、xorgも入っていません)。

Raspbian Jessie Lite

 最小構成とは言っても要件の1つとしてグラフィカルメーラーの共有があるのでメーラーにしても、これを各マシンから利用するにしてもSSH X11ForwardingやVNCを利用する必要がある為、xorgは必要となります。

 一方、LXDEといえどもウィンドウマネージャよりは嵩むので軽量化の為、FluxboxかOpenboxを入れようと思っています。

 UPnP/DLNAメディアサーバーも想定していますが、サーバーとしてMediaTombの管理画面にしても、MiniDLNA(後のReadyMedia)の確認画面にしてもクライアントマシンのブラウザからアクセスすれば事足ります。

 よってメディアサーバーを使うにあたっては、必ずしもRaspberry Pi側にブラウザは(もちろん、xorgも)入っている必要はありません。

Raspbian Jessie LiteにXとFluxboxをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install fluxbox
NEW_USERNAME@raspberrypi:~ $ sudo apt-get install xorg xserver-xorg xbase-clients
NEW_USERNAME@raspberrypi:~ $ which startx
/usr/bin/startx
NEW_USERNAME@raspberrypi:~ $ startx
X: user not authorized to run the X server, aborting.
NEW_USERNAME@raspberrypi:~ $ sudo dpkg-reconfigure --priority=low x11-common
NEW_USERNAME@raspberrypi:~ $ startx
...
Ctrl+C
NEW_USERNAME@raspberrypi:~ $

 というわけでFluxboxを使うことにしてxorg関連共々インストール。

 最初、Fluxboxをインストールすれば、芋づる式にxorg類が入ることを期待しました。

 が、startxも存在せず、そうはいかなかったのでDebianリファレンスの『7.1. 重要パッケージ』からホントに重要そうなxorg、xserver-xorg、xbase-clientsを追加でインストール。

 これでstartxも入ったし、いけるだろ。。。

 と思ったら、[X: user not authorized to run the X server, aborting.]なるメッセージが。。。

 あ、[sudo dpkg-reconfigure --priority=low x11-common]か?と思いましたが、途中で止まってしまう。。。

 あっ!

Raspbian Jessie Liteにtightvncserverをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install tightvncserver
NEW_USERNAME@raspberrypi:~ $ sudo vncserver :2
...
NEW_USERNAME@raspberrypi:~ $

 これって今のDISPLAYを使おうとしてるかなんかに起因してるんだよね?きっと。。。

 つまり、クライアントマシンからVNCで開けば、いけるってことでしょ。。。

 ということでtightvncserverをインストールし、vncserverを5900番台の任意のポート(今回は5902)の例えば下1桁を指定して起動。

$ vncviewer RPi_IP_ADDRESS:5902
...

 案の定、クライアントPCからアクセスしたら、すんなり表示されました。

 普通は、ここで一度、vncserverを起動して~/.vnc/xstartupが生成されたことを確認し、編集するところ...。

 が、以前、クライアントマシンにDebianを入れた際にVNCの確認をしたところ、FedoraやNetBSDと違って~/.vnc/xstartupを編集しても、なぜかDebianで起動しているデスクトップしか表示されないということがありました。

 そこでRaspbianも起動はしていませんが、何もしなくても唯一入っているFluxboxを起動するだろうとタカをくくったらその通りでした。

$ ssh -N -L 49201:RPi_IP_ADDRESS:5902 RPi_IP_ADDRESS
$ vncviewer :49201
...

 速度の話はあるにしても、もちろんSSHポートフォワーディングの方が賢明。

 と思ったら、(Debianではデフォルトだったか簡単にできるのに)Raspbianでは、なぜか、SSHポートフォワーディングするには、結構手間がかかりそうですが。

外付けHDDをNASとして使う

 このRaspberry Piは、ファイルサーバであるNAS(Network Attached Storage)としても機能させたいので今回は、そのストレージに手持ちの外付けHDD(WD/Western Digital Elements Desktop 2TB)を使うことにしました。

 バックアップは考えず、RAID構成にはしない一方、後で柔軟にストレージデバイスやパーティションを追加・削除できるようにLVMを、NASとする為にSambaを使おうと思います。

 まず、直接、または、USBハブ経由でラズパイとつなげた外付けHDDにおいて既存の、もしくは、必要に応じて作成したパーティションにおいてラズパイ上でpvcreate/vgcreate/lvcreateを使ってLVMの物理ボリューム(PV/Physical Volume)として追加/ボリュームグループ(VG/Volume Group)作成/論理ボリューム(LV/Logical Volume)作成を行ないます。

 これによりデバイスとして/dev/VGNAME/LVNAME/dev/mapper/VGNAME-LVNAMEが生成されます。

 ちなみに当該外付けHDDのみならず、LVMには他のHDDやUSBメモリなども単独や併せて物理ボリュームとして追加したり、削除したりすることもできます。

 次に後述のSambaのインストールと設定の要領でSambaを構成、何かあった際の問題の切り分けの為にもSambaサーバにSambaクライアントからアクセスできることを事前に確認しておくとよいでしょう。

 この時、アクセスする可能性のある各マシンの一般ユーザーやSambaユーザー(アカウント)は同名だと後が楽でしょう。

 他方、Samba共有名、例えば、[nas]、やSamba共有するパス、例えば、/mnt/nasは、NASとしてのマウントポイントとなるのでわかりやすい名称にするのが良いでしょう。

RPI_USERNAME@raspberrypi:~ $ sudo vi /etc/fstab
...
/dev/VGNAME/LVNAME  /mnt/nas  ext3  defaults,noatime  0  0
...
RPI_USERNAME@raspberrypi:~ $

 ラズパイ上で先のLVMで作った結果できたデバイス/dev/VGNAME/LVNAME、もしくは、/dev/mapper/VGNAME-LVNAMEをマウントポイントであるSamba共有パス(例:/mnt/nas)にマウントすべく、/etc/fstabに追記します。

 ここまでで次回以降、個別スイッチ付きか否かに関わらず、同一電源タップ上につなぐなどしてラズパイと同時に外付けHDDの電源をONにすれば、ラズパイ上の(作成されたLVMのデバイスではなく、それをマウントした)NAS用マウントポイントをSambaクライアントとなる各クライアントマシンからマウントすれば、NASにアクセスできるようになります。

name@client:~ $ sudo vi /etc/hosts
...
192.168.0.2  raspi raspi.
name@client:~ $ sudo mkdir /mnt/nas
name@client:~ $ sudo vi /etc/fstab
...
//RPI_USERNAME@raspi/nas  /mnt/nas  ...
...
name@client:~ $

 各クライアントマシンでは、個別にIPアドレス指定は面倒でしょうから、例えば、ラズパイのIPアドレスが192.168.0.2ならば、ホスト名raspiなどとして/etc/hostsなどでホスト名解決しておくとよいでしょう。

 ちょっと話が逸れますが、DHCP任せだとIPアドレスは変わってしまう可能性があるのでラズパイのIPだけは固定にしておくとか、別途、DNSサーバをたててLAN内ホスト全ての名前解決をしておくといった方法もあります。

 そしてラズパイ上のSamba共有パス(例://RPI_USERNAME@raspi/nas)をマウントする為のマウントポイントを作成、必要なマシン上では、/etc/fstabに追記しておくのが便利でしょう。

 Sambaクライアント側の/etc/fstabの書き方は、一種独特かつ、OSによって異なる場合があるので前述のリンク先などで要確認。

 こうしておけば、次回以降、オートマウントでき、NASとして利用できるようになるでしょう。

name@client:~ $ df -h
...
name@client:~ $ sudo mount -a

 もし、df -hなどで確認してみた結果、/etc/fstabに正しく追記したにも関わらず、オートマウントされていない場合には、mount -aとすれば、とりあえず、マウントされるはずです。

[2018/07/14]

 クライアントマシン側でmDNS機能を持ったLinuxならAvahi、WindowsやmacOSならBonjourを使えば、IPアドレスを意識することなく、常に[ホスト名.local]でアクセス可能になる為、超便利。

 Samba共有パスも例えば//RPI_USERNAME@ラズパイホスト名.local/nasのようにアクセスできます。

 尚、ラズパイ上もクライアントマシン上もマウントポイントを/mnt/nas、Samba共有名を[nas]として書いた結果、かえってわかりずらいかもしれませんが、これらネーミングは当然任意で自由です。

Raspbian Jessie LiteにSambaをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install samba
...
NEW_USERNAME@raspberrypi:~ $

 ファイルサーバ・NASにするのでSambaを入れて設定しておきます。

NEW_USERNAME@raspberrypi:~ $ sudo smbpasswd NEW_USERNAME
...
NEW_USERNAME@raspberrypi:~ $

 Sambaをインストールしたら、Sambaアクセス用にシステムを通常利用するアカウントであるユーザーとSamba用のパスワードを設定しておきます。

NEW_USERNAME@raspberrypi:~ $ sudo vi /etc/samba/smb.conf
...
[shared]
comment = Shared
path = /mnt/sharedir
browseable = yes
writable = yes
#guest ok = yes
#guest only = yes
create mode = 0777
directory mode = 0777
share modes = yes
valid users = samba,NEW_USERNAME
...
NEW_USERNAME@raspberrypi:~ $

 Sambaの設定ファイルは、Raspbianに限らず、Linuxなら普通/etc/samba/smb.confです。

 Raspbian(Debian)では、smb.confのデフォルトの内容(ちなみにworkgroup = WORKGROUP)に共有パスや共有プリンタの設定を追記しただけでも利用できるはず、プリンタは既にデフォルト設定はなされているでしょう。

NEW_USERNAME@raspberrypi:~ $ sudo systemctl restart smbd.service
NEW_USERNAME@raspberrypi:~ $

 また、Raspbian(Debian)では、たいていの場合、インストール後は、必要なグループ、ユーザーが追加され、サービスが有効かつ起動した状態になっています。

 ちなみにJessieからは、inetdでもxinetdでもなく、systemdが標準となっており、Sambaの場合もsmb.confの設定が終わったら、reloadかrestartしておきます。

 サンプルでは共有パスが/mnt/sharedirとなっていますが、これは、NASにするにあたり、予め、/etc/fstabにおいて外付けHDDなどの当該パーティションに割り当てられる/dev/sd?*やLVMなら/dev/VGNAME/VGNAMEなどのデバイスがマウントされるように記述されていてシステム起動時には/mnt/sharedirがマウントされた状態にあることを想定しています。

 Samba共有へのSambaクライアントからのアクセス方法については、NetBSD上のSamba共有パスにWindows/Fedora/NetBSDからアクセスでRaspbian(Debian)ならLinuxは基本的に同様なのでのFedoraの項を、WindowsやNetBSDなどは、それぞれを参照下さい。

Raspbian Jessie LiteにCUPS/Common Unix Printing Systemをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install cups
NEW_USERNAME@raspberrypi:~ $

 滅多に使うことはありませんが、プリンタも共有しておきたいのでCUPSもインストールしておきます。

NEW_USERNAME@raspberrypi:~ $ sudo vi /etc/cups/cupsd.conf
...
# Allow remote access
#Port localhost:631
Port *:631
...
<Location />
...
Allow From ***.***.***
...
<Location /admin>
...
Allow From ***.***.***
...
<Location /admin/conf>
...
Allow From ***.***.***
...
NEW_USERNAME@raspberrypi:~ $

 CUPSの構成ファイルは、Linuxでは、/etc/cups/cupsd.confであり、適宜、Listenポートや許可するネットワークアドレスを追記設定しておきます。

NEW_USERNAME@raspberrypi:~ $ sudo vi /etc/cups/cupsd.conf
...
# Allow remote access
Port 631
...
<Location />
...
Allow @LOCAL
...
<Location /admin>
...
Allow @LOCAL
...
<Location /admin/conf>
...
Allow @LOCAL
...
NEW_USERNAME@raspberrypi:~ $

 が、Raspbian(Debian)は、加えた変更をよりよく改善してくれるらしく、設定保存後、改めて確認してみたら[Port *:631]とした部分が[Port 631]に、[Allow From ***.***.***]と詳細なネットワークアドレスなどを追記したところが全て[Allow @LOCAL]に置き換えられていました(優秀・・・)。

 @LOCALって一見、自ホスト(local host)のみ?と思いましたが、同じネットワークアドレス(local network)上にあるホストも含まれるようなのでローカルネットワークのローカルである模様。

NEW_USERNAME@raspberrypi:~ $ sudo usermod -a -G sys,lpadmin
NEW_USERNAME@raspberrypi:~ $

 CUPSは、使う度?ディストロによって?設定内容が変わる気がしなくもありませんが、ユーザーをsysグループとlpadminグループに追加します。

 (これらグループに追加しないとブラウザ上のCUPS管理画面とか[プリンタの追加]ボタン押下時とかどっかこっかでForbiddenではじかれる。)

 cupsd.confでPortを631にしてあるならブラウザのURL入力欄にlocalhost:631とすればアクセスできます。

 同様にLAN内の許可されたネットワークアドレス上にある他のホストからアクセスする場合には、localhost部をIPアドレス(やホスト名)で置き換えればアクセスできます。

 このようにすれば、ラズパイからでなくともクライアントのブラウザからプリンタの追加を行なうことができます。

 また、追加されたCUPSプリンタは、たいていのアプリでは認識・検出されるのでテキストエディタやLibreOfficeなどでも認識されるはずです。

 というか、実際、検出されました。

Raspbian Jessie LiteにSane/XSaneをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install sane sane-utils xsane
NEW_USERNAME@raspberrypi:~ $ sudo sane-find-scanner
...
found USB scanner (vendor=0x04b8 [EPSON], product=0x0104 [GT-7600]) at libusb:001:006
found USB scanner (vendor=0x0424, product=0xec00) at libusb:001:003
...
NEW_USERNAME@raspberrypi:~ $ sudo chmod 666 /dev/bus/usb/001/006
NEW_USERNAME@raspberrypi:~ $

 これまた滅多に使うことはありませんが、スキャナも共有しておきたいと思います。

 スキャナの共有には、saneを使うのが妥当なようです。

 単なるUSB接続の古いスキャナでもやりようによっては、プリンタのようなネットワーク越しの共有もできるようです。

 が、ほぼ使うこともないですし、面倒になってきたのでSSH X11ForwardingやVNC越しに利用する方法で共有することにしてsaneと併せて作業用にsane-utils、グラフィカルフロントエンドxsaneをインストール。

 何れにしてもsudoなど管理者権限で[sane-find-scanner]コマンドを実行、見つかったスキャナの行にある、ここでは[libusb:001:006]の数値が、/dev/bus/usb以下のパスに相当するので誰でも読み書きできるように当該キャラクタデバイスのパーミッションを666にしておきます。(そうなっていないとスキャナの操作ができません。)

 [sane-find-scanner]コマンドはsane-utilsパッケージに入っている為、インストールしましたが、一通り作業が終わって運用する段になれば、なくても構いません。

 尚、当該USB機器に割り当てられるデバイス(値)は、一定ではないようなので都度、[sane-find-scanner]コマンド、もしくは、[lsusb]コマンドなどでデバイス(値)を確認すると共に当該デバイス(/dev/bus/usb/001/xxx)のパーミッションが666になっているかも併せて確認・変更しておくとよいでしょう。

Raspbian Jessie LiteにClaws-Mailをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install claws-mail claws-mail-i18n
NEW_USERNAME@raspberrypi:~ $

 メーラーは、Icedove(Thunderbird)にしようかとも思いましたが、以前、シングルコアCPU/RAM512MBマシンにNetBSDを入れた当初、スリム化を図って絞り込んだ際に使っていた軽量なClaws-Mailにすることに。

 日本語対応させる為、claws-mail-i18nもインストール。

 (サーバ上なのに)メールクライアントについては、最初から想定していた通り、SSH X11ForwardingかVNC越しで。

[2022/10/12]

 この記事を書いてから6年半ほど当時のRaspbianは、Raspberry Pi OSに代わり、Jessieだった開発コードは、Stretch、Busterを経てbullseyeとなりました。

 今尚、ラズパイ2Bサーバも、最近めっきりメールの出番は減ったものの、Claws Mailも、多少入れ替えたり、構成は変わったものもあるも他も快調。

 そんな折、メールを返信する機会があり、VNC越しにClaws Mailで返信しようと思ったら、メール以前になぜか日本語変換ができなくなっており、結果、fcitx5-mozcからibus-kkcに替え対処

 さて、メール...と思ったら、今度は、受信はできるのに[535 authorization failed(#5.7.0)]となってサイトドメインアカウントによるメール送信ができない状況に遭遇。

 結果、Claws MailのSMTP設定で「アカウントとパスワードをカラにする」ことを以て「POPと同じアカウントを使う」ようにすることで、あっさり、メール送信できるようになりました。

 ただ、気づけば約2年も送信してなかったのですが、ここ2年ほどで何がどう変わったのか!?それともバグか!?これまでは、当該箇所のアカウントとパスワードにはPOPと同じものを「入力した状態」で正常に送受信できていたので、なぜ?状態。

 Sylpheedで試してみるも同じ症状でした...が、POPのアカウント設定がどこにあるのか、にわかには、わからないものの、SMTP側で同じように設定・対処しても、逆に入力してもSylpheedでは、ドメインメール送信に失敗、これは根本解決策ではないということなのか、これまたなぜ状態、Sylpheedでは送信時の署名が必須に見えるのは気になるものの、解決策を見いだせず終いですが...。

 それだけに、そこにたどり着くまでに数日、設定を凝視しても至極当然な数少ない設定項目しかなく、設定が間違っているようには見えない...、そもそも過去1度も初期設定から変更していないはず...。

 仕様変更でもあったのかと検索してみてもヒットするのは極わずか、同じような質問があった5chにたどり着くも、さすがというべきか、さっぱり、わからないことには梨の礫どころか叩くって意味不明...、何らかの事情でサーバで拒否されていたという情報もあり、そんなわけないよねと思いつつもサーバのサポートにも相談してみたり...。

 んー、Claws MailのベースとなったSylpheedだと比較検証としては薄いか...と思い、当該ラズパイに起因しないとも限らない一方、ラズパイ固有の可能性と切り分けるべく、クライアントの内、ラズパイ400上でThunderbirdを試すとドメインメールの送受信もあっさりできました。

 もちろん、この時点でサーバサポートには謝罪し、当該Web問い合わせは終了。

 ここから、Claws Mailと、というか、送信(SMTP)設定とSSL/TLS設定とにらめっこ。

 やはり、SMTP設定か...ん?[設定]から[アカウントの編集]、個別のアカウントを選択して[編集]、[送信]の[認証]にある[SMTPサーバで認証(SMTP AUTH)を行う]の[ユーザID]/[パスワード]の下に小さな小さな字で「エントリを空のままにすると、受信のときのユーザIDとパスワードを使用します。」なんて注釈あったっけ!?

 最後の最後にダメ元で...と、これらをカラにしてみたら、拍子抜けするほど、あっさりとドメインメールの送信ができるようになった次第。

 解決して良かったけど、こりゃあ、わからないでしょ......。

 更にClaws Mailはこれで解決できたのに同様の設定だったSylpheedでは相変わらず送信できない、ちょっと試してみただけですがEvolutionでも送信できず、Thunderbirdは何をするでもなく、あっさり送信できるっていうのも謎でしょ...。

Raspbian Jessie LiteにMediaTombとMiniDLNAをインストール

NEW_USERNAME@raspberrypi:~ $ sudo apt-get install mediatomb minidlna
NEW_USERNAME@raspberrypi:~ $

 メディアサーバー(/ホームサーバー/リビングサーバー)は、とりあえず、MediaTombとMiniDLNAを入れて後で吟味して選定後、使わない方を削除します。

 MediaTombの設定MiniDLNAの設定も比較的簡単です。

 結果、MediaTombもMiniDLNAもうまく機能しました。

 UPnP/DLNAメディアクライアントもいろいろやってみたところ、音源だけならRhthmbox、動画だけならTotemでも良い感じです。

 が、音源と動画両方となるとBansheeやVLCあたりがいい感じ。

 Kodi/XBMCが最も洗練されてはいると思いますが、仮想ディスプレイ切り替えとか方法はあるにしてもクライアントが半ば専用マシンと化し、ながら作業には向かないかなと。

 これでRaspberry Piのセットアップから初期設定、今回想定するパッケージのインストールや設定も一応完了し、運用していますが、次は、今回揃えたものや運用状況についてあれこれ。

Raspbian BusterにWireGuardをインストール

2021/01/05

 Raspberry Pi/スマホにWireGuardでVPN参照。

2021/01/10

 あと一歩という気はするものの、どうにも、うまくいかないので代わりにSoftEther VPN Serverをインストール

Raspbian Busterにufwをインストール

2021/01/05
USERNAME@raspberrypi:~ $ sudo apt install -y ufw

 WireGuard導入に伴い、遅まきながら、ファイアウォールとしてufwをインストール、設定することにしました。

 Wikipediaによれば、Uncomplicated FireWallの略でiptablesを容易にするためのラッパのようです。

 ずっとファイアウォールについては、頭の片隅にはあった、iptablesの存在は知っていたものの、面倒だなと思ってしまっていましたが、重い腰を上げてみたら、なんのことはない、ufwなら簡単でした、なんで早くやらなかったんだろ...。

USERNAME@raspberrypi:~ $ sudo ufw default allow
or
USERNAME@raspberrypi:~ $ sudo ufw default deny

 まず、デフォルトでは、全て許可[ufw default allow]にするのか、全て拒否[ufw default deny]にするのかを決めます。

 全て許可しておいてシャットアウトしたいポートを拒否していく前者よりも全て拒否しておいて後から必要なポートのみ開ければ良い後者の方が、簡単でしょう。

USERNAME@raspberrypi:~ $ sudo ufw allow ...
USERNAME@raspberrypi:~ $ sudo ufw allow from ...
USERNAME@raspberrypi:~ $ sudo ufw deny ...
USERNAME@raspberrypi:~ $

 個々のサービスの許可[ufw allow]と拒否[ufw deny]は、このような書式で実行します。

 ネットワークセグメント(192.168.0.0/24など)を設定する場合には、fromに続けてネットワークセグメントを指定します。

USERNAME@raspberrypi:~ $ sudo ufw app list
...
USERNAME@raspberrypi:~ $ ls /etc/ufw/applications.d
...
USERNAME@raspberrypi:~ $

 個別のポートを指定することもできますが、まずは、サービス名の一覧[ufw app list]や既存のファイルに指定された個別サービス名([/etc/ufw/applications.d/]内のファイルに記述されている[]内の名称)で指定すると楽です。

 [/etc/ufw/applications.d/]内のファイルを参照し、独自に作成するのもありです。

 大文字小文字を正確にする必要はありますが、SSH、OpenSSH、VNC、SambaやCUPS等々様々あるので、これだけで事足り、充分な場合も多々あるでしょう。

 尚、WireGuardについては、[/etc/ufw/applications.d/cups]をコピーして作成しました。

 ルーターでもWireGuard用のポートは開けましたが、ファイアウォールなら通信元のネットワークセグメントも限定できますし。

USERNAME@raspberrypi:~ $ sudo ufw status
...
USERNAME@raspberrypi:~ $ sudo ufw status numbered
...
USERNAME@raspberrypi:~ $

 [ufw status]、[ufw status numbered](行番号付き)で設定された状況を確認することができます。

USERNAME@raspberrypi:~ $ sudo ufw status numbered
...
USERNAME@raspberrypi:~ $ sudo ufw delete 設定リストの番号
USERNAME@raspberrypi:~ $

 既存の設定を削除する[ufw delete 設定リストの番号]を実行するには、[ufw status numbered]で番号を確認して行ないます。

USERNAME@raspberrypi:~ $ sudo ufw status numbered
...
USERNAME@raspberrypi:~ $ sudo ufw delete 設定リストの番号
USERNAME@raspberrypi:~ $

 Raspberry Piなどヘッドレスマシンにufwをインストールしたら、ufwを有効にしてみる前にufw default allowかufw default denyして、後者にした場合は、最低でもSSHやOpenSSHをallowしてから、ufwを有効にしましょう。

 default設定せずに、または、ufw default denyした直後、ufw enableしただけで電源を落としてしまうと次回起動時にsshアクセスできなくなります。

 自身は、インストール直後にいたずらにufw enableしてみたのも束の間、不慮の事態でラズパイがフリーズ、sshアクセスできず、ハマり、他マシンでマウントしてetc/ufw/ufw.confのENABLED=yesをnoに変更して再接続、事なきを得たものの、不慮だったため、何が原因なのか気づくまで焦りました、こんなこともあるので注意です。

 まぁ、USB接続のディスクだったこともあり、事後も簡単に対処はできたのでなんですが。

USERNAME@raspberrypi:~ $ sudo ufw enable
USERNAME@raspberrypi:~ $ sudo ufw disble
USERNAME@raspberrypi:~ $

 というわけで[ufw enable]でufw(ファイアウォール)を有効に、[ufw disble]で無効にできます。

USERNAME@raspberrypi:~ $ sudo systemctl start ufw
USERNAME@raspberrypi:~ $ sudo systemctl enable ufw
USERNAME@raspberrypi:~ $

 systemdサービスも一応起動と次回起動時に有効にする設定をしておきます。

 もちろん、もっと複雑なこともできますが、後は、manページに譲ります。

Raspbian BusterにSoftEther VPN Serverをインストール

2021/01/10

 今ひとつうまくいかないWireGuardの代わりにSorfEther VPNをインストール、うまくいき、LANアクセスまでできた詳細は、Raspberry Pi/スマホにSoftEther/OpenVPN互換でVPN参照。

2021/02/21

 が、Raspberry Pi 2BにSoftEtherは、厳しいっぽい...topによるとvpnserverがCPU 130%超えてる...。

2021/03/11

 と思ったら、勘違いでRaspberry Pi 2B+SoftEtherでもCPUやRAM資源の使用率は低く、十二分に機能しました。

余計なアカウント削除と後始末

2021/12/11

 しまった!bullseyeの今までずっと当然新規アカウントを作成して運用してましたが、なななななんと、まだ、piアカウントがいた!セキュリティリスク...、削除、削除。

 しかし、そこはサーバ、単にpiアカウントを削除しただけで、クライアントとgid/uidが異なっていることに気づかずにいるとビックリするようなエラーに遭遇したりすることも...。

 つまり、Raspberry Piに最初にあったpiがいるってことは、piのgid/uidは共にデフォルトでは1000、次に作ったアカウントは1001(ここでは、以後同様であると考えるものとする)、クライアントもラズパイで奇跡的に同一の状況なら別ですが、パソコンならあえて作らない限りpiなんてアカウントはない、パソコン用Linux系も同様で運用時の新規アカウントのgid/uidはデフォルトでは共に1000、だとすると仮に同じアカウント名でも違うグループの違うユーザー扱いになってしまう...。

 その前提で運用していれば良いですが、同名アカウント(gid/uidも同じ)前提でssh、vnc、rsyncを運用していた場合、piアカウントを削除した途端、あれ?(ネット越しのmount時にアカウント省略してると)sshでrootへのアクセスになっちゃうとか、あえて同名アカウント指定しても、なぜかパスワード入力求められちゃうとか、vncviewerからアクセスできない、vncserver -killできないとか、rsyncで同期とってたのに急にエラーが多発して同期できなくなるとか...たぶん、そんなことが起こる...。

 いやいや、確かに問題起きたのは、タイミング的にpiアカウントを削除してからだけど、それまでは、何年も運用してるけど、何も問題なかったよ?ってこともあるでしょうが、それは自身もそうでした。

 確かにgid/uidが共に1000のpiアカウントが残ったまま、gid/uidが共に1001の新規アカウントで運用のラズパイサーバとLinux PCのアカウント名は同名である一方、後者のgid/uidは1000...にも関わらず、何事もなくssh/vnc/rsyncできていました。

 今にして思えば、ホスト.localでアカウントを省略していた為、実は、gid/uidが1001の運用にあたって作成したアカウントではなく、1000で同一のサーバ上のpiアカウントを通して全てが行われていたのではないかと。

 というのも自身の運用上、一貫してサーバにおけるストレージである外付けHDDをrsyncのリモート先として同期をとるのみでクライアント・サーバ間のホームディレクトリなどにおいてscpなど他の方法で直接ファイル授受することが一切なかったのである種、事なきを得、気づかなかっただけではないのかと...。

 サーバだったことや、こうした運用だったことが功を奏したとも言えますが、結果的には、これまた、うっかりしており、先日行なった運用前・運用中のpiアカウントを新規アカウントに移行するケースよりも遥かに簡単に解決しました。

 一般アカウントのgid/uidに広く権限をもたせていなければ、これでほぼ完了となるでしょう。

 とは言え、以下で指定uid/gidと紐付かず、はぐれたファイルを検索できるので必要ならchownするなど個別に対処します。

 自身の場合、実用上は、/tmp以下のvncserverのロックファイルなど2つほどを削除する程度で済み、まだありますが、他は影響なさげなので無視しました。

 ちなみに昨日、ラズパイ2BサーバのシステムディスクをUSBメモリ32GBからSSD 128GBに換装したこともあり、このドタバタ劇に紛れてデスクトップ環境をFluxboxからLXDEに変更しました。

ホーム前へ次へ