The main aim is to document the hurdles that most of us face as UNIX/Linux/BSD sys admin in our day today life.

WebアプリケーションのシェアはApache HTTP Web Serverが揺るぎない。Netcraftの報告によれば、1996年にApacheがWebサーバシェアのナンバーワンになってから14年間、 Apache HTTP Web Serverは常にナンバーワンシェアを誇るWebサーバであり続けている。しかし変化がないわけではない。軽量高速のWebサーバは常に注目を集める分野であり、ここ数年で「Nginx」がその土台を築きつつある。

Nginxは軽量で高速なWebサーバ。リバースプロキシサーバ、メールプロキシサーバとしての機能も備えている。トラフィックが高いサイトでの採用事例が伸びており、まだシェアは5%から6%ほどと少ないものの、第3勢力としての地位を確かなものにしつつある。Top 20 Nginx WebServer Best Security Practicesにおいて、NginxをLinuxやUNIXライクOSでセキュアに運用するための20のセットアップテクニックが紹介されている。いくつかの設定はLinuxに固有のものだが、セキュリティに関する設定として役に立つ。紹介されているテクニックは次のとおり。

デフォルト設定 内容
設定ファイルディレクトリ /usr/local/nginx/conf/
主要設定ファイル /usr/local/nginx/conf/nginx.conf
ドキュメントディレクトリ /usr/local/nginx/html/
ログファイルディレクトリ /usr/local/nginx/logs/
HTTPポート TCP 80
HTTPSポート TCP 443
コマンド 内容
nginx -t 設定ファイルの変更をテストする
nginx -s reload 設定の変更を読み込み
nginx -s stop サーバの停止
Nginxセキュアセットアップテクニック 備考
1. SELinux機能を有効にする 典型的には2%-8%ほどのオーバーヘッドが発生する
2. nosuid、noexec、nodevなど権限を限定したパーティションをマウントし利用する
3. /etc/sysctl.confでネットワーク設定を制御する
4. 不要なモジュールはビルドしないように設定してからNginxをビルドして使う
5. バックエンドにApacheを使っている場合にはApache側でmod_securityモジュールを利用してインジェクション攻撃に対処する
6. Nginxに対応したSELinuxポリシーをインストールする
7. ファイアウォールを設定する Iptablesの例を紹介
8. バッファオーバーフロー攻撃対策を設定する
9. 並列接続をNginxHttpLimitZoneモジュールを使って制御する
10. 用意しているドメインへのアクセスのみを許可する
11. 利用するメソッドを制限する RFC 2616で規程されているメソッド
12. 特定のユーザエージェントからのアクセスやリファラースパムを拒否する
13. イメージホットリンクを禁止する
14. ディレクトリアクセスを制限する
15. SSLを利用する
16. PHPセキュリティ設定を適切に実施する
17. 可能であればNginxをJailで実行する FreeBSD Jail、XEN、OpenVZなどが利用できる
18. ファイアウォールレベルで接続を制限する Iptablesおよびpfの例を紹介
19. ファイルパーミッションを適切なものへ設定する
20. 外部への接続をファイアウォールレベルで制限する Iptablesの例を紹介
+. ログファイルのモニタリングと監査サービスの活用 ボーナスティップ

Top 20 Nginx WebServer Best Security Practicesでは具体的な設定ファイルの例やコマンドの例をあげながら説明されている。なお、システムに用意されているパッケージ管理システムからインストールした場合、設定ファイルディレクトリやドキュメントディレクトリのパスはそのOSの流儀に揃えられることになり、デフォルトのパスとはだいぶ異なる点に注意する必要がある。