系统环境 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 –prefix=/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 –prefix=/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 –prefix=/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 –prefix=/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 –prefix=/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 下,或者做个链接也行。