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

iptables 配置后连接不上数据库_iptables怎么配置ULOGd,我配置好了,但是在数据库ulogd,表ulog里面看不到任何记录。iptables规则已经写好了,而且有包匹配了规则,但是m...

谢承颜
2023-12-01

iptables之日志利器-ULOGD使用手记

ULOGD - the Userspace Logging

Daemon

引用一段作者的原话:

Harald Welte

<laforge@gnumonks.org>

http://www.gnumonks.org/gnumonks/pr..._details?p_id=1

This

packages is intended for passing packets from the kernel to userspace

to do

some logging there. It should work like that:

- Register a target called

ULOG with iptables

- if the target is hit:

- send the packet out using

netlink multicast facility

- return NF_CONTINUE immediately

New with

ipt_ULOG 0.8 we can accumulate packets in userspace and send

them in small

batches (1-50) to userspace. This reduces the amount of

expensive context

switches.

More than one logging daemon may listen to the netlink

multicast

address.

当我们在使用iptables配合LOG使用的时候,总感觉有些凌乱,因为里面啥都有,可我们只需要其中的一部分而已,并且从众多LOG中提取出的有用的记录,并且还要有效地组织起来还得真费一番脑筋,假如要是能把这些记录都存进数据库,那就好办了,于是查看iptables文档,发现了ULOG这个利器,以下就是我在安装,使用过程中的一点心得体会,希望能给有这需要的兄弟提供一点便利,当作抛砖引玉吧!

ULOG可以在用户空间记录被匹配的包的信息,这些信息和整个包都会通过netlink

socket被多播。然后,一个或多个用户空间的进程就会接受它们。换句话说,ULOG是至今iptables和Netfilter下最成熟、最完善的日志工具,它包含了很多更好的工具用于包的记录。这个target可以是我们把信息记录到MySQL或其他数据库中。这样,搜索特定的包或把记录分组就很方便了。

ULOG

直接由 iptables

将纪录写入mysql等数据库,效能比较好。

一、条件:如果内核版本>=2.4.18-pre8,那么内核已经支持ULOG了,一般会在/lib/modules/内核版本/kernel/net/ipv4/netfilter/

下会有ipt_ULOG.o,那就说明你不需要再重新编译内核了,如果你的没有,那得重新编译内核了,内核版本要高于2.4.18-pre8

在内核选项的将ULOG选上,然后重新编译/kernel/net/ipv4/netfilter这个目录就行了.

2.4内核用make

modules SUBDIRS=net/ipv4/netfilter,

2.6用make

./net/ipv4/netfilter,如果你不清楚的话,在你存放内核的目录使用make

--help,查看相关说明。

只编译对应模块就行了,没必要将内核重新编译一次,省时省力。

二、ulogd源码可以在此处找到http://ftp.netfilter.org/pub/ulogd/,Srpm包也可以在此处找到http://ftp.netfilter.org/pub/ulogd/

然后:

tar

-zxvf ulogd-1.23.tar.bz2

cd ulogd-1.23

./configure

--help

如果你想要它支持Mysql,或者是pgsql、sqlite3等,可加上选当参数--with-mysql=path或是--with-pgsql=path,这个要mysql-devel、pgsql-devel包,

使用rpm

-ql

mysql-devel,看看在什么路径,然后在加在后面,像我的系统是/usr/include,则为:--with-mysql=/usr/include

./configure

--with-mysql=/usr/include

如果其中有错误的话,看出错信息,将一些缺少的包装上,应该就没问题了。

make

make

install

默认安装路径为/usr/local/

至此安装过程完了,接下来就是具体使用它的功能了;

三、1.创建mysql数据库,这个在后面要用到:

以下为mysql数据库操作,为了使不会mysql的兄弟也能看懂,加上了注释;

#mysql

-u root

mysql>create database

ulogd;

#创建用于存放ulogd的数据库ulogd

mysql>grant create,select,insert on

ulogd.* to ulog_user@localhost identified by

'ulog_passwd'

#以上是将ulogd数据库的create,select,insert此三项权限赋于用户ulog_user,并且ulog_user只能从本机登陆,密码为:ulog_passwd

mysql>quit

然后我们要把ulogd内建的table输入到mysql,此table在/doc目录下,是个标准的sql文件,用于创建ulogd内置的ulog表:

cd

ulogd-1.23/doc

#cat mysql.table|mysql -D ulogd -u ulogd_user

-p

然后输入密码ulog_passwd,这样如果没出错的话,建好了,如果有出错,查看出错信息,找出原因;

验证一下是表是否成功:

#mysql

-u root

mysql>use ulogd;

mysql>show

tables;

查看其输出结果,看是否存在一个叫ulog的表,要是有了,就成功了。

四、接下来修改一下ulogd的配置文件:

如果你选择了支持mysql及其它一些参数的话,要先修改ulog的配置文件才能使用对应功能,

vi

/etc/ulogd.conf

将下面这段进行修改,修改为你在./configure所指定的参数即可,我选择的是支持mysql,如下:

#

output plugins.

plugin="@libdir@/ulogd_LOGEMU.so"

#plugin="@libdir@/ulogd_OPRINT.so"

#plugin="@libdir@/ulogd_MYSQL.so"

#plugin="@libdir@/ulogd_PGSQL.so"

#plugin="@libdir@/ulogd_SQLITE3.so"

#plugin="@libdir@/ulogd_PCAP.so"

修改为:

#

output plugins.

#plugin="@libdir@/ulogd_LOGEMU.so"

#注释掉此行

#plugin="@libdir@/ulogd_OPRINT.so"

plugin="@libdir@/ulogd_MYSQL.so"

#启用mysql作为输出插件

#plugin="@libdir@/ulogd_PGSQL.so"

#plugin="@libdir@/ulogd_SQLITE3.so"

#plugin="@libdir@/ulogd_PCAP.so"

还要修改mysql一些参数:表名、密码、用户名、数据库名、登陆主机;

[MYSQL]

table="ulog"

pass="changeme"

user="laforge"

db="ulogd"

host="localhost"

修改为和上面设置的参数一致:

[MYSQL]

table="ulog"

pass="ulog_passwd"

user="ulog_user"

db="ulogd"

host="localhost"

如果你喜欢其它的一些参数,请对应做修改就行:

好了,到此ulogd就已经都搞定了,

五、接下来就具体应用于功能:

首先启用ulogd进程:

ulogd

-d

也可以将ulogd-1.23目录下的ulogd.init拷贝到/etc/init.d/ulogd下,将ulogd路径做适当的修改,chkconfig

--level 235 ulogd on ,

service ulogd

start启动。

然后在iptables里面加入相应的对数即可;

共有四个参数可供使用:

1.--ulog-nlgroup

iptables

-A INPUT -p TCP --dport 22 -j ULOG --ulog-nlgroup 2

指定向哪个netlink组发送包,比如--

ulog-nlgroup 2。一共有32个netlink组,它们被简单地编号位1-32。默认值是1。

2.--ulog-prefix

iptables -A INPUT -p TCP --dport 22 -j ULOG

--ulog-prefix "SSH connection attempt: "

指定记录信息的前缀,以便于区分不同的信息。使用方法和

LOG的prefix一样,只是长度可以达到32个字符。

3.--ulog-cprange

iptables -A INPUT -p TCP

--dport 22 -j ULOG --ulog-cprange

100

指定每个包要向“ULOG在用户空间的代理”发送的字节数,如--ulog-cprange

100,

表示把整个包的前100个字节拷贝到用户空间记录下来,其中包含了这个包头,还有一些包的引导数据。默认值是0,表示拷贝整个包,不管它有多大。

4.--ulog-qthreshold

iptables

-A INPUT -p TCP --dport 22 -j ULOG --ulog-qthreshold

10

告诉ULOG在向用户空间发送数据以供记录之前,要在内核里收集的包的数量,如--ulog-qthreshold

10。

这表示先在内核里积聚10个包,再把它们发送到用户空间里,它们会被看作同一个netlink的信息,只是由好几部分组成罢了。

默认值是1,这是为了向后兼容,因为以前的版本不能处理分段的信息

当你在需要记录日志的地方使用了ULOG后,如果有包被匹配的话,在你的mysql的数据库ulogd里就会有相应的记录了,在这

里不得不说一句它的缺陷,当我查看记录的时候发现登记的ip地址是一个无符号整形数,也就是说你要自己将它进行转化,

先将它转化为16进制,然后每两位再转化为10进制就可以了,一点都不直观,不知道能不能修改一下,有能力的兄弟

自己修改一下吧,呵呵,记录下的数据你就可以通过登陆mysql数据库来进行查看,并且现在有很多mysql的前端工具,

配合使用这些工具查看起来就会更为方便了,如phpMyAdmin等,这部分内容就不在此

 类似资料: