あれこれ試していて、やっと慣れてきたので作業手順をメモ。
- ユーザの作成と鍵認証の設定
- システムの設定と更新
- ファイアウォールの設定
他にシリーズ物として、下記も良かったらどうぞ。
- VPSでOSを再インストールしたので丁寧にメモ ←この記事
- さくらのVPSでSFTPする
- Nginxの導入と設定(マルチドメイン&カスタムパーマリンク)
- MySQL、PHP、PhpMyAdminの導入と設定
- 激遅サーバの設定を見直したら劇的に改善した
- さくらのVPS+WordPress+PHP+Nginxのまとめ
- さくらのVPS+WordPress+PHP+Nginxのまとめ2(実設定)
■ユーザの作成と鍵認証の設定
コントロールパネルからOSを標準仕様で再インストール。 この時にrootパスワードの設定を求められるので、忘れないように。
再インストールはすぐに終わるので、VPS状態が稼働中になったらSSH接続(Port 22)してユーザ名root、パスワードはインストール時に設定したものを入力する。
rootでログインしたら、作業用ユーザを必要な数だけ作成するんだけど、オレは通常のサーバ作業用のユーザと、マインクラフトを実行するためのユーザ等を作った。
・ユーザの追加と権限付与
ユーザを追加してパスワードを設定し、スーパーユーザになれるグループに追加する。
# useradd ユーザ名
# passwd ユーザ名
# usermod -G wheel ユーザ名
wheelグループに、スーパーユーザになれる権限を与えるので、設定ファイルを編集する。
#vim /etc/pam.d/su
行頭の#を削除して上書き保存。
#auth required pam_wheel.so use_uid
↓
auth required pam_wheel.so use_uid
通常のユーザがスーパーユーザ権限でコマンドを実行できるように、設定ファイルを編集する。
# visudo
行頭の#を削除して上書き保存。
#%wheel ALL=(ALL) ALL
↓
%wheel ALL=(ALL) ALL
なんでwheelというグループ名なのか?は、歴史的な経緯があるみたいだ。
オレみたいな素人向けにメモをしておくと、コマンドを打つのが長くて面倒な時は途中で[TAB]を押すと補完してくれる、vi系エディタで語句検索するには[/]の後に検索語を書く、ってのが便利だった。
・鍵認証ログインの設定
ここで一端ログオフして、Teratermで公開鍵と秘密鍵を作成する。 やり方はサポートサイトのSSH接続の設定変更方法を参考に。 ちなみに、パスフレーズ有りがセキュリティ上は望ましいが、無しでも作成できる。 その場合は、ログイン時にパスフレーズの入力を求められないので、手軽っちゃ手軽だけどリスクがあるので個人責任で。
先ほど作った作業用ユーザでログインし、先頭に[.]が付いた隠しディレクトリを作成、権限を所有者のみ[rwx]に変更する。
$ mkdir .ssh
$ chmod 700 .ssh
Teratermの画面に、先ほど作成した公開鍵[id_rsa.pub]をドラッグ&ドロップして、SCPでファイル転送する。
転送が終わったら、ファイルが転送できたことを確認して、認証用の鍵として名前変更&移動をし、所有者のみ[rw]に権限変更する。
$ ll -a
$ mv id_rsa.pub .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
一端ログオフしてTeratermの設定をしよう。 このあたりも先ほどのSSH接続の設定変更方法に詳しい。
Teratermのログイン時に表示されるダイアログで、
Use plain password to log in が選択されていたら、その下の
Use RSA/DSA/ECDSA/ED25519 key to log in を選択する。
Private key file: 先ほど作成した秘密鍵を指定する
User name: の下の Passphrase: に鍵作成時のパスフレーズを入力する。
この設定でログインできたら成功。 この鍵認証ペア(公開鍵、秘密鍵)は他ユーザ用の設定でも同じファイルを使い回せるけど、これもセキュリティ上はリスクになるので要注意。 また、ログインしたいPCにはこの秘密鍵をコピーしておく必要がある。
ここで、より簡単にログインできるように、Teratermのショートカットのプロパティを開いてログイン情報を記入する。
C:\filepath\ttermpro.exe 123.456.789.012 /auth=publickey /user=ユーザ名 /keyfile=C:\filepath\id_rsa
・rootログインの禁止とSSHポート番号の変更
ここからは、通常は作業用ユーザでログインして、必要に応じてsudoでroot権限でコマンドを実行することにしていこう。
まず、sshの設定ファイルを編集して、パスワードを使った通常のログインと、rootでのログインを禁止する。
$ sudo vim /etc/ssh/sshd_config
sshでアクセスするためのポート番号を変更する。 デフォルトの22番だと攻撃の対象になりやすいので、適当な1025~65535の数字に置き換える。
#Port 22
↓
Port 12345
パスワードを使ったログインを禁止するので、yesをnoに書き換え。
PasswordAuthentication yes
↓
PasswordAuthenticatio no
行頭の#を削除して、空白のパスワードを禁止する
#PermitEmptyPasswords no
↓
PermitEmptyPasswords no
行頭の#を削除し、yesをnoに変更して、rootでのログインを禁止。
#PermitRootLogin yes
↓
PermitRootLogin no
上書き保存して終了したら、sshdを再起動して設定を読み込ませる。
$ sudo /etc/rc.d/init.d/sshd reload
結果OKだったらログオフして、さっきまでの設定でログインできなくなっていることを確認する。 確認するのは下記。
- パスワードでのログインができない
- rootでのログインができない
- port 22でのSSH接続ができない
まぁ、パスワードでの認証を禁止している時点で、rootでのログインだってできない訳だけど。 この時点で先ほど作ったTeratermのショートカットでは、ポート番号が標準の22番で接続しようとして接続できなくなっているので、ショートカットを修正する。
IPアドレスの後ろにコロン[:]を付けて、先ほど22から変更したport番号を記載する
123.456.789.012:12345
接続できたらOK。
■システムの設定と更新
・日本語化
言語設定ファイルを編集して、メッセージを日本語化する。
$ sudo vim /etc/sysconfig/i18n
下記のようにCをja_JP.UTF-8に書き換える
LANG=”C”
↓
LANG=”ja_JP.UTF-8“
上書き保存して終了。 ログオフして再度ログインすると、llコマンドの結果とかで、ちらほらとメッセージが日本語化されている。
・root宛メール転送の設定
[su]して下記を実行しroot宛のメールを自分宛に転送するように、古い設定を削除し、新しい宛先を設定したら、変更を反映する。
# sed -i ‘/^root:/d’ /etc/aliases
# echo “root:転送先メールアドレス” >> /etc/aliases
# newaliases
新しく設定したアドレス宛にメールが転送されるか確認するために、テストメールを送ってみる。
# echo test|mail root
メールが無事に届けばOK。 [exit]してrootから抜けて終了。
・ログ関連の設定
ログ保存設定ファイルを編集して、保存期間を延ばす。
$ sudo vim /etc/logrotate.conf
4を12にして、ログ保存期限を4週間から12週間に変更。
rotate 4
↓
rotate 12
ログ報告ツールのLogwatchを入れておけば、分かりやすく整形したログを毎日メールで送ってくれる。
$ sudo yum -y install logwatch
・インストール済パッケージの更新
上記でも使ったyumはパッケージのインストールが簡単に行えるコマンドで、これを利用してインストール済みのパッケージを更新する。
$ sudo yum -y update
あれば更新、無ければそのまま終了するので、作業漏れの防止に自動アップデートも設定すると便利。
そこで、自動更新してくれるyum-cronをインストールして、起動させる。
$ sudo yum -y install yum-cron
$ sudo /etc/rc.d/init.d/yum-cron start
ちゃんと起動できたら、自動起動するように設定して確認。
$ sudo chkconfig yum-cron on
$ sudo chkconfig –list yum-cron
・リポジトリの追加
どんなパッケージがあるかという情報をリポジトリと呼ぶんだけど、これを追加して検索の優先順位を付ける。
$ sudo yum -y install yum-plugin-priorities
設定ファイルを編集する。
$ sudo vim /etc/yum.repos.d/CentOS-Base.repo
設定ファイル中にある各行の次に、[priority=1]を追記する。
[base]
[updates]
[extras]
[centosplus]
[contrib]
上書き保存して終了し、別のリポジトリ(remi)を追加する。
$ sudo rpm -Uvh //rpms.famillecollet.com/enterprise/remi-release-6.rpm
追加したリポジトリにも、検索の優先順位を設定するために編集する。
$ sudo vim /etc/yum.repos.d/remi.repo 設定ファイルの編集
設定ファイル中にある下記の行の次に[priority=1]を追加し、上書き保存[:wq]
[remi]
repoforgeリポジトリも追加する。
$ sudo rpm -Uvh //pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
epelリポジトリも追加するが、元々インストールされていると思うのでエラーが表示されるかもしれない。
$ sudo rpm -Uvh //dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
下記のエラーメッセージが表示されたら、特に気にせず終了する。
パッケージ epel-release-6-8.noarch は既にインストールされています。
■ファイアウォールの設定
[su]してrootになってホームディレクトリ[/root]に移動
$ su
# cd
ファイアーウォールの設定用にファイルを作成する。
# vim iptables.sh
ファイルを開いたらココの設定をコピペして、下記を修正する。
SSHのポート番号を、先ほどのsshd_configで設定した番号に変更する。
iptables -A INPUT -p tcp –dport ポート番号 -j ACCEPT_COUNTRY
↓
iptables -A INPUT -p tcp –dport 12345 -j ACCEPT_COUNTRY
DROP_COUNTRY_MAKE RU の次の行に下記を追加。
DROP_COUNTRY_MAKE KR
残りの設定項目も、必要に応じて最低限のポートだけを開く設定にして、上書き保存して終了。
次は設定用の作業ファイルを2つ作って、ココの通り設定をコピペする。
# vim iptables_functions
# vim /etc/cron.daily/iplist_check.sh
実行権限を付与して、実行する。
# chmod +x /etc/cron.daily/iplist_check.sh
# sh iptables.sh
しばらく時間がかかるけど、終わったらログオフして再度ログオンできたら自動起動の設定と確認。
$ sudo chkconfig iptables on
$ sudo chkconfig –list iptables
不正ログイン防止のためのパッケージ、denyhostsも追加しておく。
$ sudo yum -y install denyhosts
$ sudo /etc/init.d/denyhosts start
ちゃんと起動したら、自動起動の設定と確認。
$ sudo chkconfig denyhosts on
$ sudo chkconfig –list denyhosts
最後に念のため再起動させちゃう
$ sudo reboot
以上!!
次はFTPできる環境を作ろう。