サーバーがリモートサーバーへの接続を確立したかどうか、またはリモートサーバーがサーバーにアクセスしようとしたかどうかを知りたい。 lsof
の出力を読み取ってこの情報を取得しようとしました:
lsof -i TCP:25
USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 2657 root 12u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 12950 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 12950 postfix 9u IPv4 35762406 0t0 TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp 13007 postfix 13u IPv4 35762309 0t0 TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)
smtpd 14188 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 14188 postfix 9u IPv4 35748921 0t0 TCP hostname:smtp->XX.XX.XX.XX:55912 (ESTABLISHED)
smtpd 14897 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
この情報が、サーバーがspe.cif.ic.IP
に接続しようとしていることを意味するのか、それともその逆であるのかを知りたいのですが。
記号は->
に関連していますか、それとも別のコマンドを使用する必要がありますか?
手がかりはポート番号にあると思います、これらの2つのエントリを取ります
smtpd 12950 postfix 9u IPv4 35762406 0t0 TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp 13007 postfix 13u IPv4 35762309 0t0 TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)
smtpdは高いポート番号からポートsmtp(25)で接続を受信しましたが、smtpはリモートポートsmtp(25)に接続し、ローカルの高いポート番号を持っています。
そう ->
は接続されているを意味します
少なくともLinuxでは、lsof
は、情報が利用できない/proc/net/tcp
からリストを取得するため、接続を開始した側を特定できません。最初のアドレスは常にlocalエンドポイントを参照します。
最近のバージョンのss
ユーティリティ(接続情報を取得するために別のカーネルAPIを使用)は-e
を使用して方向を示しますが、残念ながらTCP接続の場合は使用できません。
@ XTianが言った のように、TCP/SCTP/UDPの場合、接続イニシエーターは通常ハイポートを使用し、宛先は通常よく知られているローポートであるため、通常はどちらであるかを推測できます。ただし、保証はありません。マシンが同じポートにlisteningソケットを持っているか持っていないかを確認することも、それがどちらの方向であるかを理解するのに役立ちます。たとえば、あなたのケースでは、おそらくポートsmtp/25
でリッスンしているプロセスがありますが、ポートunknown/34434
のいずれもリッスンしていません。 fake.VVVVV.fr
が、特にソースポート25/smtpを使用して、マシンのポート34434への接続を開始することはほとんどありません(可能性は低いですが、完全に可能です)。
より信頼性の高いものについては、接続トラッカーに問い合わせることができます。
システムのファイアウォール接続トラッカーは、接続を開始した(またはUDPなどのコネクションレス型トランスポートプロトコルの最初のパケットを送信した)端を追跡します。 conntrack
コマンドラインユーティリティまたはiptstate
top-likeコマンドを使用して、接続追跡テーブルをクエリできます。
ここで、各行の最初のアドレスは、接続を開始したアドレスになります。
追跡されたすべての接続が含まれるため、ルーターのようにシステムを介して転送される接続も含まれる可能性があることに注意してください。