特に私がやりたいというわけではないのだが、社内で従業員がどういったサイトにつないでいるのかを監視したいというニーズは多い(らしい)。
単純に考えるとやり方はいくつかあって、以下のような方法が考えられる。
- PCに監視ソフトを入れて確認
- ルータのアウトバウンドの接続ログを取る
- 社内接続をプロキシ経由にして接続ログを取る
- [個人的本命]DNSリゾルバのログを取る
PCに監視ソフトを入れて確認
これを検討する会社は多いと思う。
しかし各端末にソフトをひとつひとつインストールしていくのは手間だし、PCを使っている側からしても監視ソフトがうごいていることはわかるのであまりいい気はしない(と思う)。
後持ち込みのスマホには対応できない。
ルータのアウトバウンドのログを取る
どこにつないだかは確実にわかるけれども、ホスト名がわからない(逆引きできるものを除く)ので、かなり読みにくいログになることが間違いない。
しかも量が半端ないので見づらい。
後はフレッツ光とかでレンタルしてくれるルーターを使っている場合はまずそんな細かいログの設定ができない。
社内接続をプロキシ経由にして接続ログを取る
現実的な案。接続先のURLがしっかりわかる。
DHCPでプロキシを配布することもできるので、社内WiFiを持ち込みのスマホに開放している場合でもすべての接続記録(HTTP/Sに限る)を残すことができる。
VPNを立てている場合はVPNサーバからの接続にプロキシを噛ませるという方法もある。
他人にお勧めするならこれか。プロクシはSquidとかで立てよう。
DNSリゾルバのログを取る
この記事を書く前に私が考えていた方法。
具体的にはこうする。
- DNSリゾルバを社内に立てる
- DHCPでDNSサーバの設定を配布する
- ルータで外向き53番(DNS)の接続は止めておく
- リゾルバが返すDNS情報のTTLを60秒などの短い時間にしておく
こうすればどこのホストにつないだかはかなりの精度でログを取ることができるはず。
HTTP/S以外の接続も取れるのは優位かもしれない。
ただし接続先ホスト名単位での記録しか取れないので、接続先のホストの何にアクセスしたかは判別することができない。
なのでアメーバブログとかのように、サブディレクトリでサイトが分かれている形式だと、何のサイトだかわからないのが問題としてある。
まぁ仕事でアメブロにつなぐ必要がある人間は限られていると思うので、大した問題ではないように思う。
ログを取るためのDNSサーバを立てようと思うと、やはりBINDなどが第一候補にあがると思う。
だがBINDの設定なんぞ今更やりたくないし、ちょっとキャッシュサーバが立てられてログがとることができれば十分なのだ。
世の中を探せばちょうどよさそうなソフトはありそうだが、大した機能でもないので練習がてらgolangで書いてみてもいいかもな・・と思ったところで本記事は終わる。
unboundでよさそう。2018/11/21追記
関係ない調べごとをしていたら、unboundというDNSサーバがサクッと設定できてよさそうな感じだということが分かった。
具体的にはcache-max-ttlという設定項目で、最大キャッシュ時間を秒単位で指定すれば権威DNSサーバのTTLをオーバーライドしてくれることが分かった。
unboundはマルチプラットフォームっぽいので大体の環境で使えると思う。
ログ解析に関してはテキストを適当にgrepしてパースするなり、syslogを流して何とかするなり、まぁ普通のサーバソフトの運用ノウハウと同様のノリで行けると思われる。
コメント