ドットインストールを参考にさくらVPSでウェブサーバーを構築しました。
私はサーバーのセキュリティについて全くわからないので、最低限何をしなければいけないのか教えていただけないでしょうか。
主にphp、rubyを使用したウェブアプリケーションを公開しようと考えています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
サーバは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を用いてより一層高いセキュリティを構築すると良いかと思います。
投稿2014/09/11 23:54
総合スコア125
0
※これまた回答削除機能がないので、すみません、PCから続きです。
...で、メールサーバーなどはパッチ適用も含め、そこまでやる覚悟がないと、踏み台になってしまうのがオチです。
個人的には全くセキュリティについてわからなく、というなら、普通にレンタルサーバー借りて運用するのが、時間とコスト的に良いように思います。
※OSで80項目、通信20項目、HTTPサーバー20項目位にはリスティングした項目数が及びます。
その上で、これだけだと回答としてあんまりなので、どの製品(OS/HTTP_SERVER)でも使える基本的な考え方を以下に記載します。
※bonbobon0816さんの回答の方がニーズに合っているでしょうが、せっかくなので書かさせてください。製品によってバージョンによる差異などもあるため、結局はある程度しっかりした本で勉強した上で、自作のサーバーを公開されるのであれば「最低限」などないという意識でないと周りに迷惑をかけることにもなります。ざっくり書きましたが、きちんと設計→設定書を書いて運用する気持ちがないと厳しいですし、それやるだけのコストと時間をかけるのであれば、レンタルサーバー借りて「何か問題あったらホスティングサービスのせいだから!」って言ってしまう状況にした方が、現状確実に安く面倒でないです。
- インストール
パッケージサービスは使用せず最新バージョンを自分でコンパイルする(パッケージサービスは相当に古いバージョンしか提供されない為、セキュリティホールをつぶせない)
OSのパッケージも同様。不要なパッケージは全てアンインストールする。
- ユーザー・パスワード・認証
■権限を分割する
・WEBサーバーの実行ユーザー(ApacheならUserディレクティブに定義)とは別にWEB資源の所有者を作る
・WEBサーバーの実行ユーザーはOS上にログイン不可にする
・WEBサーバーの実行ユーザーにOSデフォルトあるいは製品デフォルトのユーザーは使用しない(nobodyなど)
・最低限必要なコマンド群をsudoで使用できるようにし、rootは基本的に使用しない運用をとる。
・SFTP等でWEBの公開用資源をアップロードするユーザーを決めておく
■不要なものは削除
・OSデフォルトのユーザーで使わないユーザーは全て削除あるいは無効化する。それが出来ない場合は、少なくともログインを出来なくする。
・OS上にログインしないユーザーはパスワード認証もブロックする(ログインシェルを/bin/falseにする等)
- 資源のアクセス権
■サイトを乗っ取られないようにする
・インストールして生成される資源にはWEBサーバーの実行ユーザーから書き込みを不可とする
・特にhttpd.confはWEBサーバーの実行ユーザーが読み取りだけ出来るように必ずアクセス権を変更(chattrで変更不可にしてもよい)
・WEBの公開ディレクトリ以下の資源はWEBサーバープロセスから参照可能な最低限のアクセス権設定にする(PHPをfastCGI経由で使用する場合、そのプロセスの実行ユーザーと共に絶対に「書き込み可能にしてはならない」)
・WEBの公開ディレクトリ以下はSFTP等で資源をアップロードするユーザーに書き込み権限を付与する
- 各種設定・通信・暗号化
■悪意のある攻撃を防止
・ディレクトリトラバース出来ないようにする(ApacheであればOption Indexesの定義でディレクトリリスティングして上位ディレクトリに登れないようにする)
・通信プロトコルで使用しないものは全てサービスをOFFにする。
・FTP, TELNET等のレガシーなサービスは運用では使用せず、SSHを公開鍵認証で使用する。
・F/Wの併用を検討する(サービスを落としたポートへのアクセスも防ぐ)
・公開鍵認証では2048ビット以上の暗号化強度を使用する(TeraTerm等の接続でも弱い暗号化強度の接続を不可として、その上でSSHの暗号アルゴリズムから弱いものを除去する)
- ロギング・運用
■悪意のある攻撃をチェック
・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
投稿2014/09/12 11:31
総合スコア73
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
個人的な意見として
機能は少なければ少ないほど自然と脆弱性が減ってセキュアになると思っているので、
OSを最小構成でインストールしてそこから必要なパッケージだけインストールしてます。
まぁ最小構成だと普通なら当然のように使えるパッケージすら入ってないとかあるので構築若干大変ですが(笑)
webアプリのサーバーサイドプログラミングのセキュリティ対策としては、
対策並べたら十項目軽く越える上大事なことばかりなのでセキュリティをまとめたサイトとか書籍に一通り目を通してみることをオススメします。
オススメは徳丸本です。
投稿2014/09/12 00:17
総合スコア843
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
はじめまして。
10年近く分散系OSのセキュリティの仕事をしてきたのですが、現在自分で一からWebサーバーを作ることはコストに見会わないためやっていません。
つまり、このようなQAで回答出来るような項目数ではないです。
もし勉強が目的ならば、OSとWEBサーバーの該当する製品のオライリーのセキュリティ本を読むのが確実です。
仕事で使う場合はその上で、サーバー構築するか、そうでないなら、一からやらないとセキュアに出来ないVPSではなく、最初から箱として用意されている、レンタルサーバーのご使用をお薦めします。
※スマホで回答していたら回答の途中で投稿されてしまったため(編集機能がなかった!)、次の回答に続きます。申し訳ございません。。。
投稿2014/09/12 11:22
総合スコア73
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。