VPSの初期設定


サーバ設定の実験用途などで試してみたいこともあり、[sppd](http://www.sppd.ne.jp/selfvps/)で新しくVPSを借りました。厳密には、まだ仮登録段階ですけど(^_^;)

ということで、まずは初期設定を。

参考：[GMOクラウド VPSを借りてまず行う初期設定内容](http://www.guilz.org/2014/04/19/gmo%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89-vps%E3%82%92%E5%80%9F%E3%82%8A%E3%81%A6%E3%81%BE%E3%81%9A%E8%A1%8C%E3%81%86%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E5%86%85%E5%AE%B9/), [ファイアウォール構築(iptables)](http://centossrv.com/iptables.shtml)

大まかな流れはguilz.orgさんを参考に、ntpdくらいは別に良いかなーと思っているので動かしたままにしていますが、やってることはほぼそのままです(^_^;)

## 事前準備：作業用ユーザの作成など

まずは、作業用のユーザが無いことには始まらないので、その辺りの設定を。

sppdのVPSだと初期設定で作業用のユーザも作ってもらえるのですが(そもそもrootでログイン出来ない)、細かい作業などの利便性を考えると自分用にアカウントを作った方がいいかなと。

```bash:rootパスワード変更＆ユーザ追加＆wheel設定
passwd
useradd your_logname -G wheel
passwd your_logname
visudo
```

wheelグループにユーザを追加し、sudoersのwheel設定を開けます。

```profile:visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
```

%wheelの設定がコメントアウトされているので、コメントを外します。

`visudo`までで使える様にはなるのですが、ついでにpamの設定も弄っておきます。

```diff:/etc/pam.d/su.diff
@@ -3,7 +3,7 @@
 # Uncomment the following line to implicitly trust users in the "wheel" group.
 #auth		sufficient	pam_wheel.so trust use_uid
 # Uncomment the following line to require a user to be in the "wheel" group.
-#auth		required	pam_wheel.so use_uid
+auth		required	pam_wheel.so use_uid
 auth		include		system-auth
 account		sufficient	pam_succeed_if.so uid = 0 use_uid quiet
 account		include		system-auth
```

ここで初期設定のアカウントはお役御免になるので、気になる方は`passwd -l default_user`でアカウントをロックしてもいいかもしれません。


## 最低限のセキュリティ設定

### sshdのポート変更

まずは何も考えずにsshdのポート変更をしておきます。

```diff:/etc/ssh/sshd_config.diff
@@ -10,7 +10,7 @@
 # possible, but leave them commented.  Uncommented options change a
 # default value.
 
-#Port 22
+Port 12345
 #AddressFamily any
 #ListenAddress 0.0.0.0
 #ListenAddress ::
```

ちなみにPermitRootLoginは最初からnoなので設定はそのまま弄っていません(もしyesだったら変更した方が良いと思っています)。

※ここでは12345番に設定していますが、実際は別の値を使っています

ここで`service sshd restart`して、念のため`ss -l`とか`netstat -l`とかでLISTENポートの確認をしておきます。

因みにポート番号は適当に変換されて、12345番を使っている場合には`italk`になります。

```bash:sshd設定変更確認
$ sudo service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]
$ ss -l4
State      Recv-Q Send-Q            Local Address:Port                Peer Address:Port   
LISTEN     0      128                           *:italk                          *:*   
$ grep italk /etc/services 
italk           12345/tcp               # Italk Chat System
italk           12345/udp               # Italk Chat System
```

ポート番号が変わったことの確認を兼ねて、最初に作成したユーザでログインしておきます(見ただけじゃ信用しない派です)。

### iptablesでのフィルタリング

iptables関連の設定は、事前に加工したものを適当に転送します。

```diff:iptables.sh.diff
@@ -31,7 +31,7 @@
 iptables -A INPUT -i lo -j ACCEPT
 
 # 内部からのアクセスをすべて許可
-iptables -A INPUT -s $LOCALNET -j ACCEPT
+#iptables -A INPUT -s $LOCALNET -j ACCEPT
 
 # 内部から行ったアクセスに対する外部からの返答アクセスを許可
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
@@ -135,7 +135,7 @@
 
 # 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
 # ※SSHサーバーを公開する場合のみ
-iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY
+iptables -A INPUT -p tcp --dport 12345 -j ACCEPT_COUNTRY
 
 # 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
 # ※外部向けDNSサーバーを運用する場合のみ
```

ひとまずは$LOCALNETの無効化と、SSH関連のポート変更の追従が必要です。

`iplist_check.sh`は、guilz.orgさんに倣って`/etc/cron.weekly`に放り込みます。一端全て`/root`にファイルを転送してから手動でファイル移動です。

```bash:iptables設定
cd /root
chmod 700 *.sh
mv iplist_check.sh /etc/cron.weekly
./iptables.sh
chkconfig iptables on
```

`iptables.sh`実行中にここで失敗すると、最悪いきなりOS再インストールなので、SSH接続切れないように…と祈りながら待ちます。不安になっても決して空Enterとかしないように。最初のユーザ追加をした端末をここで空Enterして落としたのは秘密です。

## 基本パッケージの更新とサーバ類のインストール

さくらのVPSとかだと初期状態で大丈夫だった気がするのですが、EPELなどが無効になっていたので有効にしつつ、パッケージの更新をします。

参考：[【メモ】EPELリポジトリをRed Hat Enterprise Linuxで使うには](http://pocketstudio.jp/log3/2012/04/09/how_to_use_epel_repository_on_rhel/)

```bash:パッケージ更新
$ sudo rpm --nosignature -i http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum -y update
```

この後、使おうと思っているサーバなどのインストール(必要に応じてrepo追加)も合わせてしていますが、ここでは割愛します。

細かい設定は後追い…ということで(^_^;)