# 配置
## 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
重新载入配置文件. 但此功能并未完全实现.
===================华丽分割线===================
以上是翻译, 翻了大半天才发现倭钞! 最重要的接收过滤表达式配置语法呢?? 木有?!?!