ユーザーがファイアウォールを開かずにサーバー上の特定のサービスにアクセスできるようにする場合は、ポートノッキングを使用できます。ポートノッキングは、許可されていないユーザーからサービスを保護するための方法です。ポートノッキングは、接続試行の正しいシーケンスが受信されたときに着信接続を許可します。
この投稿では、オープンSSHポート22をポートノッキングで保護します。このポートは、誰かがポート7000、8000、9000を順番に要求した場合にのみ開かれます。
前提条件
- Atlantic.Netクラウドプラットフォーム上のUbuntu20.04サーバー
- サーバーで構成されているrootパスワード
ステップ1-Atlantic.Netクラウドサーバーを作成する
まず、Atlantic.Netクラウドサーバーにログインします。 2GB以上のRAMを搭載したオペレーティングシステムとしてUbuntu20.04を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。
Ubuntu 20.04サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。
apt-get update -y
ステップ2–Knockdのインストールと構成
apt-get install knockd -y
パッケージがインストールされたら、ポートノッキングのデフォルト構成ファイルを編集します。
nano /etc/knockd.conf
以下に示すデフォルトのシーケンスを見つけます:
sequence = 7000,8000,9000 sequence = 9000,8000,7000
そして、それらを次のシーケンスに置き換えます。
sequence = 7777,8888,9999 sequence = 9999,8888,7777
また、次の行を見つけます:
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
そして、それを次の行に置き換えます:
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
終了したら、ファイルを保存して閉じます。
上記の構成ファイルでは、シーケンス7777、8888、9999を使用してクライアントシステムのポート22を開き、シーケンス9999、8888、7777を使用してクライアントシステムのポート22を閉じています。
次に、 / etc / default / knockdを編集します 構成ファイル:
nano /etc/default/knockd
次の行を変更します:
# Start the Knockd service START_KNOCKD=1 # Name of your network interface KNOCKD_OPTS="-i eth0"
終了したらファイルを保存して閉じ、Knockdサービスを再起動して、システムの再起動時に開始できるようにします。
systemctl restart knockd systemctl enable knockd
次に、次のコマンドを使用してKnockdサービスのステータスを確認します。
systemctl status knockd
サンプル出力:
● knockd.service - Port-Knock Daemon Loaded: loaded (/lib/systemd/system/knockd.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2021-08-15 13:26:31 UTC; 5s ago Docs: man:knockd(1) Main PID: 6555 (knockd) Tasks: 1 (limit: 2353) Memory: 296.0K CGroup: /system.slice/knockd.service └─6555 /usr/sbin/knockd -i eth0 Aug 15 13:26:31 ubuntu2004 systemd[1]: Started Port-Knock Daemon. Aug 15 13:26:31 ubuntu2004 knockd[6555]: starting up, listening on eth0
ステップ3–Iptablesのインストールと構成
KnockdはIptablesルールを使用してSSHポートを開閉するため、サーバーにIptablesパッケージをインストールする必要があります。
次のコマンドを実行して、Iptablesパッケージをインストールします。
apt-get install iptables iptables-persistent -y
パッケージがインストールされたら、すべてのユーザーのSSHポート22をブロックするIptablesルールを作成します。
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j REJECT
次に、Iptablesルールを保存し、次のコマンドでリロードします。
netfilter-persistent save netfilter-persistent reload
この時点で、サーバーのOpenSSH用にポートノッキングが構成されています。
ステップ4–クライアントシステムからのOpenSSH接続を確認する
次に、クライアントシステムに移動し、OpenSSHポート22がブロックされているかどうかを確認します。
NMAPコマンドを使用して確認できます:
nmap your-server-ip
サーバーでポート22がフィルタリングされていることがわかります。
Nmap scan report for your-server-ip Host is up (0.38s latency). Not shown: 998 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp filtered ssh Nmap done: 1 IP address (1 host up) scanned in 277.58 seconds
次に、クライアントマシンからSSHを使用してサーバーに接続してみます。
ssh [email protected]
接続が拒否されたというメッセージが表示されます:
ssh: connect to host your-server-ip port 22: Connection refused
ステップ5–SSHサーバーに接続するようにクライアントでKnockdを構成する
次に、SSHサーバーに接続するためにクライアントシステムにKnockクライアントをインストールする必要があります。
まず、次のコマンドを実行して、Knockdクライアントパッケージをインストールします。
apt-get install knockd -y
次に、次のノックシーケンスを使用して、サーバーのSSHポート22を開きます。
knock -v your-server-ip 7777 8888 9999
サーバーは、Knockd構成ファイルで定義した正しいシーケンスを受信すると、クライアントマシンのSSHポート22を開き、SSHサーバーに接続できるようになります。
ssh [email protected]
リモートSSHサーバーでタスクを完了したら、クライアントマシンから次のシーケンスを使用して、SSHポートを再度閉じることができます。
knock -v your-server-ip 9999 8888 7777
結論
上記のガイドでは、ポートノッキングでSSHサーバーを保護する方法を学びました。同じ方法を使用して、Linuxサーバー上の他のポートを保護できます。 Atlantic.NetのVPSホスティングでお試しください!