質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • CentOS

    3080questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

CENTOSのアクセスログがおかしくなりました

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,388

T.Yokotani

score 133

お世話になります。

NiftyCloudのサーバにおいてSSLを更新設定したところ、いままでhtaccessを用いて接続元制限を行ったいたのですが、それができなくなってしまいました。
また、アクセスログにIPアドレスが出なくなってしまったため、どのIPからアクセスがあったのかも分からない状況です。他社から引き継いだ案件で詳細をいただけておらず、不明な設定が存在しています。

関係ありそうな部分だけピックアップして公開させていただきます。
どなたか、こういった状況を打開する方法はご存じないでしょうか?

まずは、IPアドレスだけでも解決できるとよいのですが・・・
何卒よろしくお願いいたします。

■OS

[root@localhost httpd]# cat /etc/redhat-release
CentOS release 6.6 (Final)

■httpdのバージョン

[root@localhost httpd]# /usr/sbin/httpd -v
Server version: Apache/2.2.15 (Unix)


■ログフォーマット

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%h\"" combined_with_realip

■SSL導入前までのログ

xx.xx.79.150 - - [01/Aug/2016:12:13:40 +0900] "POST アクセス先 HTTP/1.1" 200 61 "リファラー" "Mozilla/5.0

■SSL導入後のログ

- - - [02/Aug/2016:21:29:23 +0900] "GET アクセス先 HTTP/1.1" 403 300 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" "身に覚えのないIPアドレス"

※IPアドレス制限をかけているため認証エラー

追記
■vhosts.conf

<VirtualHost *:80>
   ServerName www.ドメイン
   ServerAlias ドメイン
   DocumentRoot "/home/www/html"
   ServerAdmin admin@root-d.com
   <Directory "/home/www/html">
       Options -Indexes FollowSymLinks ExecCGI +IncludesNoExec
       AllowOverride all
       #Require all granted
       #Satisfy Any
   </Directory>

   RewriteEngine on
   RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
   RewriteRule .* - [F]

   CustomLog "|/usr/sbin/rotatelogs /home/www/logs/apache/access_log.%Y%m%d 86400 540" combined_with_realip
   ErrorLog  /home/www/logs/apache/error_log
</VirtualHost>

<VirtualHost *:443>
  ServerName www.ドメイン:443
  DocumentRoot "/home/www/html"
  ServerAdmin admin@root-d.com

  ErrorLog /home/www/logs/apache/ssl_error_log
  TransferLog /home/www/logs/apache/ssl_access_log
  LogLevel warn
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
  SSLCertificateFile    /etc/httpd/conf.d/ssl/server.crt
  SSLCACertificateFile  /etc/httpd/conf.d/ssl/ca.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/server.key

  <Files ~ "\.(cgi|shtml|phtml|php3?)$">
       SSLOptions +StdEnvVars
  </Files>
  <Directory "/home/www/html">
       SSLOptions +StdEnvVars
       AllowOverride all
  </Directory>
  SetEnvIf User-Agent ".*MSIE.*" \
           nokeepalive ssl-unclean-shutdown \
           downgrade-1.0 force-response-1.0
#  CustomLog logs/ssl_request_log \
#            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
   CustomLog "|/usr/sbin/rotatelogs /home/www/logs/apache/ssl_request_log.%Y%m%d 86400 540" combined

  <Directory /home/www/html/share/uploads/mw-wp-form_uploads>
    SetEnvIf X-Forwarded-For "99\.999\.99\.99|999\.999\.999\.999|999\.999\.999\.999" allowIP
    Satisfy Any
    Order deny,allow
    Deny from all
    Allow from env=allowIP
  </Directory>
</VirtualHost>


※ドメイン名とアクセス許可IPは伏せさせていただきました。
ほかにもディレクトリ毎に.htaccessでX-Forwarded-Forを用いたアクセス制限をしています。
今回の減少はこのX-Forwarded-Forの判定がうまくいかなくなってしまったことが原因です。
Allow from all
にすればアクセスできないところが使用できるようになります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina_dev

    2016/08/02 23:16

    80番ポート、443番ポート 両方のVirtualHost ディレクトリ部分を掲載してください。
    (コードのマークダウンでかこってね)

    キャンセル

  • asahina_dev

    2016/08/02 23:17 編集

    また 403なので認証かかってません!! アクセス制限エラー(閲覧権限なし)です

    キャンセル

  • T.Yokotani

    2016/08/03 19:29

    X-Forwarded-Forでアクセス許可設定をしているので、まさにここで引っかかっているかと思います。
    ログを修正して、IPアドレスを取得するところから始めてみます。

    キャンセル

回答 2

checkベストアンサー

+1

SSL設定および SSLサーバー証明書は Apache httpd に対して行なったのではなく、ロードバランサーの SSLアクセラレーターを利用しているのではないでしょうか。
その場合、Apache httpd から見た接続元はロードバランサーの IPアドレスになると思います。

ログフォーマットは combined_with_realip になっているようですが、X-Forwarded-for にオリジナルの接続元IPアドレスが設定されて、ログの先頭の「●」箇所に記録されていませんでしょうか。

 (2016/08/03 17:03) 追記

HTTP(80番ポート)のログ access_log.* の書式は combined_with_realip、
HTTPS(443番ポート)のログ ssl_request_log.* の書式は combined と設定されています。

「SSL導入前のログ」を見ると、combined のように見えます。
HTTP(80番ポート)のログの書式が combined だった、かつ、ロードバランサーを経由せずに直接クライアントからの接続を受けていたということですか?

「SSL導入後のログ」を見ると、combined_with_realip のように見えます。
https:// でアクセスしたときも access_log.* に記録されているのですよね?
ロードバランサーで SSL を終端し、ロードバランサーと Apache httpd 間は HTTP(80番ポート)で通信していると思います。
「身に覚えのないIPアドレス」は ロードバランサー に記載の IPアドレス範囲に含まれるものではないでしょうか。

上記仮定が合っているとすると、SSL の場合にロードバランサーから X-Forwarded-for が渡されていないことが原因と思います。
ロードバランサーの仕様によると思いますので、NiftyCloud に問い合わせてみては?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/03 11:07

    ロードバランサーは使用していますが、SSLの設定自体はサーバ本体に行っています。
    「ログの先頭の「●」箇所」というのがちょっとわかりませんでした。もう少し具体的にご指摘いただけるととても助かります。。。
    不勉強で申し訳ありません。

    キャンセル

  • 2016/08/03 17:03

    回答に追記しました。
    編集前の質問をこちらのブラウザで見たときに、「SSL導入後のログ」のログの先頭が「-」ではなく「●」と見えたのですが、見間違えかもしれません。

    キャンセル

  • 2016/08/03 19:27 編集

    なるほどですね。
    ありがとうございます。
    asahina_dev様にも同じ指摘をいただきましたので、試してみます!
    ありがとうございます。

    追記いただきました部分ですが、https:// でアクセスしたときは
    ssl_request_log.%Y%m%d
    に出力されるようです。
    ちなみに今回は引き継ぎ資料は接続情報のみ・・・というレベルでした。
    基本的にサーバが落ちた時だけくらいしか作業がないと聞いていたので・・・・

    X-Forwarded-forとLBの関係についてはNiftyCloudに改めて問い合わせてみます!

    キャンセル

  • 2016/08/04 00:32

    https:// の場合、ssl_request_log.* に記録されるとのことですが、その時のログが「SSL導入後のログ」なのですか?
    ssl_request_log.* の書式は combined_with_realip なのですか???
    わからなくなりました。

    ロードバランサーの SSLアクセラレータを利用している場合は HTTP となるようです (http://cloud.nifty.com/cs/catalog/cloud_faq/catalog_120416000899_1.htm) ので、ssl_request_log.* に記録されるということはロードバランサーを経由せずに直接アクセスが
    あるということかもしれません(X-Forwarded-For が付かない)。
    ホスト名を DNS で名前解決すると、サーバーの実IPアドレスが返ってきたりしませんでしょうか。

    キャンセル

  • 2016/10/20 16:34

    時間がたっており申し訳ございません。こちらまだ未解決なのですが、TaichiYanagiya様のおっしゃられている通りでございます。
    今のところ、一旦特殊なことはせずとりあえず動くようにしてあります。。。
    この辺は難しいですね。。。

    キャンセル

0

CustomLog "|/usr/sbin/rotatelogs /home/www/logs/apache/access_log.%Y%m%d 86400 540"      combined_with_realip
CustomLog "|/usr/sbin/rotatelogs /home/www/logs/apache/ssl_request_log.%Y%m%d 86400 540" combined

で出力フォーマットが違うので http と https が同一ログフォーマットではないですね。

なので combined → combined_with_realip と変更すればフォーマットが同じになるかと思います。

また http アクセスの先頭は プロキシサーバーのIP なので 外部からのアクセスの場合は - ですね

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/03 19:28

    こちら試してみます!
    ありがとうございます。

    キャンセル

同じタグがついた質問を見る

  • CentOS

    3080questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。