Suricata:nf_queue:いっぱい、パケット削除

Suricata:nf_queue:いっぱい、パケット削除

NFQUEUEモードでSuricata IDSを使用しています。

iptables -A PREROUTING -m mark ! --mark 0x1/0x1 -m comment --comment "Suricata NFQUEUE handler" -j NFQUEUE --queue-num 0 --queue-bypass

今日はしばらくサーバーポートが利用できず、次の場所にこのメッセージが表示されますkern.log

18:51:53 up02-lb kernel: nf_queue: full at 4096 entries, dropping packets(s)

どのように増やすことができますか?に追加したsysctlパラメータによって制御されません。これが役に立つかもしれません/proc/net/netfilter/nfnetlink_queuemax-pending-packetssuricata.yaml

答え1

この値は Suricata によって設定されます。 suricata.yamlの「max-pending-packets」を使用し、4を掛けます。

int r = NFQInitThread(ntv, (max_pending_packets * NFQ_BURST_FACTOR));
if (r != TM_ECODE_OK) {

そのうち、NFQ_BURST_FACTORは4です。よりhttps://github.com/inliniac/suricata/blob/71a3c4caac22b475c09ee2f082f11d443dc02cc0/src/source-nfq.c#L712

suricata.yamlの値を増やすことができます。 max-pending-packets を 4096 に設定すると、次のような出力が表示されます。

[6146] 7/6/2016 -- 20:31:12 - <Info> -- binding this thread 0 to queue '0'
[6146] 7/6/2016 -- 20:31:12 - <Info> -- setting queue length to 16384

もう一度試すことができるもう1つの方法は、「Failed Open」サポートを有効にすることです。これは、カーネル側でSuricataが追いつくことができないときにNFQがパケットを転送することを意味します。ただし、これにより一部のパケットが検査されないため、セキュリティ上のリスクが発生します。

suricata.yamlから:

# On linux >= 3.6, you can set the fail-open option to yes to have the kernel
# accept the packet if suricata is not able to keep pace.
nfq:
#  mode: accept
#  repeat-mark: 1
#  repeat-mask: 1
#  route-queue: 2
#  batchcount: 20
#  fail-open: yes

最後のオープンのコメントを削除すると、フォールトオープンサポートが有効になります。

フェイルオープンを有効にする前に、キューの長さを増やすことをお勧めします。

関連情報