系统环境
:
smoothwall-devel-3.0
需要软件
:
libdnet libpcap pcre pkg-config libnfnetlink libnetfilter_queue snort_inline
Snort_inline
原理
:
1.QUEUE
在
2.4
内核中出现了
ip_queue
,用于将数据包从内核空间传递到用户空间,其不足之处是只能有一个应用程序接收内核数据。到了
2.6.14
以后,新增了
nfnetlink_queue
,理论上可最大可支持
65536
个应用程序接口,而且可以兼容
ip_queue
。
不过从内核到用户空间的通道还是只有一个,实际上
netfilter
对每个协议族也只有一个队列,这里说的
65536
个子队列的实现就象
802.1Q
实现
VLAN
一样是在数据包中设置
ID
号来区分的,不同
ID
的包都通过相同的接口传输,只是在两端根据
ID
号进行了分类处理。
2.
用户空间
用户空间的支持库包括两个:
libnfnetlink
和
libnetfilter_queue
,后者需要前者支持,其源码可到
netfilter
网站上下载
。
3
.用户空间与
QUEUE
的关系
snort_inline
需要住在
kernel
的
netfilter
把流经本机的封包堆进
queue
里,接下来住在
user mode
里的
snort_inline
会使用
libnetfilter_queue
收取这些封包。当然上面这两件事分别在
kernel mode
与
user mode
完成,也没有一定的顺序关系,简单的说是一种多任务形式吧。
Snort_inline
安装
:
1.
libdnet
libdnet
.sourceforge.net
从此网站下载包
tar xzvf libdnet-1.10.tar.gz
cd libdnet-1.10
./configure �Cprefix=/modules/ips/dnet&&make&&make install
2
.
Libpcap
Wget [url]http://www.tcpdump.org/release/libpcap-0.9.8.tar.gz[/url]
Tar xzvf libpcap- 0.9.8 .tar.gz
Cd libpcap- 0.9.8
./configure �Cprefix=/modules/ips/libpcap&&make&&make install
3
.
Pcre
[url]http://sourceforge.net/project/showfiles.php?group_id=10194[/url]
从此网站下载包
tar xjvf pcre-7.4.tar.bz2
cd pcre-7.4
./configure �Cprefix=/modules/ips/pcre&&make&&make install
4
.
Pkg-config
注:因为编译
libnetfilter_queue
需要
pkg-config
和
libnfnetlink
的支持
Wget
[url]ftp://ftp.linux.ee/pub/gentoo/distfiles/distfiles/pkg-config-0.22.tar.gz[/url]
Tar xzvf pkg-config-0.22.tar.gz
Cd pkg-config-0.22
./configure �Cprefix=/modules/ips/pkg-config&&make&&make install
5
.
Libnfnetlink
Wget
[url]http://ftp.netfilter.org/pub/libnfnetlink/libnfnetlink-0.0.25.tar.bz2[/url]
Tar xjvf libnfnetlink- 0.0.25 .tar.bz2
Cd libnfnetlink- 0.0.25
./configure �Cprefix=/modules/ips/libnfnetlink&&make&&make install
6
.
Linnetfilter-queue
Wget [url]http://ftp.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-0.0.13.tar.bz2[/url]
Cd libnetfilter_queue- 0.0.13
PKG_CONFIG=/modules/ips/pkg-config/bin/pkg-config LIBNFNETLINK_CFLAGS=/modules/ips/libnfnetlink/include/libnfnetlink/libnfnetlink.h
LIBNFNETLINK_LIBS=/modules/ips/libnfnetlink/lib/ ./configure --prefix=/modules/ips/
Make&&make install
注:我在这里运行
make
一直未成功,有一次不知怎么了就成功了,后来再试就不行了!所以这个错误一直为解诀,这里的错误我会贴在
FAQ
里,如果有人安装成功了!请告诉我啊
7.
snort_inline
[url]http://snort-inline.sourceforge.net/[/url]
从此网站下载包
tar xzvf snort_inline- 2.6.1 .5.tar.gz
cd snort_inline- 2.6.1 .5
ln -s /modules/ips/include/libnetfilter_queue/ /usr/include/libnetfilter_queue
LDFLAGS='-L/modules/ips/lib' ./configure --prefix=/modules/ips/ --enable-nfnetlink --with-libpcre-includes=/modules/ips/pcre/include/ --with-libpcre-libraries=/modules/ips/pcre/lib/ --with-libpcap-includes=/modules/ips/libpcap/include/ --with-libpcap-libraries=/modules/ips/libpcap/lib/ --with-libnet-includes=/modules/ips/dnet/include/
--with-libnet-libraries=/modules/ips/dnet/lib/
Make&&make install
以上按我的步骤是可以成功的!!除开第
6
步有点问题之外!
如果大家用的是RPM系统的话,可以用yum install安装以上软件,就不会遇到编译上的问题了
运行:首先要定义一条iptables规则,例如:
iptables -A INPUT -i eth0 -p tcp -j NFQUEUE
启动IPS:snort_inline -c snort_inline.conf -QV
参数说明:
-c 指定配置文件
-Q 启动NFQUEUE
-V 显示数据包信息
FAQ:
Libnetfiter_queue
的错误
:
一.
checking for pkg-config... no
checking for LIBNFNETLINK... configure: error: Cannot find libnfnetlink >= 0.0.16
出现上面错误是因为未指明
PKG-CONFIG
搜索
libnfnetlink
的路径
,
所以编译
libnetfilter_queue
必须要加上
PKG_CONFIG=/modules/ips/pkg-config/bin/pkg-config LIBNFNETLINK_CFLAGS=/modules/ips/libnfnetlink/include/libnfnetlink/libnfnetlink.h
LIBNFNETLINK_LIBS=/modules/ips/libnfnetlink/lib
二.
gcc: cannot specify -o with -c or -S with multiple files
make[1]: *** [libnetfilter_queue.lo] Error 1
make[1]: Leaving directory `/modules/libnetfilter_queue- 0.0.13 /src'
make: *** [all-recursive] Error 1
GCC
的版本要
4.1.0
以上!!另外我找到解决方法!!但不是很好!
我是在
SMOOTHWALL
的环境里:
首先先运行
CC=/usr/local/bin/gcc
PKG_CONFIG=/modules/ips/pkg-config/bin/pkg-config
LIBNFNETLINK_CFLAGS=/modules/ips/libnfnetlink/include/libnfnetlink/ LIBNFNETLINK_LIBS=/modules/ips/libnfnetlink/lib/ ./configure --prefix=/modules/ips&&make
提示如下错误之后:
/modules/ips/libnfnetlink/include/libnfnetlink/: file not recognized: Is a directory
collect2: ld returned 1 exit status
make[1]: *** [nfqnl_test] Error 1
make[1]: Leaving directory `/modules/libnetfilter_queue- 0.0.13 /utils'
make: *** [all-recursive] Error 1
再运行
CC=/usr/local/bin/gcc
PKG_CONFIG=/modules/ips/pkg-config/bin/pkg-config
LIBNFNETLINK_CFLAGS=/modules/ips/libnfnetlink/include/libnfnetlink/linux_nfnetlink.h LIBNFNETLINK_LIBS=/modules/ips/libnfnetlink/lib/ ./configure --prefix=/modules/ips&&make
就
make
成功了
但是这种方法在
FC6
里行不通,,不过在RH系统,用RPM或者yum安装可以成功,我在FC6上测试成功过
Snort_inline
的错误
一.
checking for pcap_datalink in -lpcap... no
ERROR! Libpcap library/headers not found, go get it from
[url]http://www.tcpdump.org[/url]
or use the --with-libpcap-* options, if you have it installed
in unusual place
解决方法
:
--with-libpcap-includes=/modules/ips/libpcap/include/ --with-libpcap-libraries=/modules/ips/libpcap/lib/
像这样类似的错误,都是未指明路径而导致的。
二.
checking for dlsym in -ldl... no
checking for dlsym in -lc... no ERROR! programmatic interface to dynamic link loader not found. Cannot use dynamic plugin libraries.
我估计大家不会出现这种错误,这种错误是我编译的时候多加了一个参数,才导致这样的,我当初的是这样编的:
LDFLAGS='-L/usr/lib/libdl.a -L/usr/lib/libdl.so -L/modules/ips/lib -L/usr/local/lib -L/lib -L/usr/lib' ./configure --prefix=/modules/ips/ --enable-nfnetlink --with-libpcre-includes=/modules/ips/pcre/include/ --with-libpcre-libraries=/modules/ips/pcre/lib/ --with-libpcap-includes=/modules/ips/libpcap/include/ --with-libpcap-libraries=/modules/ips/libpcap/lib/ --with-libnet-includes=/modules/ips/dnet/include/ --with-libnet-libraries=/modules/ips/dnet/lib/ --with-dnet-includes=/modules/ips/dnet/include/dnet.h
解决方法就是把
--with-dnet-includes=/modules/ips/dnet/include/dnet.h
这个去掉就行了
三.
checking for linux/netfilter/nfnetlink_queue.h... yes
checking libnetfilter_queue/libnetfilter_queue.h usability... no
checking libnetfilter_queue/libnetfilter_queue.h presence... no
checking for libnetfilter_queue/libnetfilter_queue.h... no
configure: error: libnetfilter_queue/libnetfilter_queue.h not found ..
.
解决方法:这是因为在
/usr/include
下找不到
libnetfilter_queue/libnetfilter_queue.h
才导致的
,
所以要把这个文件放在
/usr/include
下,或者做个链接也行。
|