Zabbix 7.0の名前解決が大量クエリとDNS-0x20で暴走した
先日、自宅鯖のDNSクエリログを眺めていたところ、
Zabbix 7.0から発せられるDNSクエリが大量に出ていたり、大小英数字でランダム化されている事に気づいた。
DNSキャッシュサーバの負荷高騰までは行っていないが結構な量だったので原因調査をしてみた。
………
改めてログ解析すると元はZabbix Proxy 7.0だった。
以前のバージョンでは秒間50~100クエリ程度と控え目なのだが、
Zabbix 7.0にアップグレードした直後から秒間200~300クエリに増加しており、
さらに今までは無かったAAAAレコードのDNS名前解決も増加している事が分かった。
そんなでログ解析しながらコミュニティを漁っていたら、時期もバージョンもズバリ合致する記事が見つかった。
- Zabbix Help > random-cased AAAA DNS queries
This looks like being a feature of libevent that Zabbix 7.0 uses for async DNS resolution. |
どうやら、Zabbix 7.0の非同期DNS名前解決で利用しているlibeventライブラリの機能らしく、
プログラムの組み方次第ではAAAAレコードも無作為に名前解決してNXDOMAINになり、
NXDOMAINをキャッシュせずに改めて名前解決を行う無限ループになる様だった。
………
さらに、DNSクエリがDNS-0x20で大小英数字にランダマイズされる事により、
より一層キャッシュに乗りにくくなっていた。
DNS-0x20の仕組みはカミンスキー攻撃などDNSキャッシュポイズニングを防止する目的で有用だが、
環境によっては凶悪なDDoS状態になり得ると実感した。
筆者の環境ではDNSキャッシュサーバのクエリログ解析をしているので、
DNS-0x20を施されると困る場合もあるのだが、仕様らしく解除するにはプログラムを書き換えるしか無さそう。
コミュニティにみお解決困難と書かれてあり、ワークアラウンドもDNSキャッシュを使う方法のみだった。
自宅のDNSキャッシュサーバは元からスペックを積んでいるので余裕で耐えられるクエリ数ではあるが、
エンタープライズなど大規模環境でコレが発生すると、凄い負荷がかかる筈なのでぞっとする。
特にISPやサーバ事業者とかは死活問題な気がする (´・ω・`)
以前に仕様と分かっているならサーバ増強で対処も出来るが、バグの分類にも感じるので解決は難しそう。
メジャーバージョンアップなので何かあると思っていたが、予期しない所から刺客が来た形となった。