さくらのVPSでOSインストールが完了するとすでにインターネットからアクセスできる状態です。
不特定多数と接続できる状態ですのでセキュリティ面の強化などサーバーの設定を行う必要があります。
デフォルトの設定の状態はインターネット上の他のユーザーが容易に推測できる状態といえ、もし悪意のあるユーザーが利用するとサーバーは大変危険な状態といえます。
サーバ作成直後に設定しておくべき事【FreeBSD 12】
参考情報サーバ作成直後に設定しておくべき初期セキュリティ設定
上記、参考情報はさくらのVPSのCentOS 7の場合です。
この記事ではFreeBSD 12のケースでさらにおススメすべき内容も紹介します。
最新の状態へのアップデート
まず、何かをする前に最新の状態にすることはセキュリティ対策では日常的な事項です。
最新であればなんでも良いということではなく、ここでいう最新とは信頼できるものの最新版という意味です。
さくらのVPSの標準OSやカスタムOSでインストールした場合は、使用しているインストーラーイメージが古い可能性があります。
OSインストール後に以下の方法で安定版(stable)の最新版に更新してください。
まず、現在の状態を確認します。
カーネルなどのバージョン情報の表示
root@ik1-429-46995:~ # uname -srm
FreeBSD 12.2-RELEASE amd64
FreeBSDバージョン情報の表示
root@ik1-429-46995:~ # freebsd-version -kur
12.2-RELEASE
12.2-RELEASE
12.2-RELEASE
-k インストールされたカーネルのバージョンとパッチレベルを印刷(表示) します。uname(1) と異なり、新しいカーネルがインストールされているが、システムがまだリブートしていないなら、freebsd-version は、新しいカーネルのバージョンとパッチレベルを印刷 (表示) します。
-r 実行しているバージョンとパッチレベルを印刷 (表示) します。uname(1) と違って、これは、環境変数に影響されません。
-u インストールされたユーザランドのバージョンとパッチレベルを印刷 (表示) します。これらは、構築の間に freebsd-version に決め打ちされます。
さくらのVPSでインストールするとFreeBSD 12は12.2-Releaseでした。
freebsd-update
すみやかにセキュリティパッチを適用し、 オペレーティングシステムをアップグレードして、 最新のリリースに保つために用意されているユーティリティです。
設定ファイルは「/etc/freebsd-update.conf」です。
freebsd-update fetch
次のコマンドを利用して、現在インストールされているバイナリと設定オプションを参照して利用可能なすべてのバイナリ更新を取得します。
root@ik1-429-46995:~ # freebsd-update fetch
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update2.freebsd.org... done.
Fetching metadata signature for 12.2-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 126 patches.....10....20....30....40....50....60....70....80....90....100....110....120... done.
Applying patches... done.
Fetching 1 files... done.
The following files will be removed as part of updating to
12.2-RELEASE-p9:
/etc/ssl/certs/2c543cd1.0
/etc/ssl/certs/2e4eed3c.0
/etc/ssl/certs/480720ec.0
/etc/ssl/certs/7d0b38bd.0
/etc/ssl/certs/8867006a.0
/etc/ssl/certs/ad088e1d.0
/etc/ssl/certs/b204d74a.0
/etc/ssl/certs/ba89ed3b.0
/etc/ssl/certs/c089bbbd.0
/etc/ssl/certs/e2799e36.0
/usr/share/certs/trusted/GeoTrust_Global_CA.pem
/usr/share/certs/trusted/GeoTrust_Primary_Certification_Authority.pem
/usr/share/certs/trusted/GeoTrust_Primary_Certification_Authority_-_G3.pem
/usr/share/certs/trusted/GeoTrust_Universal_CA.pem
/usr/share/certs/trusted/GeoTrust_Universal_CA_2.pem
/usr/share/certs/trusted/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem
/usr/share/certs/trusted/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem
/usr/share/certs/trusted/thawte_Primary_Root_CA.pem
/usr/share/certs/trusted/thawte_Primary_Root_CA_-_G2.pem
/usr/share/certs/trusted/thawte_Primary_Root_CA_-_G3.pem
The following files will be added as part of updating to
12.2-RELEASE-p9:
/etc/ssl/blacklisted/2c543cd1.0
/etc/ssl/blacklisted/2e4eed3c.0
/etc/ssl/blacklisted/480720ec.0
/etc/ssl/blacklisted/7d0b38bd.0
/etc/ssl/blacklisted/8867006a.0
/etc/ssl/blacklisted/ad088e1d.0
/etc/ssl/blacklisted/b204d74a.0
/etc/ssl/blacklisted/ba89ed3b.0
/etc/ssl/blacklisted/c089bbbd.0
/etc/ssl/blacklisted/e2799e36.0
/etc/ssl/certs/3fb36b73.0
/usr/share/certs/blacklisted/GeoTrust_Global_CA.pem
/usr/share/certs/blacklisted/GeoTrust_Primary_Certification_Authority.pem
/usr/share/certs/blacklisted/GeoTrust_Primary_Certification_Authority_-_G3.pem
/usr/share/certs/blacklisted/GeoTrust_Universal_CA.pem
/usr/share/certs/blacklisted/GeoTrust_Universal_CA_2.pem
/usr/share/certs/blacklisted/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem
/usr/share/certs/blacklisted/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem
/usr/share/certs/blacklisted/thawte_Primary_Root_CA.pem
/usr/share/certs/blacklisted/thawte_Primary_Root_CA_-_G2.pem
/usr/share/certs/blacklisted/thawte_Primary_Root_CA_-_G3.pem
/usr/share/certs/trusted/NAVER_Global_Root_Certification_Authority.pem
The following files will be updated as part of updating to
12.2-RELEASE-p9:
/bin/freebsd-version
/boot/kernel/aesni.ko
/boot/kernel/autofs.ko
/boot/kernel/kernel
/boot/kernel/linux.ko
/boot/kernel/linux64.ko
/boot/kernel/mqueuefs.ko
/boot/kernel/msdosfs.ko
/boot/kernel/pf.ko
/boot/kernel/pmspcv.ko
/boot/kernel/smbfs.ko
/boot/kernel/sysvmsg.ko
/boot/kernel/sysvsem.ko
/boot/kernel/sysvshm.ko
/boot/kernel/tmpfs.ko
/boot/kernel/zfs.ko
/lib/libcasper.so.1
/lib/libcrypto.so.111
/lib/libzfs.so.3
/lib/libzfs_core.so.2
/lib/libzpool.so.2
/rescue/
/rescue/bectl
/rescue/bsdlabel
/rescue/bunzip2
/rescue/bzcat
/rescue/bzip2
/rescue/camcontrol
/rescue/cat
/rescue/ccdconfig
/rescue/chflags
/rescue/chgrp
/rescue/chio
/rescue/chmod
/rescue/chown
/rescue/chroot
/rescue/clri
/rescue/cp
/rescue/csh
/rescue/date
/rescue/dd
/rescue/devfs
/rescue/df
/rescue/dhclient
/rescue/disklabel
/rescue/dmesg
/rescue/dump
/rescue/dumpfs
/rescue/dumpon
/rescue/echo
/rescue/ed
/rescue/ex
/rescue/expr
/rescue/fastboot
/rescue/fasthalt
/rescue/fdisk
freebsd-update install
最近取得された更新またはアップグレードをインストールします。
root@ik1-429-46995:~ # freebsd-update install
src component not installed, skipped
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
done.
インストールしたイメージで起動するようにサーバーを再起動します。
root@ik1-429-46995:~ # shutdown -r now
更新後のバージョンを確認します。
root@ik1-429-46995:~ # uname -srm
FreeBSD 12.2-RELEASE-p7 amd64
root@ik1-429-46995:~ # freebsd-version -kur
12.2-RELEASE-p7
12.2-RELEASE-p7
12.2-RELEASE-p9
FreeBSD 12.2 RELEASE-p7に更新されました。
PackagesとPorts Collectionの更新
関連記事FreeBSD Ports/Packages Collectionの管理ツール (2021-08-03 22:47:15)
サードパティのアプリケーションをインストールする前に、Ports Collectionを更新しておくと二度手間にならなくておススメです。
サーバーへの接続制限
接続用ユーザーの作成
OSインストールで必ずrootユーザーが作成されます。
このrootユーザーは、特別な権限を持ったOS上であらゆる操作のできるスーパーユーザーです。
この事実はUNIX系OSを扱う人には周知の事実です。
サーバーのIPアドレスはそのサービス提供事業者が所有するIPアドレスから範囲が特定できてしまいます。現在のホスティングサービスのほとんどがUNIX系OSを提供しています。インターネット上の悪意のあるユーザーは、UNIX系OSのサーバーではrootユーザーは必ず存在するユーザー名であるため、サーバーに対してrootユーザーを使用したログインを試行します。
- root以外のユーザーを作成
- そのユーザーのみ接続を許可する設定に変更する
接続できるユーザー名が推測できずログイン試行が容易ではなくなります。
substitute user identity / switch user
suコマンドを使用することで、現在のユーザーから他のユーザーへ切り替えることが可能です。
切り替えには切り替え先のユーザーのパスワードの入力が必要です。
しかし、rootユーザーに関してはセキュリティ対策でパスワードを知っていても次の設定をしていないとrootユーザには切り替えることができません。
wheelグループにユーザーを追加します。
上の例ではユーザーsakuraを追加しています。
ユーザー名を複数追加する場合は半角カンマで区切ります。
root@ik1-438-51137:~ # vi /etc/group
# $FreeBSD: releng/12.2/etc/group 359447 2020-03-30 17:07:05Z brooks $
#
wheel:*:0:root,sakura
以下省略
su –
rootユーザに切り替えることができます。
root@ik1-438-51137:~ # su -
Password:
ユーザー名を省略するとrootユーザーを指定した場合と同じです。
rootにスイッチする場合は、スイッチする前のユーザー変数のまま処理されるのを防ぐために「su -」がおススメです。
sudoを利用する方法もあります。
sudoは標準でインストールされていませんので、別途インストールが必要です。
root@ik1-438-51137:~ # pkg install sudo
Updating FreeBSD repository catalogue...
pkg: http://pkgmir.geo.freebsd.org/FreeBSD:12:amd64/quarterly/packagesite.pkg: Not Found
FreeBSD repository is up to date.
All repositories are up to date.
Checking integrity... done (0 conflicting)
The following 1 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
sudo: 1.9.7p1
Number of packages to be installed: 1
The process will require 6 MiB more space.
Proceed with this action? [y/N]: y
[1/1] Installing sudo-1.9.7p1...
[1/1] Extracting sudo-1.9.7p1: 100%
/usr/local/etc/sudoersの編集(visudoコマンドを実行)
90行目のコメントを外すとwheelグループのユーザがsudoを利用できるようになります。
93行目のコメントを外すとwheelグループのユーザがsudoを利用際にパスワードの入力が不要になります。rsyncの時などには便利ですが安全性を考慮するとお勧めできません。
84 ##
85 ## User privilege specification
86 ##
87 root ALL=(ALL) ALL
88
89 ## Uncomment to allow members of group wheel to execute any command
90 %wheel ALL=(ALL) ALL
91
92 ## Same thing without a password
93 %wheel ALL=(ALL) NOPASSWD: ALL
94
これでroot以外のユーザーで接続してからrootになることができるようになりました。
次にrootユーザではSSHで接続できないようにします。
sshdサービスの設定変更
ブルートフォースアタックの標的になっている状態から一刻も早く回避すべきです。
そのためにsshdサービスの設定を変更します。
デフォルトではrootユーザー&パスワードでの接続が可能です。
さくらのVPSでサーバを作成した直後は標準OSですので、このタイミングから標的になります。
カスタムOSの場合でもsshdサービスを起動するように設定した直後は、同様に、rootユーザー&パスワードでの接続が可能な状態です。
パスワードさえわかればだれでも接続できる状態なのでブルートフォースアタックの標的になりやすい状態です。
sshdサービスを起動する前にVNCコンソールからsshdサービスに関する一連の設定を行えばサーバーを危険に晒す確率はぐんと低下します。
また、標準OSインストール時に設定するrootのパスワードをできるだけ複雑なパスワードにしておくと不正ログインが成功する確率を下げる効果があります。
ここではsshdサービス(sshサーバーアプリケーション)の設定変更とさらにsshクライアントアプリケーションの設定方法を記載します。
SSHサーバーの設定値(/etc/ssh/sshd_config)
- ssh プロトコルバージョン 2のみサポート
Protocol 2
- sshサービスポートの変更
Port 11022
- rootでの接続拒否
PermitRootLogin no
- パスワードでの接続拒否
PasswordAuthentication no
- チャレンジレスポンス認証を拒否
ChallengeResponseAuthentication no
- 公開鍵認証許可
PubkeyAuthentication yes
- 空のパスワードでの接続拒否
PermitEmptyPasswords no
- 許可したユーザーのみ接続可能
AllowUsers sakura
- 鍵の暗号方式とビット長はRSA(4096bit)、ECDSA(320bit)またはed25519(256bit)
パスワード認証を拒否する方法として、PasswordAuthentication noとすればよいと記載してあるサイトが多いですがこれだけでは不十分です。
これだけではパスワード認証で接続できてしまいます。
追加で、ChallengeResponseAuthentication noを設定してください。
SSHサーバーはOpenSSHのSSHサーバーが有名です。
OpenSSHの設定に関しては以下の関連記事のリンク先を参照してください。
関連記事OpenSSHの設定 (2021-08-10 17:09:13)
OpenSSH(UNIX系)
sshクライアントの設定は「/etc/ssh/ssh_conf」とあとはユーザー個別の$HOME/.sshにあるconfigファイルで設定できます。
関連記事OpenSSHの設定 (2021-08-10 17:09:13)
PuTTY(Windows)
Windowsで動作するSSHクライアントはPuTTYやTeraTermが有名です。TeraTermは一時期SSH プロトコルバージョン2が利用できない時期があったためユーザ離れが発生しました。現在ではどちらでも問題ないと思いますのでお好みで選んでください。
当方では、PuTTYを利用しています。
ファイアーウォールの設定
インターネットからアクセスできるサーバーは、不特定多数のユーザーからアクセスがあります。
その中には悪意のあるユーザーが含まれるため要注意です。
少しでも不要な通信をフィルターするためにファイアーウォールを設定します。
FreeBSDでは以下のファイアーウォールを目にしますがどれがよいのかはよくわかりません。
- pf
- ipfw
- ipf
ここでは、ipfwを使用してファイアーウォールの設定を紹介します。
VNCコンソールなどコンソール端末での接続手段がないと復旧できなくなる可能性が高いので注意してください。