当前位置: 首页 > 工具软件 > ulogd > 使用案例 >

ULOGD用法

沈伟
2023-12-01

# 配置

## iptables的ULOG目标

 

### 例子

我们在防火墙中添加这样一条规则作为示例:

> iptables -A FORWARD -j ULOG --ulog-nlgroup 32 --ulog-prefix foo

为了提高性能, 还可以加上选项:

> --ulog-qthreshold N

这里1 < N ≤ 50, 指定的是每批次发送netlink消息中包含的包数量. 比如设置20, 那么内核会每20个包调度一次给ulogd, 然后ulogd一次性处理这20个包. 这就减少了内核态到用户态的上下文切换次数.

你当然也可以结合其他不同的netfilter匹配模块和ULOG目标一起使用, 详细的描述可以去netfilter的官网看它的HOWTO's.

 

### ULOG目标配置参数

#### --ulog-nlgroup N

接收netlink广播的组编号. 在ulogd中配置的组编号必须和ULOG目标中的组编号一致才能接收到.

#### --ulog-cprange N

截取包大小. 如同tcpdump中的snaplen参数, 比如指定40, 你会只收到每个包的前40字节. 0表示全部

#### --ulog-qthreshold N

队列大小. 如果一个包被iptables规则匹配上, 并且队列中已有N个包, 则内核会把整个队列发送到用户态. 这可以用于实现一种策略: 建立一个很大的队列来提高性能, 但仍然可以有一些特定的包会被立即记录并发送给用户态.

#### --ulog-prefix STRING

一个用于关联当前iptables规则和截获的包的字符串.

 

### 内核ipt_ULOG模块参数

内核ipt_ULOG模块可以在载入时指定一些参数, 可以并应该调整以适应需求:

#### nlbufsiz N

Netlink缓冲区大小. 给每个netlink组分配大小为N的缓冲区, 请注意由于内核内存分配限制, 缓冲区大小不能大于128k字节. 对于同样的数据包量, 缓冲区越大性能越好, 并能减少内核/用户态的上下文切换次数. 缺点就是潜在的较大延迟. 默认值是4096字节, 太小了.

#### flushtimeout N

此参数指定于多少次时钟计数(alpha是1毫秒,x86和大多数平台是10毫秒的时间单位)之后刷新缓冲区/队列, 无论其是否已满. 这可以弥补利用大缓冲区的优势的同时, 而只带来有限的延时. 默认值为10秒.

例如:

> modprobe ipt_ULOG nlbufsiz=65535 flushtimeout=100

设置缓冲区64k, 最大延时100时钟(x86上约1秒)

 

 

## ulogd

ulogd才是我们要讲的重点. 先说说它的配置:

 

### ulogd配置文件语法

ulogd的所有配置参数都写在配置文件中, 一般位于'/etc/ulogd.conf'.

全局配置参数:

#### nlgroup

本ulogd进程绑定的netlink多播组编号. 和iptables里面指定的`--ulog-nlgroup`选项对应.

#### logfile

主日志文件. ulogd把错误, 警告和其他一些意外内容写入这里. 除了常规的文件名, 也可以指定以下特殊值: `syslog`通过unix系统日志机制写入; `stdout`则写入stdout

#### loglevel

日志级别. 目前定义的有: 1=debug, 3=info, 5=notice, 7=error, 8=fatal

#### plugin

此参数后面跟上ulogd插件文件名, 则ulogd在初始化之前会加载它. 这个参数可以出现多次.

#### rmem

netlink socket接收内存大小. 请至少设置为内核发送缓冲区(即内核ipt_ULOG模块nlbufsiz参数)的大小. 注意实际的最大限制为`/proc/sys/net/core/rmem_max`, 超过的rmem参数被忽略. 有必要的话请先修改系统最大限制.

#### bufsize

接收缓冲区大小. 请至少设置为rmem的大小.

 

### ulogd命令行参数

#### -h --help

打印帮助消息

#### -V --version

打印版本信息

#### -d --daemon

后台模式启动. 除非调试, 否则基本上都要用到.

#### -c --configfile

指定配置文件. 单机启动多个ulogd实例的时候很有用.

 

 

# 信号/日志滚存

ulogd接收两种信号:

* SIGHUP

关闭并重新打开所有日志文件. 这主要是为了通知日志滚存脚本. 同时也会关闭并重连数据库连接.

* SIGUSR1

重新载入配置文件. 但此功能并未完全实现.

 

 

===================华丽分割线===================

以上是翻译, 翻了大半天才发现倭钞! 最重要的接收过滤表达式配置语法呢?? 木有?!?! 

 

 

 

 

 

 

 

 类似资料: