
2 台のサーバーにまたがるアプリケーションをセットアップしています。ファイアウォールが 2 台のサーバー間の通信をブロックしているため、アプリケーションが失敗します。ブロックされているポートをすべて特定して、それらのポートを開くように要求する方法が必要です。
これら 2 つのサーバーで tcpdump をキャプチャしました。ブロックされたポートを取得して SYN を検索し、その後 RST を検索するのが正しく方法でしょうか?
もしそうなら、ブロックされているすべてのポートを表示できる WireShark で作成できるフィルターはありますか?
答え1
まず、ファイアウォール サーバーからアクセスしてログを確認するのが最良の方法です。
この種のアクセス権がない場合は、調査を行う必要があります。
Wireshark は何が起こっているか確認できますが、それを行うための適切なツールではありません。確認するには、さらにツールを使用する必要があります。
次のようなシナリオがあると仮定します。
- サーバーにはアクセスできますが、ファイアウォールにはアクセスできません。
この場合、Linux で nmap ツールと nc ツールの両方を実行してポートを調査することをお勧めします。
░▒▓ │ /mnt/sda1/backup_home ▓▒░ nmap -Pn -v -v 10.1.1.20 ░▒▓ ✔ │ at 17:38:37 ▓▒░
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-24 17:39 -03
Initiating Parallel DNS resolution of 1 host. at 17:39
Completed Parallel DNS resolution of 1 host. at 17:39, 0.08s elapsed
Initiating Connect Scan at 17:39
Scanning 10.1.1.20 [1000 ports]
Discovered open port 8080/tcp on 10.1.1.20
Discovered open port 22/tcp on 10.1.1.20
Discovered open port 111/tcp on 10.1.1.20
Discovered open port 8000/tcp on 10.1.1.20
Discovered open port 9001/tcp on 10.1.1.20
Completed Connect Scan at 17:39, 0.49s elapsed (1000 total ports)
Nmap scan report for 10.1.1.20
Host is up, received user-set (0.047s latency).
Scanned at 2023-01-24 17:39:28 -03 for 1s
Not shown: 995 closed tcp ports (conn-refused)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack
111/tcp open rpcbind syn-ack
8000/tcp open http-alt syn-ack
8080/tcp open http-proxy syn-ack
9001/tcp open tor-orport syn-ack
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.59 seconds
nc -vnz 10.1.1.20 22 ░▒▓ 1 ✘ │ took 10s │ at 17:38:23 ▓▒░
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.1.20:22.
Ncat: 0 bytes sent, 0 bytes received in 0.05 seconds.
ご覧のとおり、サーバー上の開いているすべてのポートをプローブし、22 が使用可能であり、ファイアウォールによってブロックされていないことを確認しました。
しかし、問題があるかもしれません。お見せしましょう。
░▒▓ │ /mnt/sda1/backup_home ▓▒░ ssh [email protected] ░▒▓ ✔ │ at 17:39:29 ▓▒░
kex_exchange_identification: read: Connection reset by peer
Connection reset by 10.1.1.20 port 22
░▒▓ │ /mnt/sda/backup_home ▓▒░
このホストにアクセスできません。問題は、ファイアウォールの何らかのルールが SSH キー交換をブロックしていることです。どうすれば確認できますか? 確認には Wireshark を使用します。
「どれでも」をインターフェースとして設定し、サーバーに接続しようとしたところ、xxx.244 のファイアウォールが入り口をブロックしていることがわかりました。Wireshark でこのフィルターを使用します。
!(http or ssdp) && tcp.flags.reset==1
最初の部分はゴミをフィルタリングし、2 番目の部分はリセットを取得します。
[Wireshark フィルターと隠しファイアウォールの導入][1]
2 番目の部分では、そのホストに ping を実行し、同じキャプチャで tracepath コマンドも使用したときに問題の原因が確認されます。キャプチャされたパケットの 2 番目の部分でわかるように、このトレースは途中でブロックされました。
[1つ目はping、2つ目はトレースパス出力です][2]
ご覧のとおり、何が起こっているかを理解するには、さらに多くのツールを使用する必要があります。アプリケーションにログがあるかどうかも確認する必要があります。また、パスの途中にリバース プロキシなどがある可能性もあります。
使用できますいいえアプリケーションで使用する必要のある各ポートを使用してファイルを転送する単純なサーバーを一方的にシミュレートします。
クライアントでファイルを作成し、その中にゴミを入れます。
:>test.
cat <<EOF> test
asd
asdas
asd
asd
EOF
この例では、サーバーは 10.1.1.20 です。このサーバーのポート 3333 で netcat を実行します。たとえば、次のようになります。
nc -lv 3333 > test
クライアントで netcat を実行して、このサーバーにファイルを送信します。
nc -v 10.1.1.20 3333 <test
サーバーとクライアントで結果を監視します。必要なすべてのポートでこれを試してください。ファイアウォールがこれらのポートの一部をブロックしている場合は、このファイルを転送できません。
頑張ってください![1]:https://i.stack.imgur.com/avf0y.png [2]:https://i.stack.imgur.com/p5ylM.png