
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 にあるはずだということがわかりました)