ポートノッキング は、サーバー上で実行されているサービスへの正当なユーザーのアクセスのみを許可することにより、ポートへのアクセスを制御する優れた手法です。これは、正しい接続試行のシーケンスが行われると、ファイアウォールが閉じられたポートを喜んで開くように機能します。
ポートノッキングの背後にあるロジックは、開いているポートをうろつく自動ポートスキャナーからLinuxシステムを保護することです。このガイドでは、ポートノッキングをインストールする方法と、SSHサービスを保護するためにポートノッキングを構成する方法について説明します。デモンストレーションの目的で、 Ubuntu 18.04を使用します 。
ステップ1:ノックされたものをインストールして構成する
開始するには、Linuxシステムにログインし、ノックドをインストールします 示されているデーモン。
$ sudo apt install knockd
インストールしたら、 knockd.confを開きます お好みのテキストエディタで設定します。ここでは、vimコマンドラインテキストエディタを使用しています。
$ sudo vim /etc/knockd.conf
デフォルトの構成ファイルは次のように表示されます。

[openSSH]
の下 セクションでは、デフォルトのノッキングシーケンスを変更する必要があります– 7000,8000,9000 –他の何かに。これは、これらの値がすでにわかっており、システムのセキュリティを危険にさらす可能性があるためです。
テストの目的で、値を 10005、10006、10007に設定しました 。これは、クライアントシステムからSSHポートを開くために使用されるシーケンスです。
3行目–コマンドで始まります 、-A
を変更します to -I
/sbin/iptables
の直後 コマンドおよびINPUT
の前 。
そして最後に、[closeSSH]
の下で セクションでも、デフォルトのシーケンスを好みの選択に変更します。これは、ユーザーが完了してサーバーからログアウトしたときにSSH接続を閉じるために使用されるシーケンスです。
これが完全な構成です。

完了したら、変更を保存して終了します。
変更する必要があるもう1つの構成は、 / etc / default / knockdです。 。もう一度、テキストエディタを使用して開きます。
$ sudo vim /etc/default/knockd

START_KNOCKD=0
という行を見つけます 。コメントを外し、値を1
に設定します 。
次に、KNOCKD_OPTS=”-i eth1”
の行に移動します。 コメントを外して、デフォルトのeth1
を置き換えます システムのアクティブなネットワークインターフェイスの値。ネットワークインターフェイスを確認するには、ipaddrまたはifconfigコマンドを実行するだけです。
私たちのシステムでは、 enp0s3 アクティブなネットワークカードです。

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

変更を保存して終了します。
次に、ノックを開始して有効にします 示されているデーモン。
$ sudo systemctl start knockd $ sudo systemctl enable knockd
ノックのステータスを確認するには デーモン、コマンドを実行します:
$ sudo systemctl status knockd

ステップ2:ファイアウォールのSSHポート22を閉じる
ノックの目的以来 サービスはsshサービスへのアクセスを許可または拒否することであり、ファイアウォールのsshポートを閉じます。ただし、最初に、UFWファイアウォールのステータスを確認しましょう。
$ sudo ufw status numbered

出力から、 SSHであることがはっきりとわかります。 ポート22 両方のIPv4で開いています およびIPv6 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認証を構成することです。これにより、秘密鍵を持つユーザーのみが、公開鍵が保存されているサーバーで認証できるようになります。