はじめに
FreeBSD 12を使用した自宅サーバの構築を行った。FreeBSD 12はリリースされて間もない状態ですが、カーネルに標準でVIMAGEが取り込まれDNSの外向きと、内向きを別々のシステム(jail+VIMAGE)が同一ホストで構築できることから採用することにしました。その時の構築手順を備忘録の意味も含め、具体的にいくつかに渡り説明する。
-
基本システム編その1(この記事)
- 背景
- 基本のインストール
- 日本語環境の設定
-
基本システム編その2
- セキュリティ
- ftpサーバ
-
基本システム編その3
- jail
- 基本システム編おわり
-
jail内基本システム編
- 基本の設定(jail1・jail2共通)
-
DNS編
- DNSの構築におけるこれまでの問題
- bind9インストール
- NTPサーバ
-
Let's Encrypt編
- Let's Encryptについて
- certbotのインストール
- 各種設定
- 証明書の取得
-
Webサーバ編
- インストール(apache2.4・webalizer・php7.3・postgresql11.2・mysql8.0)
- 設定
-
メールサーバ編
- インストール(cyrus-sasl・postfix・dovecot・procmail・pflogsumm・policyd-spf)
- 設定・起動
- spfレコード送信設定
-
ファイルサーバ編
- sambaの選択
- samba3のインストール
-
メールサーバ編その2
- 概要
- OpenDKIM
- OpenDMARC
- ClamAV (clamav-milter)
- Spamassasin (spamass-milter)
背景
これまでに、FreeBSDを使って自宅サーバを構築していましたが、PCを更新するごとに1からインストールしている。バーチャル環境を使ったほうが便利ではあるが、サーバソフトを見直すいい機会になると思い4~5年を目処に1から更新している。
最近の更新は昨年(2018年)であるが、その時はあまり時間が取れずサーバソフトを見直さなかったが、今回Let's EncryptによるSSL化を採用したく、サーバソフトを全面的に見直すことにした。また、次回の再構築のために、ここに内容を残すことにした。
基本のインストール
OSのインストール
インストールファイルをダウンロードしインストールをする。この部分の詳細は省略するが要点は以下です。
- 使用しているキーボードの設定
- パーティーションの選択でZFSを選択
- ネットワークの設定
- タイムゾーンの選択
- ユーザを追加(wheelグループに属するようにすることでrootになれる)
インストール時に設定した内容の確認(defaultrouter・nameserverは192.168.1.1にある。キーマップは使用しているキーボードに合わせる)
hostname="server1"
keymap="us.kbd"
ifconfig_em0="inet 192.168.1.32 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
zfs_enable="YES"
search example.jp
nameserver 192.168.1.1
今後殆どの作業はrootで行うがプロンプトが'%'の場合は一般ユーザによる操作、'#'の場合はrootによる操作を表す。
sudoコマンドは、自分の感覚にあっていないので以下のようにrootになって作業を行う(suでrootになる場合はwheelのグループにいる必要がある)。
% su
Password:
#
sshの設定
デフォルトでsshdは作動しているのが、設定を一部変更する
最初にキーを作成する
% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5dFO3WW5l4utZHby7gWcLqQn3SOIYeNmNcyvHZiWvZg hoge@server1
The key's randomart image is:
+---[RSA 2048]----+
| +|
| . . +.|
| o o . +|
| = + . +.|
| S * o * o|
| o = % O = |
| = O % O .|
| o . B * o.|
| E o oo |
+----[SHA256]-----+
~/.ssh/id_rsaファイルをTeraTermなどに設定することで接続できるようになる。(詳細は省略)
sshd_configファイルをについて以下のように変更する。
現在Protocolは2に固定になっているので設定するところがない。rootのログインについてのみ変更する。
設定できる値は以下である。
値 | 説明 |
---|---|
yes | rootユーザのログインを許可 |
no | rootユーザのログインを拒否 |
without-password | パスワードを使用したrootユーザのログインを拒否 |
forced-commands-only | rootユーザのログインは拒否するが、root権限のコマンドはアクセスを許可 |
ここではバックアップ作業を行いたいため以下の設定を追加する
PermitRootLogin forced-commands-only
sshdに設定を読み込ませる
# service sshd reload
Performing sanity check on sshd configuration.
これで、TeraTermなどから広い画面を使って作業ができるようになる。
OSのアップデート
最初に最新のバージョンにアップデートする
# freebsd-update fetch
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update2.freebsd.org... done.
Fetching metadata signature for 12.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 71 patches.....10....20....30....40....50....60....70 done.
Applying patches... done.
Fetching 1 files... done.
以下省略(更新されるファイルなどが表示される)
# freebsd-update install
src component not installed, skipped
Installing updates... done.
# reboot
portsの初期化
今回、パッケージのインストールはpkgコマンドを優先するが、コンパイルオプションを変更したい時はportsから自前でコンパイルすることになる。そこで、portsを準備する。
portsファイルをダウンロードする
# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching public key from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Fri Feb 15 09:31:00 JST 2019:
b658f6e10fdde50332f502a8167b717f9d8b92dd4ea98d 84 MB 4259 kBps 20s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Fri Feb 15 09:31:00 JST 2019 to Fri Feb 15 10:06:21 JST 2019.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 1 patches.
(1/1) 100.00% done.
done.
Applying patches...
done.
Fetching 0 new ports or files... done.
# portsnap extract
ports collectionのファイル展開表示される(省略)
Building new INDEX files... done.
OS・portsのメインテナンス
portsの自動メインテナンスを以下のシェルソフトで1日に一回行う。
#!/bin/sh
#
# ports
/usr/sbin/portsnap cron update
/usr/sbin/pkg version -v |/usr/bin/grep -v =
実行権限をもたせる
# chmod +x /usr/local/sbin/ports_admin.sh
portsのアップグレードとOSのアップグレードを行うクローン設定
# Ports update
15 0 * * * root /usr/local/sbin/ports_admin.sh
30 1 * * * root /usr/sbin/freebsd-update cron
rootへのメールを自分宛にする
root: hoge1@exsample.jp
# newaliases
pkgのレポシトリ
標準で/etc/pkg/FreeBSD.confでquarterlyになっているがlatestを選択することもできる。最新版を追っかける時はlatestに変更する。
しかし、直接このファイルを編集するのではなく/usr/local/etc/repos/FreeBSD.confを作成する書かれている。
FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }
# mkdir -p /usr/local/etc/pkg/repos/
# echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
# pkg update
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/latest, please wait...
Installing pkg-1.10.5_5...
Extracting pkg-1.10.5_5: 100%
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD load error: access repo file(/var/db/pkg/repo-FreeBSD.sqlite) failed: No such file or directory
Fetching meta.txz: 100% 944 B 0.9kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 1.1MB/s 00:06
Processing entries: 100%
FreeBSD repository update completed. 31955 packages processed.
All repositories are up to date.
portupgradeのインストール
portsのコンパイルはportupgradeを使用すると便利なのでこれをインストールする
# pkg install portupgrade
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.10.5_5...
Extracting pkg-1.10.5_5: 100%
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD load error: access repo file(/var/db/pkg/repo-FreeBSD.sqlite) failed: No such file or directory
Fetching meta.txz: 100% 944 B 0.9kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 6.7MB/s 00:01
Processing entries: 100%
FreeBSD repository update completed. 32068 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 9 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
portupgrade: 2.4.16,2
ruby: 2.4.5_1,1
libyaml: 0.2.1
libunwind: 20170615
libffi: 3.2.1_3
indexinfo: 0.3.1
libedit: 3.1.20170329_2,1
ruby24-bdb: 0.6.6_5
db5: 5.3.28_7
Number of packages to be installed: 9
The process will require 95 MiB more space.
22 MiB to be downloaded.
Proceed with this action? [y/N]: y
以下省略
portupgradeのログを残すためにpkgtools.confを変更、デフォルトの設定の最後の部分を以下のように変更する
- PORTUPGRADE_ARGS = ENV['PORTUPGRADE']
+ PORTUPGRADE_ARGS = ENV['PORTUPGRADE'] || \
+ '-v -D -L /var/tmp/portupgrade-%s::%s.log'
日本語環境の設定
日本語コードはEUC-JPを採用する。そろそろUTF-8を考えたほうが良いようだが、これまでの資産などから、なかなか思いきれない。
以下のパッケージをインストールする。
- japanese/less
- libiconv
- 日本語マニュアル
japanese/less
lessは標準でインストールされている。UTF-8は使えるようですがEUC-JP日本語コードが使えない。そこでjapanese/lessを使うのだが、japanese/lessは既にメインテナンスされていなく、バージョンはjapanese/lessが382に対しlessは530である。このことからも、UTF-8にしたほうが良いと思うが、EUC-JPを使うため以下のようにインストールする。
# pkg install japanese/less
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
ja-less: 382.262.03.01
Number of packages to be installed: 1
191 KiB to be downloaded.
Proceed with this action? [y/N]: y
[1/1] Fetching ja-less-382.262.03.01.txz: 100% 191 KiB 195.8kB/s 00:01
Checking integrity... done (0 conflicting)
[1/1] Installing ja-less-382.262.03.01...
[1/1] Extracting ja-less-382.262.03.01: 100%
jlessをlessで起動できるようエリアスを作成と、言語設定・PAGERの設定を行う。
alias less /usr/local/bin/jless
setenv LC_CTYPE ja_JP.eucJP
setenv PAGER /usr/local/bin/jless
libiconv
libiconvは、多くのパッケージで使用されていると思っていましたが、php73-iconv・p5-Locale-libintlとglibのようですが、phpではEUC-JPとUTF-8の変換は必須のためインストールする。加えて、Apply patches to fix CP932, add EUCJP-MSのパッチは必須である。また、iconvコマンドは標準でインストールされていてEUCJP-MSは使える状態になっている。標準とpkgでインストールしたパッケージで比較する。
# /usr/bin/iconv -l |grep EUC-JP
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS
EUC-JP CSEUCPKDFMTJAPANESE EUCJP IBM-EUCJP
# /usr/local/bin/iconv -l |grep EUCJP
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
pkg版はEUC-JP-MSが使えない、パッケージのオプションを見るとPATCHESがoffになっている
# pkg info libiconv
libiconv-1.14_11
Name : libiconv
Version : 1.14_11
Installed on : Sun Feb 3 03:07:27 2019 JST
Origin : converters/libiconv
Architecture : FreeBSD:12:amd64
Prefix : /usr/local
Categories : devel converters
Licenses : GPLv3
Maintainer : gnome@FreeBSD.org
WWW : http://www.gnu.org/software/libiconv/
Comment : Character set conversion library
Options :
DOCS : on
ENCODINGS : on
PATCHES : off
以下省略
そのためportsからコンパイルする。
# portinstall libiconv
省略
オプション選択画面でチェックを入れる
確認すると、EUC-JP-MSがサポートされている
# /usr/local/bin/iconv -l | grep EUC-JP
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS
pkgコマンドでアップグレードされないようにロックを掛ける
# pkg lock libiconv
libiconv-1.14_11: lock this package? [y/N]: y
Locking libiconv-1.14_11
日本語マニュアル
日本語マニュアルは、正式にpkgになっているのは古いバージョン(FreeBSD 5.4かな?)のもので全てが揃っていないません。
# pkg search -f japanese/man-doc
japanese/man-doc
Name : ja-man-doc
Version : 5.4.20050911_3
Origin : japanese/man-doc
Architecture : FreeBSD:12:amd64
Prefix : /usr/local
Repository : FreeBSD [pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly]
Categories : japanese
Licenses :
Maintainer : kuriyama@FreeBSD.org
WWW : UNKNOWN
Comment : Japanese translation of FreeBSD manual pages
Annotations :
FreeBSD_version: 1200086
Flat size : 5.09MiB
Pkg size : 5.18MiB
Description :
This is a Japanese translation of FreeBSD manual pages.
Note that to build it, you need the CVS repository in
${CVSROOT} (/home/ncvs by default) on your machine.
他には、小金丸氏が翻訳されている日本語マニュアルがあります。査読されていないようですが使わしていただいています。このページにあるやり方でインストールしようとすると以下のようにエラーが発生する。
# pkg add -f ftp://ftp.koganemaru.co.jp/pub/jman12/ja-cat-doc-12.0.20181218.amd64.txz
Fetching ja-cat-doc-12.0.20181218.amd64.txz: 100% 9 MiB 964.5kB/s 00:10
Installing ja-cat-doc-12.0.20181218.amd64...
pkg: Missing dependency 'ja-man'
Failed to install the following 1 package(s): ftp://ftp.koganemaru.co.jp/pub/jman12/ja-cat-doc-12.0.20181218.amd64.txz
ja-manが無いといっている。catpages 形式であればja-manが要らないようなので以下のようにインストールする。また、以前は、japanese/groff、japanese/man コマンドをインストールしman形式を使用していたが、ある時からjapanese/manで英語のmanを整形したときに文字化けするようになった。この時解決できなかったのでそれ以降はcatpages 形式を使っている。
# fetch ftp://ftp.koganemaru.co.jp/pub/jman12/ja-cat-doc-12.0.20181218.amd64.txz
ja-cat-doc-12.0.20181218.amd64.txz 9419 kB 972 kBps 10s
# tar -Pzxf ja-cat-doc-12.0.20181218.amd64.txz
# rm +COMPACT_MANIFEST +MANIFEST ja-cat-doc-12.0.20181218.amd64.txz
# ln -s /usr/share/man/ja /usr/share/man/ja_JP.eucJP