* [[Apache]]
#author("2017-12-29T15:25:17+09:00","default:zzr12000","zzr12000")
* [[Apache]] [#b48162ac]
#contents

** インストール
** インストール [#c67233b1]
http://httpd.apache.org/download.cgiよりダウンロード sslを有効にしたい場合は、--enable-sslを付加する。
Digest認証をしたい場合は--enable-auth_digestをつける。圧縮転送をしたい場合は、 --enable-deflateをつける。
WebDevを使いたい場合は、--enable-dav=yes --with-berkeley-db=/usr/local/BerkeleyDB.4.3  またproxyを組み込みたい場合は--enable-proxy,
URLを書き換えたい場合は、--enable-rewrite ModSecurityを使いたかったので、[[--enable-unique-id>http://httpd.apache.org/docs/2.0/ja/mod/mod_unique_id.html]]を付加しました。lpap認証を使いたいかったので、--with-ldap --enable-ldap --enable-auth-ldapを付加してます。ちなみに
./configure --helpを参考に
 tar zxvf httpd-2.0.52.tar.gz
 cd httpd-2.0.52
 ./configure --prefix=/usr/local/apache2 --enable-ssl --enable-so
 --enable-auth_digest --enable-deflate
 --enable-dav=yes --with-berkeley-db=/usr/local/BerkeleyDB.4.3
 --enable-proxy --enable-rewrite --enable-unique-id
 --with-ldap --enable-ldap --enable-auth-ldap --with-included-apr
か、2.2は
 --with-ldap --enable-ldap --enable-authnz-ldap --with-included-apr
全部いきたい場合は
 --enable-module=all --enable-mods-shared=all

 make
 make install
再度インストールする場合は、apacheは止めましょう。ちなみにmakeのときに
 Undefined symbols:
  "_apr_socket_sendfile", referenced from:
      _sendfile_it_all in libmain.a(core_filters.o)    
ってleopardのときエラーになったんですが、次やるとうまくいけました。make cleanしたからかな?~
終了後
 ldd /usr/local/apache2/bin/httpd
で使用しているライブラリをチェックしておきます。
オプションの--enable-deflateをつけた場合は、エラーがでました。http://forums.devside.net/viewtopic.php?t=123と同じエラーです。[[PHP]]を参考にzlibをインストールしてますが、エラーがでます。どうも、/usr/include/zlib.hと/usr/local/include/zlib.hが2ついてこれが原因ぽいです。ですので、とりあえず、/usr/local/include/zlib.hを/usr/local/include/zlib.horgにリネームしてコンパイルしました。後ユーザとグループは
 groupadd httpd
 useradd httpd -g httpd -d /dev/null -s /sbin/nologin
で作成し、httpd.confのuser,groupをhttpdにします。
ついでにaprも入れておきます。http://apr.apache.org/download.cgiより、
 wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.2.12.tar.gz
 wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.2.12.tar.gz
 tar xzvf apr-1.2.12.tar.gz 
 tar xzvf apr-util-1.2.12.tar.gz
 cd apr-1.2.12
 ./configure
 make
 make instal
 cd ../apr-util-1.2.12
 ./configure --with-apr=/usr/local/apr
 make
 make install

** 2.2
** 2.2 [#h6b660c6]
-mod_sslモジュールのRFC 2817対応~
ブラウザが対応していないらしいので、まだ先になるらしいのですが、名前ベースでのバーチャルホストのHTTPSも可能になるそうなので、早く対応してほしいものです。
-ロードバランサ~
[[Apache 2.2でWebサイトをパフォーマンスアップ!>http://www.atmarkit.co.jp/flinux/special/apache22/apache03.html]]~
[[mod_proxy_balancer + mod_disk_cache on Apache 2.2.3>http://d.hatena.ne.jp/solitary_shell/20060830/1156922123]]
** 起動・停止
** 起動・停止 [#p73da9dc]
APACHE_HOME/binで実行
 ./apachectl start
停止は
 ./apacehctl stop
再起動は
 ./apachectl restart
** リバースproxy
** リバースproxy [#dd00c3ee]
http://www.sixapart.jp/movabletype/developers/naoya/archives/2004/10/apache_20_mod_p.html
** 独自のディレクトリ作成
** 独自のディレクトリ作成 [#sc9f48ed]
APACHE_HOME/conf/httpd.confに追加します。
 Alias /test /usr/local/test
 <Directory /usr/local/test>
  Options All MultiViews
  AllowOverride All
 </Directory>
ちなみに特定のURLにディレクティブを設定したい場合は、Locationを使います。
またcgiを動かしたい場合は、/usr/local/testに.htaccessを作り
 Options +ExecCGI +MultiViews
を追加します。
ちなみに、
 <Directory /usr/local/test> 
  Options All     対象となるフォルダのオプション
  AllowOverride None .htaccessで別の指定を許可するかどうか
  Order allow,deny  許可と不許可の評価の順番 
  Allow from all     許可の範囲 Allow from 192.168.0とか、 Allow from 192.168.0.0/24とか 
                     .co.jpとか  複数の場合はスペースで allow fromを複数行でも可
 </Directory> 
で、optionsの設定は、
 All MultiViewsを除くすべてのオプションが有効
 None すべて無効
 ExecCGI CGIスクリプトの実行を許可
 FollowSymLinks シンボリックリンクへアクセス許可
 Includes サーバサイドのインクルード許可
 IncludesNoExec サーバサイドのインクルード許可するがコマンドは禁止
 Indexes ディレクトリ一覧を表示
 
SSLだけ許可したい場合は、
 SSLRequireSSL 


** 承認
** 承認 [#f7988cb2]
-Basic承認~
.htaccessファイルを作成し、
 AuthType Basic  <--Basic認証
 AuthUserFile /etc/test.conf <--IDとパスワードが設定されているファイル
 AuthName test   <--ダイアログの名前
 require valid-user <--AuthUserFileのファイルにあればOK
   その中でも制限したい場合は、valid-user cat,birdであればcat,birdのみ
 Satisfy any
 <Files ~ "^.(htpasswd|htaccess)$">
 deny from all
 </Files>
最後はリターンを入れないようにしてください。
Satisfy anyは、「ホスト制限を通過する」あるいは「パスワード認証を通過する」のどちらかひとつを満たせば、コンテンツが見れます。パスワードファイルの作り方は、
 /usr/local/apache2/bin/htpasswd -bc test.conf admin passwd
この-cは新しく作成します。-bはパスワード含んでいるということです。~
参考 こちらよりAuthUserFileが作成できます。http://www.chama.ne.jp/access/index.htm
-Digest承認~
ではDigestの設定をみていきましょう。Basic 認証は平文なので覗き見されたら終わりです。このDigest認証は暗号化されているために盗聴に強くなってます。
 htdigest -c passwdfile authname username
あとは.htaccessです。
 AuthDigestFile /passwdfile <-AuthUserFileではない。
 AuthName authname  <-htdigestと同じにしておく
 AuthType Digest
 Require valid-user
動かしてみると、なんとログに
 Digest: uri mismatch
とでてます。調べているとどうもIE6の問題のような... test.cgi?name=aaaとかクエリがある場合にだめみたいです。 
http://issues.apache.org/bugzilla/show_bug.cgi?id=27758~
2.0.52のソースをみているとどうもpatchはあたっているようです。mod_auth_digest.cの1610行あたりにコメントが書いてありました。となると、これはhttp://httpd.apache.org/docs-2.0/mod/mod_auth_digest.htmlをみると、httpd.confに
 BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
を追加するといけました。
-MySQL承認~
つ次はMySQLを使った認証です。これはまた便利に使えそうです。http://sourceforge.net/projects/modauthmysql/からダウンロードしました。解凍後コンパイルします。ダウンロード後、コンパイルです。
 apxs -c -L/usr/local/mysql/lib/mysql -I/usr/local/mysql/include/mysql
 -lmysqlclient -lm -lz mod_auth_mysql.c
この-L,-Iはmysqlの環境を確認してください。またapxsはwhichでどこにあるかを確認しておいてください。複数apacheが入っている場合は、フルパスで指定します。ではインストールです。
 apxs -i mod_auth_mysql.la
コンパイルがうまくいっているとmod_auth_mysql.laができています。これはapache2.xの場合で、1.xの場合は、mod_auth_mysql.soとしてやります。詳細は、BUILDファイルを参照してみてください。ではhttp.confを修正します。
 LoadModule mysql_auth_module modules/mod_auth_mysql.so
ではapacheの再起動です。
 apachectl restart
次にMySQLに承認用のDBとテーブルをつくっていきましょう。DBもテーブルも項目名もどうでもいいです。これは、.htaccessで対応づけます。
 create database webauth;
 GRANT SELECT ON webauth.* to webauth@localhost identified by 'yourpasswd';
 use webauth
 create table auth_user (
  name varchar(50) not null,
  pass varchar(50) not null,
  active varchar(1) not null,
  primary key (name)
 );
後はデータを適当にインサートしておきます。では.htaccessを編集しましょう。
 AuthName "mysql auth"    :タイトル
 AuthType Basic           :Basic承認
 require valid-user
 AuthMySQLHost localhost  :MySQLのホスト
 AuthMySQLDB webauth      :MySQLのDB
 AuthMySQLUser webauth    :MySQLにログインするユーザ
 AuthMySQLPassword yourpasswd :MySQLにログインするパスワード
 AuthMySQLUserTable auth_user :承認用のテーブル
 AuthMySQLNameField name      :MySQLの名前のフィールド
 AuthMySQLPasswordField pass  :MySQLのPasswordのフィールド
 AuthMySQLCryptedPasswords Off :未調査
 #AuthMySQLKeepAlive        Off  :未調査
 #AuthMySQLAuthoritative    On   :未調査
 #AuthMySQLNoPasswd         Off  :未調査
 AuthMySQLUserCondition "active=1"
AuthMySQLUserConditionはおもしろいです。SQLにこの条件がついてくれます。

参考:[[Apacheによるアクセス制限>http://info.odic.ne.jp/server/apache/access.html]]~

**mod_rewrite
**mod_rewrite [#hb8a3ca5]
ディレクトリを移動したい場合、そのディレクトリに.htaccessファイルを作り、
 RewriteEngine on
 RewriteBase /hoge/
 RewriteRule ^(.*)$ /hogehoge/$1 [R=301,L]
また/hogeでも移動させたい場合は、ルートに
 RewriteEngine on
 RewriteRule /hoge$ /hogehoge/index.html [R=301,L]
クエリはRewriteRuleでは置換してくれないので、
 RewriteEngine On
 RewriteBase /
 RewriteCond %{QUERY_STRING} ^aaa=(.*)$
 RewriteRule ^hoge/hoge1.php /hoge/hoge2/hoge3.php?bbb=%1 [R=301,L]

参考:~
http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html~
http://japache.infoscience.co.jp/rewriteguide/~

** mod_deflate
** mod_deflate [#h731979e]
[[mod_deflateによるコンテンツの圧縮転送>http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04a.html]]~

**mod_authnz_ldap
**mod_authnz_ldap [#c85c5416]
ldap認証です。httpd.confに
 <Location /svn>
  DAV svn
  SVNParentPath /usr/local/svn-rep
  AuthType Basic
  AuthName test
  AuthBasicProvider     ldap
  AuthzLDAPAuthoritative        off
  AuthLDAPURL   ldap://localhost/ou=sales,o=example,c=jp?uid
  require valid-user
 </Location>
とか。2.0と2.2でちょっと違いますね。上記のサンプルはwebdavも使った2.2です。~
2.0で.htaccessに書いた場合
 AuthType Basic
 AuthLDAPUrl ldap://localhost/ou=People,dc=my-domain,dc=com?uid
 AuthName test
 require valid-user

[[ApacheのLDAP認証>http://sy2920.s151.xrea.com/web/auth-ldap.html]]~
[[Apacheで作るファイルサーバ(LDAP認証編)>http://www.atmarkit.co.jp/flinux/rensai/apache2_07/apache07a.html]]2.0の場合はこちらを参考に~
[[mod_authnz_ldap>https://cvs.apache.jp/svn/httpd-docs/2.2/manual/mod/mod_authnz_ldap.xml.ja]]~
[[そろそろLDAPにしてみないか?>http://gihyo.jp/admin/serial/01/ldap/0007]]~
** CGI実行
** CGI実行 [#o68740a5]
大きくは2通り httpd.confに
 ScriptAlias /cgi-bin/ /webroot/cgi-bin/
もしくは.htaccessに
 SetHandler cgi-script or AddHandler cgi-script .cgi .pl
 Options +ExecCGI
とする。AddHandlerについては拡張子を指定する場合で、SetHandlerは拡張子に関係なく実行させたい場合です。ただしOptionsで指定できるのは、AllowOverrideの指定によるので、確認しておく。

メール送るサンプル
 #!/usr/bin/perl
 $sendmail = '/usr/sbin/sendmail';
 $from = 'from@hoge.jp';
 $to = 'to@hoge.jp';
 $subject = 'test';
 $msg = <<"_DATA_";
 message
 _DATA_
 # sendmail
 open(SDML,"| $sendmail -t -i") || die 'sendmail error';
 # mailhead
 print SDML "From: $from\n";
 print SDML "To: $to\n";
 print SDML "Subject: $subject\n";
 print SDML "Content-Transfer-Encoding: 7bit\n";
 print SDML "Content-Type: text/plain;\n\n";
 # mail
 print SDML "$msg";
 # end
 close(SDML);

** FastCGI
** FastCGI [#vc1b398e]
Rubyを動かしたいので、インストールしてみました。
 wget http://www.fastcgi.com/dist/fcgi.tar.gz
 tar xzvf fcgi-2.4.0.tar.gz
 cd fcgi-2.4.0
 ./configure
 make
 make install
 ldconfig
このfcgiはThe Development Kitなので、いらないような気もしますが、とりあえずいれてます。ではmod_fastcgiです。
 wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
 tar xzvf mod_fastcgi-2.4.2.tar.gz
 cd mod_fastcgi-2.4.2
READMEを読んで、
 For information on installing mod_fastcgi with Apache 2.x, see the file INSTALL.AP2.
とあるので、INSTALL.AP2を読みます。
 cp Makefile.AP2 Makefile
 make
 make install
すると/usr/local/apache2/modules/にmod_fastcgi.soが出来てました。ではhttpd.confに
 LoadModule fastcgi_module modules/mod_fastcgi.so
 <IfModule mod_fastcgi.c>
    FastCgiIpcDir /tmp/fcgi_ipc/
    AddHandler fastcgi-script .fcgi
 </IfModule>
を付け加えて、再起動です。
 FastCGI: access for server (uid -1, gid -1) failed: read not allowed
 FastCGI: can't create dynamic directory "/tmp/fcgi_ipc/dynamic": access for server (uid -1, gid -1) failed: read not allowed
こんなエラーが出る場合は、
 chown -R httpd:httpd fcgi_ipc
 chmod -R 777 fcgi_ipc
として権限をつけておいてやるか、
 <IfModule mod_fastcgi.c>
    FastCgiIpcDir /tmp/fcgi_ipc/
    AddHandler fastcgi-script .fcgi
 </IfModule>
を、
 User httpd
 Group httpd
と定義してある下に書いてやります。

** ログ
** ログ [#tf11dc3c]
インストールしたら、ログの設定は変更しておきましょう。
APACHE_HOME/conf/httpd.confで
 #CustomLog /usr/local/apache/logs/access_log common
コメントし、
 CustomLog /usr/local/apache/logs/access_log combined
を生かします。

** ワームのログをはずす
** ワームのログをはずす [#i6fb60bf]
APACHE_HOME/conf/httpd.confで
 #画像ファイル,CSSはログをとらない
 SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)$" nolog
 #ローカルIPからのはログはとらない
 SetEnvIf Remote_Addr 192.168.100. nolog
 #wormのログは別ログへ
 SetEnvIf Request_URI "^/_mem_bin/" worm nolog
 SetEnvIf Request_URI "^/_vti_bin/" worm nolog
 SetEnvIf Request_URI "^/c/" worm nolog
 SetEnvIf Request_URI "^/d/" worm nolog
 SetEnvIf Request_URI "^/msadc/" worm nolog
 SetEnvIf Request_URI "^/MSADC/" worm nolog
 SetEnvIf Request_URI "^/scripts/" worm nolog
 SetEnvIf Request_URI "^/default.ida" worm nolog
 SetEnvIf Request_URI "root\.exe" worm nolog
 SetEnvIf Request_URI "cmd\.exe" worm nolog
 SetEnvIf Request_URI "NULL\.IDA" worm nolog
 CustomLog logs/access_log combined env=!nolog
 CustomLog logs/worm_log combined env=worm
ついでにSEARCHで始まるやたら長いアクセスも除外します。414のエラーがそれです。
 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
を
 LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
に変更しておきましょう。

**日本語が化ける
**日本語が化ける [#b9b68415]
%%#AddDefaultCharset ISO-8859-1%%~
%%AddDefaultCharset none%%~
%%またLanguagePriorityにjaをせっていして日本語の優先度をあげます。%%~
 AddDefaultCharset Off
noneなんて指定なかったんですね。なぜこんなことを覚えてしまったんでしょう。マニュアルを読まずに検索エンジンに頼ってしまった結果です。ちょっと他のも見直してみます。またLanguagePriority は、「MultiViews リクエストを扱うときに、クライアントが優先順位を提供していない場合の 言語の優先順位を設定します」と書いてあるので、関係ないです。またAddDefaultCharsetはデフォルトでOffなので、
 #AddDefaultCharset ISO-8859-1
でもいいです。これでも化けるページがありました。
 <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
と設定してあるのに。調べると、<title>が<meta>より上にきているページでした。
http://web-sniffer.net/などでHTTP Response Headerを確認してみましょう。

http://httpd.apache.org/docs-2.0/mod/core.html#adddefaultcharset
**VirtualHostの設定
**VirtualHostの設定 [#n3c550be]
httpd.confに
 NameVirtualHost *:80
 <VirtualHost *:80>
    ServerName www.j2se.org
    ServerAlias j2se.org
    DocumentRoot H:\webroot1
    <Directory "H:\webroot1">
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    CustomLog "H:\webroot1\logs\access.log" combined
    ErrorLog "H:\webroot1\logs\error.log"
 </VirtualHost>
 <VirtualHost *:80>
    ServerName www.hidekazu.info
    ServerAlias hidekazu.info
    DocumentRoot H:\webroot2
    <Directory "H:\webroot2">
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    CustomLog "H:\webroot2\logs\access.log" combined
    ErrorLog "H:\webroot2\logs\error.log"
 </VirtualHost>
としてやると、www.j2se.orgとwww.hidekazu.infoの2つ出来上がりました。このとき元のhost(hidekazu.dhs1.sst.ne.jp)にはpukiwiki/pukiwiki.phpがあって、www.j2se.orgにはない場合、www.j2se.org/pukiwiki/pukiwiki.phpとすれば、どうなるのでしょうか。
この場合は、表示されます。つまりwww.j2se.orgにない場合は、通常の設定があればそれを使用するのです。ですので、VirtualHostではなく通常の設定を消してしまえば、どこにもないので、表示はされません。ただこのときtomcatと連携している場合は、tomcatは表示されます。これは、tomcatのserver.xmlのHostの設定によります。
見せたくない場合は、server.xmlの<Hostで始まっているタグでname="localhost"とあるのですが、これを
 <host name="hidekazu.dhs1.sst.ne.jp" ....
とします。次に、Apacheと連携しているということは、workers2.propertiesがあると思いますので、これに、[uri:/home/*]となっていたのを
 [uri:hidekazu.dhs1.sst.ne.jp/home/*]
と変更してやります。するとwww.j2se.orgからはhomeは見えなくなります。~
ServerAlias hidekazu.infoとしていますが、この設定がない場合は、hidekazu.infoでアクセスされた場合、最初のバーチャルホストのホームページが
みえてしまいますので、エリアスを設定しています。
またVirtualHostが増えていくと管理がやりにくくなりますので、ここは別のファイルで管理します。apacheのディレクトリの下に
 mkdir vhosts
として、VirtualHost用のディレクトリを作成します。
その中に適当にVirtualHostごとにファイルを作成します。上の例でいくと、j2se.confと、hidekazu.confで作成しました。その中身は<VirtualHost *:80>から</VirtualHost>までです。ファイルの中身が書き終えましたら次は、http.confを修正します。<VirtualHost *:80>以下を消します。その代わりに、
 Include vhosts/*.conf
を設定しておきます。するとそのvhostsにあるファイルを読み込んでくれるので、管理が少し楽になります。設定は
 httpd -t -D DUMP_VHOSTS
で確認してください。

[[Apache の設定 - 1つのホストで複数のhttp/httpsサーバを運用する>http://www.web-ware.org/np/apacheconf.html]]

** SSL
** SSL [#a7b4ac4d]
インストールされてない場合は、http://www.openssl.org/source/からダウンロードしましょう。apacheのconf以下に、ssl.confがありますので、これのSSLCertificateFileとSSLCertificateKeyFileを参照してください。SSLCertificateFileが証明書を示しており、SSLCertificateKeyFileが秘密鍵を示しています。デフォルトでは、conf/server.crtとconf/server.keyです。もしかしたら、server.crtとserver.keyはssl.crtとssl.keyだたかもしれません。ではconf/server.keyで
 openssl md5 * > rand.dat
 openssl genrsa -rand rand.dat -des3 1024 > server.key 
[[SSL]]のCSR参照
次に、CSRを作ります。CSRとは、サイト証明書を発行するためのリクエストになります。confの下で作業します。
 openssl req -new -x509 -days 365 -key ssl.key/server.key -out myserver.crt
 (openssl req -new -key ssl.key/server.key -out myserver.crt ベリサリンの場合)
 Country Name             (2 letter code) [GB]:JP<リターン>
 State or Province Name   (full name)     [Berkshire]:Osaka
 Locality Name            (eg, city)      [Newbury]:Osaka-shi
 Organization Name        (eg, company)   [My Company Ltd]:Kaisya Co.
 Organizational Unit Name (eg, section)   []:IT
 Common Name              (eg, your name or your server's hostname)[]:test.com
 Email Address            []:test@test.com
-days 証明書の有効期限を設定
承認局を使わず自分で承認する場合は、このファイルをssl.crtにserver.crtにして保存しておきましょう。
他局で承認してもらう場合はmyserver.crtを送りましょう。
です。ではapacheを立ち上げましょう。
 apachectl startssl
ここでEnter pass phrase:と聞かれますので、秘密鍵でいれたキーを入力します。
またこのパスワード聞かれると困る方は(自動起動で)
 openssl rsa -in server.key -out server.key
で作成してください。またinit.dはdaemon /usr/local/apache2/bin/httpd -D SSLにしておいてください。

-ベリサリン(高い。ただしメジャー)で
 openssl md5 * >rand.dat
 openssl genrsa -rand rand.dat -des3 1024 > server.key
 cd ..
 openssl req -new -key ssl.key/server.key -out myserver.crt

-Toritonで(安い。3年で2万くらい)
契約ができると3つのファイルが送られてくる。
 GTECyberTrustRoot.crt
 ComodoSecurityServicesCA.crt
 www_hogehoge_jp.crt
www_hogehoge_jp.crtを
 conf/ss.crtにserver.crtで保存
GTECyberTrustRoot.crtを
 conf/sslrootに保存
ComodoSecurityServicesCA.crtを
 conf/sslrootに保存
保存すると後は、ssl.confで
 SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
 SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
 SSLCACertificatePath /usr/local/apache2/conf/sslroot
 SSLCACertificateFile /usr/local/apache2/conf/sslroot/COMODOSECURITYSERVICESCA.CRT
というように設定をしてやる。ただ安さと引き替えに携帯電話での問題がありますので、この辺はコストパフォーマンスを考えながら選択することになります。~
参考:[[携帯電話とSSLルート証明書>http://triaez.kaisei.org/~kaoru/ssl/cell.html]]~


http://ash.jp/sec/openssl_ca.htm~
http://www.stackasterisk.jp/tech/systemConstruction/apache09_01.jsp~
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/702apachessl.html
http://www.atmarkit.co.jp/fnetwork/rensai/pki03/pki01.html~
http://www.atmarkit.co.jp/flinux/rensai/apache12/apache12a.html~
http://www.atmarkit.co.jp/fnetwork/rensai/pki01/pki01.html~
http://www.bitlink.co.jp/server/httpd_conf.htm~
** クライアント証明書
** クライアント証明書 [#z3df9bb5]
[[SSL]]で方法は記述していますが、phpのプログラムを動かすと、
 ページを表示できません
とIEで表示されました。FireFoxでは
 Method Not Allowed
と表示されるときがあります。ログを見てみると、
 [error] SSL Re-negotiation in conjunction with POST method not supported! hint: try SSLOptions +OptRenegotiate
とありますので、SSLOptions +OptRenegotiateをつけてトライしたのですが、現象は変わらず。調べておりましたら、
apacheのバグらしく、2.2では直っているとのこと。使っているのは2.0でした。んーー うなっていてもしょうがないので、
http://issues.apache.org/bugzilla/show_bug.cgi?id=12355を参考にパッチを当てるか、postをgetに変えましょう。
一応2.0.54用ですが、下に添付してあります。ssl_engine_io.c,mod_ssl.h,ssl_engine_kernel.c
参考 http://framework.g.hatena.ne.jp/tukiichi/comment?date=20070214
** 拒否
** 拒否 [#jc5bff99]
ドメインで拒否する場合
 deny from .hoge.com .hoge2.com
IPで拒否する場合
 deny from 100.200. … 100.200.で始まるアドレスを拒否する
うまくいかないときはAllowOverride Noneになっていなか確かめましょう。

** SSI
** SSI [#c06b8764]
.htaccessに
 Options +IncludesNoExec
 AddType text/html .shtml
 AddHandler server-parsed .shtml
として、インクルードしたいファイルに
 <!--#include file="test2.htm"-->
と記述します。IncludesNoExecをIncludes にすることも可能ですが、この場合EXECコマンドが使えるので、セキュリティを考慮してください。

** 帯域制限
** 帯域制限 [#eb2364ee]
mod_bandwidthは1.3で2.0には対応していないらしいので、bwshareをインストールしてみます。ただ、for Apache 1.3.x and 2.0.44となっているので、2.0.53はどうなんでしょうか。http://www.topology.org/src/bwshare/README.html

[[既存のトラフィック制御モジュール>http://www.netnice.org/pukiwiki.php?%B4%FB%C2%B8%A4%CEApache%A5%C8%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%C0%A9%B8%E6%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB#content_1_0]]~
[[ Apache で特定のコンテンツへのアクセスに対して帯域制限しよう>http://labs.unoh.net/2007/11/apache.html]]
** ab
** ab [#bea05272]
Apache BenchというApacheのベンチマークツールです。たとえば
 ab -n 100 -c 10 -w http://localhost/index.html > kekka.html
とすると100回のリクエストを10の同時接続でテストします。 -A user:passwordを追加すれば認証のあるページもテストできます。

http://www.atmarkit.co.jp/flinux/rensai/apache15/apache15b.html
** セキュリティ
** セキュリティ [#d80fe74b]
とりあえずこちらを一読[[Apacheの安全を確保するための10の対策>http://builder.japan.zdnet.com/news/story/0,3800079086,20386932,00.htm]]
***Apacheのバージョン情報を隠す
***Apacheのバージョン情報を隠す [#lf564624]
 ServerSignature Off
http://www.ne.jp/asahi/tokyo/shin/linux/apache/apache01.html
***情報の抑止
***情報の抑止 [#c413a88d]
 ServerTokens Prod
デフォルトはFullなので、Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 なことを教えちゃいます。
http://httpd.apache.org/docs/2.2/ja/mod/core.html#servertokens~
もっと消したい場合は、[[バナー抑制!>http://www.kozupon.com/security/banner.html]]を参考に
***mod_security
***mod_security [#d0e791f5]
Web Application Firewall (WAF)というもので、これはapacheに組み込んで使うのですが、ホストのチェックやURLパラメータチェック、POSTチェック等をしてくれます。ぜひ組み込んでおきましょう。
マニュアルです。http://hp.vector.co.jp/authors/VA027424/mod_security/v_1_9_stable_ja_.html~
http://www.modsecurity.org/download/index.htmlよりダウンロードしました。
 wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
 tar xzvf modsecurity-1.8.7.tar.gz
 cd modsecurity-1.8.7
1.9.4がでてますが、同じようにします。
ここにINSTALLファイルがありますので、一読しておきましょう。
 cd apache2
apache1系の場合はcd apache1です。
 /usr/local/apache2/bin/apxs -cia mod_security.c
するとhttpd.confに
 LoadModule security_module    modules/mod_security.so
が設定されていると思います。~
2.1.1もでてますね。あれ、だいぶんちがうなー まず、mod_unique_idがいるので、apacheを--enable-unique-idでコンパイルします。
オプションでlibxml2がいるみたいので、入れておきます。http://xmlsoft.org/のhttp://xmlsoft.org/downloads.htmlよりダウンロードします。
 ftp://xmlsoft.org/libxml2/libxml2-2.6.28.tar.gz
 tar xzvf libxml2-2.6.28.tar.gz
 cd libxml2-2.6.28
 ./configure --with-zlib --with-html --with-xpath --with-xptr --with-xinclude
 make
 make install
ではmodsecurity-apache_2.1.1をインストールしましょう。
 wget http://www.modsecurity.org/download/modsecurity-apache_2.1.1.tar.gz
 tar xzvf modsecurity-apache_2.1.1.tar.gz
次にapache2ディレクトリにある、Makefileを編集します。
 #top_dir      = /apps/apache22
 top_dir      = /usr/local/apache2
 INCLUDES=-I/usr/include/libxml2
ではインストールです。
 make
 make install
すると/usr/local/apache2/modulesにmod_security2.soができてますので、httpd.confに
 LoadModule security2_module modules/mod_security2.so
を追加します。apacheを再起動したら、
 Cannot load /usr/local/apache2/modules/mod_security2.so into server: /usr/local/apache2/modules/mod_security2.so: undefined symbol: xmlFree
と怒られましたので、
 LoadFile /usr/lib/libxml2.so
を追加しました。
ではルールをhttp://www.modsecurity.org/download/modsecurity-core-rules_2.1-1.4.tar.gzよりダウロードし、
 mkdir /usr/local/apache2/conf/modsec
 cd /usr/local/apache2/conf/modsec
 tar xzvf modsecurity-core-rules_2.1-1.4.tar.gz
とし、httpd.confに
 <IfModule security2_module>
   Include conf/modsec/*.conf
 </IfModule>
を付け加えておきます。http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdfに1系からの移行についてまとめがあります。

ではhttpd.confに設定します。1系
 <IfModule mod_security.c>
  SecFilterEngine On  <-フィルターエンジンをON
  SecFilterScanPOST On <- POSTの解析をON
  SecFilterDefaultAction "deny,log,status:406" <-デフォルトのアクションの設定です。denyで拒否し、logでログに残し、エラー画面は406です。
  SecFilter /etc/passwd <-index.html?/etc/passwdとかリクエストにこの文字列が入っている場合はエラーです。
 # script tag 
  SecFilter "<[[:space:]]*script.*>"
  SecFilter "<[[:space:]]*style.*>"
  SecFilter "<[[:space:]]*link.*>"
  SecFilter "<[[:space:]]*body[[:space:]]*>"
 # suspected protocol
  SecFilter "javascript:"
  SecFilter "vbscript:"
  SecFilter "about:"
 # call script
  SecFilter "expression\("
  SecFilter "&{.*};"
 # event
  SecFilter "onError"
  SecFilter "onUnload"
  SecFilter "onBlur"
  SecFilter "onFocus"
  SecFilter "onClick"
  SecFilter "onMouseOver"
  SecFilter "onMouseOut"
  SecFilter "onSubmit"
  SecFilter "onReset"
  SecFilter "onChange"
  SecFilter "onSelect"
  SecFilter "onAbort"
 #
  SecFilterSelective REQUEST_METHOD "!(GET|POST|HEAD)" <-リクエストがGET,POST,HEAD以外はエラー
  SecAuditEngine RelevantOnly <-RelevantOnlyでルールと一致したものがログに落ちます。
  SecAuditLog /usr/local/apache2/logs/modsec.log <-ログ
 </IfModule>
一部単語の最後の文字が全角になってますが、これはそのままですと引っかかって登録できないので変えてます.... またルールについては、下記のURLから参考にさせてもらいました。WebDAVの場合はメソッドで、COPY,MKCOL,MOVE,PROFIND,PROPATCH,LOCK,UNLOCK,DELETE等追加しないと動きません。
またhttp://www.modsecurity.org/download/modsecurity-rules-current.tar.gzからダウンロードして、
解凍した*.confを
 apache2/conf/modsec/
にでもコピーして
 Include conf/modsec/*.conf
としておけば、logsディレクトリに
 modsec_audit.log
が出力されます。ただし
 SecFilterSignatureAction "log,pass,msg:'Command execution attack'"
のようにpassになってますので、denyにでも変えておきます。
もっと厳しくするには、~
http://www.gotroot.com/tiki-index.php?page=mod_security+rules~
よりダウンロードしましょう。
ブラックリストのルールがあります。~
http://www.atmarkit.co.jp/fsecurity/rensai/webhole11/webhole01.html~
http://www.atmarkit.co.jp/fsecurity/rensai/webhole12/webhole02.html~
http://www.softek.co.jp/Sec/mod_security3.html~
http://hp.vector.co.jp/authors/VA027424/mod_security/mod_security_manual_v_1_8_4_ja_.html#40~

***DOS対策
***DOS対策 [#n53a347e]
mod_evasiveをhttp://www.zdziarski.com/projects/mod_evasive/よりダウンロードします。Apache2の場合
 wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
 tar xzvf mod_evasive_1.10.1.tar.gz
 cd mod_evasive
 /usr/local/apache2/bin/apxs -i -a -c mod_evasive20.c
するとhttpd.confに
 LoadModule evasive20_module   modules/mod_evasive20.so
が追加されていました。ではディレクティブです。
 <IfModule mod_evasive20.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
 </IfModule>
またオプションとして、
 Optionally you can also add the following directives:
    DOSEmailNotify      you@yourdomain.com
    DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
    DOSLogDir           "/var/lock/mod_evasive"
も指定出来るそうです。このあたりの細かい内容はREADMEに記述してあるのですが、上記の設定では、
同ページで、1秒間に(DOSPageInterval)に2回以上(DOSPageCount)、
もしくは同サイトで1秒間に(DOSSiteInterval)に50回以上(DOSSiteCount)リクエストがあった場合に、
10秒(DOSBlockingPeriod)ブロックすると言ったような設定になります。~
http://d.hatena.ne.jp/stanaka/20070204/1170553603~
http://itpro.nikkeibp.co.jp/article/COLUMN/20070510/270527/~

***libwww-perl
***libwww-perl [#b75bb1d2]
ログを見ていると、スパムでユーザエージェントにlibwww-perl/5.65とかやってくる場合があります。Googleでははじいているようですので、
はじいちゃいましょう。
 SetEnvIf User-Agent "^libwww" deny_ua
 Order allow,deny
 Allow from all
 Deny from env=deny_ua
ついでにLWP::Simpleも止める場合は、
 SetEnvIf User-Agent "^LWP::Simple" deny_ua
を追加しておきます。
[[Googleにもアクセス拒否され、スパム送信源と化した「libwww-perl」とは?>http://gigazine.net/index.php?/news/comments/20070410_libwww/]]~

***ロボット
***ロボット [#la897ed4]
ロボットに巡回してほしくない場合に、サイトのトップにrobots.txtを作成します。
 User-agent: *
 Disallow: /secret/
ただ無視する検索エンジンもあります。
参考~
[[robots.txt とは?>http://www.tohoho-web.com/wwwxx079.htm]]~
[[検索エンジンロボットを制御する>http://tech.bayashi.net/pdmemo/robots.html]]~
** TIPS
***インストールされているモジュールを調べる
** TIPS [#mc1782a4]
***インストールされているモジュールを調べる [#zbfa82f4]
 httpd -l
あと
 httpd -M
とか。
***httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerNameというエラーがでた。
***httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerNameというエラーがでた。 [#q4a75a54]
httpd.confのservernameを直しましょう。
***Indexリストで特定のファイルを非表示にしたい。
***Indexリストで特定のファイルを非表示にしたい。 [#m1ce3047]
IndexIgnore *.hoge
***ヘッダ、フッタをすべてのページにつけたい
***ヘッダ、フッタをすべてのページにつけたい [#ea0d63a8]
SSI以外にmod_layoutが使えるかもしれません。ちょっと使ってないので、わからないですが。他にもphpでヘッダや、フッタをincludeするとか。どれが一番楽でしょうね。
***File 'NONEXISTENT/charsets/?.conf' not found 
***File 'NONEXISTENT/charsets/?.conf' not found [#s4315fcc]
エラーログにエラーが出まくってました。どうもphpをインストールするとき、--with-mysql=/usr/local/mysqlをつけてなかったからみたいです。詳しくは、
http://www.hamusuta.net/mame/viewkizione.php?kizino=04022940416e4111521
***プロセスIDの指定
***プロセスIDの指定 [#a2f9b38b]
 PidFile logs/httpd.pid
***起動中のhttpdに設定を反映させる~
***起動中のhttpdに設定を反映させる~ [#j4901458]
 apachectl graceful
***別のURLに転送させたい
***別のURLに転送させたい [#ecf63579]
Redirectを使います。
http://www.itmedia.co.jp/help/tips/linux/l0397.html
***HTTPメソッドで制限をかけたい
***HTTPメソッドで制限をかけたい [#b97162b5]
GETとPOSTを制限したい場合は.htaccessで
 <Limit GET POST>
  order deny,allow
  deny from all
  allow from 192.168.1
 </Limit>
とか
***追加でモジュールを入れたい
***追加でモジュールを入れたい [#i4a13a64]
たとえばmod_rewrite
 cd httpd-2.0.54
 mkdir work
 cp -ip modules/mappers/mod_rewrite.c work/
 cp -ip modules/mappers/mod_rewrite.h work/
 cd work
 /usr/local/apache2/bin/apxs -c mod_rewrite.c
 /usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la
mod_proxy
 cd httpd-2.0.54
 mkdir work
 cp -ip modules//proxy/mod_proxy.c work/
 cp -ip modules//proxy/mod_proxy.h work/
 cd work
 /usr/local/apache2/bin/apxs -c mod_proxy.c
 /usr/local/apache2/bin/apxs -i -a -n proxy mod_proxy.la
ん?動かしたらエラーがでたぞ。
 [warn] proxy: No protocol handler was valid for the URL /hoge. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
これだけではだめなのか。では
 /usr/local/apache2/bin/apxs -cia mod_proxy.c proxy_util.c
 /usr/local/apache2/bin/apxs -cia proxy_connect.c
 /usr/local/apache2/bin/apxs -cia proxy_http.c
で動きました。素直に--enable-proxyをつけてコンパイルしましょう。
***IPアドレス制限とユーザー認証
***IPアドレス制限とユーザー認証 [#i6aaf6c3]
Satisfyを使います。
[[IPアドレス制限とユーザー認証の組み合わせ>http://www.adminweb.jp/apache/allow/index7.html]]~
*** RDF(Resource Description Framework)を開きたい
*** RDF(Resource Description Framework)を開きたい [#de0897be]
 AddType application/xml .rdf
 AddType text/xml;charset=UTF-8 .rdf
** リンク
** リンク [#g8e23819]
http://httpd.apache.org/~
[[Apache HTTP サーバ バージョン 2.0 ドキュメント>http://httpd.apache.org/docs-2.0/]] 調べるときに~
[[Apache2 に OpenSSL を適用するための覚え>http://www.rinzo2.jp/~rinzo/apache_ssl/apache_and_ssl_00.htm]]~
[[Apache バーチャルホスト説明書>http://httpd.apache.org/docs/vhosts/]]~
[[パソコンおやじ>http://acorn.zive.net/~oyaji/]]~
[[Apacheのインストール>http://www.ryouto.jp/linux/linux_34.html]]~
[[Studying HTTP>http://www.studyinghttp.net/]] HTTPの勉強に~
[[Apache 2.0 + mod_proxy によるリバース・プロキシの構築>http://www.sixapart.jp/movabletype/developers/naoya/archives/2004/10/]]~
[[Apache入門>http://www.adminweb.jp/apache/]]~
[[mod_concat で複数ファイルを連結して配信する>http://d.hatena.ne.jp/sfujiwara/20081105/1225871055]]~
[[.htaccessで使える16の技>http://phpspot.org/blog/archives/2008/12/htaccess16.html]]~
[[web開発者なら知っておきたい HTTPステータスコード>http://blog.livedoor.jp/ld_directors/archives/51170061.html]]
** 参考書籍
** 参考書籍 [#l571994e]
[[Apache2設定&管理 逆引きリファレンス>http://www.amazon.co.jp/exec/obidos/ASIN/4774117714/worried-22]]~
このアドバンスリファレンスシリーズは辞書代わりにつかうのは大変便利です。ほかのも買ってしまいました。

** カテゴリ
** カテゴリ [#u4a36522]
[[:web]]~

** コメント
** コメント [#j27d099e]
-http://ore.dyndns.org/web/RTFM.html -- [[通りすがりの人]] &new{2005-02-20 (日) 15:11:35};

--#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS