skimemo


skimemo - 日記/2020-02-17

_ Laravel5.6.9以上に移行すると419エラーが出る

_ 概要

手元のシステムはLaravel5.4で動いていました。
これを最新の6.xに移行したとき、頻繁に419 Session Expireエラーが出るようになった話です。

_ 原因

原因は、Session::regenerate()でした。
セッションIDの再生成はセキュリティの観点から推奨される処理です。 このregenerate()ですが、Laravel5.6.9から、実行時にCSRF TOKENも再生成されるようになりました。

regenerate the token on session regeneration

件のシステムは画面遷移時にほぼ毎回Session::regenerate()を実施していたため、エラーでredirect()->back()で戻った際などにTOKENが再利用される場合、419エラーが発生していたのでした。
regenerate処理のソースを見ると、

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
/**
 * Generate a new session identifier.
 *
 * @param  bool  $destroy
 * @return bool
 */
public function regenerate($destroy = false)
{
    return tap($this->migrate($destroy), function () {
        $this->regenerateToken();
    });
} 

となっていて、migrate()実施後にトークンを作り直しているので、「Session::regenerate()」を「Session::migrate()」とすることで回避しました。
アクセス修飾子は public ですがマニュアルには載っていないので、一応自己責任で・・・。

Category: [Linux] - 16:24:18


_ さくらのクラウドで突然ネットワークが繋がらなくなった設定ミスの話

検索しても何も出ないので恐らく皆さんそんなアホな事はしないのだと思いますがハマったので一応メモ・・・(._.)φ

_ 事件概要

さくらのクラウド(石狩第一リージョン)で新しくサーバーを立てまして、CentOS7系の最新であった7.7をプリセットから入れました。
サーバー作成後、パケットフィルタを一から作成して、最小限のポート(22,80)だけを空け、ssh経由で色々設定しておりました。

2,3日経った頃、設定作業を行っていると突然sshが切断され、以降繋がらなくなりました。慌ててコンソールから入ってみると、IPアドレスがありません。

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet6 fe80::****:****:****:****  prefixlen 64  scopeid 0x20<link>
       ether **:**:**:**:**:**  txqueuelen 1000  (Ethernet)
       RX packets 61085  bytes 3813838 (3.6 MiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 2195  bytes 1087830 (1.0 MiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10<host>
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 303  bytes 26360 (25.7 KiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 303  bytes 26360 (25.7 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

なんと言うことでしょう。これはさくらの障害か?

_ 結論

結論を先に言います。原因はいい加減なパケットフィルタでした。
さくらのクラウドはクラウドレベルでパケットフィルタを設定できますが、ここではポート22,80ぐらいしか空けていませんでした。ところが、サーバーは自身のIPアドレスをDHCPで取得しており、これがudp/68を使うため、DHCPの更新ができず、IPアドレスが消失してしまったという事象でした。パケットフィルタに「udp 68 allow」を設定して無事解決しました。

packet68.png

パケットフィルタのプリセットにudp/68が入っていて、「なんだろうこれー」と思ったまま放置してしまったのが敗因(?)でした。名探偵コナンばりに、少しでも「あれれー?」と思った事はきちんと調べましょう。

_ 原因に関する情報

この原因に気づいたのは、ログでした。

Feb 17 14:39:40 localhost dhclient[1265]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 17 (xid=0x1d63c663)
Feb 17 14:39:41 localhost NetworkManager[604]: <warn>  [1581917981.4975] dhcp4 (eth0): request timed out

以前建てたさくらのクラウドのサーバーは静的IPだったため遭遇しなかったのですが、今回建てたサーバーはDHCPでIPアドレスを取得していたため、IPアドレス更新のタイミングでIPアドレスが取れなくなり、ネットワーク接続が消失してしまったのでした。

サーバー構築当初は正常に稼働し、数日経って突然切れるという、少し怖い話でした。

Category: [Linux] - 15:55:47



 
Last-modified: 2020-02-17 (月) 15:55:47 (245d)