「さくらのVPS」CentOS 初期設定1 〜 セキュリティ関連設定

さくらのVPS 512Mコース(2Core/512MB/20GB/年10,780円)を使っていたのだが、3月のリニューアルで1Gコース(2Core/1GB/100GB)が同価格となり、乗り換えキャンペーンで約1ヶ月重ねて借りるのが可能になった。なお、乗り換えない場合でもメモリは1GBに増量される(ディスクはそのまま20GB)。システムイメージをそのままで移行とかは出来ないので、けっこう作り込んで記録を残していない人は乗り換えないのも手である。私の場合はまだ余り作り込んでいないのと、ディスク容量が魅力で乗り換えることにした。


契約手続きを行った後、OSをどうするか考えた。CentOSかScientificLinuxか。現在はCentOSで、RedHat系で行くことは決めている。ネットでの情報をあさると、結局どちらが今後続きそうかと信じるかに掛かっているわけだ。CentOSはver6対応が遅れたという実績があるが、一方Scientificのほうも最近中心人物がプロジェクトを離れたらしい。ということで、悩みはつきないが結局デフォルトのCentOSのままで行くことにした。


前回以上に記録を残すことにする。本日の記事はWindowsPCからTeratermでの作業が出来るようになるところまで書く。
以下はコントロールパネルから、コンソールを使用しての作業。PC画面との間でコピペが出来ないので全部手入力が必要。なので、ssh でのログインは初回だけはパスワードでのログインを行ってそのときに公開鍵の設定をコピペで行う。

ユーザ登録関係作業

ユーザ登録とは関係ないが、ファイアーウォールの設定がデフォルトではオフのため、まずはネットワークを止める。

# service network stop

rootパスワード変更。

# passwd

作業用ユーザ作成

# useradd foo
# passwd foo
# usermod -G wheel foo

wheel グループのメンバーのみ root になれるように設定。

# cp -p /etc/pam.d/su /etc/pam.d/su.orig
# vi /etc/pam.d/su
 以下の行のコメントを外して保存。
auth            required        pam_wheel.so use_uid

wheel グループのユーザーで sudo で全コマンドをパスワード無しで実行できるように設定。
パスワード無しにするかどうかは検討要。ただ長いパスワードを毎回入れるのが面倒と、ユーザのパスワードを短くするようになると本末転倒。

# cp -p /etc/sudoers /etc/sudoers.orig
# visudo
 以下の行をコメントアウト((ssh sudo出来るようにするため))して、
#Defaults    requiretty
 以下の行のコメントを外して保存。
%wheel  ALL=(ALL)       NOPASSWD: ALL

sudoの設定を念のため確認。

# su - foo
$ sudo id
$ exit

root での ssh ログインを禁止するように、および ssh のポート番号を変更。

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
# vi /etc/ssh/sshd_config
 以下のように修正して保存。
Port 22222
PermitRootLogin no

ファイアーウォールの設定

出力は、ブロードキャストのみ制限でそれ以外は許可。入力は、ssh,http,smtp と icmp のみ許可。
state ESTABLISHED,RELATED は、本来 tcp 専用かと思ったけど、やってみると udp (DNS応答など) もこれで許可されるようだ。
state ESTABLISHED,RELATED と icmp の関係がよくわからない。man を見ると RELATED で icmpエラー関係も許可されるようだが、やってみると echo-request(ping要求) もこれで許可される。以前の iptables v1.3.5 ではそうではなかった(echo-request は別途許可が必要だった)。

DROP するものについてはある程度ログに書く。ただし、同一サブネット内に頻繁にブロードキャストを投げるやつが必ずいる(Windows関係とかDropboxとか)のでそれらをログに書くとうざいのでブロードキャストは単に DROP する。

# vi /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:INLOG - [0:0]
:OUTLOG - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 192.168.0.255 -j DROP ← ifconfig でサブネットのブロードキャストアドレスを調べて書く
-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW ! --syn -j INLOG
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT ← sshのポート番号
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -j INLOG
-A OUTPUT -d 192.168.0.255 -j OUTLOG ← ifconfig でサブネットのブロードキャストアドレスを調べて書く
-A OUTPUT -d 255.255.255.255 -j OUTLOG
-A OUTLOG -m limit --limit 6/hour -j LOG --log-level debug --log-prefix "ODROP:"
-A OUTLOG -j DROP
-A INLOG -m hashlimit --hashlimit-mode srcip --hashlimit-name drop --hashlimit-upto 6/hour --hashlimit-htable-expire 3600000 -j LOG --log-level debug --log-prefix "DROP:"
-A INLOG -j DROP
COMMIT

iptablesのログを記録。レベルは debug を使うので、本来の debug 情報も混ざるが。

# cp -p /etc/rsyslog.conf /etc/rsyslog.conf.orig
# vi /etc/rsyslog.conf
 下記行を追加する。= をつけないと debug 以上のすべてが記録される。- で書き込みごとにフラッシュしないようにする。
kern.=debug                        -/var/log/iptables
# vi /etc/logrotate.d/syslog
 最初の方に下記行を追加。
/var/log/iptables

ip6はとりあえずDROP

# vi /etc/sysconfig/ip6tables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT

システム再起動。

# shutdown -r now

sshの鍵の設定

ここまでコンソール作業。以降は、Teraterm で作業。
まず、ssh で foo ユーザでパスワード方式でログインする。ポート番号がデフォルトでないので指定要。

ssh 鍵を作成していなければ、Teraterm 設定メニューの「SSH鍵設定」画面で RSA 鍵を作成する。生成ボタンを押した後、適当なパスフレーズを入れて、公開鍵と秘密鍵をそれぞれファイルに保存する。サーバー側で鍵ペアを作成して、秘密鍵をダウンロードする方法もあるが、秘密鍵を持ち運ぶのは間違ってる気がする。

公開鍵を格納。PCで公開鍵ファイルを開いてコピー。

$ mkdir .ssh
$ cat > .ssh/authorized_keys
 ここに公開鍵をペースト。
ctrl-D
$ chmod -R go-rwx .ssh

Teratermで鍵方式で先ほど作った秘密鍵ファイルとパスフレーズを入力してログインできることを確認。

パスワード方式でのログインを禁止。

# vi /etc/ssh/sshd_config
 以下のように修正して保存。
PasswordAuthentication no
# service sshd reload

システムをアップデートして再起動。

# yum update
# shutdown -r now


参考:
id:otn:20110502
id:otn:20110501
さくらのVPS サーバ構築メモ | コムギドットネット
連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」