さくらVPSを初期化して最初にやったこと

# 前書き

このたび、サーバのパスワード忘れという間抜けな事態からOS再インストールとなったわけですが、初期セットアップの過程をメモしてみようと思います。

昔ちょこちょこ遊んだコードとかは特にバックアップしてなかったので消滅することになりました。南無。

使用するOSは面倒だったのでデフォルトのやつにした。（CentOS 6.6）

# 前準備

コンパネからOS初期化の後、ひとまず秘密鍵を作成。

私のPCはMacなので、ターミナルから

```
$ ssh-keygen
```

で秘密鍵・公開鍵のペアを作成して前準備完了。

# root作業

## ユーザ作成

まずユーザの作成を行う

```
# useradd ユーザー名
# passwd ユーザー名
# usermod -G wheel ユーザー名
```

いずれアプリケーション用ユーザも作ると思うけど、それはまた今度。
次にsudo権限の設定。

```
# vim /etc/pam.d/su
auth required pam_wheel.so use_uid

# visudo
%wheel ALL=(ALL) ALL
```

とりあえずsudo権限持ちのユーザを作ったら、一旦そのユーザでログイン。
念のためrootでログインしたセッションは維持したまま。

# ユーザ作業

## SSH周りのサーバ設定

次にSSHの設定。
SSHポート番号を変更、ルートログイン・パスワードログイン・空パスワードを拒否。

```
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
$ sudo vim /etc/ssh/sshd_config
Port 10022
PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no
```

公開鍵を登録し、各種パーミッションを設定。

```
$ mkdir ~/.ssh
$ vim ~/.ssh/authorized_keys
$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys
```

各種設定が終わったので、sshdを再起動。

```
$ sudo /etc/init.d/sshd restart
```

再度、念のため今接続しているセッションを維持したまま再度接続。
あとrootで接続できないことも同時に確認しておく。

## iptables

次にiptablesを設定。

``` :/etc/sysconfig/iptable
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
# HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

# 海外IPに対する設定
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

-A RH-Firewall-1-INPUT -p tcp --dport 22001 -m state --state NEW -m recent --update --seconds 240 --hitcount 8 --rttl --name SSH -j DROP
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
```

その後、iptablesの再起動

```
$ sudo /etc/init.d/iptables restart
```

ひとまず、これで最低限の設定は完了。

## root宛メールの転送

一応設定しておいた方がいいだろう。

```
$ sudo cp /etc/aliases /etc/aliases.org
$ sudo vim /etc/aliases
root:		hogehoge@dummy.com

$ sudo newaliases
$ echo "test sakura root mail" | mail root
```

## 再起動

一度再起動しておく。

```
$ sudo shutdown -r now
```

## yum update

yumってまだイマイチ怖いというか、ブラックボックス怖い病。
でもCentOSとかは隅々まで理解してるのかって言われると別にそんなことないので、たぶん慣れの問題。

とりあえず最新版にしておく。

```
$ sudo yum update
```

## dotfiles

まあアカウント持ってなかったから良い機会だし、と新規作成して公開鍵とかも登録したりしたわけですが。

dotfilesとかも当然ないので、作成してGitHubで管理することにしました。

bitbucketとも悩んだけど、GitHub使ってみたかったんだよね的な感じでこっちに。

https://github.com/skxeve/dotfiles

とりあえず突貫で作成して、そのまま使用。

作成の経緯とか中身についてはここでは割愛します。

やはり.vimrcくらいは設定しておかないと色々やりにくい。
あと個人的にはbdコマンドがないと大変。

## logwatch

各所でオススメされているlogwatchを入れてみる。

とりあずperlが入ってるか確認の後、インストール。

```
$ which perl
/usr/bin/perl

$ sudo yum install logwatch
```

最後にComplete! と表示されて完了。

cron設定は自動生成されている模様。

```
$ ls -l /etc/cron.daily/0logwatch
-rwxr-xr-x 1 root root 265 Sep 10  2013 /etc/cron.daily/0logwatch
```

設定は/etc以下にある。

```/etc/logwatch/conf/logwatch.conf
# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)
```

/usr 以下の設定ファイルも見たが、特にデフォルトのままで問題なさそうだったので省略。
rootにメールが飛ぶようだが、rootに飛ぶメールは転送設定してあるため問題ない。

# 作業完了

これで一通り初期作業は完了。
やってると多かったと思ったけど、書いてみるとそうでもない量かもしれない。

## 参考

http://qiita.com/yu_0105/items/b7cce7a504eed4e31c79
http://d.hatena.ne.jp/Kenji_s/20120405/sakura_vps