Google Analytics のスクリプトでエラーが出たときの対処

Google Analyticsを利用するとき、以下のスクリプトを自分のサイトのhead部(<head>〜</head>の間)に貼り付けます。


<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=XX-990000000-1"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'XX-990000000-1');
</script>

※「id=XX-990000000-1」はダミーとして書き換えてます。

このとき、このスクリプトの影響でPHPがエラーになって画面表示ができなくなってしまったときがありました。全部の画面ではなくて一部のPHPファイルです。WEBサーバーのエラーログには「PHP Parse error: syntax error, unexpected 'js' (T_STRING), expecting ',' or ';'」というログが出力がされていました。いろいろ調べてみたところでPHPファイルのどこが悪いのかわからなかったのですが、Google Analyticsのスクリプトのシングルクォートをダブルクォートに変えることでエラーを回避できました。

修正前
gtag('js', new Date());
gtag('config', 'XX-990000000-1');
 ↓
修正後
gtag("js", new Date());
gtag("config", "XX-990000000-1");

ダブルクォートに変えてもGoogle Analyticsの解析結果としてあがってきているのでGoogle AnalyticsのスクリプトでPHPのエラーが出るようなら試してみてください。

Firewalldとfail2banを連携させる。

CentOS7.4の環境でFirewalldとfail2banを連携させてみようと思います。Firewalldで公開しているsshサービスに対してfail2banが実行されるようにします。なおsshの公開ポートは「22」から「50000」に変更しています。rootユーザーで作業します。
前回の記事の続きです。

1. fail2banのインストール

fail2banはepelリポジトリにあるため、まずepelリポジトリのインストールを行います。それからfail2banのインストールを行います。

epelリポジトリのインストール
# yum install epel-release

fail2banのインストール
# yum install fail2ban fail2ban-systemd

2. fail2banの設定ファイルの確認

fail2banをインストールすると「/etc/fail2ban/jail.d」配下に「00-firewalld.conf」、「00-systemd.conf」というファイルができます。それぞれのファイルには以下のような記載があります。

00-firewalld.confの記載内容
====================
[DEFAULT]
banaction = firewallcmd-ipset
====================

00-systemd.confの記載内容
====================
[DEFAULT]
backend=systemd
====================

上記は「fail2banがbanしたときにfirewalldと連携する」および「fail2banがsystemdとも連携する」という設定の記載です。今回はsshのポートを変えているので、その情報もfail2banの設定ファイルに追記する必要があります(後述)。

3. fail2banの設定ファイルの修正

「/etc/fail2ban/jail.d」配下に「00-sshd.conf」というファイルを新規に作成して、以下の内容を書き込みます。

# cd /etc/fail2ban/jail.d
# vi 00-sshd.conf

書き込む内容
====================
[sshd]
enabled = true
port = 50000
blocktype = DROP
====================

「enabled = true」とすることでfail2banでsshの監視を有効にします。「port = 50000」というのはfail2banがsshのデフォルトポートを「22」ではなく「50000」として認識するようにする設定です。最後の「blocktype = DROP」というのはbanの規定回数に達したときにパケットをREJECT(拒否)ではなくDROP(破棄) するという設定です。DROPに変えている理由は、REJECTだと送信元のIPにエラーメッセージを返してしまうためbanしたことを教えてしまうことになり、セキュリティ上良くないからです。

ほかにも「00-sshd.conf」にfindtime、maxRetry、bantimeを設定できます(findtime、maxRetry、bantimeは /etc/fail2ban/jail.conf にデフォルト値が定義されていますが上書きできます)。ちなみにfindtime、maxRetry、bantimeの意味は、findtime秒内にmaxRetry回のsshログインの失敗をしたら、bantime秒ブロックさせる、ということです。

4. fail2banの起動

設定ファイルが作成できたのでfail2banを起動させます。

fail2banの起動
# systemctl start fail2ban

fail2banの自動起動の設定
# systemctl enable fail2ban

fail2banが起動するとsshのログインの監視が始まります。

5. 実際のbanとbanの解除

試しにsshのログインを(規定回数以上)間違えてbanされたかどうか確認してみました。banが発動するとfail2banのログ「/var/log/fail2ban.log」に「NOTICE [sshd] Ban 192.168.1.1」(192.168.1.1はIPアドレス)のログが出ました。banした内容を確認してみます。

banした内容の確認
# fail2ban-client status sshd

結果は以下のように表示されます。


Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	192.168.1.1

手動でbanされたIPアドレスを解除してみます。

banされたIPアドレスの解除
# fail2ban-client set sshd unbanip 192.168.1.1
※「192.168.1.1」はbanされたIPアドレス

もう一度「fail2ban-client status sshd」でbanの状態を確認します。IPアドレスが解除されているのがわかります。


# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	1
   `- Banned IP list: