redmineとかインストールしたくなったので、2年程誰もログインしないマインクラフトサーバとして利用していたさくらのVPSを再設定することにしました。
基本的にはさくらのVPSのサーバ初期設定ガイドに従っていくだけです。
環境
OS | Mac OS X El Capitan 10.11.4 |
VPSプラン | 1G 972円/月 |
サーバOS | CentOS 6.7 |
OS再インストール
コントロールパネルから「OSインストール」→「標準OSインストール」と選択し、rootのパスワードを入れるだけです。
標準OSを選択するとCentOS6.7がインストールされます。
CentOS7等別のOSをインストールしたい場合は「カスタムOSインストール」を選択するとインストールできますが、今回はCentOS6を使います。
日本語入力の設定
ファイルに日本語を入力すると文字化けしたので、rootで次の設定ファイルを書き換えて再起動します。
[root@www99999ue ~]# vi /etc/sysconfig/i18n
LANG="C"
LANG="ja_JP.utf8"
再起動します。
[root@www99999ue ~]# shutdown -r now
今思えば文字化けしたのはファイルを開いた時の文字コードがUTF-8になっていなかっただけだったような気もします。
"C"
だとデフォルトなので英語が表示されるところもjp_JP.UTF-8
なら日本語で表示されるのでまあやっておいても良い設定だと思います。
一般ユーザの追加とsudoの設定
普段からrootでログインするのは危険なので一般ユーザを作成します。
adminというユーザを作成し、パスワードを設定します。
[root@www99999ue ~]# useradd admin
[root@www99999ue ~]# passwd admin
作成したユーザをwheelグループに追加します。
[root@www99999ue ~]# usermod -G wheel admin
wheelグループのユーザはすべてのコマンドをsudoで実行できるように設定ファイルをvisudo
コマンドで書き換えます。#
を一個外すだけ。
[root@www99999ue ~]# visudo
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
これでadminがsudoを使えるようになりました。
SSH接続をできるようにする
まずはMac側でSSH接続に必要な鍵を生成します。
初期設定ガイドではTeraTermで作成していますが、MacにTeraTermがあるかわからないので普通にコマンドで作成します。
# ssh-keygen
パスフレーズを入力します。パスフレーズは鍵を使う時に入力する事があるので忘れないようにしましょう。
ssh接続をするユーザ(今回はさっき作成したadmin)でサーバへログインします。
Macで作成した鍵のうち公開鍵をサーバに登録します。
[admin@www99999ue ~]$ mkdir .ssh
[admin@www99999ue ~]$ chmod 700 .ssh
[admin@www99999ue ~]$ vi .ssh/authorized_keys
ここで先ほどMacで作成した公開鍵(ssh-keygen
で作成されたこれ.ssh/id_rsa.pub
)の内容を貼り付けて保存します。保存したら権限の変更。
[admin@www99999ue ~]$ chmod 600 .ssh/authorized_keys
rootでログインしてsshデーモンの設定ファイルを書き換えます。
[root@www99999ue ~]# vi /etc/ssh/sshd_config
sshは普通22番ポートを使いますが、攻撃を回避するために私は50022番にします。49152番〜65535番が自由にできるポート番号なので、その中から選ぶのが良いのではないでしょうか。
sshでrootのログインは危険なので禁止します。rootは必ず存在するユーザなので狙われやすいからですね。
また、鍵を使うため、ログインパスワードでの認証は禁止します。
(略)
#Port 22
(略)
#PermitRootLogin yes
(略)
PasswordAuthentication yes
(略)
(略)
Port 50022
(略)
PermitRootLogin no
(略)
PasswordAuthentication no
(略)
このコマンドで設定ファイルがおかしくないかチェックできるらしいです。何も表示されなければオッケー。
[root@www99999ue ~]# sshd -t
変更した設定ファイルを読み込み直します。
[root@www99999ue ~]# service sshd restart
(2016/12/14 追記)CentOS7系ではservice
ではなくsystemctl
に変わっています。
Macからログインを試します。ポート番号を22番から変更した場合は-p
オプションでポート番号を指定する必要があります。-i
オプションでは秘密鍵を指定します。
# ssh admin@www99999ue.sakura.ne.jp -p 50022 -i ./.ssh/id_rsa
ログインできました。
OSのアップデート
インストールに用いたOSイメージが最新とも限らないため、OSのアップデートをします。
[root@www99999ue ~]# yum update
iptablesの設定
最低限のセキュリティ設定をします。
初期設定ガイドではコマンドを用いてルールを設定する方法が記載されていますが、面倒なので設定ファイルを直接修正します。
[root@www99999ue ~]$ vi /etc/sysconfig/iptables
私の設定ファイルはこんな感じ。
インプットはホワイトリスト、FORWARDとOUTPUTはブラックリストにします。
とりあえずsshと使いそうなhttp,httpsを許可します。
*filter
:INPUT DROP [3:564]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24:2288]
##
## basic
##
# 確立済みの通信を許可
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ループバックを許可
-A INPUT -i lo -j ACCEPT
# pingを許可
-A INPUT -p icmp -j ACCEPT
# httpを許可
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# httpsを許可
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# sshを許可(50022をsshのポートにしている)
-A INPUT -p tcp -m tcp --dport 50022 -j ACCEPT
##
## security
##
# データを持たないパケットの接続を破棄する
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
# SYNflood攻撃と思われる接続を破棄する
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
# ステルススキャンと思われる接続を破棄する
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
COMMIT
iptablesを再起動して変更を適用します。
[root@www99999ue ~]$ service iptables restart
これにて最低限の設定が完了!