現象と原因
現象
Concrete5をEC2上にインストールしELB経由でアクセスして、ページを編集しようとログインした後、しばらくするとセッションが切れてしまう。
原因
原因は、ELBのIPアドレス(REMOTE_ADD)がしばしば変わってしまうため、Concrete5のセッションのVaridationで引っ掛かりセッションが無効化されてしまう。Concrete5では管理画面と一般ユーザ閲覧画面の区別がないため、より厳しいセキュリティチェックが行われているようで、同一セッションで接続元IPアドレスが変わる場合にセッションが無効化されてしまう。(セッションハイジャック対策の一部)
ELBの特性として、スケールしたりTTL(デフォで60秒?)が切れたりすると接続先のELBの宛先がコロコロ変わる。そのため、内部IPも変わってしまう。
セキュリティへの取り組み
対策
1.IPアドレスのミスマッチのチェックをオフにしてチェックそのものを無効にしてしまう。
<?php
// application/config/concrete.php
return [
'security' => [
'session' => [
'invalidate_on_ip_mismatch' => false
]
]
];
/application/config/concrete.php
ファイルが無ければ追加、あれば追記。
本体の設定ファイルではない
参考URL:ロードバランサーを通してconcrete5のセッションを維持する
2.ELBの内部IPアドレスを信頼済みIPアドレスとして設定する
ELB経由でアクセスされることを前提にしているのであれば、信頼済みプロキシアドレスとして設定する。
<?php
/**
* Always trust incoming request.
*
* For more detail, see: http://symfony.com/doc/current/cookbook/request/load_balancer_reverse_proxy.html
*/
// Get remote address
$remoteIp = $_SERVER['REMOTE_ADDR'];
return array(
'security' => array(
'trusted_proxies' => array(
'ips' => array($remoteIp),
),
),
);
/application/config/concrete.php
ファイルが無ければ追加、あれば追記。
本体の設定ファイルではない
参考URL:
Cloud9でconcrete5開発環境を作る
How to Configure Symfony to Work behind a Load Balancer or a Reverse Proxy
- Concrete5はSymfony2ベースで作られているので設定等はSymfonyベースのものが基本的に使用できるようだ。
検証環境
Concrete5 5.7.5.6
Amazon AWS ELB
EC2
FYI:設定ファイルの使い方