AWStats を SSL(HTTPS)で実行する方法
前提条件
- サーバーに root 権限または同等の権限があること。
- Apache(httpd)がインストール済みであること。
- OpenSSL が利用可能であること(CentOS/RHEL 系の場合は mod_ssl を導入します)。
- AWStats が既にインストールされていること。
重要: 本ガイドは自己署名証明書の作成手順を含みます。本番環境では、可能であれば信頼された認証局(CA)発行の証明書を利用してください。
証明書の作成
OpenSSL がサーバー上にあることを前提に、CentOS/RHEL5 系での手順を例示します。まず mod_ssl をインストールします。
yum install mod_ssl
次に /etc/pki/tls/certs/ ディレクトリに移動して、RSA の秘密鍵と CSR(証明書署名要求)を作成します。下記のコマンドはそのまま実行します。
# openssl genrsa -des3 -out server.key 1024
実行するとパスフレーズを求められます。
Generating RSA private key, 1024 bit long modulus
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
作成した秘密鍵の内容を確認するコマンド(パスフレーズ入力が必要):
# openssl rsa -noout -text -in server.key
CSR を作成します(server.key のパスフレーズを入力):
# openssl req -new -key server.key -out server.csr
プロンプトに従って組織情報を入力します。空欄にしたい場合は “.” を入力できます。例:
Country Name (2 letter code) [GB]:JO
State or Province Name (full name) [Berkshire]:State
Locality Name (eg, city) [Newbury]: Your Location
Organization Name (eg, company) [My Company Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:ns.somewhere.com
Email Address []: [email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: If you hit enter here, it will be empty
An optional company name []:
自己署名証明書を作成します(有効期限は例として 365 日):
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
サンプル出力の一部:
Signature ok
subject=/C=JO/ST=State/L=Your Location/O=My Company/CN=ns.somewhere.com/emailAddress= [email protected] Getting Private key
最後に証明書と鍵、CSR を適切な場所へコピーし、権限を設定します。
# cp server.crt /etc/pki/tls/certs/
# cp server.key /etc/pki/tls/private/
# cp server.csr /etc/pki/tls/private
# chmod go-rwx /etc/pki/tls/certs/server.crt
# chmod go-rwx /etc/pki/tls/private/server.key
# chmod go-rwx /etc/pki/tls/private/server.csr
注: パスワード付きの秘密鍵を使用する場合、Apache の起動時にパスフレーズの入力が必要になります。自動起動を優先する場合は、パスフレーズを削除した鍵を別途用意する手法を検討してください(慎重に管理してください)。
Apache の SSL 設定
httpd.conf(CentOS の場合)に以下を追加して、作成した証明書と鍵を指定します。
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
設定を反映したら、サーバーがポート 443 で LISTEN していることを確認します。/var/www/html/ に移動してから下記コマンドを実行します。
netstat -aunt
出力例:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
重要: 自己署名証明書を使うとブラウザ側で「信頼されていない証明書」と表示されます。本番では CA 発行証明書を推奨します。
AWStats を HTTPS でアクセスできるようにする
AWStats のページへは https:// でアクセスします。自己署名証明書の場合、ブラウザで証明書受け入れのプロンプトが出ます。プロンプトが出ない場合は Apache 設定を見直してください。
.htaccess に AWStats へのリダイレクトを追加する例(インストールパスに合わせて編集してください):
# redirect awstats to https
RewriteCond %{REQUEST_URI} ^/awstats(.*)
RewriteRule ^/rawe/awstats(.*)$ https://example.com/awstats$1 [R,L]
awstats.site.conf(または該当の設定ファイル)内の HTTPS リンクに関する設定を確認・変更します。AWStats はレポート中の HTML リンクを生成する際、デフォルトで “http://“ を使います。HTTPS を使う場合は以下を設定します。
UseHTTPSLinkForUrl
Version : 4.0+
# When AWStats build HTML links in its report pages, it starts thoose link
# with "http://". However some links might be HTTPS links, so you can enter
# here the root of all your HTTPS links. If all your site is a SSL web site,
# just enter "/".
# This parameter is not used if ShowLinksOnUrl is 0.
# Example: "/shopping"
# Example: "/"
# Default: ""
#
UseHTTPSLinkForUrl=""
上記の UseHTTPSLinkForUrl を適切に設定すると、AWStats が生成するリンクを HTTPS に合わせることができます。
AWStats の自動更新(cron)
AWStats を手動で更新する代わりに cron を使って自動化できます。トラフィックが多いサイトでは日次更新を推奨します。crontab を編集します。
$ crontab -e
VIM が開いたら挿入モードに入り、以下の行を追加します(例: 毎日 9:45 に更新)。-confdir=”/etc” は AWStats の設定ファイルがあるディレクトリを指します。
45 9 * */usr/bin/awstats_updateall.pl now -confdir="/etc" -awstatsprog="/var/www/awstats/awstats.pl"
crontab ファイルの最後には空行を入れて保存してください。VIM では Esc を押してから :x または ZZ で保存できます。
代替として、logrotate と組み合わせて更新を行う方法もあります。/etc/logrotate.d に設定を追加する例:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
prerotate
/var/www/awstats/awstats.pl-update -config=somesite.net
postrotate
/etc/init.d/httpd reload > /dev/null 2>&1 || true
endscript
複数設定ファイル向けの cron
複数の AWStats 設定ファイルがある場合、個別に多数の cron ジョブを作るより、awstats_updateall.pl を使うと便利です。改行なしで以下のように設定します。
15 4 * * * perl $HOME/awstats/tools/awstats_updateall.pl now -awstatsprog=$HOME/awstats/cgi-bin/awstats.pl -configdir=$HOME/awstats/cgi-bin/
awstats_updateall.pl は指定ディレクトリ内のすべての設定ファイルを見つけ、awstats.pl を呼び出して更新を行います。awstats.pl を実行できるようにパーミッションを設定してください。
$ chmod 504 awstats/cgi-bin/awstats.pl
この設定により、cron から awstats.pl を実行できるようになります。
AWStats 用アドオンとパフォーマンス最適化
通常、ホスト名解決は DNS を経由して行われ、Apache が dns.txt に情報を入れ、AWStats がそのファイルを利用して訪問元の国やホスト名を解析します。高トラフィックサイトではこの処理が負荷になることがあるため、GeoIP のようなアドオンを活用してパフォーマンス改善を図れます。GeoIP は IP→国情報変換を高速化します。
参考記事: GeoIP Information for AWStats(外部記事)
追加の最適化案:
- statically-generated hostname ファイルを定期的に更新して DNS クエリを削減する
- AWStats の設定で詳細度を下げ、不要な解析をオフにする
- レポート更新頻度を下げる(例: 日次→週次)
トラブルシューティング
よくある問題と対処法:
- ブラウザで「安全でない接続」と表示される: 自己署名証明書のためです。信頼済み CA の証明書を使うか、ブラウザで証明書を明示的に信頼してください。
- Apache がポート 443 を LISTEN していない: SSL モジュールが有効か、httpd.conf の設定ミスがないか確認してください。
- crontab から更新が走らない: PATH やフルパス指定、実行権限を確認してください。cron のログ(/var/log/cron 等)を確認します。
- AWStats のリンクが http のまま: UseHTTPSLinkForUrl を適切に設定し、AWStats のキャッシュ・設定ファイルを再読込してください。
セキュリティ強化チェックリスト
- 信頼できる CA による証明書発行を検討する
- 秘密鍵ファイルの権限を厳格にする(例: 600 または 400)
- 自動起動を妨げないためのパスフレーズ戦略を設計する
- Apache の TLS 設定で強い暗号スイートを有効にする
- HTTPS リダイレクトを強制し、HTTP をブロックまたはリダイレクトする
- AWStats のファイルとディレクトリの権限を適切に設定する
重要: 秘密鍵に対するアクセスは最小権限の原則に従ってください。
ロール別チェックリスト
運用担当者:
- 証明書の更新スケジュールを管理する
- crontab とログローテーションを確認する
開発者:
- AWStats の出力(リンク、外部リソース)を HTTPS に対応させる
- パフォーマンスに影響する設定を評価する
セキュリティ担当:
- TLS 設定と暗号スイートを監査する
- 秘密鍵の管理方法をレビューする
用語集(1語ずつ短い定義)
- SSL: ネットワーク上でデータを暗号化する古い規格。現在は TLS が主流。
- TLS: SSL の後継プロトコル。HTTPS の基盤。
- CSR: 証明書署名要求。証明書を発行するために CA に渡す情報。
- GeoIP: IP アドレスから地理情報を推定するデータベース/モジュール。
まとめ
AWStats を HTTPS 経由で安全に運用するには、証明書の準備・Apache への組み込み・AWStats 側のリンク設定・自動更新の設定(cron)を順に行います。高トラフィック環境では GeoIP などのアドオンやログローテーションを活用してパフォーマンスを最適化してください。最後に、運用フロー(証明書更新、cron の監視、ログ監査)をドキュメント化しておくことを推奨します。
短い行動リスト:
- mod_ssl / OpenSSL をインストールする
- 秘密鍵と CSR を作る
- 証明書を Apache に設定してポート 443 を確認する
- AWStats の UseHTTPSLinkForUrl を設定する
- crontab で自動更新を設定し、テストする