2016年1月20日水曜日

ログから抜き出したIPアドレスへのリンク

NAT内からServersMan@VPS(Ubuntu14.04-64)へのftpによるアップロード
について以前書きましたが、
実はこれ、家庭内のウェブカメラから定期的に静止画をアップロードして、
それを適当なウェブブラウザで確認する様な用途に使っています。
幸いにも現在利用中のウェブカメラにはそういうことをするための機能があり、
その受け皿をVPS側に用意して実現しています。

この話には実は続きがあります。
当該ウェブカメラにはウェブサーバが搭載されており、
適当なウェブブラウザから直接アクセスすれば
撮影中の動画をリアルタイムで見ることができるのです。
ただしNAT配下にあるウェブカメラにインターネットから
直接アクセスすることはできないので、ちょっとした工夫が必要になります。

まずはウェブカメラに固定のIPアドレス(サブネットマスク
・デフォルトゲートウェイ・DNSサーバも)を設定します。
そして、いわゆるブロードバンドルータに、
TCPの80番ポートで受け取ったパケットを、
ウェブカメラの固定IPアドレスに転送するよう
ポートフォワーディングの設定を施します。
これでインターネットからもNAT内のウェブカメラにアクセスできます。

しかしアクセス先となるIPアドレス(またはホストネーム)が不明です。
そこで、利用しているのがftpサーバ(proftpd)のログです。
このウェブカメラは定期的にftpでJPEGファイルをアップロードしているのです。
ということで私はVPSのウェブページのコンテンツを以下の様にしています。
<html>
<body>
<img src="../~<専用アカウント名>/<静止画ファイル名>" />
<pre>
<?php
system("stat /home/<専用アカウント名>/public_html/<静止画ファイル名> | grep Change");
?>
</pre>
<br />
<?
printf("<a href=\"http://");
system("grep <静止画ファイル名> /var/log/proftpd/xferlog | tail -n 1 | awk '{print $7}'");
printf("\">Live from internet</a><br />");
?>
</body>
</html>
こうすれば、ウェブカメラで撮影した静止画とそのアップロード時刻が確認でき、
[Live from internet]リンクをクリックすれば動画が見られます。
ただし<静止画ファイル名>と"/var/log/proftpd/xferlog"の
パーミッションには注意が必要です。
双方ともに誰でも読めるように設定しておかなければなりません。
前者についてはftpサーバのデフォルト設定で大丈夫ですが、
"/etc/proftpd/proftpd.conf"のUmaskの値で制御できます。
それより"/home/<専用アカウント名>/public_html"ディレクトリの
パーミッションが"0755"になるようchmodするのを忘れないようにしましょう。
後者については
# chmod 644 /var/log/proftpd/xferlog
を実行すればその時はいいのですが、
ログローテーションでログファイルが置き換わるときに元の"0640"に戻り、
先のウェブコンテンツからアクセスできなくなります。
これを防ぐには"/etc/logrotate.d/proftpd-basic"設定ファイルの
/var/log/proftpd/xferlog
のブロックにある
        create 640 root adm
        create 644 root adm
に変更することで解決できます。
セキュリティが少しだけ緩くはなりますが、
個人的なVPSサーバであればそう気にすることもないでしょう。

それよりセキュリティ的に問題なのが、前述のウェブページやウェブカメラが
インターネットのどこからでも誰からでもアクセスできることです。
これはVPSのウェブサーバやウェブカメラ自体で
パスワードによる保護を有効にする等で対処できます。
それなりの機器が必要ですが、VPNで囲い込むのもいいでしょう。
いずれにしろダダ漏れしないよう、面倒くさがらずに対策しておきましょう。

0 件のコメント:

コメントを投稿