マルチゲームサーバの構築を,自宅でする(2/4 ターミナルと外部接続の設定)

技術
この記事は約19分で読めます。

この記事は 2024 年 04 月 20 日に Qiita に投稿された記事を元に作成しています.
Qiita 側の更新は停止しています.

  1. Debian サーバのセットアップ
  2. ターミナルと外部接続の設定 (← この記事の内容)
  3. ファイアウォールの設定
  4. ゲームサーバの構築

ゲームサーバ機能の構築を行う前に,サーバマシンそのもののメンテナンスのための設定を行います.

具体的には,リモートデスクトップ接続/SSH 接続/FTP 接続の設定を行います.
Debian のインストール時に,GNOME デスクトップ環境と同時におおよその機能はインストールされています.

初期インストール

Vim(クリップボード対応)

初期状態の Vim はクリップボードに対応していません(そのはずです).
一度 vim をアンインストールして,クリップボード対応の vim-gtk3 をインストールします.

$ sudo apt purge -y vim
$ sudo apt autopurge -y
$ sudo apt autoclean -y
$ sudo apt install -y vim-gtk3

Homebrew

apt でインストールできないパッケージをインストールするために,Homebrew をインストールします.

Homebrew
The Missing Package Manager for macOS (or Linux).

まずは,Homebrew インストールのために aptgitcurl をインストールします.

$ sudo apt install -y git curl

次に,Homebrew をインストールします.

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

コマンドを実行するために,.profile.bashrc の環境変数 PATHbrew のパスを追加します.

$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ test -r ~/.profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >>~/.profile
$ test -r ~/.bashrc && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >>~/.bashrc

.profile.bashrc を確認し,brew のパスが追加されていることを確認します.
必要であればコメント文を追加しておきます(後々のために).

$ vim ~/.profile # または vim ~/.bashrc
# ︙
# set PATH so it includes Homebrew
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

.profile.bashrc を反映します.

$ source ~/.profile
$ source ~/.bashrc

apt で提供されている Git よりも brew での方が新しいバージョンが提供されていることが多いため,git を入れ替えます.

$ brew install git
$ sudo apt purge -y git
$ sudo apt autopurge -y
$ sudo apt autoclean -y

注意
Homebrew 経由でインストールしたパッケージは,Synaptic パッケージマネージャで管理できません.
パッケージ管理系統を複雑にしたくない場合は,できる限り apt でインストールするようにしてください.

共通設定

PS1 設定

今後ゲームサーバを構築する際には,それ専用のユーザを作成することになります.
いま自分がどのユーザでログインしているかを識別しやすくするために,プロンプト文字列を変更します.

最初に,root のプロンプト文字色を変更します.

$ sudo vim /etc/bash.bashrc

下記例では,文字色を ANSI エスケープシーケンスの 31(赤)に設定しています(\033[01;31m の部分).
対応表は下記リンクの「FG」列を参照してください.

ANSI escape code - Wikipedia
# set a fancy prompt (non-color, overwrite the one in /etc/profile)
# but only if not SUDOing and have SUDO_PS1 set; then assume smart user.
if ! [ -n "${SUDO_USER}" -a -n "${SUDO_PS1}" ]; then
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;31m\]\w\[\033[00m\]\$ '
fi

表示は下記のようになります.
(SSH 接続ツールについては後述するので,サーバマシン上の 端末 で表示内容だけ確認してください)

$ su -
Password: {{root パスワード}}

root プロンプト

次に,{{ユーザ名}} のプロンプト文字色を変更します.

$ vim ~/.bashrc

下記例では,文字色を Xterm 256 カラーの 196(赤)に設定しています(\033[38;5;196m の部分).
対応表は下記リンクの画像を参照してください.

xterm - Wikipedia

ディレクトリパスの省略(smart_pwd ファンクション)については,下記記事を参考にしました.

bashの$PS1とあくまでノーマルにきゃっきゃうふふする - Qiita
この記事はeeic (東京大学工学部電気電子・電子情報工学科)その2 Advent Calendar 2017の18日目でございます。みなさんはシェルとして何を使っていますか?今の流行りはfish…
function smart_pwd {
    # リンク先参照
}

PROMPT_COMMAND="smart_pwd"
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[38;5;196m\]\u@\h\[\033[00m\]:\[\033[01;34m\]${NEW_PWD}\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:${NEW_PWD}\$ '
fi
unset color_prompt force_color_prompt

.bashrc を反映して,プロンプト文字列を変更します.

$ source ~/.bashrc

ユーザ プロンプト

リモートデスクトップ接続

GNOME デスクトップ環境がインストールされているため,リモートデスクトップ接続が可能です.
GNOME のアプリケーションメニューから 設定 を選択し,下記の設定を行います.

  • 共有
    • リモートデスクトップ
    • リモートデスクトップ : オン
    • リモートコントロール : オン
    • 認証
      • ユーザ名 : {{ユーザ名}}
      • パスワード : {{RDP パスワード}} ※ ログインパスワードとは別で設定可能

リモートデスクトップ接続ツールは,Windows に標準で付属している リモート デスクトップ接続 を使用します.
接続先のコンピュータは,{{ホスト名}}.local で指定します.

接続確認
クライアントからサーバマシンへのリモートデスクトップ接続ができることを確認してください.

SSH 接続

SSH 接続についても,インストールされているため設定を行うだけで利用可能です.

SSH サーバ設定

ポート変更

デフォルトのポート番号 22 は,セキュリティ上の理由から変更することをお勧めします.
/etc/ssh/sshd_config ファイルを編集し,Port の値を変更します.

$ sudo vim /etc/ssh/sshd_config
  1. SSH ポート変更

    #Port 22
    Port {{SSH ポート}}
  2. Listen アドレス指定

    ListenAddress 0.0.0.0

設定後,sshd を再起動します.

$ sudo systemctl restart sshd

SSH 接続ツールは,R Login を使用します.
別のツールでも問題ないですが,設定時の表記などが異なる部分は適宜読み替えてください.

rlogin/telnet/ssh(クライアント)ターミナルソフト

R Login の設定を下記のように変更します.

  • サーバー
    • エントリー : {{ホスト名}}
    • サーバー IP アドレス : {{IP アドレス}}
    • TCP ポート : {{SSH ポート}}
    • ログインユーザー名 : {{ユーザ名}}
    • パスワード or パスフレーズ : {{パスワード}}
    • TERM 環境変数 : xterm-256color
  • スクリーン
    • 制御コード
    • 改行コード : CR+LF / LF

接続確認
ポートを変更した時点で,クライアントからサーバマシンへの SSH 接続ができることを確認してください.

SSH 公開鍵認証

SSH 鍵ペアを作成して公開鍵をサーバマシンに登録することで,登録外の端末からのログインを制限できます.

クライアント(Windows)側で SSH 鍵ペアを作成します.
暗号方式は RSA で,鍵長は 4096 ビットを指定します.鍵名は debian_rsa とします.

PS> ssh-keygen -t rsa -b 4096 -C "{{ユーザ名}}@{{ホスト名}}"
Enter file in which to save the key: C:\Users\{{ユーザ名}}/.ssh/debian_rsa
Enter passphrase (empty for no passphrase): {{パスフレーズ}}
Enter same passphrase again: {{パスフレーズ}}

公開鍵 debian_rsa.pub をサーバマシンに登録します.
サーバマシンへ文字列のコピーが出来れば何でもいいので,Google Drive などにアップロードしておきます.

平文の公開鍵
このタイミングで扱う公開鍵は平文であるため,外部に漏洩しないように注意してください.
Google Drive などにアップロードした場合,作業後に速やかに削除してください.

PS> cat C:\Users\{{ユーザ名}}/.ssh/debian_rsa.pub | clip

サーバマシンにログインし,公開鍵を登録します.

$ mkdir -p ~/.ssh
$ sudo vim ~/.ssh/authorized_keys
クリップボードの内容をペースト

公開鍵ファイルのパーミッションを変更します.

$ sudo chmod -Rf go-rwx ~/.ssh

公開鍵認証を有効にするため,/etc/ssh/sshd_config ファイルを編集します.

$ sudo vim /etc/ssh/sshd_config
  1. ルートログイン無効化

    #PermitRootLogin prohibit-password
    PermitRootLogin no
  2. パスワード認証無効化

    #PasswordAuthentication yes
    PasswordAuthentication no

設定後,sshd を再起動します.

$ sudo systemctl restart sshd

クライアント側で,R Login の設定を下記のように変更します.

  • パスワード or パスフレーズ : {{パスフレーズ}}
  • SSH 認証鍵 : C:\Users\{{ユーザ名}}/.ssh/debian_rsa

接続確認
公開鍵認証方式で,クライアントからサーバマシンへの SSH 接続ができることを確認してください.

Linux クライアントからの SSH 接続

Linux クライアントからの SSH 接続は,ssh コマンドを使用します.
サーバマシン側の設定は,上記の手順で完了しているものとします.

まず,クライアント側で SSH 鍵ペアを作成します.

who@client:~$ ssh-keygen -t rsa -b 4096 -C "{{ユーザ名}}@{{ホスト名}}"
Enter file in which to save the key: /home/who/.ssh/debian_rsa
Enter passphrase (empty for no passphrase): {{パスフレーズ}}
Enter same passphrase again: {{パスフレーズ}}

公開鍵 debian_rsa.pub をサーバマシンに登録します.

who@client:~$ cat ~/.ssh/debian_rsa.pub

サーバマシンにログインし,公開鍵を追加登録します.

$ vim ~/.ssh/authorized_keys
クライアント側の公開鍵をペースト

公開鍵ファイルのパーミッションを変更します.

$ sudo chmod -Rf go-rwx ~/.ssh

クライアント側から SSH 接続を行います.
ssh コマンドが長くなるので,ssh_config ファイルを作成してエントリーを追加します.

who@client:~$ sudo vim /etc/ssh/ssh_config
Host {{ホスト名}}
  HostName {{IP アドレス}}
  Port {{SSH ポート}}
  User {{ユーザ名}}
  IdentityFile ~/.ssh/debian_rsa

設定後,ssh コマンドで接続します.

who@client:~$ ssh {{ホスト名}}

接続確認
Linux クライアントからの SSH 接続ができることを確認してください.

LAN 外からの SSH 接続

LAN 外からのグローバル IP アドレスを指定した SSH 接続をする場合,ポート変換を設定する必要があります.

ルータ設定

ルータの設定画面から,ポート変換を設定します.
ルータのメーカやファームウェアにより設定方法が異なりますので,各自で設定してください.
Buffalo のルータの場合,AirStation の設定画面は下記の通りです.

  • 詳細設定
    • セキュリティー
    • ポート変換
      • Internet 側 IP アドレス : エアステーションの Internet 側 IP アドレス
      • プロトコル : 任意の TCP ポート,{{外部 SSH ポート}}
      • LAN 側 IP アドレス : {{サーバマシンの IP アドレス}}
      • LAN 側ポート : {{SSH ポート}}

SSH クライアント設定

上記の設定から,次の項目を変更します.

  • サーバー IP アドレス : {{グローバル IP アドレス}}
  • TCP ポート : {{外部 SSH ポート}}

Linux クライアントからの場合,ssh_config ファイルを編集します.

who@client:~$ sudo vim /etc/ssh/ssh_config
Host {{グローバル IP アドレス}}
  HostName {{グローバル IP アドレス}}
  Port {{外部 SSH ポート}}
  User {{ユーザ名}}
  IdentityFile ~/.ssh/debian_rsa

設定後,ssh コマンドで接続します.

who@client:~$ ssh {{グローバル IP アドレス}}

接続確認
LAN 外からの SSH 接続ができることを確認してください.

FTP 接続

インストール

FTP サーバは,vsftpd を使用します.
vsftpd は,apt でインストールできます.

$ sudo apt install -y vsftpd

FTP サーバ設定

vsftpd の設定を行います.
下記記事を参考にしました.

Debian 12 (bookworm) - FTP サーバ構築!
Debian GNU/Linux 12 (bookworm) に FTP サーバを構築する方法についての記録です。以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。(当然...

/etc/vsftpd.conf ファイルを編集します.

$ sudo vim /etc/vsftpd.conf
  1. FTP ポート変更

    listen=YES
    listen_port={{FTP ポート}}
  2. ローカルユーザのアップロード許可

    write_enable=YES
  3. chroot 有効化,chroot ディレクトリ配下の書き込み許可,chroot リスト指定

    chroot_local_user=YES
    chroot_list_enable=YES
    allow_writeable_chroot=YES
    chroot_list_file=/etc/vsftpd.chroot_list
  4. ディレクトリごと一括での転送有効化

    ls_recurse_enable=YES
  5. UTF-8 エンコーディング

    utf8_filesystem=YES
  6. chroot のルートディレクトリ指定(最終行に追記)

    local_root=public_html

ホームディレクトリより上層へのアクセスを許可するユーザを指定します.
/etc/vsftpd.chroot_list ファイルを作成し,ユーザ名を追記します.

$ sudo vim /etc/vsftpd.chroot_list
{{ユーザ名}}
$ sudo chmod 600 /etc/vsftpd.chroot_list

設定後,vsftpd を再起動してサービスを有効化します.

$ sudo systemctl restart vsftpd
$ sudo systemctl enable vsftpd

FTP 接続ツールは,WinSCP を使用します.
別のツールでも問題ないですが,設定時の表記などが異なる部分は適宜読み替えてください.

WinSCP
WinSCP is a popular free SFTP and FTP client for Windows, a powerful file manager that will improve your productivity. I...

WinSCP の設定を下記のように変更します.

  • 転送プロトコル : FTP
  • 暗号化 : 暗号化なし
  • ホスト名 : {{ホスト名}}
  • ポート番号 : {{FTP ポート}}
  • ユーザー名 : {{ユーザ名}}
  • パスワード : {{パスワード}}
  • 設定
    • FTP
    • アカウント : {{ユーザ名}}
    • 接続
    • パッシブ モード : オフ

接続確認
クライアントからサーバマシンへの FTP 接続ができることを確認してください.

SSL/TLS 設定

FTP サーバに SSL/TLS を設定することで,通信内容を暗号化できます.
証明書は,openssl コマンドで自己署名証明書を作成します.
{{ホスト名}} は,サーバマシンのホスト名を指定します.その他の項目は,適宜入力または空欄で問題ありません.

$ sudo su -
# cd /etc/ssl/private
# openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
︙
Country Name (2 letter code) [AU]:{{国名コード}}
State or Province Name (full name) [Some-State]:{{都道府県名}}
Locality Name (eg, city) []:{{市区町村名}}
Organization Name (eg, company) [Internet Widgits Pty Ltd]:{{組織名}}
Organizational Unit Name (eg, section) []:{{部署名}}
Common Name (e.g. server FQDN or YOUR name) []:{{ホスト名}}
Email Address []:{{メールアドレス}}

サーバ証明書の権限を変更します.

# sudo chmod 600 /etc/ssl/private/vsftpd.pem
# exit

/etc/vsftpd.conf ファイルを編集し,SSL/TLS の設定を追加します.

$ sudo vim /etc/vsftpd.conf
  1. SSL/TLS 有効化

    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    rsa_private_key_file=/etc/ssl/private/vsftpd.pem
    ssl_enable=YES
    ssl_ciphers=HIGH
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES

設定後,vsftpd を再起動してサービスを有効化します.

$ sudo systemctl restart vsftpd

WinSCP の設定を下記のように変更します.

  • 暗号化 : 明示的な TLS/SSL 暗号化
  • 設定
    • TLS/SSL
    • TLS の最小バージョン : TLS 1.2
    • TLS の最大バージョン : TLS 1.3

PowerShell を管理者権限で起動し,Windows ファイアウォールの Stateful FTP を無効化します.

PS> netsh advfirewall set global StatefulFTP disable

接続確認
SSL/TLS 設定を行い,クライアントからサーバマシンへの FTP 接続ができることを確認してください.

PASV モード設定

FTP サーバに PASV モードを設定することで,クライアント側のファイアウォールを通過しやすくなります.
/etc/vsftpd.conf ファイルを編集し,Passive モードの設定を追加します.

$ sudo vim /etc/vsftpd.conf
  1. PASV モード設定

    # Enable passive mode
    listen_address={{クライアント IP アドレス}}
    pasv_enable=YES
    pasv_address={{サーバマシン IP アドレス}}
    pasv_min_port={{PASV ポート範囲の最小値}} # 50000
    pasv_max_port={{PASV ポート範囲の最大値}} # 50005

設定後,vsftpd を再起動してサービスを有効化します.

$ sudo systemctl restart vsftpd

WinSCP の設定を下記のように変更します.

PASV モード時に接続できない場合
これ以前では FTP 接続できていたにも関わらず,PASV モード設定後に接続できなくなる場合があります.
この場合,IPv6 で接続しようとしていることが原因である可能性があります.

FTP クライアントの設定で,IPv4 に限定するように変更してください.

  • 設定
    • FTP
    • パッシブ モード接続で IP アドレスを強制する : オン
    • 接続
    • パッシブ モード : オン
    • IP バージョン : IPv4

接続確認
PASV モード設定を行い,クライアントからサーバマシンへの FTP 接続ができることを確認してください.


以上で,ターミナルと外部接続の設定が完了しました.
次回はファイアウォールの設定を行います.

コメント