Apache
Apache 3:安全
## 1、禁止目录遍历 - 将Options Indexes FollowSymLinks中的Indexes 去掉,就可以禁止 Apache 显示该目录结构。 - Indexes 的作用就是当该目录下没有 index.html文件时,就显示目录结构。 - options -indexes 关闭目录浏览 ## 2、隐藏版本信息 ##### 第一步:查看默认 apache 的状态信息 ```markdown [root@1314it conf]# curl -Is localhost HTTP/1.1 200 OK Date: Tue, 16 Nov 2010 04:20:15 GMT Server: Apache/2.2.3 (CentOS) DAV/2 PHP/5.1.6 mod_perl/2.0.4 Perl/v5.8.8【版本信息】 X-Powered-By: PHP/5.1.6 Connection: close Content-Type: text/html; charset=GB2312 [root@1314it conf]# ``` ##### 第二步:修改主配置文件 httpd.conf ```markdown ServerSignature Off ServerTokens Prod ``` ##### 第三步:重启 apache 测试 ```markdown [root@1314it conf]# curl -Is localhost HTTP/1.1 200 OK Date: Tue, 16 Nov 2010 04:21:41 GMT Server: Apache【版本信息没有了】 X-Powered-By: PHP/5.1.6 Connection: close Content-Type: text/html; charset=GB2312 [root@1314it conf]# ``` ## 3、隐藏banner(版本),关闭trace - 修改httpd.conf文件,设置以下选项: ServerTokens ProductOnly ServerSignature Off - 关闭trace-method TraceEnable off 另外apache可以在编译的时候,故意混淆banner信息,达到隐藏的目的 ## 4、防止DDOS攻击 DDOS攻击即采用自动点击机器人或者连续点击工具不断的刷新某一个网址或者网页上的按钮,造成网站在一时间收到大量的HTTP请求,进而阻塞网站正常的HTTP通道甚至造成网站瘫痪。 为了防止这一形式的攻击,我们一般把在一个按钮或者是一个请求在一秒内连续执行如:100次,可以认为是一种攻击(比如说你打开一个网页,点一下提交按钮,然后按住F5键不松开)。 在Linux下的Apache HttpServer安装后会提供一个mod_evasive20的模块,用于防止这一形式的攻击,它的做法是:把这个请求相关联的IP,封锁30分钟;直接把相关的IP踢入黑名单,让其永不翻身 - 设置: 在你的Apache的httpd.conf文件中的最后一行“LoadModule”加入如下这句: ```markdown LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so ``` - 然后加入下面这几行 ```markdown <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 15 DOSSiteCount 100 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 36000 DOSEmailNotify 网站超级管理员@xxx.com DOSLogDir "logs/mod_evasive" </IfModule> ``` - 核心参数解释: DOSHashTableSize3097 记录黑名单的尺寸 DOSPageCount 每个页面被判断为dos攻击的读取次数 DOSSiteCount 每个站点被判断为dos攻击的读取部件(object)的个数 DOSPageInterval 读取页面间隔秒 DOSSiteInterval 读取站点间隔秒 DOSBlockingPeriod 被封时间间隔秒 - 相关的Windows下的Apache见如下设置: - 为Windows下的Apache加载mod_evasive模块。下载附件中的压缩包,解压并拷贝mod_dosevasive22.dll到Apache安装目录下的modules目录(当然也可以是其他目录,需要自己修改路径)。 - 修改Apache的配置文件http.conf。添加以下内容 ```markdown LoadModule dosevasive22_module modules/mod_dosevasive22.dll DOSHashTableSize 3097 DOSPageCount 3 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 ``` ## 5、认证、授权、访问控制 - 认证(Authentication)是指任何识别用户身份的过程。 - 授权(Authorization)是允许特定用户访问特定区域或信息的过程。 - 相关模块和指令 - 认证类型模块(参见AuthType指令) mod_auth_basic mod_auth_digest - 认证支持模块 mod_authn_alias mod_authn_anon mod_authn_dbd mod_authn_dbm mod_authn_default mod_authn_file mod_authnz_ldap - 授权支持模块(参见Require指令) mod_authnz_ldap mod_authz_dbm mod_authz_default mod_authz_groupfile mod_authz_owner mod_authz_user - 认证和授权涉及到三组模块。通常,你需要从每一组中选择至少一个模块。 - mod_authnz_ldap模块:既包含认证功能也包含授权功能。 - mod_authn_alias模块:自身并不实现认证功能,但是允许其它认证支持模块以更灵活的方式进行配置。 - mod_authz_host模块:提供基于主机名、IP地址、请求特征的访问控制,但并不属于认证支持系统。 ##### 先决条件 本文中讨论的指令应该被放进主配置文件(通常在<Directory>段中)或者针对单个目录的配置文件(.htaccess文件)中。如果你打算使用.htaccess文件,则必须设置服务器以允许在这些文件中使用认证指令,即用AllowOverride指令指定哪些指令在针对单个目录的配置文件中有效。 既然本文讨论认证,就应该对AllowOverride这样设置:AllowOverride AuthConfig 如果你希望把这些指令直接写入主配置文件,当然就需要具有对主配置文件的写权限。 ##### 启用认证:用密码来保护服务器上的目录 - 1、首先需要建立一个密码文件 这个文件应该放在不能被网络访问的位置,以避免被下载。例如,如果/usr/local/apache/htdocs以外的空间不能被网络访问,那么可以考虑把密码文件放在/usr/local/apache/passwd目录中。 Apache在其安装目录的bin子目录中提供了htpasswd工具,用于建立密码文件,可以这样使用: ```markdown htpasswd -c /usr/local/apache/passwd/passwords rbowen ``` htpasswd会要你输入密码,并要求重新输入以进行确认: ```markdown # htpasswd -c /usr/local/apache/passwd/passwords rbowen New password: mypassword Re-type new password: mypassword Adding password for user rbowen ``` - 2、然后修改httpd.conf或.htaccess文件,指示服务器允许哪些用户访问并向用户索取密码 若要保护/usr/local/apache/htdocs/secret目录, 则可以将下列指令写入/usr/local/apache/htdocs/secret/.htaccess 或者httpd.conf的<Directory /usr/local/apache/apache/htdocs/secret>段 ```markdown AuthType Basic AuthName "Restricted Files" AuthUserFile /usr/local/apache/passwd/passwords Require user rbowen ``` AuthType指令选择对用户实施认证的方法,最常用的是由mod_auth_basic提供的Basic 。 AuthName指令设置了使用认证的域(Realm),它起两个作用,首先,此域会出现在显示给用户的密码提问对话框中,其次,也帮助客户端程序确定应该发送哪个密码。 AuthUserFile指令设置了密码文件的位置,也就是刚才我们用htpasswd建立的文件 Require指令设置了允许访问受保护区域的用户 ##### 允许多人访问 - 方法一: 上述指令只允许一个人(一个叫rbowen的用户)访问这个目录,但是多数情况下,都需要允许多人访问,所以就要用到AuthGroupFile指令。如果想允许多人访问,那么就必须建立一个组文件以确定组中的用户。 其格式很简单,可以用你喜欢的编辑器建立,例如:GroupName: rbowen dpitts sungo rshersey 它只是每组一行的一个用空格分隔的组成员列表。 向已有的密码文件中增加一个用户,可以输入: htpasswd /usr/local/apache/passwd/passwords dpitts 程序的提示和上面的一样,但是它会追加到已有的文件中,而不是建一个新文件(参数 -c 可以强制建立新的密码文件)。 现在,需要将.htaccess文件修改成这样: ```markdown AuthType Basic AuthName "By Invitation Only" AuthUserFile /usr/local/apache/passwd/passwords AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName ``` 现在,GroupName组中的成员都在password文件中有一个相应的记录,从而允许他们输入正确的密码进行访问。 - 方法二: 除了建立组文件,还有另一种途径允许多人访问,就是使用如下指令:Require valid-user 使用上述指令,而不是 Require user rbowen ,可以允许密码文件中的所有用户使用正确的密码进行访问。通过为每个组建立一个密码文件,这里甚至允许列举各个组,其优点是Apache只需要检查一个文件(而不是两个),其缺点是,必须维护众多密码文件,而且要确保AuthUserFile指定了一个正确的密码文件。
顶部
收展
底部
[TOC]
目录
Apache 1:简介安装
Apache 2:配置虚拟主机
Apache 3:安全
Apache 4:性能测试工具ab的应用
Apache 5:并发调优(MPM)
Apache 6 : 性能调优
Apache 7 : 参数调优
相关推荐
Nginx