|
~ To be, or not to be, or to forget all. ~ null-i.net |
| Linux/Apacheのインストール | |
|
httpd のソースコードからのビルド(2016-11-22、更新:2017-10-02) 注意:openssl-1.1.0 について†古いopensslとの組み合わせならば問題ないですが、 はじめに(余談)†Webサーバといえば Microsoft IIS や Apache が有名だと思いますが、 ・・・とか2016時点で書いていたのですが、 オプションや新機能は次々に出るので、気長に構築しています。 既存のapache-httpd の確認†まず、入っているかどうかの確認から。 既存のバージョンで満足するならば、yum install でよろしいかと。 # httpd -v # yum info httpd 新たにソースからビルドしたい場合は、パッケージの方は一旦削りましょう。要るファイルがあれば先に退避すること。 # yum remove httpd srcのダウンロード†Apacheのサイト で適当なURLを探してダウンロード。 # cd 任意のディレクトリ # wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.23.tar.gz # wget https://www.apache.org/dist/httpd/httpd-2.4.23.tar.gz.md5 # md5sum httpd-2.4.23.tar.gz b711ea7d8b75dc8bfdf5a5d7e5253088 httpd-2.4.23.tar.gz # cat httpd-2.4.23.tar.gz.md5 b711ea7d8b75dc8bfdf5a5d7e5253088 *httpd-2.4.23.tar.gz ←md5sum と同じ値になること! ・・・当時はmd5sumでしたが、今はもう無いですね。 特に問題なければ、ファイルを展開、makeまで行いますが、 前準備?†apache の ./configure の結果、 checking for APR... no configure: error: APR not found. Please read the documentation. configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/ 色々足りないと言われました。 # ./configure --prefix=aprパッケージ一式を展開したい場所 # make # make test # make install 次は apr-util の展開先で、今度は apr の場所を指定します。 # ./configure --prefix=apr-utilパッケージ一式を展開したい場所 \
--with-apr=さっきaprパッケージ一式を展開した場所
# make
# make test
# make install
PCREも同様 pcre.org から拾ってくる。 # ./configure # make # make check # make install この httpd-2.4.23 時点では OpenSSL 1.1.0 に未対応でした。 ab.c: In function 'main':
ab.c:2357:21: warning: implicit declaration of function 'SSLv2_client_method' [-Wimplicit-function-declaration]
meth = SSLv2_client_method();
最初はオプション指定で行けるかと思って「CFLAGS="-DOPENSSL_API_COMPAT=0x10000000L"」のように互換バージョン指定してみましたが。
結局 make install で ssl_engine_init.c 周りでエラーになりました。
xml/apr_xml.c:35:19: 致命的エラー: expat.h: そのようなファイルやディレクトリはありません #include <expat.h> とか出てしまって、とりあえずノリで「yum info expat」とか打ってみたら make と install†と、いうわけで、ようやく apache-httpd を入れます。 また、以前に apache をビルドした環境がある場合は、そこにある config.nice の内容を参考に、./configure すると良いです。 前述の通り、--with-apr は私の環境の場合は必須。 # ./configure --prefix=Apacheのパッケージ一式を展開したい場所 \
--with-apr=aprパッケージを展開した場所 \
--with-apr-util=apr-utilパッケージを展開した場所
# make
# make install
設定†色々ありますが、あとで随時更新する前提で。 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so # 有効にする
LoadModule auth_digest_module modules/mod_auth_digest.so # ダイジェスト認証が欲しいので有効に
LoadModule ssl_module modules/mod_ssl.so # SSLを使うなら有効にする
LoadModule cgid_module modules/mod_cgid.so # 今回はCGIを使うので有効にする
ServerName 自分のサーバ名orアドレス
<Directory />
Options None # ここを追加
AllowOverride none
Require all denied
</Directory>
<Directory "/usr/local/apache/htdocs">
# Options Indexes FollowSymLinks
Options -Indexes +FollowSymLinks +ExecCGI
# インデックスは消す、CGI可否は自分の環境に合わせること
(中略)
# ログの場所はお好みで。ただし あらかじめ mkdir 等を忘れずに。
ErrorLog /var/log/自分の好きな場所
<IfModule log_config_module>
# Formatはデフォ値で良ければそのまま、私は少し変えました
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#CustomLog "logs/access_log" common # こちらはコメントアウト
CustomLog "/var/log/自分の好きな場所" combined # 有効にして、ログのPATHも変える
(中略)
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
# これ以外にも、いくつか足しています。環境に合わせて設定。
# あと、cgi-bin というPATHは推測できない名前に変えた方が良いかもしれません。
(中略)
<IfModule cgid_module>
Scriptsock cgisock # 有効にする・・・必要ないかも?
(中略)
<Directory "/usr/local/apache/cgi-bin">
# 以下を追加。cgi-bin 配下に置く内容に合わせる。
# あと、前述の通り cgi-bin のPATHは変えてる場合はそれに合わせる
AddType text/css .css
AddHandler text/css .css
AddHandler image/gif .gif
AddHandler image/jpeg .jpg
AddHandler image/png .png
(中略)
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf # SSLを使うなら有効にする
(以下、ファイルの最後に追記)
LimitRequestBody 任意の値 # 必須。無制限はまずいので。
LimitRequestFields 任意の値 # デフォルト値より減らしていいかも
ServerSignature Off # 必須。でも今はデフォルトOffですね
ServerTokens Prod # 必須。バージョンは隠す。脆弱性がバレるので。
TraceEnable Off # 特にOnにする理由がなければ、TRACEメソッドは不許可に。
# 以下の2つはクリックジャッキング対策(frame無効化)
# ブラウザ側が対応していなければ意味は無いのですが、一応。
Header always append X-FRAME-OPTIONS "DENY"
Header always append X-Content-Security-Policy "default-src 'self'; allow 'self'; frame-ancestors *.自分のドメイン"
# 同様に、クロスサイトスクリプティング対策
Header always append X-XSS-Protection "1; mode=block"
extra/httpd-ssl.conf ErrorLog 任意の場所 TransferLog 任意の場所 (必要に応じて色々設定する セキュリティ周りは日々更新が必要なので、適当なタイミングで 最新版のhttpd に差し替えたほうが手っ取り早い気がしています) SSLCertificateFile 任意の場所 SSLCertificateKeyFile 任意の場所 上記の httpd-ssl.conf に合わせて、ひとまずオレオレ証明書を作成 (デフォルト値に合わせると、conf ディレクト配下でこんなかんじで 秘密鍵にパスワードをつけるなら、-nodes は外すこと) # openssl req -new -x509 -days 3650 -nodes -out server.crt -keyout server.key (一応、内容を確認) # openssl x509 -in server.crt -text ・・・と当時はやっていたんですが、今(2018夏頃)は各Webブラウザがhttps必須の流れになっちゃったので、 話を戻して、次は起動スクリプトですが、 ログのローテーションも、同じく古い環境から継承・・・ # cat /etc/logrotate.d/httpd
/var/log/ログのある場所 {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/sbin/service httpd graceful > /dev/null 2>/dev/null || true
endscript
}
firewall (CentOS 7 の場合)†もしファイアウォールで止めている場合は、通信を許可します。 # firewall-cmd --list-all (確認して、なければ追加。以下はゾーンがpublicの場合) # firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --reload # firewall-cmd --list-all 動作確認†init.d が追加済みなら、以下のように。 # service httpd start https はオレオレ証明書なので、大抵のWebブラウザでエラーになりますが、強制的に見ることを選択することはできるかと。 このあと、PHP のインストールの予定です。 バージョンアップ作業†遅ればせながら httpd-2.4.26 以降へバージョンを上げて OpenSSL 1.1.0 対応です。
前回のビルド環境が残っているので、 config.nice をコピーして、そのまま使います。 (まず apr-1.6.x.gz を展開した場所で) # cp [前回の aprの場所]/config.nice . # ./config.nice LDFLAGS=-L/usr/local/lib64 # make # make test # make install (つぎに apr-util-1.6.x で) # cp [前回の apr-utilの場所]/config.nice . # ./config.nice \ --with-openssl=/usr/local \ --with-crypto \ LDFLAGS=-L/usr/local/lib64 # make # make test # make install (さいごに httpd-2.4.2x の直下で) # cp [前回の httpdの場所]/config.nice . # ./config.nice --with-ssl=/usr/local # make # make install あとは再起動して、無事に動きました、が、 ここは紆余曲折の過程なので、読み飛ばしてOKです 最初は、とりあえず httpd のバージョンだけ上げて make してみたのですが、 早速、コンパイルエラーになってしまいました。 httpd-2.4.27/support/ab.c:562: undefined reference to `SSL_in_init' え~・・・reference が undefined な訳は無いのですが・・・ configure:25233: WARNING: Your APR does not include SSL/EVP support. To enable it: configure --with-crypto (中略) configure:26008: checking for OpenSSL configure:26021: checking for user-provided OpenSSL base directory configure:26037: result: /usr/local 指定したディレクトリ(result: /usr/local)を見に行っているっぽいですが、 それを踏まえて、最新の apr と apr-util を入れなおします。*4 ・・・入れなおしましたが、まだ httpd の make でエラーになります。 (ちなみに、makeではなく、起動時に lib64 を読みに行かない場合は、 ・・・バージョン上げるだけなのに随分手間がかかりました、 あと、これはついでなのですが、 (httpd のソースファイル直下で、取得した patchファイルをあてる) # patch -p0 < CVE-2017-9798-patch-2.4.patch (あとは make して、make install) |
|