IPtablesのTRACEターゲットを使用しようとしていますが、ログに記録されているトレース情報を取得できません。ここで説明されているものを使用したい Iptablesのデバッガー 。
TRACEのiptables manから:
This target marks packes so that the kernel will log every rule which match the packets as those traverse the tables, chains, rules. (The ipt_LOG or ip6t_LOG module is required for the logging.) The packets are logged with the string prefix: "TRACE: tablename:chain- name:type:rulenum " where type can be "rule" for plain rule, "return" for implicit rule at the end of a user defined chain and "policy" for the policy of the built in chains. It can only be used in the raw table.
私は次のルールを使用します:iptables -A PREROUTING -t raw -p tcp -j TRACE
ですが、/ var/log/syslogまたは/var/log/kern.logには何も追加されていません。
別のステップが欠けていますか?間違った場所を探していますか?
ログエントリが見つからない場合でも、パケットカウンタが増加するため、TRACEターゲットは正しく設定されているようです。
# iptables -L -v -t raw
Chain PREROUTING (policy ACCEPT 193 packets, 63701 bytes)
pkts bytes target prot opt in out source destination
193 63701 TRACE tcp -- any any anywhere anywhere
Chain OUTPUT (policy ACCEPT 178 packets, 65277 bytes)
pkts bytes target prot opt in out source destination
ルール iptables -A PREROUTING -t raw -p tcp -j LOG
doesパケット情報を/ var/log/syslogに出力します... TRACEが機能しないのはなぜですか?
実行:
modprobe ipt_LOG
それで解決しました。
新しいカーネルでは(IPv4の場合)これが必要である(つまり私にとってはうまくいく)ようです:
modprobe nf_log_ipv4
sysctl net.netfilter.nf_log.2=nf_log_ipv4
クレジット:
上記の両方の回答を次の順序で実行する必要があることがわかりました。
Sudo modprobe ipt_LOG
Sudo sysctl net.netfilter.nf_log.2=ipt_LOG
途中で発見したことがいくつかあります。
次のようにして、有効なロガーのリストを(現在選択されているロガーとともに)取得できます。
cat /proc/net/netfilter/nf_log
ここでの番号は、/usr/include/bits/socket.h
で定義されているプロトコルファミリ番号を表します。 2はAF_INET
(IPv4)、10はAF_INET6
(IPv6)です。
これは私にとってうまくいきましたSudo sysctl net.netfilter.nf_log.2=ipt_LOG