LoginSignup
0
0

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

Last updated at Posted at 2024-04-10
  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 インストールのために 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」列を参照してください.

# 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 の部分).
対応表は下記リンクの画像を参照してください.

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

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 を使用します.
別のツールでも問題ないですが,設定時の表記などが異なる部分は適宜読み替えてください.

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 の設定を行います.
下記記事を参考にしました.

/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 の設定を下記のように変更します.

  • 転送プロトコル : 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 接続ができることを確認してください.


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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0