内核由函数ebt_nflog_init注册nflog目标,即结构ebt_nflog_tg_reg。

static struct xt_target ebt_nflog_tg_reg __read_mostly = {.name       = "nflog",.revision   = 0,.family     = NFPROTO_BRIDGE,.target     = ebt_nflog_tg,.checkentry = ebt_nflog_tg_check,.targetsize = sizeof(struct ebt_nflog_info),.me         = THIS_MODULE,
};
static int __init ebt_nflog_init(void)
{return xt_register_target(&ebt_nflog_tg_reg);
}

函数ebt_nflog_tg_check对于配置参数进行必要的合法性检查,确保日志前缀字符串的结束符,最长63字节(EBT_NFLOG_PREFIX_SIZE=64)。

static int ebt_nflog_tg_check(const struct xt_tgchk_param *par)
{struct ebt_nflog_info *info = par->targinfo;if (info->flags & ~EBT_NFLOG_MASK)return -EINVAL;info->prefix[EBT_NFLOG_PREFIX_SIZE - 1] = '\0';return 0;
}

对于匹配的报文,由ebt_log_packet函数输出报文信息。

static unsigned int
ebt_nflog_tg(struct sk_buff *skb, const struct xt_action_param *par)
{const struct ebt_nflog_info *info = par->targinfo;struct net *net = xt_net(par);struct nf_loginfo li;li.type = NF_LOG_TYPE_ULOG;li.u.ulog.copy_len = info->len;li.u.ulog.group = info->group;li.u.ulog.qthreshold = info->threshold;li.u.ulog.flags = 0;nf_log_packet(net, PF_BRIDGE, xt_hooknum(par), skb, xt_in(par),xt_out(par), &li, "%s", info->prefix);return EBT_CONTINUE;

日志配置

如下配置网桥,和ebtables规则nflog。

# ip link add br0 type bridge
# ip link set dev br0 up
# ip link set dev ens33 master br0
# ip addr add dev br0 192.168.3.143/24
#
# ebtables -A INPUT --nflog-group 32 --nflog-prefix NFLOG-FW --nflog-threshold 200
#
# ebtables -L
Bridge table: filterBridge chain: INPUT, entries: 1, policy: ACCEPT
--nflog-prefix "NFLOG-FW" --nflog-group 32 --nflog-threshold 200 -j CONTINUE

如下加载了ebt_nflog模块。

# lsmod | grep log
ebt_nflog              16384  1
nfnetlink_log          20480  1
nfnetlink              20480  4 nft_compat,nf_tables,nfnetlink_log
x_tables               49152  4 nft_compat,ip_tables,ebt_nflog
#
# sysctl -a | grep nf_log
net.netfilter.nf_log.0 = NONE
net.netfilter.nf_log.1 = NONE
net.netfilter.nf_log.10 = nfnetlink_log
net.netfilter.nf_log.11 = NONE
net.netfilter.nf_log.12 = NONE
net.netfilter.nf_log.2 = nfnetlink_log
net.netfilter.nf_log.3 = NONE
net.netfilter.nf_log.4 = NONE
net.netfilter.nf_log.5 = NONE
net.netfilter.nf_log.6 = NONE
net.netfilter.nf_log.7 = nfnetlink_log
net.netfilter.nf_log.8 = NONE
net.netfilter.nf_log.9 = NONE
net.netfilter.nf_log_all_netns = 0

配置ulogd,将NFLOG的group修改为32,与以上配置的ebtables规则中的nflog_group相同。

# cat /etc/ulogd.conf # this is a stack for logging packet send by system via LOGEMU
stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU[log1]
# netlink multicast group (the same as the iptables --nflog-group param)
# Group O is used by the kernel to log connection tracking invalid message
group=32

重启ulogd:

# service ulogd restart

日志显示如下,包括ARP、ICMP、ICMPv6和UDP协议日志:

# tail -f /var/log/ulog/syslogemu.log
Feb 20 02:22:46 localhost NFLOG-FW IN=br0 OUT= MAC=00:0c:29:e6:3f:62:00:0c:29:ea:2e:27:08:06 SRC=54.99.97.56 DST=64.99.97.56 PROTO=ARP REPLY REPLY_MAC=00:0c:29:ea:2e:27 MARK=0
Feb 20 02:22:46 localhost NFLOG-FW IN=br0 OUT= MAC=00:0c:29:e6:3f:62:00:0c:29:ea:2e:27:08:00 SRC=192.168.3.137 DST=192.168.3.139 LEN=84 TOS=00 PREC=0x00 TTL=64 ID=51721 DF PROTO=ICMP TYPE=8 CODE=0 ID=5 SEQ=1394 MARK=0
Feb 20 03:51:15 localhost NFLOG-FW IN=br0 OUT= MAC=33:33:ff:ea:2e:27:fc:87:43:ad:1e:3d:86:dd SRC=fe80::1 DST=ff02::1:ffea:2e27 LEN=72 TC=0 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0 MARK=0
Feb 20 03:51:15 localhost NFLOG-FW IN=br0 OUT= MAC=ff:ff:ff:ff:ff:ff:54:a7:03:16:55:c2:08:00 SRC=192.168.3.123 DST=192.168.3.255 LEN=147 TOS=00 PREC=0x00 TTL=64 ID=44822 PROTO=UDP SPT=1024 DPT=5001 LEN=127 MARK=0

内核版本 5.10

ebtables日志nflog相关推荐

  1. Netfilter 网桥日志

    定义网桥的日志结构nf_bridge_logger,类型为NF_LOG_TYPE_LOG,处理函数为nf_log_bridge_packet.目前内核支持的另一日志类型为NF_LOG_TYPE_ULO ...

  2. 利用iptabls的NFLOG记录自己的HTTP HTTPS上网行为

    利用iptabls的NFLOG记录自己的HTTP HTTPS上网行为 想要记录上网行为(一天都访问了什么网站)势必要解析TCP数据包,第一种方法是自己写一个内核模块来做这件事,但调内核模块一崩溃系统就 ...

  3. 转大神的日志 【大杂烩】杂7杂8的东西

    2013.8.21 今天是第一天搬到5栋,新的环境,新的面孔.工作上暂时没有安排,可以先看看资料,早上把iptables重新看了一下,整理了一下链和表的关系,并且在MR3080上进行了实验. 2013 ...

  4. python的日志库logging,真香!!!

    学习资源 Python之日志处理(logging模块) python之配置日志的几种方式 logging 官方高级用法 使用方法 LOG_FORMAT = "%(asctime)-15s - ...

  5. Docker学习(五)-----Docker查看日志

    八.Docker查看日志 docker logs 容器名称/ID docker logs -f -t --since="2018-12-1" --tail=10 qfjy_exam ...

  6. Springboot 利用AOP编程实现切面日志

    前言 踏入Springboot这个坑,你就别想再跳出来.这个自动配置确实是非常地舒服,帮助我们减少了很多的工作.使得编写业务代码的时间占比相对更大.那么这里就讲一下面向切面的日志收集.笔者使用lomb ...

  7. 【Springboot】日志

    springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层):                JCL(Jakarta Commons Logging)                ...

  8. log4j屏蔽掉某个包下的log日志打印

    在log4j的配置文件下配置 ## Disable other log log4j.logger.com.summaryday.framework.db=OFF log4j定义了8个级别的log(除去 ...

  9. SpringBoot集成AOP管理日志

    写在前面 如何将所有的通过url的请求参数以及返回结果都输出到日志中? 如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择.使用Spring的AOP功能即可完成. AOP ...

  10. 日志处理logger

    20220127 https://mp.weixin.qq.com/s/CgmfVqogqKBzezmIR7ZfsQ https://blog.csdn.net/kyle1314608/article ...

最新文章

  1. Homebrew 1.9发布,将支持Linux与Windows 10
  2. Bug思路不清晰严谨
  3. PostgreSQL表的行数统计
  4. Loj#6039-「雅礼集训 2017 Day5」珠宝【四边形不等式,dp】
  5. python打印长方形_利用python打印出菱形、三角形以及矩形的方法实例
  6. 【转载保存】搜索引擎调研文档
  7. oracle快速解析,教你用Oracle解析函数快速检查序列间隙
  8. racecar 尝试记录
  9. 思科模拟器CiscoPacketTracer下载
  10. Raspberry pi 3 DSI LCD研究筆記2nd TN92
  11. 安装服务器系统后鼠标键盘没反应,安装Win7系统以后键盘鼠标不能用/失灵没反应的缘由以及解决方法...
  12. QQ空间无敌装逼,复制下面的任一代码粘贴即可出现意想不到的图案。
  13. 括号配对检测python123_括的意思
  14. 前端根据后端返回数据导出指定样式的表格(xlsx-js-style)
  15. 似然函数以及最大似然估计
  16. 浪漫约定的守护者——微软最有价值专家余勇
  17. C语言-switch-case语句与多分支结构
  18. STM32之USART:RXD和TXD管脚互换、接收和发送的电平极性反转、支持数据高位与低位反序发送或接收
  19. ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。
  20. 【英文分词】英文分词处理中遇到的问题

热门文章

  1. 《孙子兵法》的优秀读后感作文2100字
  2. python编程基础知识点上的问题_python编程入门之二:必备基础知识-Go语言中文社区...
  3. 平台型时间信号强度曲线_MRI对动态增强时间信号曲线呈平台型乳腺纤维.PDF
  4. 我们穷极一生,究竟追寻的是什么?
  5. java 栅栏_Java并发包之闭锁/栅栏/信号量(转)
  6. 银行柜员绩效考核案例
  7. 台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线
  8. Vscode文件夹和代码各种颜色(详细汇总)
  9. Mysql客户端给字段添加中文数据报错SQL错误(1366):Incorrect string value: ‘\xE5\xA4\xA7\xE5\xB9\x85...‘ for column ‘nam
  10. 永中表格中自定义函数提取网址