\r\n\r\n

Linuxでポートノックを使用する方法(と使用しない理由)

ポートノックとは、使用されることがわかっている場合でも、ファイアウォールのポートを閉じることで、サーバーを保護する方法です。これらのポートは、接続要求が秘密のノックを提供したときのみ、オンデマンドで開かれます。

ポートノックとは、使用されることがわかっている場合でも、ファイアウォールのポートを閉じることで、サーバーを保護する方法です。これらのポートは、接続要求が秘密のノックを提供したときにのみ、必要に応じて開かれる。

ポートノックは "シークレットノック"

禁酒法時代の1920年代、バーに入るには、秘密のノックを知っていて、それを正しくノックしなければ入れなかったのです。

ポートノックは現代に通じるものがある。あなたのコンピュータのサービスにアクセスできるようにしたいが、ファイアウォールを開いてインターネットに接続したくない場合、ポートノックを使用することができます。ファイアウォールで着信を許可するポートを閉じておき、事前に設定した接続試行時に自動的に開くことができます。一連の接続試行は、秘密のノックとして機能する。もうひとつの秘密のノックで、ポートは閉じられる。

ポートノックは斬新ですが、デフォルトでセキュリティを確保する例であり、根本的に欠陥のある概念であることを知っておくことが重要です。アクセス方法の秘密は、特定のグループの人しか知らないので安全です。しかし、その秘密が明かされた時点で、あるいは明かされたからこそ、観察され、推測され、解決された時点で、セキュリティは無効となるのです。SSHサーバーには鍵に基づくログインを義務付けるなど、他のより強固な方法でサーバーを保護する方がよいでしょう。

ネットワークセキュリティの最も確実なアプローチは多層的なものであり、ポートノックもその1つであるべきなのかもしれません。レイヤーは多ければ多いほどいいんでしょう?しかし、ポートノックは、適切に強化されたセキュリティ・システムには(仮に何かあったとしても)たいした追加にはならないという意見もあるでしょう。

ネットワーク・セキュリティは広範かつ複雑なテーマですが、ポート攻撃を唯一の防御手段とするべきではありません。

関連:LinuxシェルからSSH鍵を作成・インストールする方法

Knockdのインストール

ポートノックを実演するために、SSHポートである22番ポートを制御するために使用します。今回使用するのは、knockdというツールです。Ubuntuまたはその他のDebianベースのディストリビューションを使用している場合は、apt getを使用してシステムにこのパッケージをインストールしてください。その他のLinuxディストリビューションでは、代わりにそのLinuxディストリビューションのパッケージ管理ツールを使用してください。

と入力する。

sudo apt-get install knockd

お使いのシステムにはすでにiptablesファイアウォールがインストールされているかもしれませんが、iptables persistenceパッケージをインストールする必要がある場合があります。保存されたiptableルールの自動読み込みを処理します。

インストールには次のように入力します。

sudo apt-get install iptables-persistent

IPV4の設定画面が表示されたら、スペースバーを押して「はい」オプションを受け入れます。

IPv6設定画面で再度スペースバーを押すと、「はい」の選択肢を受け入れて続行します。

以下のコマンドは、確立した接続と継続中の接続を許可するようiptablesに指示します。ここで、別のコマンドを発行して、SSHポートを閉じます。

このコマンドを発行したときに、誰かがSSHで接続していた場合、その人が切断されないようにします:。

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

このコマンドは、ファイアウォールにルールを追加する、つまり

  • -A: ルールをファイアウォールルールテーブルに追加します。
  • 入力:これは、着信接続のルールです。
  • -m パラメータは、iptables が追加のパケット照合モジュールを使用するようにします。
  • -cstate ESTABLISHED, RELATED:ルールを適用する接続の種類、すなわち確立した接続と関連する接続を指定します。確立された接続は、進行中の接続である。関連接続とは、すでに確立されている接続の操作の結果、確立された接続のことです。接続されている人の一人がファイルをダウンロードしたい場合、ホストによって開始された新しい接続で発生する可能性があります。
  • -j ACCEPT: トラフィックがルールに一致する場合、ファイアウォールのACCEPTの宛先にジャンプします。つまり、ファイアウォールを通過するトラフィックを受け入れ、許可する。

これで、ポートを閉じるコマンドを発行できるようになりました。

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

このコマンドは、ファイアウォールにルールを追加する、つまり

  • -A: ルールをファイアウォール ルール テーブルに追加する、つまり一番下に追加する。
  • 入力:このルールは、着信接続に関連する。
  • -p tcp:このルールは、Transmission Control Protocolを使用するトラフィックに適用されます。
  • -dport 22: このルールは、特にポート22(SSHポート)を対象としたTCPトラフィックに適用されます。
  • -Deny:トラフィックがルールに一致する場合、ファイアウォールの拒否対象にジャンプします。したがって、トラフィックが拒否された場合、ファイアウォールの通過は許可されません。

netfilter persistentデーモンを起動する必要があります。このコマンドを使用します。

sudo systemctl start netfilter-persistent

netfilter persistentが保存と再読み込みを繰り返すようにしたいので、iptableルールをロードして制御します。

次のコマンドを入力します。

sudo netfilter-persistent save sudo netfilter-persistent reload

これでユーティリティのインストールが完了し、SSHポートが閉じられました(うまくいけば、誰の接続も切断されずに済みます)。さて、いよいよSecret Knockの設定です。

Knockdの設定

knockdの設定には、以下の2つのファイルを編集することができます。

sudo gedit /etc/knockd.conf

geditエディタでknockd設定ファイルを開き、読み込みます。

このファイルを必要な分だけ編集します。ここで注目するのは、"openSSH "と "closeSSH "の部分です。各セクションには、以下の4つの項目があります。

  • Order:ポート22の開閉時にアクセスする必要があるポートの順番。デフォルトのポートは、オープンポートが7000、8000、9000で、クローズポートが9000、8000、7000です。これらのポートを変更したり、リストにポートを追加することができます。ここでは、デフォルトのままとします。
  • seq u timeout: ポートをオープンまたはクローズするために、誰かがアクセスしなければならない時間。
  • コマンド:開閉動作が発生した際にiptablesファイアウォールに送信するコマンドです。これらのコマンドは、ファイアウォールにルールを追加する(ポートを開く)か、ルールを削除する(ポートを閉じる)かのどちらかです。
  • tcpflags:各ポートがシークレットシーケンスで受信しなければならないパケットの種類。SYN(同期)パケットは、TCP接続要求の最初のパケットで、3ウェイハンドシェイクと呼ばれる。

openSSH」の部分は、"ポート22を開くコマンドをファイアウォールに送信する前に、ポート7000、8000、9000の順に5秒以内にTCP接続要求が必要 "と解釈できる。

closeSSH」の部分は、"TCP接続要求をポート9000、8000、7000の順に送信し、ポート22を閉じるコマンドを5秒以内にファイアウォールに送信しなければならない "と解釈することができる。

ファイアウォールルール

openSSHおよびcloseSSHセクションの "command "エントリーはそのままですが、1つのパラメーターが追加されています。その構成は以下の通りです。

  • -回答:ファイアウォールのルールリストの一番下にルールを追加します(openSSHコマンド用)。
  • -D: ファイアウォール ルール リストからコマンドを削除します (closeSSH コマンドの場合)。
  • 入力:このルールは、受信ネットワークトラフィックに関連するものです。
  • -s%IP%: 接続を要求しているデバイスのIPアドレスです。
  • -p:ネットワークプロトコル、この例ではTCPです。
  • -dport: ターゲットポート。この例ではポート22です。
  • -j ACCEPT: ファイアウォール内のACCEPTターゲットにジャンプします。言い換えれば、パケットにアクションを実行せずに、残りのルールを通過させます。

ノック式プロファイル編集

私たちが行った編集は、以下の赤色でハイライトされています。

私たちは「シーケンスのタイムアウト」を15秒に延長しました。これは寛大な措置ですが、もし誰かが手動で接続要求を引き起こした場合、それだけの時間が必要になる可能性があります。

openSSH」において、コマンドの-A(append)オプションを-I(insert)に変更します。このコマンドは、新しいファイアウォールルールをファイアウォールルールリストの最上位に配置します**。Aオプションが残っている場合、ファイアウォールルールリストを追加し、一番下に配置します。

受信トラフィックをリストの各ファイアウォールルールに対して上から下へテストします。22番ポートを閉じるルールはすでにある。したがって、受信トラフィックを見る前に、そのトラフィックを許可するルールに対してテストされた場合、接続は拒否され、新しいルールを最初に見た場合、接続は許可されます。

closeコマンドはopenSSHによって追加されたルールをファイアウォールのルールから削除します。 SSHトラフィックは再び既存の「ポート22は閉じている」ルールによって処理されます。

これらの編集を行った後、設定ファイルを保存してください。

関連:Linuxでテキストファイルをグラフィカルに編集するgeditの使い方

ノックドコントロールファイルエディタ

knockdの制御ファイルはもっとシンプルです。ただし、編集する前に、ネットワーク接続の内部名称を知る必要があります。これを知るには、次のコマンドを入力します。

ip addr

このマシンがこの記事を調べるために使用した接続は、enp0s3という名前です。 接続の名前を書き留めてください。

次のコマンドは、knockd 制御ファイルを編集します。

sudo gedit /etc/default/knockd

これはgeditのknockdファイルです。

いくつかの編集が必要な箇所は、赤でハイライトされています。

STARTU KNOCKD=」の項目を0から1に変更します。

また、「KNOCKD#u OPTS=」という項目から始まるハッシュを削除し、「eth1」をネットワーク接続名enp0s3に置き換えています。 もちろん、ネットワーク接続がeth1であれば、変更されることはありません。

その証拠に

これで動くかどうか、次のコマンドでknockdデーモンを起動することにします。

sudo systemctrl start knockd

今度は別のマシンにジャンプして、接続を試みます。ポートノックを設定するためではなく、knockdパッケージがknockという別のツールを提供しているため、そのマシンにもknockdツールをインストールします。この機械で密命を発し、我々のために扉を叩いてくれるのだ。

以下のコマンドを使用して、IPアドレス192.168.4.24のノックアウトホストのポートに秘密の接続要求シーケンスを送信してください。

knock 192.168.4.24 7000 8000 9000 -d 500

これは、IPアドレス192.168.4.24のコンピュータをターゲットにして、ポート7000、8000、9000に順番に接続要求を送り、その間に500ミリ秒のa-d(遅延)を入れるように knockに指示するものである。

そして、"dave "というユーザーが192.168.4.24にSSHリクエストを送ります。

ssh [email protected]

接続が許可され、パスワードを入力すると、リモートセッションが開始されます。コマンドプロンプトがDave@NostromoからDave@howtogeekに変わり、リモートコンピュータからログアウトするには、次のように入力します。

exit

コマンドプロンプトは、彼をローカルコンピュータに戻す。彼は再びノックを使い、今度はポートをターゲットにして、リモートコンピュータのSSHポートを逆順に閉じていく。

knock 192.168.4.24 9000 8000 7000 -d 500

確かに、これは特に生産的なリモートセッションではないが、ポートタッピングによるポートの開閉を実演しており、スクリーンショットに収まるものである。

ポートノックホストのシステム管理者は、次のコマンドを使用して、システムログに到着した新しいエントリを確認します。

tail -f /var/log/syslog
  • 3つのopenSSHのエントリが表示されます。これらは、リモートノックアウトユーティリティが各ポートをターゲットにしたときにトリガーされます。
  • トリガーシーケンスの3つのフェーズがすべて満たされると、"OPEN SESAME "のエントリーが記録される
  • iptables ルールリストをルール化するコマンドを送信します。正しいシークレットノックを与えたPCの特定のIPアドレス(192.168.4.23)から、ポート22でSSHによるアクセスを可能にするものです。
  • ユーザー "dave "は数秒間だけ接続され、その後切断される。
  • closeSSHのエントリーが3つ表示されます。これは、各ポートがリモートノックダウンユーティリティの標的となったときに発生し、ポートノックダウンホストにポート22を閉じるように通知します。
  • 3つのフェーズがすべて起動すると、再び「opensame」メッセージが表示されます。ルールを削除するためのコマンドをファイアウォールに送信します。(ポートを閉じるときに「close sesame」としないのはなぜ?誰が知ってる?)

iptablesのルールリストにある22番ポートのルールは、冒頭で入力したポートを閉じるルールだけになっています。そのため、22番ポートが再び閉鎖されました。

くびをたてにふる

それはポーター・クリングのパーラー・トリックだ。娯楽と思え、実社会でやるな。あるいは、どうしてもというなら、唯一のセキュリティとして依存しないことです。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ