裏紙に書く程度の内容

VPS初期設定

VPSを借りたら最低限やっておきたい設定

rootパスワードの変更

VPSを借りるとrootユーザのパスワードが送られてきます。初期設定のままだと使いにくかったりセキュリティ的にもNGなので変更しておきます。

パスワード変更

初期パスワードでコンソールにログインし、下記コマンドでパスワードを変更します。

# passwd
Changing password for user root.
New password: (パスワードを入力)
Retype new password: (パスワード再入力)
passwd: all authentication tokens updated successfully.

successfullyと表示されれば成功です。

※コンソール接続を切る前に、別のコンソールを立ち上げて変更後パスワードで接続できることを確認することをおススメします。

一般ユーザの追加

今のところrootユーザしかいないので一般ユーザを追加します。

ここでは”hoge”というユーザを追加することにします。実際に作業される場合は適宜読み替えてください。

一般ユーザの追加

rootでログインして下記コマンドを実行します。

# useradd hoge

追加したユーザのパスワードを設定

追加ユーザのパスワードを設定するのは前述rootユーザのパスワード変更と同じく、passwdコマンドを使います。

# passwd hoge
New password: (パスワードを入力)
Retype new password: (パスワードを再入力)
passwd: all authentication tokens update successfully.

一旦ログアウト(or別コンソール)にて、作成したユーザ・パスワードでログインできればOKです。

sudo設定・rootログイン禁止

sudoの設定、rootログインを無効化します。
(ここではsudo設定するユーザは”hoge”としています。)

sudo設定

ユーザをwheelグループに追加

サーバにrootユーザでログイン後、下記コマンドを実行します。

# usermod -aG wheel hoge

このコマンドは、”wheel” グループに “hoge” ユーザを追加しています。
※対象ユーザを既に何らかのグループに所属させている場合は上記のとおり-aGとしましょう。間違って-Gだけにすると既存グループから外されてしまいます。

参考: usermodでグループを追加するのは危険

sudo設定

続いてsudo設定。

# visudo

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

# %wheel ALL=(ALL) ALL の行頭の#を消すだけです。

少し厄介なのがvisudoではviを使ってファイルの編集をしなくてはなりません。viに不慣れな人はかなり使いにくいかも。

一応、使い方の抜粋。
ここでの編集は”#”を消すだけなので最低限以下を知っていればできるはずです。

動作 キー
カーソルを↓へ移動 j
カーソルを↑へ移動 k
カーソルを←へ移動 h
カーソルを→へ移動 l
1文字削除 x
編集を元に戻す u
保存して終了 :wq

それ以外の使い方は下記なんかを参考に。

viエディタの使い方

編集中になんか間違えた!!!どうしたらええねん!!!という場合は落ち着いて以下をやってください。

  1. escを2~3回連打(コマンドモードに戻ります)
  2. uを連打(編集を元に戻します。)
  3. :q!と実行(保存せずに編集を抜けます)

仮に既に保存しちゃったよ!って人は最後の手順を:wqとすると保存して終了です。2番目の手順で変更がすべて元に戻っているので一旦最初の状態で保存しなおすわけですね。

ssh接続方式の変更

ssh接続の認証方式を鍵認証に変更します。
初期状態のままだとパスワード認証のため、セキュリティ上NGです。

キーペアの作成

認証に必要な”公開鍵”と”秘密鍵”を作成します。
サーバ側で作ってもいいんですが teraterm で簡単に作れるためその方法の紹介。

teratermを起動すると”新しい接続”ダイアログが表示されるためこれは”キャンセル”ボタンで閉じます。

その後メニューの [設定] > [SSH鍵生成] を選択します。

以下のようなダイアログが表示されます。

teraterm1

“生成”ボタンをクリックすると”鍵のパスフレーズ”、”パスフレーズの確認”、”コメント”が入力できるようになるので任意のパスフレーズ等を入力します。

入力後、”公開鍵の保存”、”秘密鍵の保存”ボタンで公開鍵・秘密鍵ファイルを作成しておきます。

公開鍵のアップロード

作成した公開鍵をサーバにアップロードします。

teratermで一般ユーザでサーバにログインします。
(この時点ではパスワード認証によるログイン)

ログインできたら先程作った公開鍵(id_rsa.pub)ファイルをコンソールウィンドウにドラッグ&ドロップします。

アップロードの確認ダイアログが表示されます。

teraterm2

“SCP”をクリックするとファイルがアップロードされます。

公開鍵の配置

先程アップロードしたファイルを移動します。
アップロード時にログインしたコンソールでの作業です。

$ cd
$ mkdir .ssh
$ chmod 700 .ssh
$ mv id_rsa.pub .ssh/authorized_keys
$ chmod 600 ./ssh/authorized_keys

ユーザのホームに.sshディレクトリを作って、先程の公開鍵ファイルをauthorized_keysにリネームして配置しています。

ssh接続設定の変更

SSH接続の設定を変更します。
※sudo設定が終わっていることを前提としています。

$ sudo vi /etc/ssh/sshd_config
[sudo] password for hoge: (ログインユーザのパスワード)

修正箇所は下記3点。

Port設定

# Port22
(編集後↓)
Port 12345

ssh接続のポートを変更しています。ポート番号は任意の番号にします。
※他のサービスとかぶらないように。
※今後このポートで接続することになります。忘れてしまうとどうしようもなくなるため、絶対忘れないようにどこかにメモしておきましょう。

rootログインの禁止

#PermitRootLogin yes
(編集後↓)
PermitRootLogin no

rootユーザのログインは禁止にしています。

パスワード認証の無効化

PasswordAuthentication yes
(編集後↓)
PasswordAuthentication no

パスワードによるログイン認証を無効化しています。

修正が終わったら保存してviを終了(:wq)し、設定を読み込ませます。

sudo /etc/rc.d/init.d/sshd reload
Reloading sshd:            [OK]

[OK]と表示されれば作業完了です。

注意

ここまで作業したら作業中のコンソールは切らずに、下記確認作業をしておくことを。

鍵認証でのログインの確認

前述までの作業を終えたら接続の確認をしておきます。

teratermを別ウィンドウで立ち上げます。
※前述作業中ウィンドウを閉じてしまうと、万が一ポート番号の設定をミスっていた場合、どうしようもなくなってしまうので別ウィンドウでの接続確認をおススメします。

ポートを指定する

“新しい接続”ダイアログの”TCPポート”を先程設定したポート番号にして”OK”ボタンをクリックします。

teraterm3

ユーザ・パスワード・秘密鍵指定

“SSH認証”画面になったら、認証方式の選択を”RSA/DSA/ECDSA鍵を使う”を選択します。

teraterm4

“秘密鍵”ボタンをクリックし、前述の手順で作った秘密鍵(id_rsa)ファイルを選択します。
“ユーザ名”はログインしたいユーザ、”パスフレーズ”は秘密鍵作成時に指定したパスフレーズを指定します。

“OK”ボタンで接続できれば接続確認OKです。

poderosaで接続したい

さて、teratermで鍵認証の接続は確認できましたが、poderosaで接続する場合はもう少し作業が必要です。

puttyキーの生成

poderosa で接続する場合は PuTTYキーが必要になります。

以下サイトより”puttygen.exe”をダウンロードしてください。

PuTTY

ダウンロードしたexeを実行するとPuTTY Key Generatorが起動します。

putty1

“Load”ボタンをクリックして作成済みの秘密鍵を選択します。
この時パスワードの入力を求められるので、秘密鍵作成時に指定したパスワードを入力して、ロードします。

ロード後、メニューの[Conversions] > [Export ssh.com key]を選択し、任意の名前で秘密鍵を生成・保存します。

poderosaを使用する場合はこちらの鍵ファイルを使うと接続できるようになります。

ファイアウォールの設定

iptablesの設定を行います。
とりあえず、必要最低限です。

サーバへの攻撃対策

$ sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$ sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  1. データを持たないパケットの接続破棄
  2. SYNflood攻撃対策
  3. ステルススキャン対策
//ICMP対策

DNS対策
$ sudo iptables -I INPUT -p udp -m state --state NEW --dport 53 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT

通信の許可

$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
$ sudo iptables -I INPUT -p icmp --icmp-type 8 -j ACCEPT

ループバックは通す。
icmpはpingのみ通す。

用途に応じた許可

サーバの用途に応じて必要なポートを開けておきます。

$ sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 12345 -j ACCEPT

webサーバとして運用する場合、80,443ポートを開けておきます。また、先のssh接続用に指定したポートも開けておきます。
この設定を忘れるとメンテできないので注意!

その他

$ sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT ACCEPT
  1. 確立済みの通信を許可
  2. 許可した者以外は拒否
  3. サーバからの送信は許可

設定を保存

$ sudo iptables -L
・・・
(設定内容が表示される)
・・・
$ sudo service iptables save
$ sudo service iptables restart
  1. 設定の確認
  2. 設定の保存
  3. iptables再起動

※saveする前に別コンソール等でssh接続ができることを確認しておきましょう。

参考

さくらのVPS サーバの初期設定ガイド

CentOS iptablesによるパケットフィルタ

Index