wakatonoの戯れメモ

はてなダイアリーから引っ越してきました。

knockd

面白い。
要は、

  • 特定のシーケンスでTCPポートとかUDPポートを叩く(ノックする)とコマンドを実行する

というものなんですが(汗)。
コンパイルにはlibpcapが必要。あと、ソースコードを見るとLinuxに依存しまくってる(改修はラクそうですが)。
で、以下使い方。

アーカイブ展開、configure + make でコンパイルが正常に終了したら、/tmp/knockd.conf に以下のような内容を設定して、knockd -d -c /tmp/knockd.conf などとして実行する。


[options]
LogFile = /var/log/knockd.log

[openSSH]
sequence = 7000,8000,9000
protocol = tcp
timeout = 15
command = /tmp/moge %IP%

[closeSSH]
sequence = 9000,8000,7000
protocol = tcp
timeout = 15
command = /tmp/hoge %IP%

/tmp/mogeは

echo $1 > /tmp/mogelog
/tmp/hogeは、

echo $1 > /tmp/hogelog
という内容で、実行権限を与えておく。
knockdは、デフォルトではeth0をlistenするので、自分以外のホストからとりあえずknockしてみる。
knockコマンドは、単にSYNフラグが立ったパケットを指定したホストの指定したポートに送るだけなので、別にtelnetを順序よくかけてもいい。なお、knockdはL2レベルの監視をしている(だからlibpcapが必要)ので、別にそこで接続を云々ということはない。

telnet targethost 7000
telnet targethost 8000
telnet targethost 9000
とか

telnet targethost 9000
telnet targethost 8000
telnet targethost 7000
いうコマンドでも、knockコマンドのかわりにはなる。
叩いたら、knockdを動かしてるマシン上の /var/log/knockd.log にログが記録されるのでチェックしてみよう。あと、/tmp/hogelogと/tmp/mogelogもチェックして、IPアドレスが記録されてるかどうかをチェックしてみょう。