FreeBSDをサーバー利用するための設定内容をまとめます。具体的にはFEMPでWebサーバーを立てるための設定方法です。
レンタルサーバー・自宅サーバー設定・構築のヒントというサイトの最初にやっておきたいこと(FreeBSD編)を参考にセットアップしました。
OSのメンテナンス
さくらのVPSであればカスタムOSをデフォルト設定でインストール、Vultrなら用意されているOSのインスタンスを作成します。デスクトップ利用ではないのでGUIなどは不要です。
まずはパッチレベルをあげるため、freebsd-updateでセキュリティパッチを適用します。fetchでパッチをダウンロードしてinstallで適用です。
pkg updateしてからfreebsd-updateしたほうがいいかも。
# pkg update
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
# pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
〜中略〜
# freebsd-update fetch
src component not installed, skipped
Looking up update.FreeBSD.org mirrors… 3 mirrors found.
〜中略〜
# freebsd-update install
src component not installed, skipped
Installing updates… done.
Code language: Shell Session (shell)
ちなみにバージョンアップの時はこう。
# freebsd-update -r 13.1-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 13.0-RELEASE from update2.freebsd.org... done.
〜後略〜
Code language: Shell Session (shell)
いずれもカーネルセキュリティレベルを上げている場合は-1までレベルダウンする必要があります。
そして今後もセキュリティアップデートを追いかける必要があるので、cronで毎朝3時に確認することにしましょう。crontab -eで次のように設定します。
0 3 * * * /usr/sbin/freebsd-update cron
Code language: Bash (bash)
cronオプションの振る舞いはfetchそのものです。実際にインストールはされません。fetchとの違いはエラーが出たりパッチがダウンロードされたときに、メール通知があるという点です。/etc/freebsd-update.confに送信先をMailToで指定することで任意のアドレスで受信できます。指定なしの場合はcrontabを設定したユーザー宛に通知が届きます。
メールの設定はFreeBSDでsendmailを使ったメール送受信にまとめました。
ファイアウォールの設定
さて、この辺でbashとvimだけでも先にインストールしておきましょう。コマンドやら設定ファイルの編集やら、効率がだいぶ違ってきます。pkg upgradeしてリポジトリを更新してからインストールします。
ファイアウォールは必要なポートだけを開けるよう/usr/local/etc/ipfw.rulesにて設定しました。参考サイトのFreeBSDでファイアウォール(ipfw)の設定を丸パクリです。開いたポートは以下のとおり。
- ssh(20022)
- mail(25)
- http(80)
- dns(53)
- ntp(123)
- https(443)
再起動後にファイアウォールが有効になるように/etc/rc.confの設定をします。
firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw.rules"
firewall_logging="YES"
Code language: Bash (bash)
まだ再起動しちゃダメだよ。SSH設定を書き換えてからね。
SSHの設定
さくらのVPSにしろVultrにしろWebブラウザによるコンソール接続が可能ですが、ターミナルからの接続もできるようにします。ただしrootでのssh接続は危ないのでssh接続用ユーザーと認証鍵を作ります。
adduserで接続用ユーザーを作り、~/.ssh/authorized_keyファイルに認証鍵を登録したら、/etc/ssh/sshd_configにて以下のような設定を。もはやSSH1接続は過去のもの。Protocol設定は不要です。
Port 20022 # 接続ポートを標準外にすることで攻撃されにくくします
PermitRootLogin no # rootでのログインを拒否します
AllowUsers general_user # ログインユーザーを限定します
PasswordAuthentication no # パスワード認証を拒否します
PermitEmptyPasswords no # パスワードなしの接続を拒否します
Code language: Bash (bash)
これらコメントアウトされているオプションを有効化し、適宜値を書き換えたらFreeBSDサーバーを再起動します。
# shutdown -r now
Code language: Shell Session (shell)
ちなみに接続ポートが標準外になると次のようにポート指定をしてssh接続する必要があります。
$ ssh general_user@xxx.vs.sakura.ne.jp -p 20022
Code language: Shell Session (shell)
ntpの設定
/etc/ntp.conf中の参照先NTPサーバーを書き換えます。もともと指定されていたサーバーをコメントアウトして、日本にある適当なサーバーを指定します。
# NTP servers to use
#server 1.time.constant.com
#server 2.time.constant.com
#server 3.time.constant.com
server ntp1.jst.mfeed.ad.jp
server ntp.nict.jp
Code language: Bash (bash)
この後、ntpデーモンが自動起動されるように、/etc/rc.confに以下の内容を追記します。
ntpd_enable="YES"
Code language: Bash (bash)
デーモン起動前にタイムゾーンを正しく設定しておきましょう。
不要プロセスの停止
ps auxでプロセス表示すると、仮想コンソールプロセスが動作してしまっているので/etc/ttysにてttyv1からttyv7までのonifexistsをoffに設定変更後、仮想コンソールを再起動します。
# kill -HUP 1
Code language: Shell Session (shell)
ここまで準備しておけば、リモートでいろいろ環境構築できるようになります。
ここにApacheなりNginxなりをインストールすればWebサーバーとして使えるようになりますよ。
不要な一時ファイルの削除
デフォルトでは/tmpディレクトリ下の一時ファイルは削除されません。/etc/periodic.confを作成して以下の設定をすることで自動削除されるようになります。
daily_clean_tmps_enable="YES"
Code language: Bash (bash)
これでデフォルトでは/tmpディレクトリ下の3日以上前のファイルが削除されるようになります。cronの設定次第ですが、多分毎日早朝。
詳しくはFreeBSDの定期実行コマンドで一時ファイルを削除するにまとめておきました。
スワップファイルの設定
Vultrみたいにあらかじめ用意されているOSを使う時など、スワップパーティションが設定されていないうえ、お金をケチってメモリの少ないプランを使ってWordPressを動かしているとMySQLがハングアップすることがあります。こうなるとMySQLを再起動するまでNginxが500エラーを吐いてサイトへのアクセスができなくなってしまいます。
そこで足りないメモリを補うためにスワップファイルを設定しておきましょう。日本語のハンドブックには情報がないのでオリジナル版のFreeBSDハンドブック情報をあたります。
Raspberry Piのインストールにも使ったddを使ってスワップファイルを作成します。
# dd if=/dev/zero of=/usr/swap bs=1m count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 4.470363 secs (240191182 bytes/sec)
Code language: Shell Session (shell)
入力デバイスの/dev/zeroはnull文字を出力するデバイスで、ブロックサイズ1MBを1024個分/usr/swapに書き込んだらパーミッションを600に変更します。
# chmod 600 /usr/swap
Code language: Shell Session (shell)
用意ができたら/etc/fstabファイルに設定します。
md99 none swap sw,file=/usr/swap,late 0 0
Code language: Bash (bash)
これでmd99というデバイスにスワップファイルとして/usr/swapが割り当てられました。再起動せずにこれを有効化するためにはswaponします。
# swapon -aL
Code language: Shell Session (shell)
しばらく使っているとスワップが始まります。利用状況を確認するにはswapinfoを使います。
$ swapinfo
Device 1K-blocks Used Avail Capacity
/dev/md99 2097152 376820 1720332 18%
Code language: Shell Session (shell)
当初メモリ512MBで2GBのスワップを使っていた頃の使用率はだいたい20%前後でした。