Linux: サーバー接続のネットワーク ログを探す

Linux: サーバー接続のネットワーク ログを探す

CentOS サーバーには、すべての接続を記録するログがありますか?

つまり集中化された接続ログのようなもの

答え1

すべての TCP 接続の単一の集中ログを取得する唯一の確実な方法は、 SYN ビットと ACK ビットが設定されたパケット (つまり、TCP 接続の 2 番目のパケット) をログに記録するLOGルールをソフトウェア ファイアウォール構成に追加することです。これらは、デフォルトiptablesでカーネル ログ メッセージとして表示されます。/var/log/messages

参照してくださいこの質問は Server Fault.SE にあります。

基本的には、次のような iptables ルールを追加します。

iptables -A OUTPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-prefix "Inbound connection established: "
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-prefix "Outbound connection established: "

(これらのルールを既存のルールセットに配置して、ループバック インターフェイスに適用されないようにすることをお勧めします。ループバック インターフェイスに適用されると、ホスト内のアプリケーション プロセス間のローカル接続ごとに 2 つのエントリが生成される可能性があるためです。)

そして、はい、OUTPUT チェーンのルールは受信接続を記録し、その逆も同様です。これは、実際に応答されている接続のみが記録されるためです。SYN パケットのみを記録すると、拒否される接続試行も記録されます。インターネット上のマルウェアに感染したシステムによって実行されるポート スキャンのため、多くの場合、役に立たないログ エントリが大量に生成されます。他のログと照合して、そのようなサービスがまったく実行されていないか、接続が別のiptablesルールまたは問題のサービスによって拒否されたことが判明するだけです。

UDP プロトコルの場合は、UDP はコネクションレスであり、基本的にはアプリケーション固有のプロトコルを構築できるプラットフォームにすぎないため、より複雑です。したがって、「接続の最初のパケット」などを検出する簡単な方法はありません。すべてが完全にアプリケーション固有になるからです。

答え2

こうすればいいと思います:

journalctl -fu sshd

または

journalctl -u sshd -n 100

つまり、systemd を実行している場合 (これがデフォルトだと思います) です。前者は監視を続けます。後者は tail をパイプすることと同じです。

(調べてみると、ログは実際には /var/log/secure にあるはずだということがわかりました)

関連情報