# 程序崩溃时不记录
kern.coredump=0
# lo本地数据流接收和发送空间
.net.local.stream.recvspace=65536
.net.local.dgram.maxdgram=16384
.net.local.dgram.recvspace=65536
# 数据包数据段大小,adsl为1452。
.net..net.tcp.mssdflt=1460
# 为网络数据连接时提供缓冲
.net..net.tcp.inflight_enable=1
# 数据包数据段最小值,adsl为1452
.net..net.tcp.minmss=1460
# 本地数据最大数量
.net..net.raw.maxdgram=65536
# 本地数据流接收空间
.net..net.raw.recvspace=65536
#ipfw防火墙动态规则数量,默认为4096,增大该值可以防止某些病毒发送大量tcp连接,导致不能建立正常连接
.net..net.ip.fw.dyn_max=65535
#设置ipf防火墙tcp连接空闲保留时间,默认8640000(120小时)
.net..net.ipf.fr_tcpidletimeout=864000
三、 服务程序的安全设置
到这里就是本文的重点所在了,我们将花费比较多的文字进行描述,当然,所以描述不一定是非常正确的,也希望能够对你有一些帮助。我们系统默认是运行了包括apache、mysql、vsftpd,ssh等服务,我们以下进行一一讲解。
1. apache的安全设置
apache的核心设置就是在 httpd.conf 里面,我们安装的apache的目录是在 /usr/local/apache2/ 下,那么我们的配置文件就是在 /usr/local/apache2/conf/httpd.conf ,如果你是使用ports等安装的,配置文件应该是在/etc或/usr/local/etc目录下。使用ee或者vi打开配置文件:
# ee /usr/local/apache2/conf/httpd.conf
下面我们就要进行比较多的安全设置了,基本的服务、端口、主目录等等设置就不说了,只讲与安全有关的设置。
(1)指定运行apache服务的用户和组
这是比较重要的,因为权限是继承的,如果运行apache服务的用户权限太高,那么很可能使得入侵者通过webshell等就会对系统构成严重威胁。一般我们运行apache的是nobody用户和nobody组。在httpd.conf的250-275行之间找到user和group选项,比如我们默认设置如下(去掉了注释信息):
<ifmodule !mpm_winnt.c>
<ifmodule !mpm.netware.c>
user nobody
group #-1
</ifmodule>
</ifmodule>
(2) apache的日志文件
apache的日志文件是非常重要的,可以发现apache的运行状况和访问情况,对于判断入侵等有重要帮助。它的默认选项是:
# 错误日志存放目录,默认是存放在apache安装目录的logs下
errorlog logs/error_log
# 日志记录的级别,级别有debug, info, notice, warn, error, crit等,默认是“warn”级别
loglevel warn
# 访问日志记录的格式,每一种格式都有不同的内容,根据你的需要进行定制,以获取最多访问信息
logformat "%h %l %u %t \"%r\" %>s %b \"%{referer}i\" \"%{user-agent}i\"" combined
logformat "%h %l %u %t \"%r\" %>s %b" common
logformat "%{referer}i -> %u" referer
logformat "%{user-agent}i" agent
# 使用上面格式的那一种,默认是使用common
customlog logs/access_log common
文件格式预定义的格式内容:
%a 远程用户ip
%a 本地httpd服务器的ip
%f 传送的文件名
%h 远程主机
%m 请求方式
%l identd给出的远程名
%p 连接的httpd端口号
%p 请求的httpd进程
%t 时间
%t 服务请求时间
你可以定制自己的日志格式,然后通过customlog logs/access_log common来进行调用。
注意,日志文件是由运行apache的用户进行打开的,要注意该文件的安全,防止被黑客改写或者删除。
(3) apache服务信息显示控制
在配置文件中有个选项是控制是否显示apache版本信息、主机名称、端口、支持的cgi等信息的:
serversignature on
默认为on,那么将显示所有信息:
我故意访问一个不存在的文件:http://www.target.com/404.html
那么就会在给的错误提示中显示如下信息:
apache/2.0.53 (unix) php/4.3.11 server at target.com port 80
所有apache和php的信息暴露无遗,这是很不安全的。当然同时还有off和email选项,off将不显示任何信息,email将显示管理员的邮箱地址,建议设为off或者email,这样能够避免泄漏apache服务器的信息给黑客。
(4) 目录浏览
在httpd.conf中可以设置apache能够对一些没有索引文件的网页目录进行目录浏览:
<directory />
options indexes followsymlinks
allowoverride none
</directory>
这是不合适也不安全的,建议不需要目录浏览:
<directory />
options followsymlinks
allowoverride none
</directory>
(5) 用户主页
设置httpd.conf中的:
userdir public_html
能够使得每个使用系统的用户在自己的主目录下建立 public_html 目录后就能够把自己的网页放进该目录,然后通过:
http://www.target.com/~用户名/网页 就能够显示自己的网页,这是不安全的,而且对于我们服务器来讲,这没有必要,所以我们直接关闭该功能:
userdir disabled
或者把该内容改名,改成 一个黑客比较不容易猜到的文件名,比如:
userdir webserver_public_htmlpath
也可以只允许部分用户具有该功能:
userdir enabled user1 user2 user3
(6) cgi执行目录
如果你的apache要执行一些perl等cgi程序,那么就要设置一下选项:
scriptalias /cgi-bin/ "/usr/local/apache/cgi-bin/"
但是这也给了黑客利用一些不安全的cgi程序来进行破坏,所以如果你不需要cgi的话,建议关闭该选项:
#scriptalias /cgi-bin/ "/usr/local/apache/cgi-bin/"
(7) 控制php脚本只能访问指定目录
在httpd.conf添加如下内容:
php_admin_value open_basedir /usr/www
后面的路径是你需要php脚本能够访问的目录,如果php脚本想要访问其他目录将出项错误提示。
(8) 目录访问控制 (未完)
这项内容最复杂,同时涉及的东西也比较多,我只能简单说一下,不清楚请参考其他文章。
比如下面的内容:
<directory />
options followsymlinks
allowoverride none
</directory>
就是允许访问每一个目录,里面设置的是允许执行的动作,一般包含的动作有:options、allowoverride、order、allow、deny。
options是只对指定目录及其子目录能够执行的操作,indexes、includes、followsymlinks、execcgi、multiviews、none、all等操作。
allowoverride是指定目录访问的权限,当然也可以通过 accessfilename文件指定的 .htaccess 来控制。它的操作有:none、all、options、fileinfo、authconfit、limit等。
order、allow、deny三个指令必须配合来控制目录访问权限。order指定检查次序的规则,比如order allow, deny,表示先按allow检查,如果不匹配再按deny进行检查。order deny, allow ,表示先按deny规则检查,如果不满足条件,再按allow进行检查。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器