web-dev-qa-db-ja.com

サーバーがポートスキャンされないようにするためのベストプラクティスは何ですか

タイトルはおそらくそれをすべて言います。サーバーで開いているポートをポートスキャナーが検出しないようにするための最良の方法を知りたいだけです。 LinuxディストリビューションをOS(Ubuntuサーバー)として使用しています。

3
My kutje

ポートノッキング

ポートノッキングは、他のポートへの一連の接続試行(ノック)を実行することにより、ファイアウォールが通常閉じているポートを開く方法です。ポートノックの有効なシーケンスが発生すると、必要なポートが開きます。

ポートノッキングは、ドアが開くためのドアを特別にノックすることと考えてください。

ArchLinux wiki の例を次に示します。

$ ssh username@Host
(Ctrl+c to exit) ^C 
$ nmap -Pn --Host_timeout 201 --max-retries 0 -p 1111 Host
$ nmap -Pn --Host_timeout 201 --max-retries 0 -p 2222 Host
$ ssh user@Host
user@Host's password:

ユーザーがポートをノックする1111 に続く 2222ポートを開くには22 SSHの場合。

ポーツプーフ

Portspoof は、ポートスキャン結果の解釈を非常に困難にするプログラムです。そのため、開いているポートを特定するのが遅くなります。

Portspoofプログラムの主な目的は、一連の新しい手法を通じてOSのセキュリティを強化することです。

  • すべてTCPポートは常に開いています

特定のポートがCLOSEDまたはFILTERED状態であることを攻撃者に通知する代わりに、Portspoofはすべてのポート接続試行に対してSYN + ACKを返します。

  • その結果、すべてのポートが常にOPENとして報告されるため、システムに対してステルス(SYN、ACKなど)ポートスキャンを使用することは現実的ではありません。

  • すべてのオープンTCPポートはサービスをエミュレートします

Portspoofには動的なサービス署名の巨大なデータベースがあり、スキャナーをだまして正当なサービスが実行されていると信じ込むために使用されます。スキャンソフトウェアは通常、開いているポートで実行されているサービスバージョンを特定しようとします。 Portspoofは、サービス署名の正規表現データベースに基づいて動的に生成される有効なサービス署名ですべてのサービスプローブに応答します。その結果、攻撃者はシステムが実際に使用しているポート番号を特定できなくなります。

https://github.com/drk1wi/portspoofから引用

Portspoofは、リスニングサービスの識別をはるかに困難にします。READMEに記載されているように、実際にリッスンしているポートを識別するには8時間以上かかります。実際のポートの識別には時間がかかるため、攻撃者はその可能性が高くなります。あきらめる。

このガイド は、Portspoofのインストール方法を示しています。

  1. ソフトウェアをコンパイルし、ソースを解凍/配置したディレクトリに移動して、次のコマンドを実行します。

$。/ configure $ make $ Sudo make install

OR

$ g ++ -lpthread -Wall -g Configuration.cpp connection.cpp Portspoof.cpp revregex.cpp Utils.cpp Fuzzer.cpp Server.cpp -o portspoof

  1. ファイアウォールルールを設定します。

iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 1:65535 -j REDIRECT --to-ports 4444

iptables-restore <iptables-config(system_filesディレクトリ)

サービスエミュレーションを使用してPortspoofを実行します。

$ portspoof -c portspoof.conf -s portspoof_signatures -D

「オープンポート」モードでPortspoofを実行します。

$ portspoof -D

  1. システムの起動スクリプトにportspoofを追加します。これを行うには、「system_files」ディレクトリにあるデフォルトのinit.dスクリプトを変更または使用します。

PortspoofとPortknockingを組み合わせると、ポートスキャナーから優れた防御が得られます。

6
Joe

クライアント側で追加の苦労をせずにサーバーに接続できるようにしたい場合-これらのポートがスキャンされないように保護する方法はありません。それはオキシモロンです。ポートスキャンは、接続を試み、どの応答が返されるかを確認する試みです。

クライアント側で追加の対策を実行する場合は、ポートノッキングなどを使用できます。これにより、スキャンの試行のために一部のポートが開いたままになることに注意してください。これらのポートは、サーバーが実行されているポートではありません。

1
Vitaly Osipov

あなたがプレイできるいくつかのトリックがありますが、例えば疑わしい接続試行後にソースをブロックすると、世界のすべてのnmapにはすでに対策(スロースキャン、ランダムスキャンなど)もあります。

私見あなたは一歩下がって、何を恐れているのか、別名あなたの脅威モデルは何なのか自問するべきですか?攻撃者が開いているポートを知っている場合、セキュリティが低下しますか?それはすべきではないので。あなたは正面玄関を隠そうとせず、適切なロックを設置しますよね?

0
Tom

もう1つの解決策は、速度と遅延が大きな問題ではない場合にTorの隠しサービスを使用することです。これにより、ポートスキャンを使用してサービスを発見することが事実上不可能になり、かなり簡単に実行できます。また、暗号化や匿名性など、いくつかのより多くのプライバシーを提供します。サービスにアクセスするために必要なのはTorだけで、SOCKS5を使用してTor(ポート9050のデフォルト)経由で接続できます。プロキシチェーンまたはトルソックを使用して、SOCKS5をサポートしないプログラムをプロキシ化できます。非表示のサービスのパスワードを設定することもできます。

すべてのポートを隠しサービスとして設定し、インターネットからそれらを閉じることができます。

0
Daniel Grover

これを回避する唯一の方法は、インターネットから切断するか、シャットダウンすることです。

上記の方法や手法のいずれも、スキャンされていることを完全に回避することはできません。

もう1つの解決策は、速度と遅延が大きな問題ではない場合にTorの隠しサービスを使用することです。これにより、ポートスキャンを使用してサービスを発見することが事実上不可能になります

残念ながらあなたは間違っており、理由や方法を詳しく説明するつもりはありません。

0
Anonymouse