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

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

ポートノッキングの背後にあるロジックは、開いているポートをうろつく自動ポートスキャナーから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-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
UFWステータスを確認する
UFWステータスを確認する

出力から、それをはっきりと見ることができます SSH ポート 22 両方で開いています IPv4 そして IPv6 番号が付けられたプロトコル 5 そして 9 それぞれ。

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

$ sudo ufw delete 9
$ sudo ufw delete 5
UFWルールを削除する
UFWルールを削除する

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

SSH接続タイムアウト
SSH接続タイムアウト

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

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

しかし、最初に、インストールします ノック サーバーで行ったのと同じようにデーモン。

$ sudo apt install knockd

インストールが完了したら、示されている構文を使用してノックシーケンスを送信します

$ knock -v server_ip knock_sequence

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

$ knock -v 192.168.2.105 10005 10006 10007

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

ノックシーケンス
ノックシーケンス

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

Knockdを使用してサーバーに接続する
Knockdを使用してサーバーに接続する

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

$ knock -v 192.168.2.105 10007 10006 10005

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

SSHポートを閉じる
SSHポートを閉じる
まとめ

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

Hope this helps!

Source link