![](https://habrastorage.org/storage2/ed2/895/137/ed28951378af37089d9cbc4a5bd21ed1.jpg)
テクノロジー自体について少し
ポートノッキングには興味深い機能があります。 閉じたポートへの接続を何度か試みます。 「なぜこれが必要なのか」と尋ねます。アクセス制御を備えたある組織でインタビューに来たとしましょう。 最初に(1)パスが書かれたセキュリティポストに行き、(2)人事部に行き、そこでアンケートに記入してあなたと話し、最後に(3)マネージャーのオフィスに行き、最終的に会話して決定を下します。 では、全員がマネージャーに直接行きたいとしたらどうなるか想像してみましょう。
ポートノッキングテクノロジーは、閉じたポートへの接続を試行します。 すべてのポートが閉じられている場合でも、ファイアウォールのログファイルですべての接続試行を追跡できます。 ほとんどの場合、サーバーはこれらの接続に一切応答しませんが、それらを読み取って処理します。 ただし、一連の接続が以前にユーザーによって指定されていた場合は、特定のアクションが実行されます。 例として、ポート22でSSHサービスに接続します。 ポートノッキングにより、このアクション以上のものを実行できます。 トリガーを使用すると、他のアクション(電源オフ、システムの再起動など)を実行できます。
FreeBSDへのインストール
リモートマシンには、FreeBSD 9.1があります
ポートノッキングは2つのプログラムで構成されます。
-サーバー(knockd)
-クライアント(ノック)
サーバー側の構成の例を示します。
# cd /usr/ports/ # make search key=knocking Port: doorman-0.81_1 Path: /usr/ports/security/doorman Info: Port knocking implementation, both daemon and client Maint: lupe@lupe-christoph.de B-deps: lsof-4.88.d,8 R-deps: lsof-4.88.d,8 WWW: http://doorman.sourceforge.net/ Port: knock-0.5_1,1 Path: /usr/ports/security/knock Info: Flexible port-knocking server and client Maint: sbz@FreeBSD.org B-deps: R-deps: WWW: http://www.zeroflux.org/projects/knock
ポートがあるディレクトリに移動して設定します。
cd /usr/ports/security/knock make config
![](https://habrastorage.org/storage2/a74/cc8/7f3/a74cc87f34eaff1c041f7a1653d09345.png)
サーバー側にマーカーを配置し、パッケージを収集してインストールします。
構成
それでは、設定に取りかかりましょう。
まず、構成をコピーします。
# cd /usr/local/etc/ # cp knockd.conf.sample knockd.conf
ネットワークにはさまざまな構成設定がありますが、独自の設定を提供します。
knockd.conf
[options] logfile = /var/log/knockd.log interface = em0 [opencloseSSH] sequence = 7000:udp,7007:tcp,7777:udp seq_timeout = 5 tcpflags = syn start_command = /sbin/pfctl -t good_hosts -T add %IP% cmd_timeout = 10 stop_command = /sbin/pfctl -t good_hosts -T delete %IP% [open22] sequence = 7134:tcp,7675:tcp,7253:udp seq_timeout = 5 tcpflags = syn command = /sbin/pfctl -t good_hosts -T add %IP% [close22] sequence = 7253:udp,7675:tcp,7134:tcp seq_timeout = 5 tcpflags = syn command = /sbin/pfctl -t good_hosts -T delete %IP%
構成を保存し、自動実行に追加してサービスを開始します。
# cd /usr/local/etc/rc.d/ # echo knockd_enable=\"YES\" >> /etc/rc.conf # service knockd start
ファイアウォールのセットアップ
最初に、ファイアウォールのサポートを無効にしている場合は有効にします(私の場合のように)
echo pf=\"YES\" >> /etc/rc.conf
この手順をリモートで実行することはお勧めしません。sshを介してすべての接続とアクセスを受信するわけではないからです。
注:従わずにこのアクションをリモートで実行した場合は、sshhd-configにルートログインを含めることで問題を解決できます。
/etc/pf.conf
ext_if="rl0" table <good_hosts> persist block in on $ext_if all pass in on $ext_if inet proto tcp from <good_hosts> \ to $ext_if port 22 keep state
ファイアウォール設定でルールを作成します
/sbin/ipfw add 100 allow tcp from %IP% to me 22 keep-state /sbin/ipfw delete 100
再起動します。
ノッキング
接続するために、MacOS用のサードパーティクライアントhpingを使用しました。
# knock -v *e*m*o*c*.ru 7000:udp,7007:tcp,7777:udp hitting udp *1.*0*.*3*.*0:7000 hitting tcp *1.*0*.*3*.*0:7007 hitting udp *1.*0*.*3*.*0:7777 # ssh *e*m*o*c*.ru -l root Password: Last login: Thu May 9 11:30:40 2013 from ***** FreeBSD 9.1-RELEASE-p3 (GENERIC) #0: Mon Apr 29 18:11:52 UTC 2013 root@*e*m*o*c*:/root #