2009.06.19
セキュアなサーバを作るために最低限やっておくこと
みなさんはサーバを管理するときに、何を一番気にしますか?
人によって程度の差はあるのでしょうが、誰もが気になるのが「セキュリティ」でしょう。
「個人情報」に敏感なこのご時世、サーバに侵入されて個人情報を持っていかれた日にはどえらいことになります。
セキュリティなんてものはどこまでやってもキリがないものですが、外部に公開されたサーバを運用する以上、最低限やっておいたほうがいいんじゃないかな、と思う設定を列挙したいと思います。
もちろん、サーバの用途や使用環境にもよりますので、そこは柔軟に。
※ちなみに筆者の環境は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など、アクセス制御のためのツールが付属していたり、各アプリごとにもセキュリティ部分の設定があることが多いです。
大切なことは、これらをむやみに何重にも使うのではなく、実現したいセキュリティ強度と運用コストのバランスをうまく取っていくことです。
それではみなさん、セキュアなサーバライフをお送りください!
[...] » セキュアなサーバを作るために最低限やっておくこと: エスキュービズ
Posted at 2009.06.20 7:06 AM by links for 2009-06-19 « 個人的な雑記