ウェブサイト検索

Linux でポート ノッキングを使用して SSH サービスを保護する方法


ポート ノッキングは、サーバー上で実行されているサービスへのアクセスを正規のユーザーのみに許可することで、ポートへのアクセスを制御する気の利いた手法です。これは、正しい順序で接続が試行されると、ファイアウォールが閉じられていたポートを喜んで開くように機能します。

ポート ノッキングの背後にあるロジックは、開いているポートを探し回る自動ポート スキャナーから Linux システムを保護することです。このガイドでは、ポート ノッキングをインストールする方法と、SSH サービスを保護するためにポート ノッキングを構成する方法を検討します。デモの目的ではUbuntu 18.04 を使用します。

ステップ 1: ノックドのインストールと構成

まず、Linux システムにログインし、 図に示すようにknockd デーモンをインストールします。

sudo apt install knockd

インストールしたら、好みのテキスト エディタで knockd.conf 設定を開きます。ここでは、vim コマンドライン テキスト エディターを使用しています。

sudo vim /etc/knockd.conf

デフォルトの設定ファイルは次のようになります。

[openSSH] セクションで、デフォルトのノックシーケンス 7000,8000,9000 を別のものに変更する必要があります。これらの値はすでに知られており、システムのセキュリティを損なう可能性があるためです。

テストのために、 値を10005、10006、10007に設定しました。これは、クライアント システムから SSH ポートを開くために使用されるシーケンスです。

コマンドで始まる 3 行目で、/sbin/iptables の直後の -A-I に変更します。コマンドと INPUT の前。

最後に、[closeSSH] セクションで、デフォルトのシーケンスを好みの選択に変更します。これは、ユーザーが作業を完了してサーバーからログアウトした後に SSH 接続を閉じるために使用されるシーケンスです。

これが完全な構成です。

完了したら、変更を保存して終了します。

変更する必要があるもう 1 つの設定は、/etc/default/knockd です。もう一度、テキスト エディタを使用して開きます。

sudo vim /etc/default/knockd

START_KNOCKD=0 という行を見つけます。コメントを解除し、値を 1 に設定します。

次に、 KNOCKD_OPTS= ”-i eth1 ” 行に移動します。コメントを解除して、デフォルトの eth1 値をシステムのアクティブなネットワーク インターフェイスに置き換えます。ネットワーク インターフェイスを確認するには、ip addr または ifconfig コマンドを実行するだけです。

私たちのシステムでは、enp0s3 がアクティブなネットワーク カードです。

完全な構成は次のとおりです。

変更を保存して終了します。

次に、 図に示すようにknockd デーモンを起動して有効にします。

sudo systemctl start knockd
sudo systemctl enable knockd

knockd デーモンのステータスを確認するには、次のコマンドを実行します。

sudo systemctl status knockd

ステップ 2: ファイアウォールの SSH ポート 22 を閉じる

knockd サービスの目的は ssh サービスへのアクセスを許可または拒否することなので、ファイアウォール上の ssh ポートを閉じます。まずは、UFW ファイアウォールのステータスを確認しましょう。

sudo ufw status numbered

出力から、SSH ポート 22IPv4IPv6 の両方のプロトコルで開いていることが明確にわかります。それぞれ、strong>5 と 9 です。

示されているように、これら 2 つのルールを、最も高い値である 9 から順に削除する必要があります。

sudo ufw delete 9
sudo ufw delete 5

ここで、サーバーにリモートでログインしようとすると、次のような接続タイムアウト エラーが発生します。

ステップ 3: SSH サーバーに接続するようにノック クライアントを構成する

最後のステップでは、クライアントを構成し、最初にサーバー上で構成したノック シーケンスを送信してログインを試みます。

ただし、最初に、 サーバー上で行ったのと同じようにknockd デーモンをインストールします。

sudo apt install knockd

インストールが完了したら、次の構文を使用してノック シーケンスを送信します。

knock -v server_ip knock_sequence

私たちの場合、これは次のように変換されます。

knock -v 192.168.2.105 10005 10006 10007

シーケンスに応じて、私たちが得たものと同様の出力が得られるはずです。これは、ノックの試行が成功したことを示しています。

この時点で、SSH を使用してサーバーに正常にログインできる状態になっているはずです。

リモート サーバーでの作業が完了したら、終了ノック シーケンスを送信して SSH ポートを閉じます。

knock -v 192.168.2.105 10007 10006 10005

示されているように、サーバーにログインしようとすると失敗します。

最後に

これで、ポート ノッキングを利用してサーバー上の SSH サービスを保護する方法に関するこのガイドは終了です。より適切で簡単なアプローチは、SSH キー ペアを使用してパスワード SSH 認証を構成することです。これにより、秘密キーを持つユーザーのみが、公開キーが保存されているサーバーで認証できるようになります。