Azure Application Gateway利用時のApache Access logについて

 

Application Gateway利用時にはバックエンドプール側サーバのログのアクセス元IPが、Application GatewayのローカルIPになります。実IPはX-Forwarded-Forに含まれます。今回はApacheのaccess.logで実IPが表示されるようにしてみました。

1.Application Gateway利用時のログについて

Application Gateway利用時には下記のように、アクセス元IPが、Application GatewayのIPになります。この点は、Azure Load Balancer利用時と挙動が異なります。その為、X-Forwarded-Forの値を使ってアクセス元IPの戻しが必要になります。今回はaccess.logのsyslog化も併せて実施します。

172.21.4.4 – – [16/May/2019:09:54:00 +0900] “GET / HTTP/1.1” 200 17540 “-” “-“
172.21.4.5 – – [16/May/2019:09:54:02 +0900] “GET / HTTP/1.1” 200 17540 “-” “-“
172.21.4.4 – – [16/May/2019:09:54:13 +0900] “GET /favicon.ico HTTP/1.1” 200 – “http://www.tama-negi.com/” “Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36”
172.21.4.4 – – [16/May/2019:09:54:30 +0900] “GET / HTTP/1.1” 200 17540 “-” “-“
172.21.4.5 – – [16/May/2019:09:54:32 +0900] “GET / HTTP/1.1” 200 17540 “-” “-“

2.Apacheの設定変更

Apacheの設定は、httpd.confのLog Formatの変更及び、CustomLog、ErrorLogのsyslog化を行います。Application Gatewayの場合、X-Forwarded-Forにアクセス元のIPが出力されるため、明示的に項目として追加します。

[root@test-vm ~]#cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.`date “+%Y%m%d”`
[root@test-vm ~]#vi  /etc/httpd/conf/httpd.conf

#変更前

ErrorLog “logs/error_log”
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
CustomLog “logs/access_log”

#変更後

  LogFormat “%{X-Forwarded-For}i \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
CustomLog “|/usr/bin/logger -p local6.info -t httpd_access” combined

ErrorLog “|/usr/bin/logger -p local6.info -t httpd_error”

※access log、error log両方local6に出力する設定です。
※Logに出力される日時は、syslog側で付与するので、LogFormatから削除しています。

3.rsyslogファイル作成

rsyslog側の設定を行います。ApacheのLogをlocal6に出力指定したので、local6のファイル出力先を指定します。併せて、messagesの除外にします。

#新規にファイルを作成し、下記を追加する。

[root@test-vm ~]#vi /etc/rsyslog.d/httpd.conf

local6.* /var/log/httpd/access.log

#このままだと、messagesにも表示されてしまうので、rsyslog.confも編集する。

[root@test-vm ~]#cp -p /etc/rsyslog.conf /etc/rsyslog.conf.`date “+%Y%m%d”`

[root@test-vm ~]#vi /etc/rsyslog.conf

#変更前
*.info;mail.none;authpriv.none;cron.none; /var/log/messages

#変更後
*.info;mail.none;authpriv.none;cron.none;local6.none var/log/messages

 

4.Application Gatewayの正常性プローブアクセスをログから除外する

このままだと、Application Gatewayの正常性プローブのアクセスがApacheのアクセスログに表示されてしまいます。ですので、rsyslogのignoreで除外設定を行います。

#新規にファイルを作成し、下記を追加する。

[root@test-vm ~]#vi /etc/rsyslog.d/httpd-logstop.conf

msg, contains, “GET / HTTP/1.1” stop

#※除外の文字列は今回のLogFormatに合わせてます。

 

5.logrotate.dの設定を行う

rsyslog化の設定とともに、Apacheのaccess.logのログローテの設定を行います。設定後、rsyslogおよびhttpdの再起動を行います。

[root@test-vm ~]#cp -p /etc/logrotate.d/httpd /etc/logrotate.d/httpd.`date”+%Y%m%d”`
[root@test-vm ~]#vi  /etc/httpd/conf/httpd.conf

#設定ファイルの中身を下記記載に置き換えます。

/var/log/httpd/access.log {
 daily
 rotate 32
 nocompress
 ifempty
 missingok
 create
 sharedscripts
 postrotate
  /sbin/service httpd graceful > /dev/null 2>/dev/null || true
 endscript
}

#今回は32日保管で、ローテ後圧縮にしています。

[root@test-vm ~]#systemctl restart httpd

[root@test-vm ~]#systemctl restart rsyslog

 

 

6.出力されるログを確認する

設定が完了すると、/var/log/httpd/access.logに、アクセス元のIPが表示されます。

May 27 15:49:39 akbwg-web-01 httpd_access: XXX.XXX.XXX.XXX:XXX “GET /favicon.ico HTTP/1.1” 200 – “http://www.tama-negi.com/2019/05/27/application-gw-01/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36”