狼爱上狸

我胡汉三又回来了

#

解决apache+weblogic中Connection_Refused错误的解决办法


这是出现Apache桥错误的重要原因(第4条最重要)
解决办法如下:
1. 增加Weblogic Server中Accept Block的数值,默认值为50
   BEA提示以25%的速度进行增加,直到不出现Connection_Block的错误提示。//这里我将其调高至200
2. 设置Apache的Httpd.conf中,KeepAlive为On
3. 减小Windows 2000中TcpTimedWaitDelay时间,默认情况下为240(未设置的情况下也是这个数值)
   此项设置需要到注册表如下位置进行设置
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay
   如果注册表中没有TcpTimedWaitDelay这个项目,BEA提示增加这个项目,并设置为双字节(DWORD)类型
   数值设置为30 ~ 240之间即可 //这里我将其设置为120
4.调整一下w2k的MaxUserPort
  默认情况下,系统提供的端口值在 1024 和 5000 之间。MaxUserPort 参数设置可以用于出站连接的最高端口值。要设置该数值,请定位到 HKEY_LOCALMACHINE\SYSTEM  \CurrentControlSet\Services\Tcpip\Parameters、如果该值尚不存在,则添加数值 MaxUserPort,并将其设置为 0xFFFE。
5.最好能有一个测试环境。在调整参数的时候,用一些压力测试工具对系统制造一些负载。通过观察系统的反应,来决定参数的调整。

posted @ 2006-04-29 08:29 狼爱上狸 阅读(3244) | 评论 (0)编辑 收藏

Java的Build工具—Ant应用指南

本文以最新发布的Ant 1.5.1为例,介绍这款优秀的Build工具的安装配置、基本应用和一些高级话题。最新的Ant下载地址是 http://jakarta.apache.org/ant/

Ant是一种基于Java的Build工具。理论上来说,它有些类似于C中的make,但比make优越。现在存在的大多数Build工具,如make、gnumake、nmake、jam等都存在这样或那样的不足,比如依赖于特定的平台、配置文件过于复杂或者对格式无法检查而容易出错等。与这些工具相比较,Ant的两个特性决定了它是一款优秀的Build工具:

1. 基于Java的实现。具有良好的跨平台性,同时可以通过增加新的Java类来扩展Ant的功能,而无需去了解不同平台上不同的脚本语言。

2.基于XML的配置文件。Ant以XML树来描述Target/Task的关系,文件结构清晰、易读易写,并且利用XML对格式的控制来避免由于配置文件的错误造成的Build操作失败。

安装与配置

Ant的安装非常简单,把从网上下载的jakarta-ant-1.5.1-bin.zip解开到一个目录下即可(以下假定安装在目录D:\jakarta-ant-1.5.1)。接下来需要进行环境变量配置:

SET ANT_HOME=D:\jakarta-ant-1.5.1 //注意是Ant的安装目录,不是bin子目录
SET PATH=%PATH%;%ANT_HOME%\bin;


在配置环境变量之前,请确认已经正确设置了JAVA_HOME系统变量。输入ant命令,看到如下输出说明已成功安装了Ant工具:

Buildfile: build.xml does not exist!
Build failed


提示信息表明在当前目录不存在build.xml配置文件,但这本身已经说明Ant成功运行了。

快速入门

下面用一个最简单也是最经典的例子-HelloWorld来感受一下Ant吧。

//HelloWorld.java
package com.sharetop.antdemo;
public class HelloWorld {
public static void main( String args[] ) {
System.out.println("Hello world. ");
}
}


要让Ant编译这个文件,首先需要编写一个Build配置文件。在一般情况下,这个文件被命名为build.xml。

<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir="." >
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello.jar" />
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
<java classname="com.sharetop.antdemo.HelloWorld" classpath="${hello_jar}"/>
</target>
</project>


来看一下这个文件的内容,它描述了以下信息:工程的名字为HelloWorld,工程有四个target,分别是init、compil、build和run,缺省是run。compile只有一个任务javac,源文件位于src目录下,输出的类文件要放在classes目录下。build的任务是jar,生成的jar文件为hello.jar,它打包时以classes为根目录。而run则是执行这个HelloWorld类,用hello.jar作为classpath。这四个target之间有一个依赖关系,这种关系用depends来指定。即如果Target A依赖于Target B,那么在执行Target A之前会首先执行Target B。所以从下面运行缺省Target(run)的输出看,这四个Target的执行顺序是:init→compile→build→run。文件目录结构如图1所示。HelloWorld.java文件在src\com\sharetop\antdemo子目录下。
在命令行输入命令:ant,然后运行,可以看到如下输出:

如果配置文件名不是build.xml,比如是build_front.xml,那么,可以使用-buildfile命令参数指定:

G:\myDoc\ant_demo>ant -buildfile build_front.xml


也可以单独执行指定的某个target,比如,只编译不打包执行,可以使用下面输入命令即可:

G:\myDoc\ant_demo>ant compile

在相应的目录下会找到编译出的HelloWorld.class文件。

再看看上面的build.xml配置文件,文件开头定义了3个属性,分别指定了源文件输出路径、类文件输出路径和生成的Jar文件名,后面对这些路径的引用都通过一个${property name}来引用。所以,要注意这样一个原则“目录的定义与目录的引用应该分开”。
基本应用

建立工程的目录

一般要根据工程的实际情况来建立工程的目录结构。但是,有一些比较通用的组织形式可供参考,比如所有的jakarta项目都使用类似的目录结构。下面让我们来看一下这种目录结构的特点。

表1

目录 文件
bin 公共的二进制文件,以及运行脚本
build 临时创建的文件,如类文件等
dist 目标输出文件,如生成Jar文件等。
doc/javadocs 文档。
lib 需要导出的Java包
src 源文件

对于一个简单的工程,一般包括表1的几个目录。其中bin、lib、doc和src目录需要在CVS的控制之下。当然在这样的目录结构上,也可以做一些调整,例如,可以建立一个extra目录来放置需要发布的Jar文件、Inf文件及图像文件等。同样,如果开发Web应用可以建立一个Web目录放置JSP、HTML等文件。

如果我们开发的是一个比较复杂的项目,包括多个子项目,并且各个子项目是由不同的开发人员来完成的,那么要如何来设计它的目录结构?首先有一点是需要确定的,不同的子项目应该拥有不同的Build文件,并且整个项目也应该有一个总的Build文件。可以通过Ant任务或是AntCall任务调用子项目的Build文件,如下例:

<target name="core" depends="init">
<ant dir="components" target="core"/>
<ant dir="waf/src" target="core"/>
<ant dir="apps" target="core"/>
</target>


在各个子项目的耦合不是非常紧密的情况下,各个子项目应该有各自独立的目录结构,也就是说它们可以有自己的src、doc、build、dist等目录及自己的build.xml文件,但是可以共享lib和bin目录。而对于那些耦合紧密的子项目,则推荐使用同一个src目录,但是不同的子项目有不同的子目录,各个子项目的build.xml文件可以放在根目录下,也可以移到各个子项目的目录下。

编写Build文件

要用好Ant工具,关键是要编写一个build.xml文件。要编写出一个结构良好、灵活可扩展的Build文件,有两个问题要考虑,一是了解Build文件的基本结构,二是了解Ant定义的大量任务。

Ant的Build文件是一个标准的XML文件,它包含一个根节点Project,每个Project定义了至少一个或多个Target,每个Target又是一系列Task的集合。它们之间的关系如图2所示。
每个Task是一段可被执行的代码,比如,前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task,我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践,这方面最好的参考就是官方的Ant使用手册。

外部文件的使用

使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。

可以将一个外部的XML文件导入Build文件中,这样多个项目的开发者可以通过引用来共享一些代码,同样,这也有助于Build文件的重用,示例代码如下所示:

<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../share-variable.xml">
<!ENTITY build-share SYSTEM "file:../build-share.xml">
]>
<project name="main" default="complie" basedir=".">
&share-variable;
&build-share;
... ...


在J2EE项目中的应用

只要掌握了Ant的使用方法,在J2EE项目中的应用与在其它项目中的应用并没有太大的不同,但是仍有几点是需要注意的。

一是要清楚War和Jar文件的目录结构,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic-ejb-jar.xml等)的位置,在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录下。二是在J2EE项目中可能会涉及到一些特殊的任务,比如在Weblogic中会调用ejbc预编译EJB的代码存根,或者需要在Ant中同时发布Jar到相应的服务器中等。可以用两种途径实现这些任务,一是扩展Ant任务实现这些任务,二是直接用Java任务来执行这些命令。下面是打包、发布一个EJB的build.xml配置文件片断,代码如下:

<target name="deploy_HelloEJB" depends="compile">
<delete dir="${temp}/ejb_make"/> <!-- 首先删除临时目录 -->
<delete file="${temp}/helloEJB.jar"/>
<!-- 删除WebLogic域中老版本的EJB -->
<delete file="${weblogic.deploy.dest}/helloEJB.jar"/>
<!-- 创建META-INF目录,放置ejb-jar.xml和weblogic-ejb-jar.xml -->
<mkdir dir="${temp}/ejb_make/META-INF"/>
<!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录-->
<copy todir="${temp}/ejb_make/META-INF">
<fileset dir="etc/baseinfo">
<include name="*.xml"/>
</fileset>
</copy>
<!-- 拷贝所有的helloEJB类到临时目录 -->
<copy todir="${temp}/ejb_make/">
<fileset dir="${dest.classes}/"> <!-- dest.classes是输出的类文件目录 -->
<include name="${dest.classes}/helloEJB/**"/>
</fileset>
</copy>
<!-- 将所有这些文件打包成helloEJB.jar -->
<jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/>
<!-- 进行weblogic.ejbc编译 -->
<java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" >
<classpath>
<fileset dir="lib">
<include name="*.jar" />
</fileset>
</classpath>
<arg value="${temp}/helloEJB.jar" />
<arg value="${temp}/helloEJB_deploy.jar" />
</java>
<!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 -->
<copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/>
</target>


用Ant配合JUnit实现单元测试

Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit,以及如何编写测试用例(TestCase),感兴趣的读者可以参阅JUnit的相关文档。在Ant中使用JUnit的方法非常简单,首先需要把junit.jar拷入ANT_HOME\lib下,确认在这个目录下有optional.jar,因为JUnit是Ant的扩展任务,需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务,代码如下:

<target name="run" depends="client">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath>
<pathelement location="client.jar" />
</classpath>
<formatter type="plain" />
<test name="com.sharetop.antdemo.HelloWorldTest" />
</junit>
</target>


高级话题

为Ant开发扩展任务

为Ant实现扩展任务其实是非常容易的,只需按照以下几个步骤即可:

1. 创建一个Java类继承org.apache.tools.ant.Task类;

2. 对每个属性实现set方法。Ant会根据需要自动完成类型转换;

3. 如果扩展的任务需要嵌套其它的Task,那么这个Java类必需实现接口org.apache.tools.ant.TaskContainer;

4. 如果扩展的任务要支持Text,需要增加一个方法void addText(String);

5. 对每个嵌套的元素,实现create、add 或 addConfigured 方法;

6. 实现public void execute方法;

7. 在build.xml文件中使用 <taskdef> 来引用自定义的Task。

下面以一个简单的例子来说明如何为Ant增加一个hello任务,它可以连续打印多条信息,打印的次数由属性count指定,而打印的内容则由它内嵌的一个helloinfo任务的message属性指定,看上去这非常类似JSP中自定义标签的一些概念,实现代码如下:

//HelloInfoTask.java
package com.sharetop.antdemo;
import org.apache.tools.ant.*;
public class HelloInfoTask {
private String msg;
public void execute() throws BuildException {
System.out.println(msg);
}
public void setMessage(String msg) {
this.msg = msg;
}
}


下面是外部Task类的代码:

//HelloTask.java
package com.sharetop.antdemo;
import org.apache.tools.ant.*;
public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer
{
private Task info;
private int count;
public void execute() throws BuildException {
for(int i=0;i<count;i++)
info.execute();
}
public void setCount(int c){
this.count=c;
}
public void addTask(Task t){
this.info=t;
}
}


实现了这两个Task,在build.xml文件中定义它的task name,就可以在Target中执行它了。如果你不想使用 <taskdef> 标签来定义Task,也可以通过修改default.properties文件来实现引入新Task,这个文件位于org.apache.tools.ant.taskdefs 包里。下例是一个使用 标签来引入新Task的Build文件部分:

<target name="hello" depends="client">
<taskdef name="hello"
classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/>
<taskdef name="helloinfo"
classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/>
<hello count="3" >
<helloinfo message="hello world" />
</hello>
</target>

每个Task是一段可被执行的代码,比如,前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task,我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践,这方面最好的参考就是官方的Ant使用手册。

外部文件的使用

使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。

可以将一个外部的XML文件导入Build文件中,这样多个项目的开发者可以通过引用来共享一些代码,同样,这也有助于Build文件的重用,示例代码如下所示:

<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../share-variable.xml">
<!ENTITY build-share SYSTEM "file:../build-share.xml">
]>
<project name="main" default="complie" basedir=".">
&share-variable;
&build-share;
... ...


在J2EE项目中的应用

只要掌握了Ant的使用方法,在J2EE项目中的应用与在其它项目中的应用并没有太大的不同,但是仍有几点是需要注意的。

一是要清楚War和Jar文件的目录结构,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic-ejb-jar.xml等)的位置,在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录下。二是在J2EE项目中可能会涉及到一些特殊的任务,比如在Weblogic中会调用ejbc预编译EJB的代码存根,或者需要在Ant中同时发布Jar到相应的服务器中等。可以用两种途径实现这些任务,一是扩展Ant任务实现这些任务,二是直接用Java任务来执行这些命令。下面是打包、发布一个EJB的build.xml配置文件片断,代码如下:

<target name="deploy_HelloEJB" depends="compile">
<delete dir="${temp}/ejb_make"/> <!-- 首先删除临时目录 -->
<delete file="${temp}/helloEJB.jar"/>
<!-- 删除WebLogic域中老版本的EJB -->
<delete file="${weblogic.deploy.dest}/helloEJB.jar"/>
<!-- 创建META-INF目录,放置ejb-jar.xml和weblogic-ejb-jar.xml -->
<mkdir dir="${temp}/ejb_make/META-INF"/>
<!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录-->
<copy todir="${temp}/ejb_make/META-INF">
<fileset dir="etc/baseinfo">
<include name="*.xml"/>
</fileset>
</copy>
<!-- 拷贝所有的helloEJB类到临时目录 -->
<copy todir="${temp}/ejb_make/">
<fileset dir="${dest.classes}/"> <!-- dest.classes是输出的类文件目录 -->
<include name="${dest.classes}/helloEJB/**"/>
</fileset>
</copy>
<!-- 将所有这些文件打包成helloEJB.jar -->
<jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/>
<!-- 进行weblogic.ejbc编译 -->
<java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" >
<classpath>
<fileset dir="lib">
<include name="*.jar" />
</fileset>
</classpath>
<arg value="${temp}/helloEJB.jar" />
<arg value="${temp}/helloEJB_deploy.jar" />
</java>
<!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 -->
<copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/>
</target>


用Ant配合JUnit实现单元测试

Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit,以及如何编写测试用例(TestCase),感兴趣的读者可以参阅JUnit的相关文档。在Ant中使用JUnit的方法非常简单,首先需要把junit.jar拷入ANT_HOME\lib下,确认在这个目录下有optional.jar,因为JUnit是Ant的扩展任务,需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务,代码如下:

<target name="run" depends="client">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath>
<pathelement location="client.jar" />
</classpath>
<formatter type="plain" />
<test name="com.sharetop.antdemo.HelloWorldTest" />
</junit>
</target>

posted @ 2006-04-27 11:23 狼爱上狸 阅读(522) | 评论 (0)编辑 收藏

ANT 下载,ant的配法

下载http://www.apache.org/dist/ant/binaries下的apache-ant-1.6.1-bin.zip    
接压安装。  
 
ant的配法:  
1。解压ant的包到本地目录。  
2。在环境变量中设置ANT_HOME,值为你的安装目录。  
3。在环境变量中设置JAVA_HOME,值为你的jdk安装目录。  
4。把ANT_HOME/bin加到你系统的path目录中去。  
 
在cmd模式下输入  ant  -version回车,看到输出说明配置成功。  

posted @ 2006-04-27 11:11 狼爱上狸 阅读(3579) | 评论 (3)编辑 收藏

apache的日常维护

一:Apache的主要缺陷
1:HTTP拒绝服务
2:缓冲区溢出
3:被攻击者获得root权限
4:配置文件的保护
5:服务器访问控制
6:密码保护
7:Apache日志文件
8:安全相关的指令
9:SSI(Server-Side Includes)的安全
10:其它安全工具
11:总结

综述


本文将讨论UNIX平台下,Apache WEB服务器安装和配置的安全问题。我们假定阅读本文的系统管理员已经针对自己站点的情况选择了相关的模块,并且能够进行配置、创建和排除故障。本文的主要目的是帮助你简历一个安全的Apache歪脖(web icon_razz.gif)服务器。

在众多的Web服务器产品中,Apache是应用最为广泛的一个产品,同时也是一个设计上非常安全的程序。但是,同其它应用程序一样,Apache也存在安全缺陷。本文主要针对三个安全缺陷进行讨论,包括:使用HTTP协议进行的拒绝服务攻击(denial of service)、3缓冲区溢出攻击以及被攻击者获得root权限。注意:合理的配置能够保护Apache免遭多种攻击,但是在网络层上的拒绝服务攻击则不是调整Apache的配置所能够防止的。本文所涉及的是使用HTTP(应用层)协议进行的拒绝服务攻击。

一:Apache的主要缺陷

1:HTTP拒绝服务

攻击者通过某些手段使服务器拒绝对HTTP应答。这会使Apache对系统资源(CPU时间和内存)需求的剧增,最终造成系统变慢甚至完全瘫痪。

2:缓冲区溢出

攻击者利用程序编写的一些缺陷,使程序偏离正常的流程。程序使用静态分配的内存保存请求数据,攻击者就可以发送一个超长请求使缓冲区溢出。比如一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出,攻击者可以执行其恶意指令或者使系统宕机。

3:被攻击者获得root权限

Apache一般以root权限运行(父进程),攻击者通过它获得root权限,进而控制整个系统。
获得最新的Apache
使用最安全版本对于加强Apache Web服务器的安全是至关重要的。
你可以从Apache的官方网站http://www.apache.org获得Apache的最新版本。

4:配置文件的保护

Apache Web服务器有三个主要的配置文件,它们一般位于/usr/local/apache/conf目录。这三个文件是:httpd.con、srm.conf和access.conf。这些文件是整个Apache的控制中心,因此需要对三个配置文件有所了解。httpd.conf文件是主配置文件;srm.conf允许你填加资源文件;access.conf设置文件的访问权限。这些文件的配置可以参考http://httpd.apache.org/docs/mod/core.html

5:服务器访问控制

access.conf文件包含一些指令控制允许什么用户访问Apache目录。应该把deny from all作为初始化指令,然后使用allow from指令打开访问权限。你可以允许来自某个域、IP地址或者IP段的访问。例如:

order deny,allow
deny from all
allow from sans.org


6:密码保护

使用.htaccess文件,可以把某个目录的访问权限赋予某个用户。系统管理员需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打开目录的访问控制。以下是一个.htaccess示例文件:

AuthName PrivateFiles
AuthType Basic
AuthUserFile /path/to/httpd/users
require foo <---一个有效的用户名

然后,使用如下命令填加一个用户:

# htpasswd -c /path/to/httpd/users foo


7:Apache日志文件

系统管理员可以使用日志格式指令来控制日志文件的信息。使用LogFormat "%a %l"指令,可以把发出HTTP请求浏览器的IP地址和主机名记录到日志文件。出于安全的考虑,你至少应该那些验证失败的WEB用户,在http.conf文件中加入LogFormat "%401u"指令可以实现这个目的。这个指令还有其它的许多参数,用户可以参考Apache的文档。另外,Apache的错误日志文件对于系统管理员来说也是非常重要的,错误日志文件中包括服务器的启动、停止以及CGI执行失败等信息。

8:安全相关的指令

在Apache配置文件中,有一些安全相关的指令可以使用。这些指令的详细用法可以参考http://httpd.apache.org/docs/mod/directives.html。

使用以下指令可以帮助你减小拒绝服务的威胁:

LimitRequestbody: 数字参数,控制HTTP请求的大小。
LimitRequestFields: 数字参数,控制请求头的数目。
KeepAlive: 设置连接的生存期。
KeepAliveTimeout: 限制等待请求的时间。

使用以下指令可以帮助你叫嚣缓冲区溢出的危险:

LimitRequestFieldSize: 限制每个请求头的大小。
LimitRequestLine: 限制每个请求行的大小。

CGI(ommon Gateway Interface,通用网关接口)的安全威胁


CGI的安全性非常重要,攻击者可以利用CGI的缺陷获得系统信息、执行系统命令、占用系统资源。如果一个CGI程序使用静态分配的内存,就可能为缓冲区溢出攻击提供机会。为了减少这种风险,程序员应该在CGI代码中使用动态分配内存。除了CGI编写人员应该注意外,系统管理员可以采取对CGI进行封装(例如:suEXEC或者CGI Wrap)的办法加强CGI的安全性。通过这种方式可以使CGI程序以某个独立的用户权限运行,即使发生缓冲区溢出,也只影响那个用户的目录/文件。

perl是一种功能非常强大的脚本语言。主要用于文本的处理,程序员还可以通过perl脚本使用系统调用。如果程序编写的不好,就会为攻击者闯入服务器大开方便之门。因此,使用perl脚本一定要小心,以免出现此类漏洞。在perl脚本中,处理请求数据之前,最好能够调用专门的检查例程对输入的合法性进行检查。除此之外,还要确保Apache不是以root的权限运行的,Perl脚本被限制在某个特定的目录下运行。

9:SSI(Server-Side Includes)的安全

使用SSI,程序员可以建立一些常用的例程,在需要时把这些例程包含进他们的代码中。SSI还允许有条件地执行外部程序,攻击者可能利用这个条件让服务器执行他们的恶意程序。在access.conf文件中使用IncludesNoEXEC指令,可以关闭执行SSI文件的功能。不过这条指令会造成服务器不执行CGI脚本或者程序。

10:其它安全工具

使用TCP Wrappers和Tripwire可以为你的系统提供额外的保护。你可以使用TCP Wrappers来控制Telnet或者FTP的访问权限。Tripwire是一个数据完整性检测工具,可以帮助系统管理员监视系统是否被改动过,你可以在Tripwire的配置文件中编制特定的策略,监视Web服务器的配置文件、数据和CGI文件是否被修改。

11:总结


Apache是一个优秀的歪脖服务器,虽然Apache的开发者非常注重其安全性,但是由于Apache非常庞大,难免会存在安全隐患。Apache的安装维护中需要注意以下问题:

1: 检查文件和目录的权限是否恰当。
2: httpd.conf、srm.conf和access.conf的设置是否适当
3: 使服务器日志文件能够记录尽可能详细的信息。
4: 对某些需要特别保护的目录使用密码保护(.htaccess)。
5: 对CGI脚本或者程序进行封装。
6: 如果CGI使用Perl编写,要详细检查其安全性
7: 检查SSI指令
8: 使用TCP Wrappers和Tripwire。(linux知识宝库)

posted @ 2006-04-21 16:45 狼爱上狸 阅读(205) | 评论 (0)编辑 收藏

正确配置和维护Apache WEB Server 安全性

   前言:在目前的Internet时代,主页已成为树立公司形象和展示自我天地的一个重要手段,配置一台强大且安全的Web Server就显得尤其重要。在众多的Web Server产品中,Apache是应用最为广泛的一个产品,同时也是一个设计上非常安全的程序。但是,同其它应用程序一样,Apache也存在安全缺陷。本文将详细介绍如何正确配置和维护Apache WEB Server的安全性问题等。
    一,Apache服务器的介绍

    Apache服务器它是Internet网上应用最为广泛的Web服务器软件之一。Apache服务器源自美国国家超级技术计算应用中心(NCSA)的Web服务器项目中。目前已在互联网中占据了领导地位。Apache服务器得经过精心配置之后,才能使它适应高负荷,大吞吐量的互联网工作。快速、可靠、通过简单的API扩展,Perl/Python解释器可被编译到服务器中,且完全免费,完全源代码开放。如果你需要创建一个每天有数百万人访问的Web服务器,Apache可能是最佳选择。

    二,Apache服务器的主要安全缺陷

    正如我们前言所说尽管Apache服务器应用最为广泛,设计上非常安全的程序。但是同其它应用程序一样,Apache也存在安全缺陷。毕竟它是完全源代码,Apache服务器的安全缺陷主要是使用HTTP协议进行的拒绝服务攻击(denial of service)、缓冲区溢出攻击以及被攻击者获得root权限三缺陷和最新的恶意的攻击者进行“拒绝服务”(DoS)攻击。合理的网络配置能够保护Apache服务器免遭多种攻击。我们来介绍一下主要的安全缺陷:

    (1)使用HTTP协议进行的拒绝服务攻击(denial of service)的安全缺陷

    这种方法攻击者会通过某些手段使服务器拒绝对HTTP应答。这样会使Apache对系统资源(CPU时间和内存)需求的剧增,最终造成Apache系统变慢甚至完全瘫痪。

   
(2)缓冲区溢出的安全缺陷

    该方法攻击者利用程序编写的一些缺陷,使程序偏离正常的流程。程序使用静态分配的内存保存请求数据,攻击者就可以发送一个超长请求使缓冲区溢出。比如一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出,攻击者可以执行其恶意指令或者使系统宕机。

 
  (3)被攻击者获得root权限的安全缺陷

    该安全缺陷主要是因为Apache服务器一般以root权限运行(父进程),攻击者会通过它获得root权限,进而控制整个Apache系统。

    (4)恶意的攻击者进行“拒绝服务”(DoS)攻击的安全缺陷
    这个最新在6月17日发现的漏洞,它主要是存在于Apache的chunk encoding中,这是一个HTTP协议定义的用于接受web用户所提交数据的功能。 利用黑客程序可以对于运行在FreeBSD 4.5, OpenBSD 3.0 / 3.1, NetBSD 1.5.2平台上的Apache服务器均可进行有效的攻击.

    所有说使用最高和最新安全版本对于加强Apache Web服务器的安全是至关重要的。请广大Apache服务器管理员去
http://www.apache.org/dist/httpd/下载补丁程序以确保其WEB服务器安全

 
  三, 正确维护和配置Apache服务器

    虽然Apache服务器的开发者非常注重安全性,由于Apache服务器其庞大的项目,难免会存在安全隐患。正确维护和配置Apache WEB服务器就很重要了。我们应注意的一些问题:

    (1)Apache服务器配置文件
    Apache Web服务器主要有三个配置文件,位于/usr/local/apache/conf目录下。这三个文件是:
    httpd.con----->主配置文件
    srm.conf------>填加资源文件
    access.conf--->设置文件的访问权限
注:具体配置可以参考:
http://httpd.apache.org/docs/mod/core.html

    (2)Apache服务器的日志文件
    我们可以使用日志格式指令来控制日志文件的信息。使用Logformat "%a %l"指令,可以把发出HTTP请求浏览器的IP地址和主机名记录到日志文件。出于安全的考虑,在日志中我们应知道至少应该那些验证失败的WEB用户,在http.conf文件中加入Logformat "%401u"指令可以实现这个目的。这个指令还有其它的许多参数,用户可以参考Apache的文档。另外,Apache的错误日志文件对于系统管理员来说也是非常重要的,错误日志文件中包括服务器的启动、停止以及CGI执行失败等信息。更多请参看Apache日志系列1-5。

    (3)Apache服务器的目录安全认证
    在Apache Server中是允许使用 .htaccess做目录安全保护的,欲读取这保护的目录需要先键入正确用户帐号与密码。这样可做为专门管理网页存放的目录或做为会员区等。
在保护的目录放置一个档案,档名为.htaccss
AuthName "会员专区"
AuthType "Basic"
AuthUserFile "/var/tmp/xxx.pw" ----->把password放在网站外
require valid-user

到apache/bin目录,建password档

% ./htpasswd -c /var/tmp/xxx.pw username1 ----->第一次建档要用参数"-c"

% ./htpasswd /var/tmp/xxx.pw username2
这样就可以保护目录内的内容,进入要用合法的用户.
注:采用了Apache内附的模组。也可以采用在httpd.conf中加入: 
options indexes followsymlinks 
allowoverride authconfig 
order allow,deny 
allow from all 

   (4)Apache服务器访问控制
    我们就要看三个配置文件中的第三个文件了,即access.conf文件,它包含一些指令控制允许什么用户访问Apache目录。应该把deny from all设为初始化指令,再使用allow from指令打开访问权限。


order deny,allow
deny from all
allow from safechina.net


设置允许来自某个域、IP地址或者IP段的访问。

    (5)Apache服务器的密码保护问题
     我们再使用.htaccess文件把某个目录的访问权限赋予某个用户。系统管理员需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打开目录的访问控制。如:
AuthName PrivateFiles
AuthType Basic
AuthUserFile /path/to/httpd/users
require Phoenix

# htpasswd -c /path/to/httpd/users Phoenix

  
 四,设置Apache服务器的WEB和文件服务器

    我们在Apache服务器上存放WEB服务器的文件,供用户访问,并设置/home/ftp/pub目录为文件存放区域,用 http://download.your.com/pub/来访问。在防火墙上设置apache反向代理技术,由防火墙代理访问 。 
 
    (1)Apache服务器的设置 
  apache服务器采用默认配置。主目录为/home/httpd/html,主机域名为Phoenix.your.com,且别名到www.your.com中, 并且设置srm.conf加一行别名定义如下: 
Alias /pub /home/ftp/pub/ 

更改默认应用程序类型定义如下: 
DefaultType application/octet-stream 

最后在/etc/httpd/conf/access.conf中增加一项定义 

Options Indexes 
AllowOverride AuthConfig 
order allow,deny 
allow from all 

注:Options Indexes允许在找不到index.html文件的情况下允许列出目录/文件列表。AllowOverride AuthConfig允许做基本的用户名和口令验证。这样的话,需要在/home/ftp/pub目录下放入.htaccess,内容如下: 

[root@shopu pub]# more .htaccess 
AuthName Branch Office Public Software Download Area 
AuthType Basic 
AuthUserFile /etc/.usrpasswd 
require valid-user 

用# htpasswd -c /etc/.usrpasswd user1  分别创建不同的允许访问/pub下文件服务的外部用户名和口令。 

(2)在防火墙上配置反向代理技术. 
  在/etc/httpd/conf/httpd.conf  中加入 NameVirtualHost xxx.xxx.xxx.xxx 
# xxx.xxx.xxx.xxx ----->是防火墙外部在互联网上永久IP地址 
servername www.your.com 
errorlog /var/log/httpd/error_log 
transferlog /var/log/httpd/access_log 
rewriteengine on 
proxyrequests off 
usecanonicalname off 
rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 Apache服务器的IP地址。


servername http://download.your.com/pub/
errorlog /var/log/httpd/download/error_log 
transferlog /var/log/httpd/download/access_log 
rewriteengine on 
proxyrequests off 
usecanonicalname off 
rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 同上Apache服务器的IP地址。

设置防火墙上的DNS,让download.your.com和www.your.com都指向防火墙的外部网地址xxx.xxx.xxx.xxx。用http://www.your.com访问主页,用http://download.your.com/pub/访问公共文件的下载区。

注:还需要在apache服务器主机上建立目录/var/log/httpd/download/,否则会出错。另外,也可以设置防火墙主机上的/home/httpd/html/index.html的属性为750来阻止访问,这是防外部用户能访问到防火墙上的Apache服务器的http://www.your.com中。 

总结:Apache Server是一个非常优秀,非常棒的服务器,只要你正确配置和维护好Apache服务器,你就会感受到Apache Server 所带来的好处,同样希望你能够通过阅读本文达到理论和实践双丰收的目的。谢谢。(linux知识宝库)

posted @ 2006-04-21 16:44 狼爱上狸 阅读(186) | 评论 (0)编辑 收藏

让APACHE防止多线程下载

下面是sane@nsfocus.com写的一些关于mod_limitipconn.c的文档,可以参考一下:

[作者: sane@nsfocus.com ]

mod_limitipconn.c是一个非官方的apache模块,可以用来作为WEB文件的下载限制
,但是它是使用ExtendedStatus On形式,工作在应用层。当同一个IP的连接到达
限制的时候,apache对get请求发送:

HTTP/1.1 503 Service Temporarily Unavailable

从而使用户不能下载,但并不能阻止这种攻击,仍旧允许连接的。不过这个东东对
网管来说还是很有用的,特别是下载站的网管。简单介绍一下安装(动态模块方式
安装,假设你的apache已经装在/usr/local/apache目录下):

下载:http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz

# tar xzf mod_limitipconn-0.04.tar.gz
# cd mod_limitipconn-0.04
# vi Makefile

把第一行的:

APXS = apxs

改为

APXS = /usr/local/apache/bin/apxs

然后:

# make
# make install

修改apache配置文件:

# vi /usr/local/apache/conf/httpd.conf

ExtendedStatus On ###make install时这句前面的#没有去掉,一定要去掉

###make install已经加了下面两句,确认存在就行了
LoadModule limitipconn_module libexec/mod_limitipconn.so
AddModule mod_limitipconn.c

###下面就是对web目录下的文件下载限制


MaxConnPerIP 3 ###限制web根目录同一个IP只能同时开3进程下载

# 还有其它选项,如:
# NoIPLimit image/*
# OnlyIPLimit audio/mpeg video
# 可以设置多个Location



重启apache,用多线程的下载工具下载时,大于3个线程,其余的将得到信息:

HTTP/1.1 503 Service Temporarily Unavailable

或者根据User_Agent判断,把已知的多线程工具都给deny 掉
in httpd.conf
.....
BrowserMatch "NetAnt" badguy
BrowserMatch "GetRight" badguy
BrowserMatch "JetCar" badguy
BrowserMatch "Mass Downloader" badguy
BrowserMatch "ReGet" badguy
BrowserMatch "DLExpert" badguy
BrowserMatch "FlashGet" badguy
BrowserMatch "Offline Explorer" badguy
BrowserMatch "Teleport" badguy
...........

order deny,allow
deny from env=badguy
allow from all


注意httpd里面应该有 mod_setenvif模块。

posted @ 2006-04-21 16:43 狼爱上狸 阅读(204) | 评论 (0)编辑 收藏

win2000下apache2.0.55+weblogic8.15的配置方法

1.把C:\bea\weblogic81\server\bin\mod_wl_20.so拷贝到C:\Program Files\Apache Group\Apache2\modules下;
2.修改C:\Program Files\Apache Group\Apache2\conf\httpd.conf文件
   增加
LoadModule weblogic_module modules/mod_wl_20.so

# WEBLOGIC MODULE
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 7001
MatchExpression *.jsp
</IfModule>


DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
改为
DocumentRoot "C:\bea\user_projects\applications\mydomain\DefaultWebApp"


<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
改为
<Directory "C:\bea\user_projects\applications\mydomain\DefaultWebApp">

3 在C:\Program Files\Apache Group\Apache2\bin下输入
   apache -t
   测试
   如果ok,则成功
4.重启apache服务

posted @ 2006-04-21 16:40 狼爱上狸 阅读(306) | 评论 (0)编辑 收藏

配置策略,禁止139/445端口连接

也许大家都知道网上有些扫描器如letmein.exe,whoisadmin.exe等,是通过TCP的139和445端口来获取一些计算机相关信息,如计算机的名称,管理员帐号。这样便可以通过相应的攻击工具进行入侵了。当知道了管理员的帐号后,可以猜测或暴力破解其密码来获得计算机的控制权。怎么办呢?利用win2000自身的策略设置,就能解决。我们采取对本地安全设置里的"IP安全设置,在本地机器" 来进行设置,禁止TCP的139/445连接。

在进行策略设置前,首先来了解一下相应的原理吧!

一、基本原理
SMB(Server Message Block) Windows协议族,用于文件和打印共享服务。NBT(NetBIOS over TCP/IP) 使用137(UDP), 138(UDP) and 139 (TCP)来实现基于TCP/IP的NETBIOS网际互联。

在Windows NT中SMB基于NBT实现。 而在Windows2000中,SMB除了基于NBT的实现,还有直接通过445端口实现。 当Win2000(允许NBT)作为client来连接SMB服务器时,它会同时尝试连接139和445端口,如果445端口有响应,那么就发送RST包给139端口断开连接,以455端口通讯来继续.当445端口无响应时,才使用139端口。当Win2000(禁止NBT)作为client来连接SMB服务器时,那么它只会尝试连接445端口,如果无响应,那么连接失败。(注意可能对方是NT4.0服务器。) 如果win2000服务器允许NBT, 那么UDP端口137, 138, TCP 端口 139, 445将开放。 如果 NBT 被禁止, 那么只有445端口开放。

二、实战操作
简单的原理就这些了,那如何实现呢?方法如下

1. 通过对开始->设置->控制面版->管理工具 -> 本地安全策略 ->(鼠标右击)IP安全策略,在本地机器。点击"管理IP筛选器表和筛选器操作",如图1所示。

2.在"管理IP筛选器列表"选项卡上点击"添加"。

3.弹出"IP筛选器列表"窗口。

4.分别添入名称和描述,如禁用139连接。并点击"添加",接着会出现一个IP"筛选器向导",单击下一步。

5.到"指定IP源地址"窗口,在"源地址"中选择"任何IP地址",点击下一步。

6.在"IP通信目标"的"目标地址"选择"我的IP地址",点击下一步。

7.在"IP协议类型"的"选择协议类型"选择"TCP",点击下一步。

8.在"筛选器向导"的"设置IP协议端口"里第一栏为"从任意端口",第二栏为"到此端口"并添上"139",点击下一步。

9.接着点击"完成" ->然后再单击"关闭" 回到"管理IP筛选器表和筛选器操作"窗口。

10.选择"管理筛选器操作"选项卡点击"添加"。

11.同样会出现一个"筛先器操作向导"的窗口,点击"下一步",在"名称"里添上"禁用139连接"。

12.按"下一步",并选择"阻止",再按"下一步"。

点击"完成"和"关闭"。

到这里"禁止139连接"的策略算是制定好了。不用多说了,禁用445端口的"筛选器列表"和"筛选器操作"的添加是和"禁止139连接"的方法一样的! 有一点,是需要注意的在添加139和445的筛选器操作时,不能为了省事用同一个"阻止"筛选器操作,这样制定出的规则将无法使用。
13.当禁止139/445的操作都完成后,回到"IP安全策略,在本地机器" ,通过右击创建"IP安全策略"

14.会出现一个"IP安全策略向导"的窗口,直接点击"下一步",在"名称"添入"禁用139/445连接",一直点击"下一步"到"完成"。

15.在"禁用139/445连接 属性"里点击"添加"。

16.会出现一个"安全规则向导"窗口,一直点击"下一步"到"IP筛选器列表"选择"禁用139连接",点击"下一步"。

17.在"筛选器操作"选择"禁用139连接",点击"下一步",接着点去"完成"和"确定"。

18. 此时,可以通过"添加"将禁用445端口的筛选器列表和操作也加进去。

19.接着是一直点击"下一步",到"IP筛选器列表",选择"禁用445连接",点击"下一步"。

20.此时,已经完成了所有的配置。点击"关闭"。回到"属性"窗口,设置好的窗口呈现如下 。

21.最后,将我们刚才配置好的"禁用139/445连接"的安全策略指派即可。大功告成啦!

当然,如果你已有了自己的策略或使用系统自代的策略也是可以通过添加规则的方法来实现禁用139/445的目的,但创建"IP筛选器列表"和"管理筛选器操作"是一定要作的。同理你也可以通过IP安全设置里,对ICMP进行策略的制定,限制ping工具的使用。现用在用letmein之类的扫描器再试试吧!

附:这是未作禁用139/445策略时,用letmein.exe和whoisadmin.exe的探测结果,如下图:

作过禁用139/445策略后的探测结果就变成了这样,如下图:

注:以上的测试是在域控制器上作的,如果不是的话,在2000server上操作的过程中会有如下的提示:

不需要去管它,点击"是"就可以了!

posted @ 2006-04-17 11:24 狼爱上狸 阅读(266) | 评论 (0)编辑 收藏

Weblogic8.1里面使用JDataStore的方法

Weblogic8.1里面使用JDataStore的方法
JDataStore是JBuilder自带的数据库,最近摸索了几天终于在Weblogic8.1下面成功
部署了一个操作数据库的Web application,为了给所有像我一样的初学者指指路,下
面简单说说具体的操作。

1.Weblogic里面没有JDataStore的数据驱动,所以要先到JBuilder的安装文件夹下面,
把lib文件夹下面的jdsremote.jar文件复制到Weblogic安装文件夹(比如D:\BEA)下面的
D:\BEA\weblogic81\server\lib里面,然后到D:\BEA\user_projects\mydomain下面
修改startWeblogic.cmd文件,在set CLASSPATH=后面加上
%WL_HOME%\server\lib\jdsremote.jar;
这里%WL_HOME%代表某个文件夹,比如:WL_HOME=D:\BEA\weblogic81

2.JDataStore的数据驱动名为:com.borland.datastore.jdbc.DataStoreDriver
数据库URL应该写成如下格式:
jdbc:borland:dsremote://localhost/E:\My Program\User_Table.jds
下面是我写的一段程序,权当参考吧。

public boolean find(String username,String password) throws Exception
{
Class.forName("com.borland.datastore.jdbc.DataStoreDriver").newInstance();
String url="jdbc:borland:dsremote://localhost/E:\\My Program\\User_Table.jds";
Connection con=DriverManager.getConnection(url,"DataStoreExplorer","user");
Statement sta=con.createStatement();
String sqlstr="select * from my_user where username='" + username + "' and password='" + password + "'";
ResultSet ret=sta.executeQuery(sqlstr);
if (ret.next()) return true;
else return false;
}
最后,记得先运行JDataStore Server,否则会出现被refuse的错误:)

posted @ 2006-04-16 08:09 狼爱上狸 阅读(242) | 评论 (0)编辑 收藏

npkcrypt 服务启动失败

npkcrypt 服务启动失败

事件类型: 错误
事件来源: Service Control Manager
事件种类: 无
事件 ID: 7000
日期:  2006-1-6
事件:  9:00:30
用户:  N/A
计算机: AFLY
描述:
由于下列错误,npkcrypt 服务启动失败:
系统找不到指定的文件。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

QQ2005 Beta3 整合了一个叫做 npkcrypt 的键盘加密程序,美其明曰保护用户密码输入安全,其实是不经用户同意擅自在用户系统中安装莫名其妙驱动程序。安装此版本后,密码不能通过粘贴的方法输入,密码为中文的QQ用户没法登录。

如果手动删除QQ或转移QQ目录或正常路径卸载该版本后 npkcrypt 也可能没有正常卸载,就会出现以上的“npkcrypt 服务启动失败: 系统找不到指定的文件”错误。

解决方法:

1、在“我的电脑”上点右键,选“管理”->“设备管理器”。
2、选择“查看”/“显示隐藏的设备”,在“非即插即用驱动程序”中选择“npkcrypt”,卸载之。
3、运行“regedit”,可能存在键项:“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\npkcrypt”或“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\npkcrypt”等,删除之。
4、如果QQ目录存在:npkcrypt.sys、npkcrypt.vxd、npkcusb.sys 三个文件,删除之。
5、下次启动后即可生效。

posted @ 2006-04-05 15:41 狼爱上狸 阅读(340) | 评论 (0)编辑 收藏

仅列出标题
共38页: First 上一页 30 31 32 33 34 35 36 37 38