個人サーバのファイアウォールを活かしつつ、どこからでもログインする方法 (CGI編)
以前、
いつでもどこからでもサーバにログインしたくなるときってありますよね。かといって、サーバの sshd への接続を全世界から可能にしておくというのは、たとえパスワード認証を無効化していても避けたいところ。
Dynamic DNS を使って SSH アクセスを制限する方法 - kazuhoのメモ置き場
ということでDynamic DNSを使う方法でやってきてたんだけど、いろいろ不便があったので、HTTPベースに変えた。具体的に言うと、
#! /usr/bin/perl use strict; use warnings; my $TARGET_FILE = '/etc/hosts.allow.d/www/update_addr_cgi'; print "Content-Type: text/plain\r\n\r\n"; my $remote_addr = $ENV{REMOTE_ADDR} or die "no remote addr\n"; open my $fh, '>', $TARGET_FILE or die "failed to open $TARGET_FILE:$!"; print $fh "$remote_addr\n"; close $fh; print "address updated to:$remote_addr\n";
のような CGI を個人サーバの秘密の場所*1に設置して、/etc/hosts.allowに
ssh: /etc/hosts.allow.d/www/update_addr_cgi
サーバプロセスをファイアウォール(というかtcpwrapper)で保護することでインターネットから攻撃される可能性を下げつつ、CGIを一発たたいたらどこからでも作業できるようになるので、わりと便利。