http://farm4.static.flickr.com/3305/4588110530_a60c934289_o.png
このグラフはムニン収集netstat -s
出力。
接続がどこから来ているのかを確認したいと思います。 Wiresharkのダンプには明らかなものは何もありません。
Iptablesで何か凝ったことをしてから、しばらく経ちました。これらをログに記録するにはどうすればよいですか?
ありがとう
-s
接続がどこから来ているかを判断するには.... SSHトラフィックをログに記録する例を次に示します。カーネルログでの形式は次のようになります
MONTH DAY TIME SERVERNAME kernel: [IPTABLES] : IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=REMOTEIP DST=SERVERIP LEN=00 TOS=0x00 PREC=0x00 TTL=# ID=# DF PROTO=TCP SPT=# DPT=22 WINDOW=# RES=0x00 SYN URGP=0 OPT (#)
ここでは、MyLOGという新しいチェーンを作成します
# iptables -N MyLOG
万が一に備えて新しいチェーンを洗い流してください
# iptables -F MyLOG
tcpポート22でログ機能を作成し、ログをアラートに設定し、見やすい「[IPTABLES]」文字列をログ行の先頭に設定します。
# iptables -A MyLOG -i eth0 -p tcp --dport 22 -j LOG --log-level alert --log-tcp-options --log-ip-options --log-prefix '[IPTABLES] : '
myLOGチェーンを入力チェーンに接続します
# iptables -A INPUT -i eth0 -j MyLOG
これにより、ログがカーネルログに送信されます(ただし、Linuxの一部のフレーバーでは結果が異なる場合があります)。カーネルログを調整することで、ログをテストできます。
# tail -f /var/log/kern.log
コンソールを使用していて、画面全体に大量のデータが飛び散っているのに気付いた場合は、コンソールログ出力を次のように設定してみてください。
dmesg -n 1
「統計」を取得したい場合は、実行できます
# iptables -nvxL
出力には、チェーンが作成された時点から送信されたパケットとバイトの量が表示されます。
Chain MyLOG (1 references)
pkts bytes target prot opt in out source destination
61 4416 LOG tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0
ここにスクリプトがあります http://www.hilands.com/code-Shell-fw.html これは、特定のポートアクティビティをログに記録し、serverstats serverstats(berliosからダウンロード可能)のデータを収集するために使用しました。 NATの設定、ポート転送、ポートスキャンの中断を試み、ドロップの代わりにtcp-rejectsを使用します。
Serverstatsは理解するのが難しい場合があります。 RRDToolを使用するPHPスクリプトのセット。シェルスクリプトを使用してiptables出力をトリガーします。文字化けしたメモでは、構成配列を次のように変更する必要があると言われています。実行
'ssh-traffic' => array(
'used' => true,
'chains' => array('MyLOG'),
'graphs' => array(
'combined_bps' => array('used' => true, 'title' => 'Combined (bps)'),
'single_bps' => array('used' => true, 'title' => '%s (bps)'),
'combined_count' => array('used' => true, 'title' => 'Combined (count)'),
'single_count' => array('used' => true, 'title' => '%s (count)')
)
),
返信してくれてありがとう。
ここでの私の目標は、グラフのスパイクが規則的で周期的である理由を理解し、それらを停止させることです。これらはゆっくりと(一度に5つほど)入ってくる。 tcp接続が何らかの理由で失敗することは理解していますが、その規則性のために明らかに何かが進行中です。どこかでcronジョブ、ロードバランサーの設定ミス、または監視デバイスが原因であると思われます。
私はUTSLアプローチを採用することにしました。これが、これまでのところです。
netstat -sは、/ proc/net/snmpから統計を取得します。
すごい。したがって、カーネルは、接続の試行が失敗するたびにSNMPカウンターを更新します。
Idが達成したいのは、接続に失敗するたびに、このカウンターを更新するだけでなく、「$ timestampのIP $ fooからの接続試行の失敗」もログに記録することです。
では...接続試行の失敗と見なされるものは何ですか?
カーネルソースをダウンロード把握私が探しているカウンターはTCP_MIB_ATTEMPTFAILSであると結論付けます
2.6.18ソースツリーをgrepすると、これが参照されている場所が2つ見つかりました。
./net/ipv4/tcp_minisocks.c:
453 struct sock *tcp_check_req(struct sock *sk,struct sk_buff *skb,
454 struct request_sock *req,
455 struct request_sock **prev)
456 {
592 if (flg & (TCP_FLAG_RST|TCP_FLAG_SYN)) {
593 TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
594 goto embryonic_reset;
595 }
640 }
...そして、include/net/tcp.h
915 static inline void tcp_done(struct sock *sk)
916 {
917 if(sk->sk_state == TCP_SYN_SENT || sk->sk_state == TCP_SYN_RECV)
918 TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
919
920 tcp_set_state(sk, TCP_CLOSE);
921 tcp_clear_xmit_timers(sk);
922
923 sk->sk_shutdown = SHUTDOWN_MASK;
924
925 if (!sock_flag(sk, SOCK_DEAD))
926 sk->sk_state_change(sk);
927 else
928 inet_csk_destroy_sock(sk);
929 }
カウンターの更新を生成する条件がこれらの2つだけであることに少し驚いていますが、それは何でもです。
最初のブロックはかなり明白なようです。 「RSTフラグとSYNフラグの両方が設定されたTCPパケットが表示された場合は、TCP_MIB_ATTEMPTFAILSカウンターを更新し、接続をリセットしてください」。
これらをキャッチするために、次のiptablesルールを設定しました
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j LOG
iptables -A OUTPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j LOG
待機…..何もありません。 =(
2番目のブロックはもう少し不思議ですが、これは「ソケットを破棄するときにソケットが特定の状態にある場合は、TCP_MIB_ATTEMPTFAILSカウンターを更新する」ことを意味すると推測して想定します。
これ、これをテストする方法がわかりません。
私の質問は今です:1)私はこのグラフをどういうわけか誤解していますか? 2)私は正しい方向に進んでいますか? 3)カーネルモジュールを作成する以外に(私はそれを行うのに十分なスキルがありません)、どうすればロギングの目標を達成できますか?
ありがとう
-s
Iptablesが必要なものかどうかはわかりません。アクティブなままで、netstatが使用するのと同じシステムコールをポーリングするツールがあるかもしれません。あるいは、それを書くこともできます。
iptablesはパケットに反応して、パケットを処理します。あなたが見ているのは、基本的にすべてのアクティブなソケットの割り当てテーブルです。
さて、これらが実際に何であるかに応じて、これらの接続でパケットをキャッチできる可能性があります。
あまり印象的ではない状態のソケットがたくさんあり、長い間、ますます多くの数に増え続けている場合は、netstat -anp、iircの出力にもっと関心があります。プログラム。多分誰かがソケットを漏らしています。
それは私を非常に推測しています。そのグラフの変化を見たいものについて詳しく説明するのはどうですか。
私は自分自身についてコメントしましたが、表示されなかったので、編集します-他の投稿は、iptablesを使用して、wiresharkで表示できるはずのトラフィックをログに記録する方法を完全に明確に説明しています。パケットではなく、ソケットについて質問しているように聞こえます。追跡が難しいソケットは、通常、パケットを送受信していません。これは、リソースの浪費を示している場合があります。