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_queue
。max-pending-packets
suricata.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
最後のオープンのコメントを削除すると、フォールトオープンサポートが有効になります。
フェイルオープンを有効にする前に、キューの長さを増やすことをお勧めします。