Snort的安装与使用

Snort的安装与使用

一、Snort基础

       snort 是一个开源的轻量级入侵检测系统(NIDS),使用C语言编写。支持windows、Linux平台,我比较喜欢linux操作系统,所以在linux上学习研究snort。snort有三种工作模式,包括:嗅探、记录数据包、入侵检测。

1.1、Snort的规则头

1.1.1、规则动作

       规则的头包含了定义一个包的who,where和what信息,以及当满足规则定义的所有属性的包出现时要采取的行动。规则的第一项是"规则动作"(ruleaction),"规则动作"告诉snort在发现匹配规则的包时要干什么。在snort中有五种动作:alert、log、pass、activate和dynamic.

       1、Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包。

       2、Log-记录这个包。

       3、Pass-丢弃(忽略)这个包。

       4、activate-报警并且激活另一条dynamic规则。

       5、dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。

1.1.2、协议

      规则的下一部分是协议。Snort当前分析可疑包的ip协议有四种:tcp 、udp、icmp和ip。将来可能会更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。

1.1.3、ip地址

     规则头的下一个部分处理一个给定规则的ip地址和端口号信息。关键字"any"可以被用来定义任何地址。Snort没有提供根据ip地址查询域名的 机制。地址就是由直接的数字型ip地址和一个cidr块组成的。Cidr块指示作用在规则地址和需要检查的进入的任何包的网络掩码。/24表示c类网络, /16表示b类网络,/32表示一个特定的机器的地址。例如,192.168.1.0/24代表从192.168.1.1到192.168.1.255的 地址块。在这个地址范围的任何地址都匹配使用这个192.168.1.0/24标志的规则。这种记法给我们提供了一个很好的方法来表示一个很大的地址空间。

      有一个操作符可以应用在ip地址上,它是否定运算符(negation operator)。这个操作符告诉snort匹配除了列出的ip地址以外的所有ip地址。否定操作符用"!"表示。下面这条规则对任何来自本地网络以外的流都进行报警。

       alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86a5|"; msg: "external mountd access";)

1.1.4、端口号

       端口号可以用几种方法表示,包括"any"端口、静态端口定义、范围、以及通过否定操作符。"any"端口是一个通配符,表示任何端口。静态端口定 义表示一个单个端口号,例如111表示portmapper,23表示telnet,80表示http等等。端口范围用范围操作符":"表示。范围操作符 可以有数种使用方法,如下所示:

          log udp any any ->192.168.1.0/24 1:1024
     记录来自任何端口的,目标端口范围在1到1024的udp流

          log tcp any any ->192.168.1.0/24 :6000
    记录来自任何端口,目标端口小于等于6000的tcp流
          log tcp any :1024 ->192.168.1.0/24 500:
     记录来自任何小于等于1024的特权端口,目标端口大于等于500的tcp流

     端口否定操作符用"!"表示。它可以用于任何规则类型(除了any,这表示没有,呵呵)。例如,由于某个古怪的原因你需要记录除x windows端口以外的所有一切,你可以使用类似下面的规则:

         log tcp any any ->192.168.1.0/24 !6000:6010

1.1.5、方向操作符

       方向操作符"->"表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是流来自的源主机,方向操作符右边的ip地址和端口信 息是目标主机,还有一个双向操作符"<>"。它告诉snort把地址/端口号对既作为源,又作为目标来考虑。这对于记录/分析双向对话很方 便,例如telnet或者pop3会话。用来记录一个telnet会话的两侧的流的范例如下:

                log !192.168.1.0/24 any <>192.168.1.0/24 23

1.2、Snort的规则选项

        规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项用分号";"隔开。规则选项关键字和它们的参数用冒号":"分开。按照这种写法,snort中有42个规则选项关键字。

        msg              - 在报警和包日志中打印一个消息。

        logto             - 把包记录到用户指定的文件中而不是记录到标准输出。

        ttl                   - 检查ip头的ttl的值。

        tos                - 检查IP头中TOS字段的值。

        id                   - 检查ip头的分片id值。

        ipoption        - 查看IP选项字段的特定编码。

        fragbits        - 检查IP头的分段位。

       dsize              - 检查包的净荷尺寸的值 。

       flags              -检查tcp flags的值。

       seq                - 检查tcp顺序号的值。

       ack                 - 检查tcp应答(acknowledgement)的值。

       window         -  测试TCP窗口域的特殊值。

       itype               - 检查icmp type的值。

       icode             - 检查icmp code的值。

       icmp_id        - 检查ICMP ECHO ID的值。

      icmp_seq     - 检查ICMP ECHO 顺序号的值。

       content          - 在包的净荷中搜索指定的样式。

      content-list    -  在数据包载荷中搜索一个模式集合。

     offset - content         - 选项的修饰符,设定开始搜索的位置 。

     depth - content        - 选项的修饰符,设定搜索的最大深度。

     nocase                      - 指定对content字符串大小写不敏感。

     session                     - 记录指定会话的应用层信息的内容。

     rpc                               - 监视特定应用/进程调用的RPC服务。

     resp                             - 主动反应(切断连接等)。

     react                            - 响应动作(阻塞web站点)。

     reference                    - 外部攻击参考ids。

     sid                                - snort规则id。

     rev                                - 规则版本号。

     classtype                    - 规则类别标识。

      priority                        - 规则优先级标识号。

       uricontent                  - 在数据包的URI部分搜索一个内容。

       tag                               - 规则的高级记录行为。

      ip_proto                      - IP头的协议字段值。

     sameip                        - 判定源IP和目的IP是否相等。

     stateless                     - 忽略刘状态的有效性。

      regex                           - 通配符模式匹配。

      within                           - 强迫关系模式匹配所在的范围。

      byte_test                     -  数字模式匹配。

       byte_jump                 - 数字模式测试和偏移量调整。

二、Snort的安装与使用

               搭建环境:Ubuntu 16.04 LTS  Snort-2.9.9.0 daq-2.0.6

2.1、Snort daq安装

2.1.1、直接安装daq会提示如下错误

        
        cd daq
        ./configure
 
           

            

2.1.2、依赖包的安装

       1、安装bison 、flex,命令行输入:

              sudo apt-get install bison flex

      2、安装libpcap   

     tar-zxvf libpcap-1.7.4.tar.gz
      ./configure
      sudo make
      sudo make install
      sudo cp /usr/local/lib/libpcap.* /usr/lib/

     3、编译安装daq

         cd daq

         ./configure

         sudo make

         sudo make install

2.2、snort安装

      sudo apt-get install libpcre3-dev

      sudo apt-get installlibdumbnet-dev zlib1g-dev

      sudo mkdir /usr/local/snort

      ./configure --enable-sourcefire

      sudo make

      sudo make install

2.3、snort配置文件

          sudo mkdir /etc/snort

        将snort-2.9.9.0/etc/snort.conf拷贝到 /etc/snort目录下

           sudo  cp  /etc/snort.conf  /etc/snort

2.4、snort的基本命令

      1、启动snort

               sudo snort

      2、snort的帮助命令

               snort --help

     3、Snort启动 特定配置文件      

     sudo snort -i eth0 –c /etc/snort/snort.conf -A fast -l /var/log/snort

      4、规则    

     alert tcp any any -> 10.102.24.141 80 (msg:"Telnet Login";sid:26287) 

      alert icmp any any -> 10.102.24.141 any (msg:"ICMP PING";sid:8886288)

       5、测试

           ping 10.102.24.141 

         







你可能感兴趣的:(Snort)