いよいよ大晦日ですね。
何もしないうちにあっという間に大晦日。
今年も一年お世話になりました。
さて、今年の年末年始はエンジニアとしての「カン」を取り戻すべく、
サーバーと格闘することになりそうです。
レンタルサーバーでVPSを借りて、
Apache2.4.3のインストールを無事終わらせました。
前回、インストールしてとりあえずIt works!の表示がされるようになりました。
ただ、このまま運用するのはセキュリティー上危険です。
いくつか必要な設定をしちゃいましょう。
そういえば、SEO対策をする人と同様にセキュリティー対策をする人多いですね。
@ITでもセキュリティー対策している方がいました。
第1回 Apache 2.0の必須設定と基本セキュリティ対策
http://www.atmarkit.co.jp/flinux/rensai/apache2_01/apache01a.html
大辞泉
セキュリティー【security】
1 安全。また、保安。防犯。防犯装置。「―システム」2 担保。3 有価証券。債券。
セキュリティー対策をするのは悪意のあるハッカーさんやクラッカーさんだと
思います。いつもすごく気になる一言です。
さて、話を戻して、さくっと設定していきましょう。
まず、Apacheなのですが、このまま運用すると、HTTPレスポンスヘッダの中に
Apacheのバージョンが表示されます。
PHPを入れるとPHPのバージョン情報まで表示してくれます。
実際、インストールしたてのサーバーにアクセスしてみると、
しっかり、出ています。
この後、PHPを入れるとこうなります。
え?何が問題なの?という方。
今は最新の安定バージョンを入れているのであまり問題になりません。
この後、常にセキュリティ情報に目を配り、セキュリティホールが発見されたのを
いち早く察知して、バージョンアップ等の対策を取っていけば
あまり大きな問題にはならないでしょう。
でも、24時間365日セキュリティ情報に目を配り、
万全な管理体制ができているのでなければ、放置されるのはよくあること。
ましてや個人で借りたレンタルサーバーなら尚更です。
今使っているバージョンのミドルウェアでセキュリティホールが見つかり、
対策されずにそのままになっている。
そんな中、セキュリティホールがあるバージョンのApache使ってますよ。
と宣言するのは、この家鍵かかってませんよ!と家に看板を付けるのと同じです。
なのでバージョンを隠す必要があるんですね。
設定は、httpd.confでServerTokens ProductOnlyを追加します。
はじめ、の中に記載したらそこじゃないと怒られたので、
ServerNameの下に下記の記載を追加しました。
ここに、
を追加します。
初期設定では記載されていないようです。設定が無い場合にはすべての情報を表示する
Fullが設定されているのと同じふるまいをします。
ここに、1つバグが潜んでました。
この値、configtestをしても、設定値が正しいかどうかチェックしてくれません。
間違えて、ProdctOnlyとか書くと、Fullと同じふるまいをしてくれます。
http://comments.gmane.org/gmane.comp.apache.httpd.bugs/6272
記載内容は間違えないように気をつけましょう。
設定が終わったら、保存してApacheを再起動します。
再起動したら、ちゃんと消えているかどうか確認します。
表示されなくなりました。
ちなみに、2.2系より前のapacheを使っているようでしたら、
ServerSignature off
の設定の追加もお忘れなく。
ServerTokens ProductOnlyの下に記載すると動作します。
2.2以降であれば、明示的に
ServerSignature on
と設定しない限り表示されませんが、2.2より前のApacheでは
エラー画面にApacheのバージョン情報が表示されます。
ちなみにここに出力される情報にもServerTokens の設定内容が反映されます。
続いて、TRACEメソッドを無効にしておきます。
TRACEメソッドはHTTP/1.1から追加されたメソッドで
受け取ったリクエストをそのまま返す、テスト等に使われるメソッドです。
詳しくはRFC2068で説明されています。
http://lab.moyo.biz/translations/rfc/rfc2068-ja.xsp#9.8
TRACEメソッドが有効になっていると、XST(Cross-Site Tracing)という手法で、
HTTPヘッダー情報が漏えいしてしまう危険性があります。
とは言え、レポートによると現状問題になりうるブラウザーはIE6.0のみとのこと。
不要なメソッドは無効にするに限ります。
TRACEメソッドの現状
www.gsx.co.jp/tts/activity/110413.pdf
TRACEメソッドを無効にするにはhttpd.confに
TraceEnable off
の記載を追加します。
先ほどのServerTokens ProductOnlyの下に記載すると動きます。
この下に
を追加します。
終わったら例によってApacheの再起動
試してみると、405 Method Not Allowedが返ってきます。
これでOK。
取り急ぎ、やっておくべきApacheのセキュリティ関係の設定は終わりです。
最期に自動起動の設定をしておきます。
Apacheには自動起動のためのひな形が用意されているので、コピーします。
そしてファイルのパスを実態に合わせて変更します。
を以下の内容に変更
を以下の内容に変更
を以下の内容に変更
を以下の内容に変更
終わったら、実行権限を付与して、サービス一覧に追加します。
これでOK。
そして、Apache2.4系から変わったバーチャルホストの設定で
更にはまってしまいました。
再び続く。
引っ張っているわけではないのですが、記事が長くなりすぎました。
何もしないうちにあっという間に大晦日。
今年も一年お世話になりました。
さて、今年の年末年始はエンジニアとしての「カン」を取り戻すべく、
サーバーと格闘することになりそうです。
レンタルサーバーでVPSを借りて、
Apache2.4.3のインストールを無事終わらせました。
前回、インストールしてとりあえずIt works!の表示がされるようになりました。
ただ、このまま運用するのはセキュリティー上危険です。
いくつか必要な設定をしちゃいましょう。
そういえば、SEO対策をする人と同様にセキュリティー対策をする人多いですね。
@ITでもセキュリティー対策している方がいました。
第1回 Apache 2.0の必須設定と基本セキュリティ対策
http://www.atmarkit.co.jp/flinux/rensai/apache2_01/apache01a.html
大辞泉
セキュリティー【security】
1 安全。また、保安。防犯。防犯装置。「―システム」2 担保。3 有価証券。債券。
セキュリティー対策をするのは悪意のあるハッカーさんやクラッカーさんだと
思います。いつもすごく気になる一言です。
さて、話を戻して、さくっと設定していきましょう。
1.Apacheのバージョン情報の隠ぺい
まず、Apacheなのですが、このまま運用すると、HTTPレスポンスヘッダの中に
Apacheのバージョンが表示されます。
PHPを入れるとPHPのバージョン情報まで表示してくれます。
実際、インストールしたてのサーバーにアクセスしてみると、
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 14:21:48 GMT
Server: Apache/2.4.3 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 14:21:48 GMT
Server: Apache/2.4.3 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
しっかり、出ています。
この後、PHPを入れるとこうなります。
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 30 Dec 2012 09:04:56 GMT
Server: Apache/2.4.3 (Unix) PHP/5.4.10
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
HTTP/1.1 200 OK
Date: Sun, 30 Dec 2012 09:04:56 GMT
Server: Apache/2.4.3 (Unix) PHP/5.4.10
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
え?何が問題なの?という方。
今は最新の安定バージョンを入れているのであまり問題になりません。
この後、常にセキュリティ情報に目を配り、セキュリティホールが発見されたのを
いち早く察知して、バージョンアップ等の対策を取っていけば
あまり大きな問題にはならないでしょう。
でも、24時間365日セキュリティ情報に目を配り、
万全な管理体制ができているのでなければ、放置されるのはよくあること。
ましてや個人で借りたレンタルサーバーなら尚更です。
今使っているバージョンのミドルウェアでセキュリティホールが見つかり、
対策されずにそのままになっている。
そんな中、セキュリティホールがあるバージョンのApache使ってますよ。
と宣言するのは、この家鍵かかってませんよ!と家に看板を付けるのと同じです。
なのでバージョンを隠す必要があるんですね。
設定は、httpd.confでServerTokens ProductOnlyを追加します。
# cd /usr/local/apache2/conf
# vi httpd.conf
# vi httpd.conf
はじめ、
ServerNameの下に下記の記載を追加しました。
186 ServerName (IPアドレス)
187
187
ここに、
188 ServerTokens ProductOnly
を追加します。
初期設定では記載されていないようです。設定が無い場合にはすべての情報を表示する
Fullが設定されているのと同じふるまいをします。
ここに、1つバグが潜んでました。
この値、configtestをしても、設定値が正しいかどうかチェックしてくれません。
間違えて、ProdctOnlyとか書くと、Fullと同じふるまいをしてくれます。
http://comments.gmane.org/gmane.comp.apache.httpd.bugs/6272
記載内容は間違えないように気をつけましょう。
設定が終わったら、保存してApacheを再起動します。
# /usr/local/apache2/bin/apachectl configtest
# /usr/local/apache2/bin/apachectl restart
# /usr/local/apache2/bin/apachectl restart
再起動したら、ちゃんと消えているかどうか確認します。
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 30 Dec 2012 09:03:17 GMT
Server: Apache
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
HTTP/1.1 200 OK
Date: Sun, 30 Dec 2012 09:03:17 GMT
Server: Apache
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
表示されなくなりました。
ちなみに、2.2系より前のapacheを使っているようでしたら、
ServerSignature off
の設定の追加もお忘れなく。
ServerTokens ProductOnlyの下に記載すると動作します。
2.2以降であれば、明示的に
ServerSignature on
と設定しない限り表示されませんが、2.2より前のApacheでは
エラー画面にApacheのバージョン情報が表示されます。
ちなみにここに出力される情報にもServerTokens の設定内容が反映されます。
2.TRACEメソッドの無効化
続いて、TRACEメソッドを無効にしておきます。
TRACEメソッドはHTTP/1.1から追加されたメソッドで
受け取ったリクエストをそのまま返す、テスト等に使われるメソッドです。
詳しくはRFC2068で説明されています。
http://lab.moyo.biz/translations/rfc/rfc2068-ja.xsp#9.8
TRACEメソッドが有効になっていると、XST(Cross-Site Tracing)という手法で、
HTTPヘッダー情報が漏えいしてしまう危険性があります。
とは言え、レポートによると現状問題になりうるブラウザーはIE6.0のみとのこと。
不要なメソッドは無効にするに限ります。
TRACEメソッドの現状
www.gsx.co.jp/tts/activity/110413.pdf
TRACEメソッドを無効にするにはhttpd.confに
TraceEnable off
の記載を追加します。
先ほどのServerTokens ProductOnlyの下に記載すると動きます。
# cd /usr/local/apache2/conf
# vi httpd.conf
# vi httpd.conf
186 ServerName (IPアドレス)
187
188 ServerTokens ProductOnly
187
188 ServerTokens ProductOnly
この下に
189 TraceEnable off
を追加します。
終わったら例によってApacheの再起動
# /usr/local/apache2/bin/apachectl configtest
# /usr/local/apache2/bin/apachectl restart
# /usr/local/apache2/bin/apachectl restart
試してみると、405 Method Not Allowedが返ってきます。
HTTP/1.1 405 Method Not Allowed
Date: Mon, 31 Dec 2012 09:49:07 GMT
Server: Apache
Allow:
Content-Length: 223
Content-Type: text/html; charset=iso-8859-1
Date: Mon, 31 Dec 2012 09:49:07 GMT
Server: Apache
Allow:
Content-Length: 223
Content-Type: text/html; charset=iso-8859-1
これでOK。
取り急ぎ、やっておくべきApacheのセキュリティ関係の設定は終わりです。
最期に自動起動の設定をしておきます。
自動起動設定
Apacheには自動起動のためのひな形が用意されているので、コピーします。
# cp /usr/local/src/httpd-2.4.3/build/rpm/httpd.init /etc/rc.d/init.d/httpd
そしてファイルのパスを実態に合わせて変更します。
26 # config: /etc/sysconfig/httpd
を以下の内容に変更
26 # config: /usr/local/apache2/conf/httpd.conf
60 httpd=${HTTPD-/usr/sbin/httpd}
を以下の内容に変更
60 httpd=${HTTPD-/usr/local/apache2/bin/apachectl}
61 pidfile=${PIDFILE-/var/run/${prog}.pid}
を以下の内容に変更
61 pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
67 CONFFILE=/etc/httpd/conf/httpd.conf
を以下の内容に変更
67 CONFFILE=/usr/local/apache2/conf/httpd.conf
終わったら、実行権限を付与して、サービス一覧に追加します。
# chmod +x /etc/rc.d/init.d/httpd
# chkconfig --add httpd
# chkconfig httpd on
# chkconfig --add httpd
# chkconfig httpd on
これでOK。
そして、Apache2.4系から変わったバーチャルホストの設定で
更にはまってしまいました。
再び続く。
引っ張っているわけではないのですが、記事が長くなりすぎました。