转到正文

DalianSky's Blog

正在修建中的空中楼阁

存档

分类: 网络安全

现网站和外挂经常带arpddos攻击,本来用ros做网吧路由器顶不住ddos,只能换FB6.2+pf,前几天用FB6.1+PF,人多时出watchdog timeout,老大说用FB6.2可能不会出了,那就装起测测看,下面是安装步骤,操作一个写一个,

cd /usr/src/sys/i386/conf
cp GERENIC PFOK
ee FFOK

修改并加入下面东东
复制内容到剪贴板代码:
ident PFOK
device pf
device pflog
device pfsync
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_PRIQ
options ALTQ_NOPCC
options PANIC_REBOOT_WAIT_TIME=0
options DEVICE_POLLING
options HZ=2000
options IPSTEALTH
# options RANDOM_IP_ID
options TCP_DROP_SYNFIN
config PFOK
cd /usr/src/sys/i386/compile/PFOK
make depend
make
make install
reboot

ee /etc/sysctl.conf

net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet.tcp.drop_synfin=1
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=65536
#net.inet.udp.sendspace=65535
net.inet.udp.maxdgram=65535
net.local.stream.sendspace=65535
net.inet.tcp.rfc1323=1
#net.inet.tcp.rfc1644=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1
kern.ipc.maxsockbuf=2097152
kern.maxfiles=65536
kern.maxfilesperproc=32768
kern.polling.enable=1
kern.polling.burst_max=500
kern.ipc.somaxconn=2048
kern.ipc.nmbclusters=32768
net.inet.tcp.delayed_ack=0
net.inet.icmp.icmplim=100
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1

ee /boot/loader.conf
autobootdelay=”2″

ee /etc/rc.conf
sendmail_enable=”NONE”
sendmail_submit_enable=”NO”
sendmail_outbound_enable=”NO”
sendmail_msp_queue_enable=”NO”
clear_tmp_enable=”YES”
update_motd=”NO”
tcp_drop_synfin=”YES”
#icmp_drop_redirect=”YES”
#icmp_log_redirect=”YES”
#log_in_vain=”YES”
#accounting_enable=”YES”
pf_enable=”YES”
pf_rules=”/etc/pf.conf”
pf_flags=”"
#pflog_enable=”YES”
#pflog_logfile=”/var/log/pflog”
这里我就加了句pf_enable=”YES”

uname -a
FreeBSD pf.com 6.2-RC1 FreeBSD 6.2-RC1 #0: Thu Nov 23 04:20:46 CST 2006sshpf@pf.com:/usr/src/sys/i386/compile/PFOK i386

我的pf.conf

#pfctl -e -F all -f /etc/pf.conf

#只重新load过滤规则
#pfctl -F rules -Rf /etc/pf.conf

#pfctl -f /etc/pf.conf # 重新加载pf.conf 设定档
#pfctl -nf /etc/pf.conf # 确认语法有无符合,但不载入
#pfctl -Nf /etc/pf.conf # 只加载 NAT 的设定档
#pfctl -Rf /etc/pf.conf # 只加载防火墙的过滤设定档

#pfctl -sn # 显示现阶段 NAT 的规则
#pfctl -sr # 显示现阶段过滤的规则
#pfctl -ss # 显示现阶段封包运作状态
#pfctl -si # 显示现阶段过滤封包的统计资料
#pfctl -sa # 显示现阶段所有统计的数据
复制内容到剪贴板代码:
ext_if=”rl0″
#edu_if=”"
int_if=”fxp0″

ext_addr=”192.168.1.51″

int_net=”172.16.0.0/16″
ext_net = “192.168.0.0/16″
loop = “{lo0, 127.0.0.1}”
OpenPorts = “{21, 22, 80, 88, 4899}”
InsideManagerIPs = “{172.16.0.100}”
InsiteManagerOpenPorts = “{21, 22, 23, 24, 25, 80, 4899}”
priv_nets = “{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12}” # 定义符合 RFC 1918 私有IP 部份
tcp_services = “{ 22, 88, 4899, 123 }” # 定义对外服务的端口
icmp_types = “echoreq” # 定义icmp类型

## down inactive connection quickly
set optimization aggressive

# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in all

nat on $ext_if from $int_net to any -> ($ext_if)
#nat on $ext_if from $int_net to $ext_net -> ($ext_if)

#web server map
#rdr pass on $ext_if proto tcp from any to $ext_if port {www,3389,4899,7745} -> $web_server

#—————————-以下防DOS攻击——————————–
#每个IP最大可以有120个非并发的连接(为局域网用户访问本站考虑)
#每个IP最大连接建立的速率小于每秒8个
#单个IP的最大持续连接数 30
#违反以上规则,把这个ip添加到<abusive_hosts>表中
table <abusive_hosts> persist #维持一个持续的表
block in quick from <abusive_hosts> #阻止表中的ip
pass in on $int_if inet proto tcp from any to $int_if flags S/SA keep state \
(source-track rule,max-src-conn 100, max-src-conn-rate 15/3,max-src-states 30,overload <abusive_hosts> flush, src.track 1)

LSassVirusPort = “{445, 135, 139, 593, 512, 5554, 9996, 9995}”
block quick on $int_if inet proto tcp from any to any port $LSassVirusPort

BitTorrentPort= “{ 512, 2049, 4662, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, \
6890, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889, 8890, 6969, 10700, 21881}”
block quick on $int_if inet proto tcp from any to any port $BitTorrentPort
block quick on $int_if inet proto tcp from any port $BitTorrentPort to any
block quick on $ext_if inet proto tcp from any to any port $BitTorrentPort
block quick on $ext_if inet proto tcp from any port $BitTorrentPort to any

#gameClientPorts = “{4002, 2000, 3838, 4410, 4210, 4230, 5005, 4290, 10010 }”
#GameDenyClients =”{192.168.128.0/24, 192.168.132.0/24}”
#GameServerIps = “{204.251.15.167, 61.152.93.145}”
#block quick on $int_if inet proto tcp from $GameDenyClients to any port $gameClientPorts
#block quick on $ext_if from $GameServerIps to $GameDenyClients
#block quick on $int_if from $GameDenyClients to $GameServerIps

denyserverips = “{202.108.193.21}”
block quick on $int_if from any to $denyserverips

#LSassVirusIp =”{192.168.1.194}”
#block quick on $int_if from $LSassVirusIp to any

Google ReaderGoogle BookmarksFacebookTwitterYahoo BookmarksMySpaceHotmailYahoo MailWordPressYahoo MessengerShare

作者:杨文博 <http://blog.solrex.cn>
地址:http://blog.solrex.cn/articles/implement-snort-ids-on-ubuntu-710.html

最后更新时间:2007年12月05日20点47分

摘要:

这份文档主要描述了我在 Ubuntu 7.10 上安装部署 Snort 入侵检测系统和 acid 基于 PHP 的网页入侵检测数据库分析控制台的过程。

目录

1. 介绍
2. 安装过程
3. 总结
4. 参考文章

1. 介绍

Snort 是一款非常优秀的开源主机入侵检测系统软件,可以用来对主机的网络状况进行记录、分析和报警,并且支持用户自定义规则库。Snort 在 Windows 平台和 Linux 平台上均可运行,详细介绍请访问 Snort 的官方网站:http://www.snort.org 。

Snort的默认记录是存放在 log 文本文件中,而为了观察监控方便起见,一般使用 acidbase 这个网页控制台来查看(好像 MySQL 的 phpmyadmin)。所以整个过程需要:安装 snort 和相应包;安装 LAMP(Linux, Apache, MySQL, PHP) 服务器;在MySQL数据库中建立好Snort数据库并配置 Snort 使其将 log 存放在 MySQL 数据库中;为基于 PHP 的入侵检测数据库分析控制台 (acidbase) 配置好数据库连接。

2. 安装过程

[安装LAMP,Snort和一些软件库]

由于 Ubuntu 是 Debian 系的 Linux,安装软件非常简单,而且 Ubuntu 在中国科技大学有镜像,在教育网和科技网下载速度非常快(2~6M/s),就省掉了出国下载安装包的麻烦,只需要一个命令即可在几十秒钟内安装好所有软 件。这里使用 Ubuntu 默认命令行软件包管理器 apt 来进行安装。

$ sudo apt-get install libpcap0.8-dev libmysqlclient15-dev mysql-client-5.0 mysql-server-5.0 bison flex apache2 libapache2-mod-php5 php5-gd php5-mysql libphp-adodb php-pear pcregrep snort snort-rules-default

需要注意的是在安装 MySQL 数据库时会弹出设置 MySQL 根用户口令的界面,临时设置其为“test”。

[在 MySQL 数据库中为 Snort 建立数据库]

Ubuntu 软件仓库中有一个默认的软件包 snort-mysql 提供辅助功能,用软件包管理器下载安装这个软件包。

$ sudo apt-get install snort-mysql

安装好之后查看帮助文档:

$ less /usr/share/doc/snort-mysql/README-database.Debian

根据帮助文档中的指令,在 MySQL 中建立 Snort 的数据库用户和数据库。所使用的命令如下:

$ mysql –u root –p

在提示符处输入口令 test.

mysql> CREATE DATABASE snort;
mysql> grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort@localhost;
mysql> grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort;
mysql> SET PASSWORD FOR snort@localhost=PASSWORD(‘snort-db’);
mysql> exit

以上命令的功能是在 MySQL 数据库中建立一个 snort 数据库,并建立一个 snort 用户来管理这个数据库,设置 snort 用户的口令为 snort-db。

然后根据 README-database.Debian 中的指示建立 snort 数据库的结构。

$ cd /usr/share/doc/snort-mysql
$ zcat create_mysql.gz | mysql -u snort -D snort -psnort-db

这样就为 snort 在 MySQL 中建立了数据库的结构,其中包括各个 snort 需要使用的表。

[设置 snort 把 log 文件输出到 MySQL 数据库中]

修改 Snort 的配置文件:/etc/snort/snort.conf

$ sudo vim /etc/snort/snort.conf

在配置文件中将 HOME_NET 有关项注释掉,然后将 HOME_NET 设置为本机 IP 所在网络,将 EXTERNAL_NET 相关项注释掉,设置其为非本机网络,如下所示:

#var HOME_NET any
var HOME_NET 210.77.8.0/16
#var EXTERNAL_NET any
var EXTERNAL_NET !$HOME_NET

将 output database 相关项注释掉,将日志输出设置到 MySQL 数据库中,如下所示:

output database: log, mysql, user=snort password=snort-db dbname=snort host=localhost
#output database: log, mysql

这样,snort 就不再向 /var/log/snort 目录下的文件写记录了,转而将记录存放在 MySQL 的snort数据库中。这时候可以测试一下 Snort 工作是否正常:

$ sudo snort -c /etc/snort/snort.conf

如果出现一个用 ASCII 字符画出的小猪,那么 Snort 工作就正常了,可以使用 Ctrl-C 退出;如果 Snort 异常退出,就需要查明以上配置的正确性了。

[测试 Web 服务器 Apache 和 PHP 是否工作正常]

配置 apache 的 php 模块,添加 msql 和 gd 的扩展。

$ sudo vim /etc/php5/apache2/php.ini
extension=msql.so
extension=gd.so

重新启动 apache

$ /etc/init.d/apache2 restart

在/var/www/目录下新建一个文本文件test.php

$ sudo vim /var/www/test.php

输入内容:

<?php
phpinfo();
?>

然后在浏览器中输入 http://localhost/test.php,如果配置正确的话,就会出现 PHP INFO 的经典界面,就标志着 LAMP 工作正常。

[安装和配置 acid-base]

安装 acid-base 很简单,使用 Ubuntu 软件包管理器下载安装即可:

$ sudo apt-get install acidbase

安装过程中需要输入 acidbase 选择使用的数据库,这里选 MySQL,根用户口令 test,和 acid-base 的口令(貌似也可以跳过不设置)。

将acidbase从安装目录中拷贝到www目录中,也可以直接在apache中建立一个虚拟目录指向安装目录,这里拷贝过来主要是为了安全性考虑。

sudo cp –R /usr/share/acidbase/ /var/www/

因为 acidbase 目录下的 base_conf.php 原本是一个符号链接指向 /etc/acidbase/ 下的base_conf.php,为了保证权限可控制,我们要删除这个链接并新建 base_conf.php 文件。

$ rm base_conf.php
$ touch base_conf.php

暂时将 /var/www/acidbase/ 目录权限改为所有人可写,主要是为了配置 acidbase 所用。

$ sudo chmod 757 acidbase/

现在就可以开始配置 acid-base 了,在浏览器地址栏中输入 http://localhost/acidbase,就会转入安装界面,然后就点击 continue 一步步地进行安装:

选择语言为 english,adodb 的路径为:/usr/share/php/adodb;选择数据库为 MySQL,数据库名为 snort,数据库主机为 localhost,数据库用户名为 snort 的口令为 snort-db;设置 acidbase 系统管理员用户名和口令,设置系统管理员用户名为 admin,口令为 test。然后一路继续下去,就能安装完成了。

安装完成后就可以进入登录界面,输入用户名和口令,进入 acidbase 系统。

这里需要将 acidbase 目录的权限改回去以确保安全性,然后在后台启动 snort,就表明 snort 入侵检测系统的安装完成并正常启动了:

$ sudo chmod 775 acidbase/
$ sudo snort -c /etc/snort/snort.conf -i eth0 –D

[检查入侵检测系统工作状况,更改入侵检测规则]

正常情况下在一个不安全的网络中,登录 acidbase 后一会儿就能发现网络攻击。如果没有发现网络攻击,可以添加更严格的规则使得正常的网络连接也可能被报攻击,以测试 Snort IDS 的工作正确性,比如在 /etc/snort/rules/web-misc.rules 的最后添加下面的话:

$ sudo vi /etc/snort/rules/web-misc.rules
alert tcp any :1024 -> $HTTP_SERVER 500:

这一行的意思是:对从任何地址小于 1024 端口向本机 500 以上端口发送的 tcp 数据包都报警。杀死 Snort 的后台进程并重新启动,就应该能检测到正常的包也被当作攻击了。

$ sudo kill `pgrep snort`
$ sudo snort –c /etc/snort/snort.conf –i eth0 -D

3. 总结

使用 Ubuntu 部署 Snort 入侵检测系统和网页控制台是相当容易的,因为 Ubuntu 提供了很方便的软件包安装功能,只是有时候定制性能太差,需要用户手动去寻找软件包的安装位置。

4. 参考文章

http://www.howtoforge.com/intrusion-detection-with-snort-mysql-apache2-on-ubuntu-7.10

Google ReaderGoogle BookmarksFacebookTwitterYahoo BookmarksMySpaceHotmailYahoo MailWordPressYahoo MessengerShare

第1 Snort简介

第2 软件列表

第3 Snort 安装与配置

第4 Snort操作与使用

第5 常见问题与解决方法

第1章 Snort简介

Snort是一个免费的IDS(入侵监测系统)软件。它的一些源代码是从著名的tcpdump软件发展而来的。它是一个基于libpcap包的网络监控软件,可以作为一个十分有效的网络入侵监测系统。它能够监测多种网络攻击和探测,例如:缓冲器溢出攻击,端口扫描,CGI攻击,SMB探测等等。Snort具有实时的告警能力,将告警记入一个特别的告警文件系统日志,或者将告警信息通过samba转发给另一台Windows PC机。
Snort首先根据远端的ip地址建立目录,然后将检测到的包以tcpdump的二进制格式记录或者以自身的解码形式存储到这些目录中.这样一来,你就可以使用snort来监测或过滤你所需要的包.

snort是一个轻量级的入侵检测系统,它具有截取网络数据报文,进行网络数据实时分析、报警,以及日志的能力。snort的报文截取代码是基于libpcap库的,继承了libpcap库的平台兼容性。它能够进行协议分析,内容搜索/匹配,能够用来检测各种攻击和探测,例如:缓冲区溢出、隐秘端口扫描、CGI攻击、SMB探测、OS指纹特征检测等等。snort使用一种灵活的规则语言来描述网络数据报文,因此可以对新的攻击作出快速地翻译。snort具有实时报警能力。可以将报警信息写到syslog、指定的文件、UNIX套接字或者使用WinPopup消息。snort具有良好的扩展能力。它支持插件体系,可以通过其定义的接口,很方便地加入新的功能。snort还能够记录网络数据,其日志文件可以是tcpdump格式,也可以是解码的ASCII格式。


第2章 软件列表

软件名称

功能简述

正式网址

软件版本

Snort

网络入侵探测器

www.snort.org/

1.8.6

Libpcap

Snort所依赖的网络抓包库

www.tcpdump.org/

0.7.1

MySQL

入侵事件数据库

www.mysql.org/

3.23.49

Apache

Web服务器

www.apache.org/

1.3.24

Mod_ssl

Apache提供SSL加密功能的模块

www.modssl.org/

2.8.8

OpenSSL

开放源代码的SSL加密库,为mod_ssl所依赖

www.openssl.org/

0.9.6d

MM

Apache的模块提供共享内存服务

www.engelschall.com/

1.1.3

ACID

基于Web的入侵事件数据库分析控制台

www.cert.org/kb/aircert/

0.9.6b21

PHP

ACID的实现语言

www.php.net/

4.0.6

GD

PHP用来即时生成PNGJPG图像的库

www.boutell.com/gd/

1.8.4

ADODB

ACID提供便捷的数据库接口

php.weblogs.com/ADODB

2.00

PHPlot

ACID所依赖的制图库

www.phplot.com/

4.4.6


第3章 Snort 安装与配置

在正式进行软件安装之前,请检查系统,确保拥有符合ANSI标准的C/C++编译器等软件开发工具。

1.安装入侵事件数据库MySQL

首先,以超级用户的身份登录系统,创建MySQL 用户和MySQL用户组; 然后,以MySQL身份登录,按照缺省配置将MySQL安装在/usr/local目录下;接下来,将源代码树中的缺省配置文件My.cnf拷贝到/etc目录下;再用超级用户身份执行源码树中Scripts目录下的可执行脚本文件Mysql_install_db创建初始数据库; 随后,用/etc/init.d/mysql.server命令启动数据库服务器,使用/usr/local/bin/mysqladmin程序改变数据库管理员的口令。

2.安装Snort

首先安装Snort所依赖的网络抓包库Libpcap,将其按照缺省配置安装在/usr/local目录下之后,开始正式安装Snort

#gzip -d -c snort-1.8.6.tar.gz | tar xvf -

#cd snort-1.8.6

#./configure –prefix=/usr/local –with-mysql=/usr/local

–with-libpcap-includes=/usr/local \

–with-libpcap-libraries=/usr/local

#make

#make install

安装完毕后,将源码树中的Snort.conf文件、Classification.config文件和规则文件(*.rules)拷贝到系统的/etc目录下。

按照下列步骤配置Snort,以便将其捕获的网络信息输出到MySQL数据库。

1)创建Snort入侵事件数据库和存档数据库。

#/usr/local/bin/mysqladmin -u root -p create snort

#/usr/local/bin/mysqladmin -u root -p create snort_archive

2)执行Snort源码树下Contrib目录下的Create_mysql SQL脚本文件,创建相关表。

#/usr/local/bin/mysql -u root -D snort -p < create_mysql

#/usr/local/bin/mysql -u root -D snort_archive -p < create_mysql

3)编辑/etc/snort.conf文件,在Output Plugin 段中加入如下一行:

output database: alert, mysql, user=root password=abc123 dbname=snort host=localhost

3.安装Web服务器Apache

1)安装MM

按照缺省配置将MM库安装在/usr/local目录下。

2)安装OpenSSL

按照缺省设置将OpenSSL安装在/usr/local目录下。

3)为Apache扩展mod_ssl代码

#gzip -d -c apache-1.3.24.tar.gz | tar xvf -

#gzip -d -c mod_ssl-2.8.8-1.3.24.tar.gz | tar xvf -

#cd mod_ssl-2.8.8-1.3.24

#./configure –with-apache=apache-1.3.24

该命令运行成功之后,会有提示说明已经成功扩展了Apache的源代码。

4)安装Apache

#cd ../apache-1.3.24

#SSL_BASE=/usr/local EAPI_MM=/usr/local \

./configure –enable-module=so

–enable-module=ssl –prefix=/usr/local

#make

#make certificate

#make install

其中,Make certificate命令是为mod_ssl生成所需的安全证书,按照提示输入相应信息即可。这样,Apache就被安装在/usr/local目录下。

4.安装实现语言PHP

按照缺省配置,将为PHP提供即时生成PNGJPG图像功能的GD库安装到/usr/local目录下; 然后采用PHPApache DSO安装模式将其安装到/usr/local/libexec目录,成为Apache的动态共享模块。另外,不要忘记把对MySQL的支持和GD库也编译到模块里。

5.安装分析控制台ACID

该部分的安装工作具体包括3个软件包:Adodb200.tar.gzPhplot-4.4.6.tar.gzAcid-0.9.6b21.tar.gz。安装过程十分简单,只需分别将这3个软件包解压缩并展开在Apache服务器的文档根目录下即可。

然后开始配置工作。转到Acid-0.9.6b21目录下编辑ACID的配置文件Acid_conf.php,给下列变量赋值:

$Dblib_path=”../adodb200″

$DBtype=”mysql”

$alert_dbname=”snort”

$alert_host=”localhost”

$alert_port=”3306″

$alert_user=”root”

$alert_password=”abc123″

$archive_dbname=”snort_archive”

$archive_host=”localhost”

$archive_port=”3306″

$archive_user=”root”

$archive_password=”abc123″

$ChartLib_path=”../phplot-4.4.6″

$Chart_file_format=”png”

$portscan_file=”/var/log/snort/portscan.log”

至此,网络入侵检测系统的软件安装工作结束。

三、系统部署及运行

本系统被部署在网络服务器所处的DMZ区,用来监控来自互联网和内网的网络流量。负责监控的网络探测器Snort使用无IP地址的网卡进行监听,以保证NIDS自身的安全; 通过另一块网卡接入内网,并为其分配内网所使用的私有IP地址,以便从内网访问分析控制台程序ACID。通过启用Apache服务器的用户身份验证和访问控制机制,并结合SSL,保证系统的访问安全。

另外,部署NIDS的关键是应当保证系统的监听网卡所连接的设备端口能够看到受监控网段的全部网络流量。在共享式网络中,这不是问题,但在交换式网络中,由于交换机的每个端口拥有自己的冲突域,因此无法捕获除广播和组播之外的网络流量,这就要求交换机提供监控端口,本网络使用的是Cisco Catalyst系列交换机,其监控端口是通过端口的SPAN特性来实现的,用交换机管理软件启用该特性即可。

为了运行该系统,以超级用户身份执行下列命令:

#/etc/init.d/mysql.server start

#/usr/local/bin/snort -c /etc/snort.conf -l /var/log/snort -I elx0 -D

#/usr/local/bin/apachectl sslstart

这样,NIDS已开始运行,然后在内网的管理PC机上启动浏览器,在地址栏中键入:https://192.168.1.8/acid-0.9.6b21/,其中192.168.1.8是为该NIDS内网网卡分配的IP地址。首次运行时,控制台会提示用户对入侵事件数据库进行扩展,按照提示扩展完毕后,控制台主界面出现。如图1所示。


1 一天之内的报警频率

主界面里显示的信息包括:触发安全规则的网络流量中各种协议所占的比例、警报的数量、入侵主机和目标主机的IP地址及端口号等。ACID控制台还提供强大的搜索功能,用户可根据时间、IP地址、端口号、协议类型以及数据净荷(payload)等多种条件的灵活组合,在入侵事件数据库中进行查询,以帮助网管人员进行分析。

入侵特征库是否丰富对一个NIDS非常重要,本系统同时支持多种有影响的入侵特征库,包括CERT/CCarachNIDSCVE等。在警报中除了列出入侵事件的命名外,还有到相应入侵特征库的Web链接,如果某个警报存在多个命名,则同时予以列出,以便参考。网络管理人员可通过这些链接去查找在线入侵特征库,以便获得关于特定入侵事件更加详细的信息和相应的解决办法。

应用ACID提供的制图功能可以直观地对网络入侵事件进行分析,而生成的图表又可进一步丰富网管人员编制的报告。例如ACID分析控制台可以按用户指定的时间段生成入侵事件的频率图,如图2所示。


2 一周报警频率

结束语

网络安全是一个复杂的问题,只依靠12种网络安全产品是不能解决问题的,必须综合应用多种安全技术,并将其功能有机地整合到一起,进而构成统一的网络安全基础设施。


第4章 Snort的操作与使用

Snort采取命令行方式运行。格式为:snort -[options] <filters>options中可选的参数很多,下面逐一介绍。
首先介绍-[options]的内容:
-A <alert>
设置告警方式为full,fast或者none。 在full方式下,Snort将传统的告警信息格式写入告警文件,告警内容比较详细。在fast方式下,Snort只将告警时间,告警内容,告警IP地址和端口号写入文件。在none方式下,系统将关闭告警功能。
-a
显示ARP
-b
tcpdump的格式将数据包记入日志。 所有的数据包将以二进制格式记入名为snort.log的文件中。这个选项提高了snort的操作速度,因为直接已二进制存储,省略了转换为文本文件的时间,通过-b选项的设置,snort可以在100Mbps的网络上正常工作。
-c <cf>
使用配置文件<cf>。这是一个规则文件。文件内容主要控制系统哪些包需要记入日志,哪些包需要告警,哪些包可以忽略等。
-C
仅抓取包中的ASCII字符
-d
抓取应用层的数据包
-D
在守护模式下运行Snort。告警信息发送至/var/log/snort.alert,除非特别配置。
-e
显示和记录网络层数据包头信息
-F <bpf>
从文件<bpf>中读取BPF过滤信息。
-h <hn>
设置<hn>(CIP地址)为内部网络.当使用这个开关时,所有从外部的流量将会有一个方向箭头指向右边,所有从内部的流量将会有一个左箭头.这个选项没有太大的作用,但是可以使显示的包的信息格式比较容易察看.
-i <if>
使用网络接口文件 <if>

-l <ld>
将包信息记录到目录<ld>下。设置日志记录的分层目录结构,按接收包的IP地址将抓取的包存储在相应的目录下。
-M <wkstn>
<wkstn〉文件中的工作站发送WinPopup消息。<wkstn>文件格式非常简单。文件的每一行包含一个目的地址的SMB名。
-n <num>
处理完<num>包后退出。
-N
关闭日志功能。告警功能仍然工作。
-o
改变应用于包的规则的顺序。标准的应用顺序是:Alert->Pass->Log;采用-o选项后,顺序改为:Pass->Alert->Log,允许用户避免使用冗长的BPF命令行来过滤告警规则。
-p
关闭混杂模式的嗅探(sniffing)。这个选项在网络严重拥塞时十分有效。
-r <tf>
读取tcpdump生成的文件<tf>Snort将读取和处理这个文件。例如:当你已经得到了一个Shadow文件或者tcpdump格式的文件,想处理文件包含的内容时,这个选项就很有用了。
-s
将告警信息记录到系统日志。在其他的平台下,日志文件可以出现在/var/log/secure, /var/log/messages目录里。
-S ,n=v>
设置变量n的值为v。这个选项可以用命令行的方式设置Snort规则文件中的变量。例如:如果要给Snort规则文件中的变量HOME_NET赋值,就可以在命令行下采用这个选项。
-v
将包信息显示到终端时,采用详细模式。这种模式存在一个问题:它的显示速度比较慢,如果你是在IDS网络中使用Snort,最好不要采用详细模式,否则会丢失部分包信息。
-V
显示版本号,并退出。
-x
当收到骚扰IPX包时,显示相关信息。
-
? 显示使用摘要,并退出。
下面介绍一下< filters >的内容:
这里的“filters”TCPDump中的filter相同,是标准的BPF格式的过滤器。一般来说,你可以指定过滤器的主机,网络或者协议,还可以给出逻辑表达式,定制特定的过滤器。例如:
[root@ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v host 192.168.1.1
表示记录从主机192.168.1.1发送和接收的所有包信息。
[root@ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v net 192.168.1 and not host 192.168.1.1
表示记录子网192.168.1中从192.168.1.0192.168.1.24的所有主机接收和发送的包信息,但不包括192.168.1.1的信息。
1.3版本中,你可以使用选项-F从文件中读入自己的BPF过滤器。
前面将常提到规则文件,先面简单介绍一下规则。详细的内容可以从下面的站点得到。
http://www.clark.net/~roesch/snort_rules.html
。系统生成的告警信息都记录在alert.log文件中。你可以简单的使用“tail -f”查看日志信息。同时这些日志信息还被记录在系统日志中,其缺省的目录是/var/log/snort.你可以使用-L选项来指定特定的目录.如果你设置了smbalert功能,那么这些告警就可以通过smbclientwindows的机子上弹出一个对话框.
实际上,在使用snort的过程中,大家一定感受到规则(rules)文件的重要性.如何构造高效全面的规则文件就成了重点.下面我们就介绍一下该文件
.
在该文件中,一条规则必须在一行中,符号#是注释行.所有的ip地址和端口号都要使用数字形式,系统并不支持名字服务.一条规则的格式如下:

func proto src_ip/mask src_port_range -> dst_ip/mask dst_port_range (options)
动作 协议 源地址 源端口 目标地址 目标端口 (选项)
动作包括三类:告警(alert),日志(log)和通行(pass).表明snort对包的三种处理方式
.
在源/目的地址/端口中可以使用any来代表任意的地址或端口.还可以使用符号!来表明取非运算.同时,在目的和源地址之间可以使用标识符<>来指明方向
.
选项包括
:
1. msg ——-
将要放入alertlog文件中的输出信息
;
2. flags——-tcp
协议中的标志,SYN,ACK等等,如果是0则表明全部标志
.
3. ttl ——-
ip包中的ttl,有利于识别traceroute
.
4. content—-
数据包的应用层,查找缓冲区溢出攻击
.
5. itype——-icmp
包的类型
;
6. icode——-icmp
包的编码
;
7. minfrag—-
最小的分片的有效载荷大小
.
8. seg———tcp
包中的顺序号
;
9. ack ——–tcp
包中的响应号
;
10. id ——ip
包中分片的序号
;
.
11. logto—
指定特殊的存放告警信息的文件
;
12. dsize—
指定特定的包的长度
;
13. offset—
在包中查找一定字节内容
;
14. depth—
在数据包中仅仅查找depth字节
.
15. ipopts—
查找一个特定的ip选项.

下面我们就举一些例子来说明规则的作用:
1.
下面这条规则记录了所有登录到一个特定主机的数据包
:
log tcp any any -> 192.168.1.1/32 23
2.
在第一条的基础上记录了双向的流量
.
log tcp any any <> 192.168.1.1/32 23
3.
这一条规则记录了所有到达你的本地主机的icmp数据包
.
log icmp any any -> 192.168.1.0/24 any
4.
这条规则允许双向的从你的机子到其他站点的http
.
pass tcp any 80 <> 192.168.1.0/24 any
5.
这条告警规则显示了本地主机对其他主机的111端口的访问,并在log中显示端口影射调用(‘portmapper call’)信息
:
alert tcp 192.168.1.0/24 any -> any 111 (msg:”Portmapper call”;)
6.
记录其他任意地址的小于1024端口访问本地小于1024端口的流量
:
log tcp any :1024 -> 192.168.1.0/24 :1024
7.
这条规则将会发现SYN FIN扫描
:
alert tcp any any -> 192.168.1.0/24 any (msg:”SYN-FIN scan!”; flags: SF;)
8.
这条规则将会发现空tcp扫描
:
alert tcp any any -> 192.168.1.0/24 any (msg:”Null scan!”; flags: 0;)
9.
这条规则将会发现Queso fingerprint扫描
:
alert tcp any any -> 192.168.1.0/24 any (msg:”Queso fingerprint”;flags: S12;)
10.
这条规则将进行基于内容的查找以发现溢出攻击
:
alert tcp any any -> 192.168.1.0/24 143 (msg:”IMAP Buffer overflow!”; content:”|90E8 C0FF FFFF|/bin/sh”;)
11.
这条规则将会发现PHF攻击
:
alert tcp any any -> 192.168.1.0/24 80 (msg:”PHF attempt”; content:”/cgi-bin/phf”;)
12.
这条规则将会发现traceroute
:
alert udp any any -> 192.168.1.0/24 any (msg:”Traceroute”; ttl:1;)
13.
这条规则将会发现其他主机对本地发出的icmp
.
alert udp any any -> 192.168.1.0/24 any (msg:”Traceroute”; ttl:1;)
14.
这条规则发现nmaptcp ping扫描

alert tcp any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg:”NMAP TCP ping!”;)
15.
这条规则将会发现源路由的数据包(源路由攻击):
alert tcp any any -> any any (ipopts: lsrr; msg: “Source Routed packet!”;)

由于snort也在不断的发展着,许多功能正在被开发出来,如果需要详细的信息,需要大家随时关注它的发展.希望以上的介绍会对大家有所帮助,利用snort可以建立一个有效的IDS系统.

Google ReaderGoogle BookmarksFacebookTwitterYahoo BookmarksMySpaceHotmailYahoo MailWordPressYahoo MessengerShare

作为一款精典的FTP服务软件,SERV-U一直被大部分管理员所使用,它简单的安装和配置以及强大的管理功能的人性化也一直被管理员们称颂。但是随着使用者越来越多,该软件的安全问题也逐渐显露出来。
首 先是SERV-U的SITE CHMOD漏洞和Serv-U MDTM漏洞,即利用一个账号可以轻易的得到SYSTEM权限。其次是Serv-u的本地溢出漏洞,即Serv-U有一个默认的管理用户(用户名: localadministrator,密码:#|@$ak#.|k;0@p),任何人只要通过一个能访问本地端口43958的账号就可以随意增删账号和 执行任意内部和外部命令。
此时,人们才开始重视起SERV-U的安全来,并采取了一些相关措施,如修改SERV-U的管理端口、账号和密码 等。但是,修改后的内容还是保留在ServUDaemon.exe文件里,因此下载后用如UltraEdit之类的16进制编辑软件就可以很轻易的获取到 修改后的端口、账号和密码。
从SERV-U6.0.0.2开始,该软件有了登录密码功能,这样如果加了管理密码,并且设置比较妥善的话,SERV-U将会比原来安全的多。现在我们就开始SERV-U的设置之旅,采用版本是SERV-U 6.0.0.2。
古语有云,千尺之台始于垒土,设置SERV-U的安全就从安装开始。这篇文章主要是写SERV-U的安全设置,所以不会花费太多的功夫来介绍安装,只说一下要点。
SERV -U默认是安装在C:/Program Files/Serv-U目录下的,我们最好做一下变动。例如改为:D:/u89327850mx8utu432X$ UY32x211936890co7v23x1t3(图1)这样的路径,如果安装盘符WEB用户不能浏览的话,他便很难猜到安装的路径。当然,安装后会在 桌面和开始菜单上生成快捷方式,建议删除,因为一般不会使用到它。可能你要问了,那应该怎样进入SERV-U的设置界面呢?其实很简单,双击下右角任务栏里的Tray Monitor小图标来启动SERV-U的管理界面。


图1:修改安装的目录

安装的时候只选前2项就可以了,后面的2个是说明和在线帮助文件。(见图2)


图2:安装时候只需要选择前2项

下图是生成的开始菜单组里的文件夹的名字,建议更改成比较不像SERV-U的名字,或者是删除该文件夹。(见图3)


图3:更改安装后生成开始菜单组里文件夹的名字

安装完成后会出现一个向导让你建立一个域和账号。在这里点Cancel取消向导。用向导生成的账号会带来一些问题,所以下面采用手工方式建立域和账号。(见图4)


图4:点Cancel取消向导

然后点选Start automatically(system service)前面的选项,接着点下边的Start Server按钮把SERV-U加入系统服务,这样就可以随系统启动了,不用每次都手工启动。(见图5)

图5:把SERV-U加入服务

接下来就会出现如图6的界面。通过点击Set/Change Password设置一个密码。


图6:点击Set/Change Password设置密码

然后会出现如图7的界面。因为是第一次使用,所以是没有密码的,也就是说原来的密码为空。不用在 old password里输入字符,直接在下面的New password和Repeat new password里输入同样的密码再点OK就可以了。这里建议设置一个足够复杂的密码,以防止别人暴力破解。自己记不得也没有关系,只要把 ServUDaemon.ini里的LocalSetupPassword=这一行清除并保存,再次运行ServUAdmin.exe就不会提示你输入密 码登录了。

图7:设置和更改密码界面

下面就到了该对SERV-U进行安全设置的时候了。首先建立一个WINDOWS账号SSERVU,密码也需要足够的复杂。密码要记住,如果记不住就暂时保存在一个文件里,一会儿还要用到。(见图8)

图8:建立一个WINDOWS账号

建好账号以后,双击建好的用户编辑用户属性,从“隶属于”里删除USERS组。


图9:从隶属于里删除USERS组

从“终端服务配置文件”选项里取消“允许登录到终端服务器(W)”的选择,然后点击确定继续我们的设置。(见图10)


图10:取消“允许登录到终端服务器”

这里我们已经建好了账号,该设置服务里的账号了。现在就要用到刚才建立的这个账号,密码还没有忘记吧,马上就要用到了。
在开始菜单的管理工具里找到“服务”点击打开。在“Serv-U FTP Server服务”上点右键,选择属性继续。
然后点击“登录”进入登录账号选择界面。选择刚才建立的系统账号名,并在下面重复输入2次该账号的密码(就是刚才让你记住的那个),然后点“应用”,再次点确定,完成服务的设置。(见图11)


图11:更改启动和登录SRV-U的账号密码

接下来要先使用FTP管理工具建立一个域,再建立一个账号,建好后选择保存在注册表。(见图12)


图12:FTP用户密码保存到注册表

打开注册表来测试相应的权限,否则SERV-U是没办法启动的。在开始->运行里输入regedt32点“确定”继续。
找 到[HKEY_LOCAL_MACHINE/SOFTWARE/Cat Soft]分支。在上面点右键,选择权限,然后点高级,取消允许父项的继承权限传播到该对象和所有子对象,包括那些在此明确定义的项目,点击“应用”继 续,接着删除所有的账号。再次点击“确定”按钮继续。这时会弹出对话框显示“您拒绝了所有用户访问Cat Soft。没有人能访问 Cat Soft,而且只有所有者才能更改权限。您要继续吗?”,点击“是”继续。接着点击添加按钮增加我们建立的SSERVU账号到该子键的权限列表里,并给予完全控制权限。到这里注册表已经设置完了。但还不能重新启动SERV-U,因为安装目录还没设置。
现在就来设置一下,只保留你的管理账号和SSERVU账号,并给予除了完全控制外的所有权限。(见图13)


图13:SERV-U安装目录权限设置

现在,在服务里重启Serv-U FTP Server服务就可以正常启动了。当然,到这里还没有完全设置完,你的FTP用户因为没有权限还是登录不了的,所以还要设置一下目录的权限。
假 设你有一个WEB目录,路径是d:/web。那么在这个目录的“安全设定”里除了管理员和IIS用户都删除掉,再加入SSERVU账号,切记SYSTEM 账号也删除掉。为什么要这样设置呢?因为现在已经是用SSERVU账号启动的SERV-U,而不是用SYSTEM权限启动的了,所以访问目录不再是用 SYSTEM而是用SSERVU,此时SYSTEM已经没有用了,这样就算真的溢出也不可能得到SYSTEM权限。另外,WEB目录所在盘的根目录还要设 置允许SSERV-U账号的浏览和读取权限,并确认在高级里设置只有该文件夹。(见图14)


图14:WEB目录所在盘的权限设置

至此,设置全部结束。现在的SERV-U设置是配合IIS设置的,因为和IIS使用不同的账号, WEB用户就不可能访问SERV-U的目录,并且WEB目录没有给予SYSTEM权限,所以SYSTEM账号也同样访问不了WEB目录,也就是说,即使使用MSSQL得到备份的权限也不能备份SHELL到你的WEB目录。你可以安全的使用SERV-U了。

Google ReaderGoogle BookmarksFacebookTwitterYahoo BookmarksMySpaceHotmailYahoo MailWordPressYahoo MessengerShare