前書き
このたび、サーバのパスワード忘れという間抜けな事態から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を設定。
*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使ってみたかったんだよね的な感じでこっちに。
とりあえず突貫で作成して、そのまま使用。
作成の経緯とか中身についてはここでは割愛します。
やはり.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以下にある。
# 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