ご自宅VPNの続き

使わない時もVPNのポートが開いているのはちょっと不安。
と、言う事で必要な時だけ、しかも外から開けられるような処理を作成。
 
処理概要
webからCGIを実行すると特定の場所に特定のファイルを作成する。
cronでファイルの存在確認をしてルータ(RT58i)の設定を変更する。
 
実際の処理
①特定の場所にファイルを作成するCGIを作成。
#! /usr/bin/perl
use Shell qw(touch);
$touch = touch(“/ファイルを保存するパス/ファイル名”);
exit;
これだけではセキュリティ上さみしいので、formでパスワードを受け取る認証を加えたり、webのBASIC認証などと組み合わせるのが吉。
 
②ルータの設定を変更するスクリプトを作成。
#!/usr/bin/perl
use Net::Telnet ();
$prompt = ‘/>\s+/’;
$prompt2 = ‘/#\s+/’;
$telnet = new Net::Telnet;
$telnet->open(‘RT58iのIP’);
$telnet->waitfor(‘/Password: $/’);
$telnet->print(‘パスワード’);
$telnet->waitfor($prompt);
$telnet->cmd(“console character ascii”);
$telnet->print(“admin”);
$telnet->waitfor(‘/Password: $/’);
$telnet->print(‘パスワード’);
$telnet->waitfor($prompt2);
$telnet->cmd(“pp select 相手先情報番号”);
#VPNを開ける時
# $telnet->cmd(“ip pp secure filter in フィルタ番号を空白区切りで全て記述”);
#VPNを閉じる時
# $telnet->cmd(“ip pp secure filter in 1723ポートに関するフィルタ番号以外のフィルタ番号を空白区切りで全て記述”);
$telnet->cmd(“save”);
$telnet->close;
exit;
相手先情報番号とフィルタ番号はブラウザからRT58iの「かんたん設定ページ」に接続して設定レポートで確認できます。
 
③ファイルの存在チェックをして②を実行するスクリプトを作成。
#! /bin/sh
if [ -f /ファイルを保存したパス/ファイル名 ]; then
/スクリプトのパス/②のスクリプト
rm /ファイルを保存したパス/ファイル名
fi
 
④cronで3分置きに実行
*/3 * * * * /スクリプトのパス/③のスクリプト > /dev/null 2> /dev/null
 
以上をVPNを開く時と閉じる時のために2セット作成。

Comments are closed.