中国青基会
RSS
热门关键字:  None  linux+moodle安装  mac  rhel5  199
当前位置 : Nixsky>BSD>OpenBSD>列表

构建基于OPENBSD 4.2 AMD64 stable的主动防火墙

来源:Chinaunix 作者:尘羽星翔 时间:2007-12-21 点击:

  这篇文章面对的对象是没有太多基础的朋友们,所以内容尽量详细,希望能让不怎么会用

  OpenBSD 的朋友入门。

  阅读指南:所有需要手工录入的部分都用加阴影的字符表示,需要特别注意的地方以红色字

  符加阴影表示

  一、主要安装组件:

  OpenBSD 4.2 AMD64

  Mysql

  PHP 5

  Snort 2.6.

  Spoink-v1.0(snort日志>pf的工具,插件)

  Oinkmaster(snort 规则升级工具)

  Snort2c(snort 日志>pf 的工具,外部程序)

  BASE(类似于acid 的snort 记录管理工具)

  PFW(基于web 的pf 规则定制界面)

  二、软件安装

  1、OpenBSD安装(省略)

  不会安装系统的搜以前的文章,回头有时间一定写一个普及版的安装教程,注意:4.2版本的openbsd编译时

  需要的很多的库文件都在X*.tgz里面,安装的时候最好把所有的组件都装上,xfont42不需要,如果安装系统的

  时候没有安装,进入系统以后

  tar xzvpf /你的包的位置/X*.tgz -C /

  一定要加上p参数来保证权限

  2、OpenBSD升级

  1)解压src、sys和ports包

  tar xzvf /你的包的位置/src.tar.gz -C /usr/src/

  tar xzvf /你的包的位置/sysar.gz -C /usr/src/

  tar xzvf /你的包的位置/ports.tar.gz -C /usr/

  2)加速原代码下载

  vi /etc/mk.conf

  加入如下代码

  MASTER_SITE_OVERRIDE=ftp://ftp.freebsdchina.org/pub/OpenBSD/distfiles/ \

  1

  ftp://ftp.openbsd.org.tw/pub/OpenBSD/distfiles/

  #FETCH_CMD=/usr/local/bin/wget

  其中FETCH_CMD前面的井号安装完wget后再去掉

  3)安装wget

  cd /usr/ports

  make search key=wget

  cd net/wget

  make install

  启用wget作为默认下载工具

  vi /etc/mk.conf

  将”#FETCH_CMD=/usr/local/bin/wget”前的井号删除

  如果安装文件时提示文件校验失败的话,输入

  make checksum REFETCH=true

  来重新下载源码包

  4)安装cvsync

  因为cvsup不支持amd64,不喜欢cvs的就用这个代替吧

  cd /usr/ports

  make search key=cvsync

  cd net/cvsync &&make install

  5)使用cvsync升级src和ports

  mkdir /usr/cvs

  vi /etc/cvsync_conf

  加入如下代码:

  config {

  hostname cvsync.openbsd.org.tw

  # If your network link is a T1 or faster, comment out the following line.

  compress

  collection {

  name openbsd release rcs

  prefix /usr/cvs

  umask 002

  }

  }

  cvsync使用

  cvsync -c /etc/cvsync_conf

  然后开始升级同步你的代码树

  cvsync提示完成以后,输入

  2

  cd /usr

  cvs -d /usr/cvs checkout -rOPENBSD_4_2 src ports

  来升级src和ports

  6)stable系统

  A升级新内核

  cd /usr/src/sys/arch/amd64/conf

  /usr/sbin/config GENERIC

  cd /usr/src/sys/arch/amd64/compile/GENERIC

  make clean &&make depend &&make&&make install&&reboot

  B升级binaries

  重启以后

  rm -rf /usr/obj/*

  cd /usr/src

  make obj

  cd /usr/src/etc &&env DESTDIR=/ make distrib-dirs

  cd /usr/src

  make build&& make install

  3、安装mysql

  cd /usr/ports/databases/mysql

  make install

  ports默认只安装mysql client,mysql server需要自己手工安装

  cd /usr/ports/packages/amd64/all/

  pkg_add mysql-server-5.0.45.tgz

  如果没有安装p5-DBD-mysql,会提示

  Can't find p5-DBD-mysql-3.0008

  /usr/sbin/pkg_add: p5-DBD-mysql-3.0008:Fatal error

  下面安装p5-DBD-mysql

  cd /usr/ports

  make search key=p5-DBD-mysql

  cd databases/p5-DBD-mysql

  make install

  安装完毕以后,再安装mysql server

  cd /usr/ports/packages/amd64/all/

  pkg_add pkg_add mysql-server-5.0.45.tgz

  3

  安装默认的mysql数据库

  /usr/local/bin/mysql_install_db

  修改mysql相关配置

  vi /etc/sysctl.conf

  加入

  kern.maxfiles=4096

  建议将这个值改大一点,不要超过65535就可以

  vi /etc/login.conf

  加入

  mysql:\

  :openfiles-cur=1024:\

  :openfiles-max=2048:\

  :tc=daemon:

  保存退出后运行

  cap_mkdb /etc/login.conf

  修改rc.local

  vi /etc/rc.local

  加入

  # MySQL startup

  if [ -x /usr/local/bin/mysqld_safe ] ;then

  su -c mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'

  echo -n ' mysql'

  fi

  保存退出

  测试mysql,输入

  mysql

  如果出现

  mysql>

  就没有问题了

  输入quit退出

  现在要为mysql设置密码

  /usr/local/bin/mysqld_safe &

  /usr/local/bin/mysqladmin -u root password '你的密码’

  4、安装php5

  cd /usr/ports

  make search key=php5

  cd www/php5

  make install

  完成以后只会安装php5-core-5.2.3和php5-extensions-5.2.3其他的需要手工安装

  启用php5

  /usr/local/sbin/phpxs –s

  安装并激活php-mysql、gd、xmlrpc、gmp模块

  cd /usr/ports/packages/amd64/all/

  4

  pkg_add php5-mysql-5.2.3.tgz

  /usr/local/sbin/phpxs -a mysql

  pkg_add php5-gd-5.2.3-no_x11.tgz

  /usr/local/sbin/phpxs -a gd

  pkg_add php5-xmlrpc-5.2.3.tgz

  /usr/local/sbin/phpxs -a xmlrpc

  pkg_add php5-gmp-5.2.3.tgz

  /usr/local/sbin/phpxs -a gmp

  安装php5-sqlite-5.2.3.tgz,这是因为PFW需要sqlite,如果你不需要PF的web控制的话,这个可

  以不装

  pkg_add php5-sqlite-5.2.3.tgz

  /usr/local/sbin/phpxs -a sqlite

  5、安装Snort

  Snort是整个安装过程的核心,其中Spoink-v1.0是以输出插件的形式和snort一起编译安装的,

  安装里面比较麻烦,而另一个和Spoink功能类似的snort2c要容易安装的多,怕难的朋友可以跳

  过Spoink安装。

  1) 同时安装snort和Spoink-v1.0

  Spoink-v1.0下载地址:http://spoink.sourceforge.net/#download

  安装spoink之前,需要先解压缩snort,snort有很多可选的编译选项

  cd /usr/ports/net/snort

  make show=FLAVORS

  显示postgresql mysql flexresp prelude,如果要看这四个选择的具体说明

  vi pkg/DESCR

  其中要注意的是下面的几段

  postgresql - enable postgresql database logging support

  mysql - enable mysql database logging support

  flexresp - enable dynamic connection killing support

  prelude - enable prelude-ids support

  简单翻译一下

  postgresql是启用postgresql数据库来记录log

  mysql是启用mysql数据库来记录log

  flexresp是启用动态杀死连接

  prelude是启用prelude-ids(传感器模式)支持

  我把后三项都启用了,这里启用带参数的编译有两种方法

  ○1 env法

  env FLAVOR="mysql flexresp prelude" make extract

  ○2 编辑 Makefile法

  vi Makefile

  搜索FLAVOR?

  原来是

  FLAVOR?=

  改成

  5

  FLAVOR?=mysql flexresp prelude

  保存退出后,运行

  make extract

  接下来要修改snort的文件了,先要解压缩spoink-v1.0.tar.gz,我把下载的spoink-v1.0.tar.gz放

  在了home里面

  cd ~

  tar xzvf spoink-v1.0.tar.gz

  解压缩以后出现spoink-1.0

  cd spoink-1.0

  cp sp* /usr/ports/net/snort/w-snort-2.6.0.2p1-mysql-flexresp-prelude/snort-2.6.0.2/src/output-plugins/

  接下来修改snort的代码来支持spoink,需要修改plugbase.c、Makefile.am和Makefile.in

  A修改src/plugbase.c

  cd /usr/ports/net/snort/w-snort-2.6.0.2p1-mysql-flexresp-prelude/snort-2.6.0.2/

  vi src/plugbase.c

  在找到void InitOutputPlugins()部分

  原来是

  AlertSyslogSetup();

  LogTcpdumpSetup();

  DatabaseSetup();

  AlertFastSetup();

  AlertFullSetup();

  加入AlertPfSetup();

  变成

  AlertSyslogSetup();

  LogTcpdumpSetup();

  DatabaseSetup();

  AlertFastSetup();

  AlertFullSetup();

  AlertPfSetup();

  找到/* built-in output plugins */部分

  原来是

  #include "output-plugins/spo_alert_syslog.h"

  #include "output-plugins/spo_log_tcpdump.h"

  #include "output-plugins/spo_database.h"

  #include "output-plugins/spo_alert_fast.h"

  #include "output-plugins/spo_alert_full.h"

  #include "output-plugins/spo_alert_unixsock.h"

  #include "output-plugins/spo_csv.h"

  #include "output-plugins/spo_unified.h"

  #include "output-plugins/spo_log_null.h"

  #include "output-plugins/spo_log_ascii.h"

  加入#include "output-plugins/spo_pf.h"

  变成

  /* built-in output plugins */

  #include "output-plugins/spo_alert_syslog.h"

  6

  #include "output-plugins/spo_log_tcpdump.h"

  #include "output-plugins/spo_database.h"

  #include "output-plugins/spo_alert_fast.h"

  #include "output-plugins/spo_alert_full.h"

  #include "output-plugins/spo_alert_unixsock.h"

  #include "output-plugins/spo_csv.h"

  #include "output-plugins/spo_unified.h"

  #include "output-plugins/spo_log_null.h"

  #include "output-plugins/spo_log_ascii.h"

  #include "output-plugins/spo_pf.h"

  保存退出

  B修改src/output-plugins/Makefile.am

  vi src/output-plugins/Makefile.am

  原来是

  libspo_a_SOURCES = spo_alert_fast.c spo_alert_fast.h \

  spo_alert_full.c spo_alert_full.h \

  spo_alert_syslog.c spo_alert_syslog.h spo_alert_unixsock.c \

  spo_alert_unixsock.h spo_csv.c spo_csv.h spo_database.c spo_database.h

  \

  spo_log_null.c spo_log_null.h spo_log_tcpdump.c \

  spo_log_tcpdump.h spo_unified.c spo_unified.h spo_log_ascii.c

  spo_log_ascii.h \

  spo_alert_sf_socket.h spo_alert_sf_socket.c spo_alert_prelude.c

  spo_alert_prelude.h

  加入红色部分

  \(这个是在原来最后一句后边加的)

  spo_pf.h spo_pf.c

  变成

  libspo_a_SOURCES = spo_alert_fast.c spo_alert_fast.h \

  spo_alert_full.c spo_alert_full.h \

  spo_alert_syslog.c spo_alert_syslog.h spo_alert_unixsock.c \

  spo_alert_unixsock.h spo_csv.c spo_csv.h spo_database.c spo_database.h

  \

  spo_log_null.c spo_log_null.h spo_log_tcpdump.c \

  spo_log_tcpdump.h spo_unified.c spo_unified.h spo_log_ascii.c

  spo_log_ascii.h \

  spo_alert_sf_socket.h spo_alert_sf_socket.c spo_alert_prelude.c

  spo_alert_prelude.h \

  spo_pf.h spo_pf.c

  存盘退出

  C修改src/output-plugins/Makefile.in

  vi src/output-plugins/Makefile.in

  找到

  7

  libspo_a_LIBADD =

  am_libspo_a_OBJECTS = spo_alert_fast.$(OBJEXT) \

  spo_alert_full.$(OBJEXT) spo_alert_syslog.$(OBJEXT) \

  spo_alert_unixsock.$(OBJEXT) spo_csv.$(OBJEXT) \

  spo_database.$(OBJEXT) spo_log_null.$(OBJEXT) \

  spo_log_tcpdump.$(OBJEXT) spo_unified.$(OBJEXT) \

  spo_log_ascii.$(OBJEXT) spo_alert_sf_socket.$(OBJEXT) \

  spo_alert_prelude.$(OBJEXT)

  加入红色部分

  \

  spo_pf.$(OBJEXT)

  变成

  am_libspo_a_OBJECTS = spo_alert_fast.$(OBJEXT) \

  spo_alert_full.$(OBJEXT) spo_alert_syslog.$(OBJEXT) \

  spo_alert_unixsock.$(OBJEXT) spo_csv.$(OBJEXT) \

  spo_database.$(OBJEXT) spo_log_null.$(OBJEXT) \

  spo_log_tcpdump.$(OBJEXT) spo_unified.$(OBJEXT) \

  spo_log_ascii.$(OBJEXT) spo_alert_sf_socket.$(OBJEXT) \

  spo_alert_prelude.$(OBJEXT) \

  spo_pf.$(OBJEXT)

  找到

  libspo_a_SOURCES = spo_alert_fast.c spo_alert_fast.h \

  spo_alert_full.c spo_alert_full.h \

  spo_alert_syslog.c spo_alert_syslog.h spo_alert_unixsock.c \

  spo_alert_unixsock.h spo_csv.c spo_csv.h spo_database.c spo_database.h

  \

  spo_log_null.c spo_log_null.h spo_log_tcpdump.c \

  spo_log_tcpdump.h spo_unified.c spo_unified.h spo_log_ascii.c

  spo_log_ascii.h \

  spo_alert_sf_socket.h spo_alert_sf_socket.c spo_alert_prelude.c

  spo_alert_prelude.h

  加入红色部分

  \

  spo_pf.h spo_pf.c

  变成

  libspo_a_SOURCES = spo_alert_fast.c spo_alert_fast.h \

  spo_alert_full.c spo_alert_full.h \

  spo_alert_syslog.c spo_alert_syslog.h spo_alert_unixsock.c \

  spo_alert_unixsock.h spo_csv.c spo_csv.h spo_database.c spo_database.h

  \

  spo_log_null.c spo_log_null.h spo_log_tcpdump.c \

  spo_log_tcpdump.h spo_unified.c spo_unified.h spo_log_ascii.c

  spo_log_ascii.h \

  spo_alert_sf_socket.h spo_alert_sf_socket.c spo_alert_prelude.c

  spo_alert_prelude.h \

  spo_pf.h spo_pf.c

  存盘退出

  2) 只安装带参数的snort

  只安装snort的话,就简单很多

  8

  env FLAVOR="mysql flexresp prelude" make install

  或者修改了Makefile以后直接make install,

  3) 不过现在安装的话会提示缺少pcre-7.1、libdnet-1.10p2、

  prelude-libprelude-0.9.14

  A安装pcre-7.1

  cd /usr/ports

  make search key=pcre-7.1

  cd devel/pcre

  make install

  B安装libdnet-1.10p2

  cd /usr/ports

  make search key=libdnet-1.10p2

  cd net/libdnet

  make install

  C安装prelude-libprelude-0.9.14

  cd /usr/ports

  make search key= prelude-libprelude-0.9.14

  cd security/prelude/libprelude

  make install

  4)安装完毕以后,就可以安装snort了

  cd /usr/ports/net/snort/

  make install

  安装完以后,可以输入

  snort –dev

  测试,如果一切正常的话,能看到很多的数据包里面的能容,那就恭喜你,snort已经安装好了

  5)配置snort

  安装完snort以后,虽然snort可以启动,但是很多功能都不能用,需要修改snort的配置文

  件,snort的配置文件是/etc/snort/snort.conf,在修改这个文件之前,我们要为snort增加一个

  mysql的数据库来保存log日志

  9

  A操作mysql数据库

  这里需要你注意的是不要忘记了刚刚安装mysql是设置的密码,安装完snort以后不要做

  make clean,因为还需要一个源码中的文件来创建snort的log数据库,如果你做了的话,或者是

  用pkg安装的话,也没有关系,重新下载一个snort的源码,解压缩就可以了,这个创建数据库用

  的文件就是源码下schemas/create_mysql

  创建snort数据库和用户

  mysql -u root –p

  出现Enter password:后数据你设置的mysql密码,这里建议你的是设置两个snort数据库,一个

  用来存放日志,另一个用来存放重要信息的备份,出现

  mysql>

  后输入sql命令

  create database snort_log;

  grant CREATE, INSERT, SELECT, DELETE, update on snort_log.* to snort_log@localhostidentified by "

  你的密码";

  create database snort_bak;

  grant CREATE, INSERT, SELECT, DELETE, update on snort_bak.* to snort_bak@localhostidentified by "

  你的密码";

  flush privileges;

  exit

  B导入mysql数据表

  cd /usr/ports/net/snort/w-snort-2.6.0.2p1-mysql-flexresp-prelude/snort-2.6.0.2/schemas(或者是到你的

  create_mysql所在的位置)

  mysql -u snort_log -p< create_mysql snort_log

  输入你设置的snort_log用户密码

  mysql -u snort_bak -p< create_mysql snort_bak

  输入你设置的snort_bak用户密码

  C修改snort配置文件

  vi /etc/snort/snort.conf

  需要修改的有六类:定义网络、配置动态加载的库、定义预处理器、配置输出插件、配置

  运行时的文件目录和定制规则。如果是做测试研究的话,需要定义一下内容

  ○1 内网ip段

  搜索

  var HOME_NET any

  修改any为你的内网ip,要用CIDR地址格式,比如我定义的是10.1.1.0/24,我修改以后变成

  var HOME_NET 10.1.1.0/24

  10

  如果你有两个或者以上的ip段,需要用[]扩起来,比如:

  var HOME_NET [10.1.1.0/24,192.168.1.0/24]

  ○2 打开lowmem方式,否则的话snort要占很多内存,我开以前是480 多M,打开以后是100M

  左右

  搜索

  config detection: search-method lowmem

  将前面的井号删除

  ○3 配置输出log到mysql数据库

  搜索database: log to a variety of databases

  将下面的

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

  修改成,注意localhost一定要改成127.0.0.1,否则运行snort是会提示连不上mysql

  output database: log, mysql, user=snort_log password=你的密码 dbname=snort_log host=127.0.0.1

  ○4 如果你安装snort的时候,选择安装了Spoink-v1.0 的话,就需要添加一个

  Spoink的输出插件

  我是在刚刚修改的mysql的上面加了上去

  output alert_pf: /etc/snort/wl.txt,sn_table

  一切做完以后,保存退出

  ○5 定制你需要的规则

  搜索include $RULE_PATH

  把你需要的rule前面的井号删除,我运行的提示telnet.rules的第43行规则有问题,于是手动

  把那条规则注释调了,如果你只是学习的话,建议不开启其他规则,并把telnet注释掉,注

  释掉telnet.rules(43)

  vi /etc/snort/rules/telnet.rules

  把第43行加上井号,保存退出

  D下载snort规则

  下载snort的规则有两种方法,一是到snort.org上自己下载,然后手动解压到/etc/snort/里面,

  11

  注意要下载Snort-2.6的规则;如果你想以后实现定时升级的话,可以用Oinkmaster来实现

  ○1 Oinkmaster 安装

  cd /usr/ports

  make search key=Oinkmaster

  net/oinkmaster

  make install

  ○2 Oinkmaster使用

  首先你要在snort.org注册一个账号,登陆后在登陆页面的最下面有Oinkmaster的配置例子,点

  oink code下面的Get code会出现一串字符,把这个字符保存下来

  vi /etc/oinkmaster.conf

  搜索Example for Snort 2.4,把这个例子前面的井号去掉,并把这个例子修改成

  url =http://www.snort.org/pub-bin/oinkmaster.cgi/你的oink code/snortrules-snapshot-2.6.tar.gz

  保存退出,输入

  oinkmaster -C /etc/oinkmaster.conf -o /etc/snort/rules

  提示完成以后你的snort规则就已经更新的最新了

  E启用PF

  系统默认的情况下PF是关闭的,为了以后测试Spoink和snort2c,现在需要把PF打开,输入

  pfctl –e

  来启用PF,如果要关闭的话,输入

  pfctl –d

  如果要在让PF在系统启动启用,需要修改/etc/rc.conf

  vi /etc/rc.conf

  搜索pf,到第二个搜索到的地方

  把前面的

  pf=NO

  改成

  pf=YES

  现在的环境是作防火墙的,所以还要启用路由转发功能

  输入

  sysctl net.inet.ip.forwarding=1

  来启用ipv4的路由功能,如果要让系统启动是启用路由转发功能,需要修该/etc/sysctl.conf

  vi /etc/sysctl.conf

  把第七行

  #net.inet.ip.forwarding=1

  前面的井号删除,保存后退出

  12

  F设置PF与Spoink协同

  Spoink的工作原理大概是:从snort的报警日志中过滤出非法访问的受保护主机的ip(攻击源),

  再把这些攻击源ip发送到PF中加以处理,snort2c的工作原理和Spoink类似。现在我们再看一下

  snort.conf中Spoink配置,

  output alert_pf: /etc/snort/wl.txt,sn_table

  其中定义了两部分:

  /etc/snort/wl.txt 这是设置受保护ip的文档。可以使用CIDR地址格式,而snort2c不行

  sn_table 这是定义的PF中的table,对攻击源的处理就是通过对这个table来实现的

  ○1 建立/etc/snort/wl.txt

  vi /etc/snort/wl.txt

  可以输入CIDR格式的地址

  我直接写10.1.1.0/24

  保存退出〕

  ○2 在PF中加入sn_table,你可以现在用vi编辑,也可以等下试试web的

  PFW连编辑

  vi /etc/pf.conf

  加入

  table persist

  block in quick from to any

  保存退出以后要检测、加载PF 新规则,输入

  pfctl -Nf /etc/pf.conf

  检测规则,如果没有提示错误的话,输入

  pfctl -f /etc/pf.conf

  加载新规则

  G测试snort+PF的配置

  输入

  snort -c /etc/snort/snort.conf -u _snort -g _snort –i 外网网卡名称 -l /var/snort/log

  不知道你的网卡的话,输入ifconfig –a看一下输出,不提示错误的话就说明没有问题了,可以使用

  snort -c /etc/snort/snort.conf -u _snort -g _snort -l /var/snort/log -D &

  让snort后台运行,返回的是一个snort的进程号,如果想让snort在系统随启动的话,需要和mysql一

  样编辑rc.local

  vi /etc/rc.local

  加入

  13

  if [ -x /usr/local/bin/snort ] ;then

  /usr/local/bin/snort -c /etc/snort/snort.conf -u _snort -g _snort -t /var/snort –i 外网网卡名称-l /var/snort/log -D &

  echo -n ' snort \n'

  fi

  H Snort2c+PF的实现

  Snort2c是功能和Spoink一样的程序,安装简单,使用方便,不足之处就是受保护主机不能用CIDR格

  式表示

  Snort2c-v0.2下载地址:http://snort2c.sourceforge.net/

  ○1 安装,我把我下载的snort2c-0.2.tar.gz放在了home里面

  cd ~

  tar xzvf snort2c-0.2.tar.gz

  cd snort2c-0.2

  make

  make install

  snort2c安装完以后会有两个程序Snort2c和mons2c。

  ○2 Snort2c用来监控snort的报警文件中攻击受保护主机的,和Oinkmaster

  一样需要指定一个受保护主机列表,我是建立在/etc/snort下面,和

  Oinkmaste的wl.txt放在一起,名称是snort2c_ip

  vi /etc/snort/snort2c_ip

  输入几个收保护的主机ip每行一个,不能加子网掩码,我输入的是

  10.24.1.2

  10.25.1.3

  输完以后保存退出,和Oinkmaste一样需要在PF中加入table

  vi /etc/pf.conf

  加入

  table persist

  block in quick from to any

  保存退出后,需要更新一下PF规则,输入

  pfctl -Nf /etc/pf.conf

  检测规则,如果没有提示错误的话,输入

  pfctl -f /etc/pf.conf

  加载新规则

  运行snort2c的命令是

  snort2c -w 你的受保护主机ip 表位置

  14

  ○3 mons2c是用来管理攻击源ip的

  显示被屏蔽的ip

  mons2c –l

  清空被屏蔽的ip

  mons2c –f

  删除被屏蔽的ip

  mons2c -d 要删除的ip

  ○4 如果想让snort2c在系统随启动的话,需要编辑rc.local

  vi /etc/rc.local

  加入

  if [ -x /usr/local/bin/snort ] ;then

  /usr/local/sbin/snort2c –w 你的受保护主机ip表位置 -s

  echo -n ' snort2c \n'

  fi

  三 WEB界面安装

  安装WEB 界面需要apache(系统已经默认安装)、BASE 和PFW。

  BASE 1.3.9 下载地址http://sourceforge.net/projects/secureideas

  PFW-0.7.8.tgz 下载地址http://www.allard.nu/pfw/download/pfw-0.7.8.tgz

  1、apache设置

  OpenBSD 中apache 是默认安装的,而默认情况下apache 是没有运行,所以我们要让apache

  运行起来。WEB 服务器有两个端口没有加密的80 端口和加密的443 端口。80 端口传输的是明

  文,安全性比较低,所以不推荐作为管理的WEB 界面上使用,而443 端口是经过证书加密的,

  安全性能要好很多,OpenBSD 已经默认安装了ssl,需要我们生成一个证书来加密WEB 通信。

  1)生成证书

  /usr/sbin/openssl genrsa -out /etc/ssl/private/server.key 1024

  /usr/sbin/openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/private/server.csr

  需要填写一些信息

  15

  Country Name (2 letter code) []:(国家代码中国是CN)

  State or Province Name (full name) []:(省的全称)

  Locality Name (eg, city) []:(所在城市名)

  Organization Name (eg, company) []:(组织名称)

  Organizational Unit Name (eg, section) []:(部门名称)

  Common Name (eg, fully qualified host name) []:(主机名)

  Email Address []:(邮箱地址)

  Please enter the following 'extra' attributes

  to be sent with your certificate request

  A challenge password []:(要求密码)

  An optional company name []:(任意公司名)

  2)安装证书,设置证书有效期为1 年(365 天)

  /usr/sbin/openssl x509 -req -days 365 -in /etc/ssl/private/server.csr -signkey /etc/ssl/private/server.key

  -out /etc/ssl/server.crt

  3)修改apache配置

  apache的配置文件是/var/www/conf/httpd.conf

  vi /var/www/conf/httpd.conf

  搜索DirectoryIndex,加入index.php,变成

  DirectoryIndex index.html index.php

  保存退出

  4)启用apache

  证书安装完毕以后,就可以启用带有ssl支持的apache了,首先要修改apache的运行参数

  vi /etc/rc.conf

  搜索http,并修改为

  httpd_flags="-uDSSL"

  保存后退出。其中DSSL是启用ssl加密支持-u是禁用apache的chroot功能,禁用是因为要让PFW

  能修改/etc/pf.conf文件,在chroot模式这是不能实现的

  现在启用apache,输入

  apachectl start

  如果提示apache已经启动,现在你在IE里面输入主机ip就可以看到欢迎界面

  5)测试apache php mysql的环境

  apache默认的web目录是/var/www/htdocs,里面的文件都不需要,我们先把里面的文件删除

  16

  rm -rf /var/www/htdocs/*

  建立一个phpinfo文件

  vi /var/www/htdocs/phpinfo.php

  输入

  

phpinfo();

?>  phpinfo();

  >

  保存退出后,在IE中输入

  https://主机ip/phpinfo.php

  来测试apache的加密传输,查看apache支持情况,如果显示正确的话,就可以进行下面的配置

  了

  2、BASE设置

  BASE需要运行除了需要php外,还需要pear、Image_Color、Image_Canvas-alpha、

  Image_Graph-alpha和adodb库支持。其中adodb是必须的,如果你不需要BASE输出图形表的话,

  前面四个不用安装

  1)安装pear图形库

  cd /usr/ports/

  make search key=pear |grep Path

  cd www/pear

  make install

  会提示partial-pear-1.5.0p1失败,需要删除partial-pear-1.5.0p1

  pkg_delete partial-pear-1.5.0p1

  然后再输入

  make install

  安装完成以后,就需要安装剩下的三个图形库

  pear install Image_Color

  pear install Image_Canvas-alpha

  pear install Image_Graph-alpha

  2)安装adodb库

  adodb502a.tgz 下载地址 http://adodb.sourceforge.net/#download

  我把下载好的adodb502a.tgz放在home里面,现在要文件解压缩到apache目录下

  cd ~

  tar xzvf adodb502a.tgz -C /var/www/

  cd /var/www/

  mv adodb5 adodb

  17

  3)开始安装BASE

  A解压BASE并修改权限

  我把下载的BASE放在了home里面,下面要把BASE解压缩到/var/www/htdocs里面并修改权限

  cd ~

  tar xzvf base-1.3.9.tar.gz -C /var/www/htdocs/

  cd /var/www/htdocs/

  mv base-1.3.9 base

  chown -R www *

  chmod -R 755 *

  B通过WEB安装BASE

  下面就可以设置BASE了

  A在IE中输入

  https://你的主机ip/base/

  如果显示的页面中出现

  就可以继续设置,不是的话就需要按上一步配置权限

  点击

  选择语言为中文

  输入adodb的位置为,注意最后不带”/”

  /var/www/adodb

  变成

  然后点击提交查询内容

  B在setp2 的界面里面

  数据库默认mysql不用改

  Database Name:snort_log

  Database Host:127.0.0.1

  Database Port:留空

  Database User Name: snort_log

  Database Password:你设置的密码

  18

  Use Archive Database:前面点上对号

  Archive Database Name:snort_bak

  Archive Database Host:127.0.0.1

  Archive Database Port: 留空

  Archive Database User Name:snort_bak

  Archive Database Password:你设置的密码

  C在setp3 的界面里面

  选中Use Authentication System,并设置管理账号、密码和用户名全称

  D在setp4 的界面里面

  点击来创建BASE的table,成功的话会出现一些成功的提示

  E在setp5 的界面里面

  出现登陆界面,输入你设置的用户名和密码就可以进入了,但是第一次登陆以后会提示snort_bak

  错误,这是因为BASE没有在snort_bak创建table,这里就需要手工输入

  cd /var/www/htdocs/base/sql/

  mysql -u snort_bak -p< create_base_tbls_mysql.sql snort_bak

  输入你设置的snort_bak的密码,完成以后再次登陆BASE就不会提示错误了

  3、安装PFW

  PFW是PHP写的PF控制界面,要求系统中安装了SQLite,安装PFW以前,先要检测以下SQLite

  是不是已经安装,输入

  php -i | grep SQLite

  如果显示不是什么都没有的话,就可以开始安装PFW了

  1)解压PFW并修改权限,导入数据

  我把下载的pfw-0.7.8.tgz放在了home里面,下面要把PFW解压缩到/var/www/下面并修改权限,

  并导入数据

  cd ~

  tar xzcf pfw-0.7.8.tgz -C /var/www/

  19

  cd /var/www/pfw

  chown -R www:www conf

  sqlite conf/config.db

  2)在apache配置文件中加入PFW

  vi /var/www/conf/httpd.conf

  加入

  Alias /pfw "/var/www/pfw/web/"

  

  AllowOverride None

  Order allow,deny

  Allow from all

  

  保存退出以后,重启apache,输入

  apachectl restart

  3)修改sudo配置,

  PFW可以把WEB编辑的PF规则安装到系统中,所以要有root的权限,输入

  visudo

  添加

  www ALL = NOPASSWD: /var/www/pfw/bin/*

  保存退出,现在可以用在IE里面http://主机ip/pfw来进行PF规则配置。

  四、优化存储性能

  整个系统到这里就可以已经可以正常使用了,但是硬盘的性能会是整个系统的瓶颈,可以用

  softupdate来缓解

  vi /etc/fstab

  加入softdep,我的fstab是

  /dev/wd0a / ffs rw,softdep 1 1

  /dev/wd0i /home ffs rw,nodev,nosuid,softdep 1 2

  /dev/wd0e /tmp ffs rw,nodev,nosuid,softdep 1 2

  /dev/wd0g /usr ffs rw,nodev,softdep 1 2

  /dev/wd0h /var ffs rw,nodev,nosuid,softdep 1 2

  然后输入reboot重启主机,安装过程到此结束!

  《安装篇完》

  20

  21

  后记:

  终于写完了《构建基于OPENBSD 4.2 AMD64 stable 的主动防火墙》,现在的系统如果你

  是学习的话已经足够用了,但是决定不要应用的生产环境,系统还有很大的瓶颈,整个系

  统的瓶颈是mysql,因为mysql 执行查询很快,但是执行插入很慢,而snort 的执行方式是

  将抓到的文件都插入到mysql 里面,整个系统都在等待mysql 作慢慢的插入工作。如果要应

  用与生产环境的话,还要进行优化配置,甚至是分布式部署(还记得snort 的prelude 选择

  吗?),这些问题都要等到第二篇――部署篇

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册