ESTABLISHEDが残る症状の対応

muninの「Connections through firewall」を見ているとEstablished(黄緑)が長期間残っています。今のアクセス数では特に対処する必要もないのですが、気持ち悪いので対処してみます。

nf_conntrackを調べてみる

muninの「Connections through firewall」がチェックしている/proc/net/nf_conntrackを調査してみます。

dport=80が6本接続されたままになっています。本ブログはhttp(80)をhttps(443)に強制転送かけているので、通常のクライアントはport80が443に切り替わり80は接続断となるはず。

# cat /proc/net/nf_conntrack |grep EST
ipv4  2 tcp   6 373144 ESTABLISHED src=95.7.68.32   dst=157.7.142.114 sport=57316 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57316 [ASSURED] mark=0 secmark=0 use=2
ipv4  2 tcp   6 299    ESTABLISHED src=203.0.113.86 dst=157.7.142.114 sport=63482 dport=22 src=157.7.142.114 dst=203.0.113.86 sport=22 dport=63482 [ASSURED] mark=0 secmark=0 use=2
ipv4  2 tcp   6 373145 ESTABLISHED src=95.7.68.32   dst=157.7.142.114 sport=57329 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57329 [ASSURED] mark=0 secmark=0 use=2
ipv4  2 tcp   6 373144 ESTABLISHED src=95.7.68.32   dst=157.7.142.114 sport=57322 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57322 [ASSURED] mark=0 secmark=0 use=2
ipv4  2 tcp   6 373143 ESTABLISHED src=95.7.68.32   dst=157.7.142.114 sport=57306 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57306 [ASSURED] mark=0 secmark=0 use=2
ipv4  2 tcp   6 373145 ESTABLISHED src=95.7.68.32   dst=157.7.142.114 sport=57338 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57338 [ASSURED] mark=0 secmark=0 use=2

この接続元IPアドレスでhttpdログを確認するとUserAgentにFirefox/40.1のフレーズがあります。このUA、個人的にはBOT、特にWordPressのブルートフォース攻撃ツールだと思ってますが、本症状が発生するのはこのIPのみなので直接の関係性はなさそうです。

ひとまず異常に長いESTABLISHEDを短くしてセッションを早めに開放する対処をしてみようと思います。

nf_conntrack_tcp_timeout_establishedを調整する

とは言ったものの、どのKernelパラメータをいじればいいのか分かっていないので、ひとまず/proc/sys/net/netfilter
まわりを確認してみます。

# cd /proc/sys/net/netfilter
# ls -l
nf_conntrack_acct                  nf_conntrack_log_invalid              nf_conntrack_tcp_timeout_last_ack
nf_conntrack_buckets               nf_conntrack_max                      nf_conntrack_tcp_timeout_max_retrans
nf_conntrack_checksum              nf_conntrack_tcp_be_liberal           nf_conntrack_tcp_timeout_syn_recv
nf_conntrack_count                 nf_conntrack_tcp_loose                nf_conntrack_tcp_timeout_syn_sent
nf_conntrack_events                nf_conntrack_tcp_max_retrans          nf_conntrack_tcp_timeout_time_wait
nf_conntrack_events_retry_timeout  nf_conntrack_tcp_timeout_close        nf_conntrack_tcp_timeout_unacknowledged
nf_conntrack_expect_max            nf_conntrack_tcp_timeout_close_wait   nf_conntrack_udp_timeout
nf_conntrack_generic_timeout       nf_conntrack_tcp_timeout_established  nf_conntrack_udp_timeout_stream
nf_conntrack_icmp_timeout          nf_conntrack_tcp_timeout_fin_wait     nf_log

timeoutに関係する設定を一通り確認してみると・・・nf_conntrack_tcp_timeout_establishedが該当しそうです。

# cd /proc/sys/net/netfilter/
# cat nf_conntrack_tcp_timeout_close
10
# cat nf_conntrack_tcp_timeout_close_wait
60
# cat nf_conntrack_tcp_timeout_established
432000
# cat nf_conntrack_tcp_timeout_fin_wait
120
# cat nf_conntrack_tcp_timeout_last_ack
30
# cat nf_conntrack_tcp_timeout_max_retrans
300
# cat nf_conntrack_tcp_timeout_syn_recv
60
# cat nf_conntrack_tcp_timeout_syn_sent
120
# cat nf_conntrack_tcp_timeout_time_wait
120
# cat nf_conntrack_tcp_timeout_unacknowledged
300
# cat nf_conntrack_udp_timeout
30
# cat nf_conntrack_udp_timeout_stream
180
#

432000秒=5日間、ESTABLISHEDは残るってことですね。何を想定した設定なのかはわかりませんが、デフォルトでは随分と長い間セッションを残しておくのですね。Webサーバには長すぎなので、根拠はありませんが1時間=3600秒に設定変更してみます。

# vi /etc/sysctl.conf
+ net.netfilter.nf_conntrack_tcp_timeout_established = 3600
# sysctl -p

# cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
3600
nf_conntrack_tcp_timeout_establishedを変更しても既存のセッションには影響しない

nf_conntrack_tcp_timeout_establishedの変更直後にnf_conntrackを確認してみました。

3行目を見ると変更後のアクセスは3600からカウントダウンしていることがわかりますが、元々のセッションは37万秒のまま。既存のセッションには影響しないようですね。iptables再起動で強制的にセッションを切るのも手ですが、あと4日程度待ってみることにします。

# cat /proc/net/nf_conntrack |grep EST
ipv4     2 tcp      6 372274 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57316 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57316 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 299 ESTABLISHED src=203.0.113.86 dst=157.7.142.114 sport=63482 dport=22 src=157.7.142.114 dst=203.0.113.86 sport=22 dport=63482 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 3599 ESTABLISHED src=89.145.95.70 dst=157.7.142.114 sport=48311 dport=443 src=157.7.142.114 dst=89.145.95.70 sport=443 dport=48311 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 372275 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57329 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57329 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 372274 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57322 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57322 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 372273 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57306 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57306 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 372275 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57338 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57338 [ASSURED] mark=0 secmark=0 use=2
4日後のnf_conntrack

セッションが切れる時間の前にnf_conntrackを確かめてみました。順調にカウントダウンしています。

# cat /proc/net/nf_conntrack |grep EST
ipv4     2 tcp      6 559 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57316 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57316 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 299 ESTABLISHED src=203.0.113.86 dst=157.7.142.114 sport=50380 dport=50022 src=157.7.142.114 dst=203.0.113.86 sport=50022 dport=50380 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 560 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57329 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57329 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 559 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57322 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57322 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 558 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57306 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57306 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 560 ESTABLISHED src=95.7.68.32 dst=157.7.142.114 sport=57338 dport=80 src=157.7.142.114 dst=95.7.68.32 sport=80 dport=57338 [ASSURED] mark=0 secmark=0 use=2
その後の「Connections through firewall」

下記グラフの20:40以降を見るとわかるように、Establishedが残る状態が発生しても1時間で切断されることを確認しました。

スポンサーリンク