* [[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