質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • サーバ

    932questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • セキュリティー

    555questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

サーバーのセキュリティ対策について教えて下さい

受付中

回答 5

投稿

  • 評価
  • クリップ 7
  • VIEW 3,264

a2753123

score 19

ドットインストールを参考にさくらVPSでウェブサーバーを構築しました。
私はサーバーのセキュリティについて全くわからないので、最低限何をしなければいけないのか教えていただけないでしょうか。

主にphp、rubyを使用したウェブアプリケーションを公開しようと考えています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+10

サーバはLinux(CentOS)ということを前提で、最低限かは分かりませんが、自分がお決まりでいつもやることを上げていきます。

SSH
・rootではログイン出来なくする
・ポートをデフォルトの22から変更する(特にウェルノウンポート以外のものにする良いかと思います)
・パスワードでログインさせないようにする(公開鍵での認証のみにする)

iptables
・必要なポート以外は開けないようにする
・SYNflood攻撃と思われる接続を破棄する設定やステルススキャンと思われる接続を破棄する設定などをする

不要なサービスを止めて、自動起動を切る
・CentOS5,6の場合chkconfigで使わないサービスを自動起動しないようにOFFにする
・要るのか要らないのかは用途次第になるので、調べてみてください

必要であればセキュリティ対策のソフトを入れる
・Clam AntiVirusなどがフリーでは有名です
・その他、ファイル改ざん検知のソフト等があるので、そういったもので対策するのも良いかと思います

Webサーバ
・Apacheの場合ですが、ApacheのバージョンやOSの情報を出力しないようにしたり、ディレクトリリスティング(ディレクトリ内のファイルが一覧で表示される)を無効にしたり、このへんは色々あるので調べてみてください。

php.iniの設定
・ファイルのアップロードサイズやPOSTの上限などの値に気をつける
・エラーをWebページに表示しないように設定する
・HTTPヘッダーにPHPを表示しない
・セッションIDを独自の文字列にする
・最近のPHPはデフォルトOFFですが、マジッククオートをOFFにする
・この辺りも色々あるので調べてみると良いかもです

他にもあるかもしれませんが、パッと思いつくところはこんなところでしょうか。
慣れてきたらSELinuxを用いてより一層高いセキュリティを構築すると良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

個人的な意見として
機能は少なければ少ないほど自然と脆弱性が減ってセキュアになると思っているので、
OSを最小構成でインストールしてそこから必要なパッケージだけインストールしてます。
まぁ最小構成だと普通なら当然のように使えるパッケージすら入ってないとかあるので構築若干大変ですが(笑)

webアプリのサーバーサイドプログラミングのセキュリティ対策としては、
対策並べたら十項目軽く越える上大事なことばかりなのでセキュリティをまとめたサイトとか書籍に一通り目を通してみることをオススメします。
オススメは徳丸本です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

※これまた回答削除機能がないので、すみません、PCから続きです。

...で、メールサーバーなどはパッチ適用も含め、そこまでやる覚悟がないと、踏み台になってしまうのがオチです。

個人的には全くセキュリティについてわからなく、というなら、普通にレンタルサーバー借りて運用するのが、時間とコスト的に良いように思います。

※OSで80項目、通信20項目、HTTPサーバー20項目位にはリスティングした項目数が及びます。

その上で、これだけだと回答としてあんまりなので、どの製品(OS/HTTP_SERVER)でも使える基本的な考え方を以下に記載します。
※bonbobon0816さんの回答の方がニーズに合っているでしょうが、せっかくなので書かさせてください。製品によってバージョンによる差異などもあるため、結局はある程度しっかりした本で勉強した上で、自作のサーバーを公開されるのであれば「最低限」などないという意識でないと周りに迷惑をかけることにもなります。ざっくり書きましたが、きちんと設計→設定書を書いて運用する気持ちがないと厳しいですし、それやるだけのコストと時間をかけるのであれば、レンタルサーバー借りて「何か問題あったらホスティングサービスのせいだから!」って言ってしまう状況にした方が、現状確実に安く面倒でないです。

1. インストール
パッケージサービスは使用せず最新バージョンを自分でコンパイルする(パッケージサービスは相当に古いバージョンしか提供されない為、セキュリティホールをつぶせない)
OSのパッケージも同様。不要なパッケージは全てアンインストールする。

2. ユーザー・パスワード・認証
■権限を分割する
・WEBサーバーの実行ユーザー(ApacheならUserディレクティブに定義)とは別にWEB資源の所有者を作る
・WEBサーバーの実行ユーザーはOS上にログイン不可にする
・WEBサーバーの実行ユーザーにOSデフォルトあるいは製品デフォルトのユーザーは使用しない(nobodyなど)
・最低限必要なコマンド群をsudoで使用できるようにし、rootは基本的に使用しない運用をとる。
・SFTP等でWEBの公開用資源をアップロードするユーザーを決めておく

■不要なものは削除
・OSデフォルトのユーザーで使わないユーザーは全て削除あるいは無効化する。それが出来ない場合は、少なくともログインを出来なくする。
・OS上にログインしないユーザーはパスワード認証もブロックする(ログインシェルを/bin/falseにする等)

3. 資源のアクセス権
■サイトを乗っ取られないようにする
・インストールして生成される資源にはWEBサーバーの実行ユーザーから書き込みを不可とする
・特にhttpd.confはWEBサーバーの実行ユーザーが読み取りだけ出来るように必ずアクセス権を変更(chattrで変更不可にしてもよい)
・WEBの公開ディレクトリ以下の資源はWEBサーバープロセスから参照可能な最低限のアクセス権設定にする(PHPをfastCGI経由で使用する場合、そのプロセスの実行ユーザーと共に絶対に「書き込み可能にしてはならない」)
・WEBの公開ディレクトリ以下はSFTP等で資源をアップロードするユーザーに書き込み権限を付与する

4. 各種設定・通信・暗号化
■悪意のある攻撃を防止
・ディレクトリトラバース出来ないようにする(ApacheであればOption Indexesの定義でディレクトリリスティングして上位ディレクトリに登れないようにする)
・通信プロトコルで使用しないものは全てサービスをOFFにする。
・FTP, TELNET等のレガシーなサービスは運用では使用せず、SSHを公開鍵認証で使用する。
・F/Wの併用を検討する(サービスを落としたポートへのアクセスも防ぐ)
・公開鍵認証では2048ビット以上の暗号化強度を使用する(TeraTerm等の接続でも弱い暗号化強度の接続を不可として、その上でSSHの暗号アルゴリズムから弱いものを除去する)

5. ロギング・運用
■悪意のある攻撃をチェック
・OS, WEBサーバーのアクセスログは何らかのログメンテナンス(rotatelogsなど)をして必ず一定期間残しておく
・定期的にアクセスログを確認して不正なアクセスがないことチェックする
・製品は最新版のアップデートを常に適用できるように心がける
・変なログが見つかったら適宜F/Wや設定等こまめにチューニングする

【お奨め本】
・Apacheセキュリティ(最低限これは一読してほしい。オライリージャパン)
・Linuxサーバセキュリティ(オライリージャパン。ちょい古いですがLinux系のベースの考え方の勉強に)
・入門PHPセキュリティ(オライリージャパン。PHP使うということでアプリ側のセキュリティとして軽くご一読ください)

【その他】
・もうちょっとパラメータが具体的に書いてある(Apacheなら)
http://www.techrepublic.com/blog/10-things/10-things-you-should-do-to-secure-apache/

http://httpd.apache.org/docs/current/misc/security_tips.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

はじめまして。

10年近く分散系OSのセキュリティの仕事をしてきたのですが、現在自分で一からWebサーバーを作ることはコストに見会わないためやっていません。

つまり、このようなQAで回答出来るような項目数ではないです。

もし勉強が目的ならば、OSとWEBサーバーの該当する製品のオライリーのセキュリティ本を読むのが確実です。

仕事で使う場合はその上で、サーバー構築するか、そうでないなら、一からやらないとセキュアに出来ないVPSではなく、最初から箱として用意されている、レンタルサーバーのご使用をお薦めします。

※スマホで回答していたら回答の途中で投稿されてしまったため(編集機能がなかった!)、次の回答に続きます。申し訳ございません。。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

実務であると仮定しまして。
OSだけなら、インターネットからNessus等のツールでスキャン、指摘項目の修正、です。
なお、さくらVPSには断りを入れてください。
PHPとRubyについては、とてもこの欄では書けません…

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • サーバ

    932questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • セキュリティー

    555questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。