« Yahooキーワード抽出APIライブラリ | テレビの取材がやってきました »

2009.06.19

セキュアなサーバを作るために最低限やっておくこと

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをnewsingに追加

みなさんはサーバを管理するときに、何を一番気にしますか?

人によって程度の差はあるのでしょうが、誰もが気になるのが「セキュリティ」でしょう。

「個人情報」に敏感なこのご時世、サーバに侵入されて個人情報を持っていかれた日にはどえらいことになります。

セキュリティなんてものはどこまでやってもキリがないものですが、外部に公開されたサーバを運用する以上、最低限やっておいたほうがいいんじゃないかな、と思う設定を列挙したいと思います。

もちろん、サーバの用途や使用環境にもよりますので、そこは柔軟に。

※ちなみに筆者の環境はCentOS5.3です。

SSHの設定

ほとんどの方はSSHでサーバに接続して作業をしていると思います。まずはこの設定をきちんとやっておくことが出発点です。

・/etc/ssh/sshd_config

SSH2だけを有効にする

Protocol 2

rootでのログインを禁止する

PermitRootLogin no

空パスワードでのログインを禁止する

PermitEmptyPasswords no

※さらにセキュアにしたければ、鍵認証にする

PasswordAuthentication no

root関連の設定

上記の設定で、いきなりrootで侵入されることはなくなりましたが、念のためrootになる部分のセキュリティを上げておきましょう。

・/etc/pam.d/su

rootになれるユーザをwheelグループに属するユーザのみにする。

auth required pam_wheel.so use_uid

・/etc/sudoers (visuduでもOK)

sudoが使えるユーザ(グループ)を設定する

-userにsudo権限を与える場合

user ALL=(ALL) ALL

-wheelグループにsudo権限を与える場合

%wheel ALL=(ALL) ALL

iptablesの設定

よくファイアウォールとして使われることの多いiptablesですが、これは特定のポートに出入りするパケットをどう取り扱うのか、を決めるフィルタです。

iptablesを適切に設定することで、『○番ポートへのアクセスを全て遮断する』といった運用が可能になります。

主なオプション

iptables -P  チェインの標準ポリシーを設定

iptables -A  チェインにルールを追加

iptables -F  ルールを消去

iptables -L  リストを一覧表示

例えば一般的なサーバであれば、

iptables -P INPUT ACCEPT  INPUTは許可

iptables -P FORWARD DROP  FORWARDは破棄(ルータにするならACCEPT)

iptables -P OUTPUT ACCEPT OUTPUTは許可

iptables -F  個別のルールを全てクリア

として、基本ポリシーを決めた上で、iptables -A を使って個別のルールを設定していきます。

例えば、192.168.1.100からの22番ポートへのアクセスを禁止したい場合には、

iptables -A INPUT -p tcp -s 192.168.1.100 –dport 22 -j DROP

とするわけです。

ちなみにこのコマンドを叩けばすぐに有効になりますが、サーバを再起動すると設定が失われてしまうので、

/etc/init.d/iptables save

service iptables restart

と、きちんと保存して、サービスを再起動することが必要です。

やる方はいないと思いますが、

iptables -P INPUT DROP

iptables -P OUTPUT DROP

なんてものを打つと、とんでもないことになりますので、絶対にやめてくださいね。

denyhostsの導入

サーバを公開すると、世界中のいたるところからブルートフォースアタックがやってきます。上記の設定をきちんとやっておけば何の問題もないのですが、さすがに数千回・数万回のアタックは鬱陶しいので、それらを自動的に、/etc/hosts.denyに加えるような設定をします。

・インストール

RPMforgeのリポジトリが追加されていればyumコマンドでインストールできます。

yum -y install denyhosts

・設定

一定時間後に制限を解除する(下の例は3時間)

PURGE_DENY = 3h

解除した後に何度もやってこられると面倒なので、解除の回数も指定できます

PURGE_THRESHOLD = 2

ブロックするサービスの指定ができます。全てならALLとします。

BLOCK_SERVICE  = sshd

存在しないユーザのログイン試行を何度まで許可するか、の設定ができます。あまり少なくすると、自分がユーザ名を間違ったときに、悲しいことになります。

DENY_THRESHOLD_INVALID = 5

存在するユーザのログイン失敗を何度まで許可するか、の設定です。

DENY_THRESHOLD_VALID = 5

rootでのログインは禁止しているので、rootでのアクセスは1発アウトにします。

DENY_THRESHOLD_ROOT = 1

他にもいろいろと設定値はありますが、詳しくはマニュアルを参照のこと。

下手な設定をしてしまうと、自分が間違ったときにアクセスできなくなる、という悲劇的なことも起こり得ますので、極端に設定値を小さくするときには注意してくださいね。

—-

他にもLinuxにはSELinuxなど、アクセス制御のためのツールが付属していたり、各アプリごとにもセキュリティ部分の設定があることが多いです。

大切なことは、これらをむやみに何重にも使うのではなく、実現したいセキュリティ強度と運用コストのバランスをうまく取っていくことです。

それではみなさん、セキュアなサーバライフをお送りください!

Trackback URL

Comment & Trackback

[...] » セキュアなサーバを作るために最低限やっておくこと: エスキュービズ

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>