おれおれSSLを入れてみた

SSLを入れてテストしたいことがあったので自分でSSL証明書を用意して入れてみました(おれおれSSL)
Ubuntu 12.04のApacheで試しました

鍵と証明書を作成します
$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
参考) http://d.hatena.ne.jp/ozuma/20130511/1368284304

好きなディレクトリへ作った証明書と鍵を移動
$ sudo mkdir /etc/apache2/ssl
$ sudo mv server.key /etc/apache2/ssl/
$ sudo mv server.crt /etc/apache2/ssl/

Apacheのsslを有効に
$ sudo a2enmod ssl
$ sudo service apache2 restart

$ sudo vim /etc/apache2/sites-available/default-ssl
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

$ sudo a2ensite default-ssl
$ sudo service apache2 reload

で https://localhost/ にアクセス
あやしい証明書なので、警告がでますが許可すればアクセスできました

シンボリックリンク攻撃を基礎からおさらい

シンボリックリンク攻撃を超基礎から整理します

<環境>
Centos
Apache 2.2.15

まずは、Apacheでのアクセス権限について整理


/var/www/html/test/index.html

というフォルダを参照するとき
apacheグループ所属のapacheユーザーがアクセスにきます

WEBブラウザで参照するときに必要になるのは


/var/www/html/test/ → x 実行権限
/var/www/html/test/index.html → r 読み取り権限

シンボリックリンク攻撃の一例を試してみます

下記の通り、ファイルがあるとして


drwx------   apache apache test
drwx------   apache apache test/index.php
drwx-----x   user   user   test2
drwx---r--   user   user   test2/index.php

http://(server ip)/test/index.php
は見れるし

symlink1

http://(server ip)/test2/index.php
も見れます

symlink2

test/index.phpのソースは普通は見れませんが


cd test2
ln -s ../test/index.php test.txt

とシンボリックリンクを作って


drwx------   apache apache test
drwx------   apache apache test/index.php
drwx-----x   user   user   test2
drwx---r--   user   user   test2/index.php
lrwxrwxrwx   user   user   test.txt -> ../test/index.php

http://(server ip)/test2/index.txt
とすると

symlink3

ソースが見えてしまいます。
恐ろしい…

防ぐにはhttpd.confか.htaccessでのFollowSymLinksを無効にすればいいです


Option -FollowSymLinks

また、SymLinksIfOwnerMatchを有効にすると
所有ユーザーが同じファイルのシンボリックリンクが有効になります


Option -FollowSymLinks SymLinksIfOwnerMatch

上記例での http://(server ip)/test2/index.txt
のアクセスは


drwx------   apache apache test/index.php
lrwxrwxrwx   user   user   test.txt -> ../test/index.php

所有ユーザーが違うので

symlink4

アクセスできなくなります

[Apache]URLを書き換える例

WEBページへアクセスした時のURLを書き換えてみます

<環境>
Centos 6
Apache 2.2

.htaccessを使うか、httpd.confに直接書きます

1.
http://example.com/sample or http://example.com/sample/
のアクセスを
http://example.com/sample.html
にする


RewriteEngine On
RewriteCond %{REQUEST_URI} ^/sample/?$
RewriteRule ^(.*)$ http://example.com/sample.html [L,R]

REQUEST_URIはスラッシュ(/)付きで始まります
RewriteCondの「/?」は、「/」が0個か1個かという意味、
RewriteRuleの[L]=ここで終わり、[R]=リダイレクトの意味です

2.
http://example.com/
のアクセスを
http://blog.example.com/
にする


RewriteCond %{HTTP_HOST} ^example\.com(:80)?
RewriteRule ^(.*)$ http://blog.example/$1 [L,R=301]

3.
http://example.com/
のアクセスを
http://blog.example.com/
にするが
http://example.com/sample.html
は、そのままアクセスさせる


RewriteCond %{HTTP_HOST} ^example\.com(:80)?
RewriteCond %{REQUEST_URI} !^/sample.html?
RewriteRule ^(.*)$ http://blog.example/$1 [L,R=301]

RewriteCondの「!^/sample.html?」の「!」は否定で、sample.htmlへのアクセス以外になります

—-

うまくいかないときはログを見ましょう
ログを出すには
httpd.conf


RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 9

と記載


service httpd reload

などして、Apacheに設定を読み込ませます

ログの確認が終われば、httpd.confの記載はとっておきましょう
ログが出続けてしまいます

[Apache]faviconのerror_logを出ないようにする

Apacheでは、faviconを用意していないと
画面アクセスのたびにerror_logにfaviconがないとエラーがでる

[plain]
[Wed Aug 07 16:23:02 2013] [error] [client x.x.x.x] File does not exist: /var/www/html/sample/favicon.ico
[/plain]

<環境>
Apache 2.2.15

404にリダイレクトしてやる下記の方法か

[plain]
Redirect 404 /favicon.ico
<Location /favicon.ico>
ErrorDocument 404 "No favicon"
</Location>
[/plain]

favicon作って、設置か
(samplefavicon.iconを作りました)

[plain]
RewriteEngine On
RewriteCond %{REQUEST_URI} "favicon.ico$"
RewriteRule "(.*)(favicon.ico$)" /icons/samplefavicon.ico [N,PT]
[/plain]

解決