Qiita 側の更新は停止しています.
- Debian サーバのセットアップ
- ターミナルと外部接続の設定 (← この記事の内容)
- ファイアウォールの設定
- ゲームサーバの構築
ゲームサーバ機能の構築を行う前に,サーバマシンそのもののメンテナンスのための設定を行います.
具体的には,リモートデスクトップ接続/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
インストールのために apt
で git
と curl
をインストールします.
$ sudo apt install -y git curl
次に,Homebrew
をインストールします.
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
コマンドを実行するために,.profile
と .bashrc
の環境変数 PATH
に brew
のパスを追加します.
$ 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 パスワード}}
次に,{{ユーザ名}}
のプロンプト文字色を変更します.
$ 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
-
SSH ポート変更
#Port 22 Port {{SSH ポート}}
-
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
-
ルートログイン無効化
#PermitRootLogin prohibit-password PermitRootLogin no
-
パスワード認証無効化
#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
-
FTP ポート変更
listen=YES listen_port={{FTP ポート}}
-
ローカルユーザのアップロード許可
write_enable=YES
-
chroot 有効化,chroot ディレクトリ配下の書き込み許可,chroot リスト指定
chroot_local_user=YES chroot_list_enable=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd.chroot_list
-
ディレクトリごと一括での転送有効化
ls_recurse_enable=YES
-
UTF-8 エンコーディング
utf8_filesystem=YES
-
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
-
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
-
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 の設定を下記のように変更します.
これ以前では FTP 接続できていたにも関わらず,PASV モード設定後に接続できなくなる場合があります.
この場合,IPv6 で接続しようとしていることが原因である可能性があります.
FTP クライアントの設定で,IPv4 に限定するように変更してください.
- 設定
- FTP
- パッシブ モード接続で IP アドレスを強制する : オン
- 接続
- パッシブ モード : オン
- IP バージョン : IPv4
PASV モード設定を行い,クライアントからサーバマシンへの FTP 接続ができることを確認してください.
以上で,ターミナルと外部接続の設定が完了しました.
次回はファイアウォールの設定を行います.
コメント