\r\n\r\n
ポートノックとは、使用されることがわかっている場合でも、ファイアウォールのポートを閉じることで、サーバーを保護する方法です。これらのポートは、接続要求が秘密のノックを提供したときにのみ、必要に応じて開かれる。
禁酒法時代の1920年代、バーに入るには、秘密のノックを知っていて、それを正しくノックしなければ入れなかったのです。
ポートノックは現代に通じるものがある。あなたのコンピュータのサービスにアクセスできるようにしたいが、ファイアウォールを開いてインターネットに接続したくない場合、ポートノックを使用することができます。ファイアウォールで着信を許可するポートを閉じておき、事前に設定した接続試行時に自動的に開くことができます。一連の接続試行は、秘密のノックとして機能する。もうひとつの秘密のノックで、ポートは閉じられる。
ポートノックは斬新ですが、デフォルトでセキュリティを確保する例であり、根本的に欠陥のある概念であることを知っておくことが重要です。アクセス方法の秘密は、特定のグループの人しか知らないので安全です。しかし、その秘密が明かされた時点で、あるいは明かされたからこそ、観察され、推測され、解決された時点で、セキュリティは無効となるのです。SSHサーバーには鍵に基づくログインを義務付けるなど、他のより強固な方法でサーバーを保護する方がよいでしょう。
ネットワークセキュリティの最も確実なアプローチは多層的なものであり、ポートノックもその1つであるべきなのかもしれません。レイヤーは多ければ多いほどいいんでしょう?しかし、ポートノックは、適切に強化されたセキュリティ・システムには(仮に何かあったとしても)たいした追加にはならないという意見もあるでしょう。
ネットワーク・セキュリティは広範かつ複雑なテーマですが、ポート攻撃を唯一の防御手段とするべきではありません。
関連:LinuxシェルからSSH鍵を作成・インストールする方法
ポートノックを実演するために、SSHポートである22番ポートを制御するために使用します。今回使用するのは、knockdというツールです。Ubuntuまたはその他のDebianベースのディストリビューションを使用している場合は、apt getを使用してシステムにこのパッケージをインストールしてください。その他のLinuxディストリビューションでは、代わりにそのLinuxディストリビューションのパッケージ管理ツールを使用してください。
と入力する。
sudo apt-get install knockdお使いのシステムにはすでにiptablesファイアウォールがインストールされているかもしれませんが、iptables persistenceパッケージをインストールする必要がある場合があります。保存されたiptableルールの自動読み込みを処理します。
インストールには次のように入力します。
sudo apt-get install iptables-persistentIPV4の設定画面が表示されたら、スペースバーを押して「はい」オプションを受け入れます。
IPv6設定画面で再度スペースバーを押すと、「はい」の選択肢を受け入れて続行します。
以下のコマンドは、確立した接続と継続中の接続を許可するようiptablesに指示します。ここで、別のコマンドを発行して、SSHポートを閉じます。
このコマンドを発行したときに、誰かがSSHで接続していた場合、その人が切断されないようにします:。
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTこのコマンドは、ファイアウォールにルールを追加する、つまり
これで、ポートを閉じるコマンドを発行できるようになりました。
sudo iptables -A INPUT -p tcp --dport 22 -j REJECTこのコマンドは、ファイアウォールにルールを追加する、つまり
netfilter persistentデーモンを起動する必要があります。このコマンドを使用します。
sudo systemctl start netfilter-persistentnetfilter persistentが保存と再読み込みを繰り返すようにしたいので、iptableルールをロードして制御します。
次のコマンドを入力します。
sudo netfilter-persistent save sudo netfilter-persistent reloadこれでユーティリティのインストールが完了し、SSHポートが閉じられました(うまくいけば、誰の接続も切断されずに済みます)。さて、いよいよSecret Knockの設定です。
knockdの設定には、以下の2つのファイルを編集することができます。
sudo gedit /etc/knockd.confgeditエディタでknockd設定ファイルを開き、読み込みます。
このファイルを必要な分だけ編集します。ここで注目するのは、"openSSH "と "closeSSH "の部分です。各セクションには、以下の4つの項目があります。
openSSH」の部分は、"ポート22を開くコマンドをファイアウォールに送信する前に、ポート7000、8000、9000の順に5秒以内にTCP接続要求が必要 "と解釈できる。
closeSSH」の部分は、"TCP接続要求をポート9000、8000、7000の順に送信し、ポート22を閉じるコマンドを5秒以内にファイアウォールに送信しなければならない "と解釈することができる。
openSSHおよびcloseSSHセクションの "command "エントリーはそのままですが、1つのパラメーターが追加されています。その構成は以下の通りです。
私たちが行った編集は、以下の赤色でハイライトされています。
私たちは「シーケンスのタイムアウト」を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/syslogiptablesのルールリストにある22番ポートのルールは、冒頭で入力したポートを閉じるルールだけになっています。そのため、22番ポートが再び閉鎖されました。
それはポーター・クリングのパーラー・トリックだ。娯楽と思え、実社会でやるな。あるいは、どうしてもというなら、唯一のセキュリティとして依存しないことです。